首页 > 技术文章 > OS-李治军-L4L5操作系统接口

HermioneBlog 2020-10-23 21:18 原文

操作系统接口

问题:上层应用如何调用底层硬件的~。

引子
命令:
每个命令对应一个可执行文件。
shell的代码:根据用户的命令,调用相关的可执行文件执行。

图形:硬件输入到消息队列中,应用程序不断从消息队列中获取消息,再根据消息做一些操作。

接口表现为函数调用,又是系统提供,所以又称之为系统调用(system call)
POSIX:IEEE指定的一个标准族。

系统调用的实现

为什么不能直接去访问内核?

实现原理:硬件分割出了用户态和内核态,检查目标指令的特权级别和目标内存段的特权级别。
DPL(Destinate Privilige Level):描述目标内存段的特权级别,0表示属于内核的特权级。
CPL(Curent Privilige Level):当前的特权级别,取决于执行的是什么指令。CS: IP,所以是CS决定。3表示用户内核的特权级别。只有CPL<=DPL时,可以访问目标内存段。

同时,硬件也提供了主动进入内核的唯一方法:中断指令INT
int指令将CS中的CPL设置为0,进入内核。
所以系统调用的核心:

  • 用户程序包含int
  • 操作系统写中断处理,并编号
  • 操作系统根据编号,执行相关代码

下面是一个过程示例:

  1. CPL=3,DPL=0,此时不能访问。
  2. 通过系统调用编号,调用int,
  3. CPL被设置为0,进入内核

推荐阅读