L04_操作系统接口

:::info image.png
接口:链接上层应用和计算机硬件 :::

用户和计算机交互的方式

  • 命令行:也是一段程序
  • 图形按钮

image.png

  • 应用程序:也是一段程序 :::tips 操作系统接口:一段C语言程序,链接操作系统和应用软件 :::

    接口

  • 普通C代码加上一 些重要的函数

  • 操作系统供这样的重要函数
    这就是操作系统接口了: 接口表现为函数调 用,又由系统供,所以称为系统调用 (system call) :::success 系统调用就如同电源插头,用户不需要考虑下层的繁复的细节,只需要知道功能 :::

    L05_系统调用的实现

    直观的想法

    实现一个whoami系统调用
    image.png

  • 用户程序调用whoami, 一个字符串“lizhijun”放在操作系统中(系统引导 时载入),取出来打印

:::info 为什么不能直接访问该内存,要去操作系统中取?若是用户能够直接访问内存

  • 不能随意的调用数据, 不能随意的jmp。
  • 可以看到root密码, 可以修改它…
  • 可以通过显存看到别 人word里的内容… :::

    内核态和用户态隔离的思想

    采用内核态和用户态隔离的思想来完成上述限制
    image.png
    对于程序进行区分

  • 在访问前检查CPL和RPL和DLP

  • 若是满足上述关系则可以跳转

也意味着内核态有很高的权限,但是用户态却没有,无法直接访问内核数据(直接操作内存)

主动进入内核的方法

  • 对于Intel x86,那就是中断指令
    • int int指令将使CS中的CPL改成0, “进入内核”
    • 这是用户程序发起的调用内核代码的唯一方式 (此时,CPL=3而 DPL=0)
    • 系统调用的核心:
      • 用户程序中包含一段包含int指令的代码(链接库函数)
      • 操作系统写中断处理,获取想调程序的编号
      • 操作系统根据编号执行相应代码

image.png

修改后程序

image.png