80x86支持两类保护。
一是通过给每个任务不同的虚拟地址(逻辑地址)空间来完全隔离各个任务;这是通过给每个任务逻辑地址到物理地址不同的变换映射来做到的。
另一个保护机制对任务进行操作,以保护操作系统内存段和处理器特殊系统寄存器不被应用程序访问。
1 任务之间的保护
每个任务中的地址变换功能被定义成一个任务中的逻辑地址映射到物理内存的一部分区域,另一个任务中的逻辑地址映射到物理内存中的不同区域中。
这样,因为一个任务不可能生成能够映射到其他任务逻辑地址对应使用的物理内存部分,所以所有任务都被隔绝开了。
在80x86中,每个任务都有自己的段表和页表。
当处理器切换去执行一个新任务时,任务切换的关键部分就是切换到新任务的变换表。
2 特权级保护
在一个任务中,定义了4个执行特权级,来限制对任务中各段的访问。
每个内存段都与一个特权级相关联。
当前特权级,Current Privilege Level,CPL;就是当前活动代码段的特权级,并且它定义了当前所执行程序的特权级别;
每当程序企图访问一个段时,当前特权级就会与段的特权级进行比较;
任何对高级别段的引用都是非法,并且会引发一个异常来通知操作系统;
Linux内核完全剖析,p88