6.S081 lec3笔记
操作系统的强隔离性
Q:为什么不把系统调用实现为一个库?使应用程序可以根据需求定制自身的库?
A:如果所有应用程序互相信任且没有错误,协同操作的分时方案是可行的。但是在大多数情况下,应用程序间都是互不信任的并且存在bug,所以需要操作系统实现强隔离性。
Q:强隔离性如何实现?
A:操作系统最好禁止应用程序直接访问硬件资源,把硬件资源抽象为服务,例如Unix系统的close 、open等系统调用使应用程序不必直接读写磁盘。
Unix在进程之间透明地切换处理器,根据需要保存和恢复寄存器状态,而应用程序不必意识到分时共享的存在。
用户态与核心态
用户态=用户模式=目态(User Mode)
核心态=管理模式=管态(Kernel Mode)
强隔离性需要操作系统与应用程序间的硬边界,当应用程序出错时,我们不希望操作系统或者其他应用程序因此出错。操作系统应该保证应用程序不能修改操作系统的数据和指令,应用程序也不能访问其他进程的内存。
在管理模式下,CPU被允许执行特权指令。应用程序只能执行用户模式中的指令,并在用户空间中运行。处于管理模式的软件可以执行特权指令,并在内核空间中运行,在内核空间运行的软件称作内核。
想要调用内核函数的应用程序必须过渡到内核,之后由内核验证系统调用的参数,决定是否允许应用程序执行该操作。
内核组织的两种形式
宏内核
定义:整个操作系统都在内核中,所有系统调用以管理模式运行。
特点:操作系统设计者不必考虑哪一部分不需要完全的硬件特权,操作系统的各部分更容易合作。但不同部分的接口通常很复杂,且一个错误可能就是致命的,如果内核停止运行,那么所有的应用程序都将停止,只得重启计算机才能再次使用。
微内核
定义:为了降低内核出错的风险,设计者最大限度地减少在管理模式下运行的系统代码量,在用户模式下执行大部分操作系统。
下图说明了宏内核与微内核的区别


浙公网安备 33010602011771号