第3课 操作系统的组织结构
今天的主题:
- 操作系统设计
- 系统调用
- 微内核/整体内核
- 在xv6中的第一个系统调用
操作系统的示意图
应用,比如sh、echo等
系统调用接口,比如open、close等
操作系统
操作系统的目标有哪些?
- 同时运行多个应用
- 隔离多个应用
- 多路复用多个应用
- 在多个应用间共享资源
操作系统设计
稻草人设计:没有操作系统
应用直接跟硬件交互,比如CPU、寄存器、DRAM、磁盘等;
操作系统类库可能抽象了一部分硬件;
稻草人设计不利于多路复用,因为每个app必须周期性地放弃硬件;
稻草人设计提供的弱隔离,比如应用忘记放弃硬件了,则没有其他应用会运行;应用出现死循环了,则没有其他应用会运行;甚至不能杀掉来自另一个应用的恶意应用。
稻草人设计不利于内存隔离,因为所有的应用共用一个物理内存;一个应用能覆盖另一个应用的内存;一个应用能覆盖操作系统库。
Unix接口有利于操作系统目标
对硬件进行了如下4个抽象来实现目标,
- 进程 fork
进程是对CPU的抽象;
操作系统透明地将CPU分配给进程,保存和恢复寄存器,保证:进程放弃CPU,周期性地重新获取CPU - 地址空间 exec
内存是对物理内存的抽象;
每个进程都有自己的地址空间;
操作系统能决定应用在内存中的位置;
操作系统能保证不同应用之间的内存相互隔离;
操作系统允许在文件系统中存储内存映像; - 文件
文件是对磁盘块的抽象;
操作系统允许在不同进程/用户间共享文件; - 管道
管道是对共享物理内存的抽象;
操作系统能使发送者/接收者停止;
操作系统必须有一定的防御力
应用不应该能使操作系统崩溃;
应用不应该打破它的隔离;
因此,在操作系统和应用之间需要强隔离。
方法:需要来自硬件的支持
- 用户/内核模式
- 虚拟内存
处理器提供用户/内核模式
内核模式:能执行特权指令,比如设置内核/用户模式标记位,重复编程计时器芯片等
用户模式:不能执行特权指令
以内核模式运行操作系统,以用户模式运行应用
注意:RISC-V还有一个M模式,但是大部分情形都被忽略了。
处理器提供虚拟内存
硬件提供页表机制来完成从虚拟地址到物理地址的转换;
定义应用能访问什么物理内存;
操作系统设置页表使得:每个应用只能访问自己的内存。
应用必须能跟内核通信
解决方案:添加一条指令来以一种可控的方式修改模式
ecall <n>:在预先安排好的入口处进入内核
xv6案例探究
目标:不用参考书,阅读源代码,并理解它
xv6使用了整体内核,其中Unix系统调用等价于内核接口
xv6的源代码反映了操作系统的组织结构,比如:
- user/
包含了在用户模式下运行的应用 - kernel/
包含了内核的代码
网友评论