-
接口是什么
- 连接两个东西(操作系统和应用程序)
- 转换信号
- 屏蔽细节
-
接口的作用
- 用户通过应用程序使用计算机,应用程序通过操作系统提供的接口来对计算机进行命令
- 操作系统提供的接口表现为函数调用,被称为 “系统调用”(system_call)
- 系统调用遵循一个标准:POSIX(IEEE指定的一个标准族)
-
命令
- 纯文字终端的命令:通过软件shell使用接口
- 图形交互:通过消息队列使用接口
-
系统调用的实现
- 区分内核态与用户态的硬件设计
- 处理器保护环分为三层,从内向外为:核心态(0)、OS服务(1/2)、用户态(3),级别越高,权限越低
- 在进行跳转时会先检查三个权限级别(Privilege Level):CPL(Current)、DPL(Destiny)、RPL(Request),当且仅当CPL<=DPL && RPL<=DPL时,内存跳转才可以进行
- 应用程序所在的内存是用户段,在用户态下;而内核段在内核态下。一般不能直接让用户段访问内核段,因为此时CPL=3&&DPL=0,不满足CPL<=DPL
- head.s在初始化GDT表的表项中将DPL设置为0
- 硬件提供了主动进入内核的方法
- 对于Intel x86,中断指令int可以将CS中的CPL改为0,从而访问内核段
- 这是用户调用内核代码的唯一方式
- 中断指令返回时,cs的最后两位(CPL)又会变回3
- 系统调用的核心
- 用户程序中写一段包含int指令的代码(库函数)
- 操作系统写中断处理,获取想调程序的编号
- 操作系统根据序号执行相应代码
- 例:printf()
- 库函数printf() 内封装write()
- 库函数write() 调用接口write()
- 系统调用write() 内封装了int 0x80指令
- int 0x80指令在系统初始化时就被做成了一个中断处理system_call
- 然后查表sys_call_table
- NR_write=4
- 调用sys_write
- 区分内核态与用户态的硬件设计
操作系统 - Operating System
/
Chapter II 虚拟化
/
Section 1 CPU虚拟化
/
1-1 抽象:进程