L04_操作系统接口
用户和计算机交互的方式
- 命令行:也是一段程序
- 图形按钮
应用程序:也是一段程序 :::tips 操作系统接口:一段C语言程序,链接操作系统和应用软件 :::
接口
普通C代码加上一 些重要的函数
操作系统供这样的重要函数
这就是操作系统接口了: 接口表现为函数调 用,又由系统供,所以称为系统调用 (system call) :::success 系统调用就如同电源插头,用户不需要考虑下层的繁复的细节,只需要知道功能 :::L05_系统调用的实现
直观的想法
实现一个whoami系统调用
用户程序调用whoami, 一个字符串“lizhijun”放在操作系统中(系统引导 时载入),取出来打印
:::info 为什么不能直接访问该内存,要去操作系统中取?若是用户能够直接访问内存
- 不能随意的调用数据, 不能随意的jmp。
- 可以看到root密码, 可以修改它…
-
内核态和用户态隔离的思想
采用内核态和用户态隔离的思想来完成上述限制
对于程序进行区分 在访问前检查CPL和RPL和DLP
- 若是满足上述关系则可以跳转
也意味着内核态有很高的权限,但是用户态却没有,无法直接访问内核数据(直接操作内存)
主动进入内核的方法
- 对于Intel x86,那就是中断指令
- int int指令将使CS中的CPL改成0, “进入内核”
- 这是用户程序发起的调用内核代码的唯一方式 (此时,CPL=3而 DPL=0)
- 系统调用的核心:
- 用户程序中包含一段包含int指令的代码(链接库函数)
- 操作系统写中断处理,获取想调程序的编号
- 操作系统根据编号执行相应代码