系统调用的实现 DOS: h号中断的系统服务功能以及参数列表 Linux: x (或)中断向量用来实现系统调用 现代操作系统一般不直接提供系统调用指令接口 通常做法 提供一套方便实用的应用程序函数库 (应用程序设计接口API ) 从应用层面重新封装系统调用屏蔽复杂的系统调用传参问题提供高级语言接口 有助于快速开发 在更高层面提供系统程序设计模板库和类库 如 Windows /XP 提供封装系统用Win API和高层编程设施MFC以及ATL Linux 提供封装系统调用符合POSIX标准 API和C运行库 系统调用的处理过程 为了保证OS不被用户程序破坏 不允许用户程序直接访问OS的系统程序和数据 用户怎样得到系统服务的呢? 需要有一个类似于硬件中断处理的处理机构当用户使用操作系统调用时产生一条相应的指令处理机在执行到该指令时发生相应的中断并发出有关的信号给该处理机构该处理机构在收到了处理机发来的信号后 启动相关的处理程序去完成该系统调用所要求的功能 在系统中为控制系统调用服务的机构被称为陷入(TRAP)或异常处理机构相对应把由于系统调用引起处理机中断的指令称为陷入或异常指令(或称访管指令) 在操作系统中每个系统调用都对应一个事先给定的功能号如 等 在陷入指令中必须包括对应系统调用的功能号而且在有些陷入指令中还带有传给陷入处理机构和内部处理程序的有关参数必须为实现系统调用功能的子程序编造入口地址表 每个入口地址与相应的系统程序名对应陷入处理程序把陷入指令包含功能号与入口地址表有关项对应 系统调用功能号驱动有关子程序执行 在系统调用处理结束之后用户程序需利用系统调用返回结果继续执行 保护和恢复现场 在进入系统调用处理之前陷入处理机构还需保存处理机现场 在系统调用处理结束之后要恢复处理机现场现场被保护在特定的内存区或寄存器中 [] [] [] [] [] [] [] [] [] [] |