📂 操作系统 - Operating System / Chapter II 虚拟化 / Section 1 CPU虚拟化 / 1-1 抽象:进程

操作系统的接口(Interface)

2025-09-05
#OS
  • 接口是什么

    • 连接两个东西(操作系统和应用程序)
    • 转换信号
    • 屏蔽细节
  • 接口的作用

    • 用户通过应用程序使用计算机,应用程序通过操作系统提供的接口来对计算机进行命令
    • 操作系统提供的接口表现为函数调用,被称为 “系统调用”(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
    • 硬件提供了主动进入内核的方法
      1. 对于Intel x86,中断指令int可以将CS中的CPL改为0,从而访问内核段
      2. 这是用户调用内核代码的唯一方式
      3. 中断指令返回时,cs的最后两位(CPL)又会变回3
    • 系统调用的核心
      1. 用户程序中写一段包含int指令的代码(库函数)
      2. 操作系统写中断处理,获取想调程序的编号
      3. 操作系统根据序号执行相应代码
    • 例:printf()
      1. 库函数printf() 内封装write()
      2. 库函数write() 调用接口write()
      3. 系统调用write() 内封装了int 0x80指令
      4. int 0x80指令在系统初始化时就被做成了一个中断处理system_call
      5. 然后查表sys_call_table
      6. NR_write=4
      7. 调用sys_write