操作系统 系统调用机制

系统调用:用户在编程时可以调用的操作系统功能

系统调用是操作系统提供给编程人员的唯一接口,使CPU状态从用户态陷入内核态

每个操作系统都提供几百种系统调用(进程控制,进程通信,文件使用,目录操作,设备管理,信息维护等)

应用程序->系统调用;应用程序->C函数库/API接口->系统调用;

内核函数处理系统调用

系统调用机制的设计

1.中断/异常机制支持系统调用服务的实现;2.选择一条特殊指令:陷入指令(访管指令),引发异常,完成用户态到内核态的切换;3.系统调用号和参数:每个系统调用都事先给定一个编号(功能号)4. 系统调用表:存放系统调用服务例程的入口地址

参数传递过程问题

怎样实现用户程序的参数传递给内核?

3种常用实现方法

1.由陷入指令自带参数:陷入指令的长度有限,且还要携带系统调用功能号,只能自带有限的参数;2. 通过通用寄存器传递参数,这些寄存器是操作系统和用户程序都能访问的,但寄存器的个数会限制传递参数的数量 3. 在内存中开辟专用堆栈区来传递参数。

系统调用执行过程

当CPU执行到特殊的陷入指令时:

中断/异常机制:硬件保护现场;通过查中断向量表把控制权转给系统调用总入口程序

系统调用总入口程序:保存现场;将参数保存在内核堆栈里;通过查系统调用表把控制权转给相应的系统调用处理例程或内核函数

执行系统调用例程

恢复现场,返回用户程序

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 安大大 + 原创作品转载请注明出处 + 《Linux操作系统分析》MOOC课程 用户态、内核态和中断处理过程 程序...
    夏天的篮球阅读 1,715评论 0 0
  • 所有的程序员在写程序的时候都离不开通过库函数的方式和系统调用打交道 什么是用户态和内核态?(从CPU指令级别的角度...
    那只大象阅读 3,779评论 1 5
  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,423评论 8 114
  • 一些天使堕落得叫人心疼 整个世界突然苏醒 爱情那是个什么玩意 墙外绕城而来的弱水 渗往地狱的岩浆 夜夜梦醒处模糊的...
    陌诺流年阅读 451评论 44 56