一、概述
操作系统保护模式下把代码段分为一致代码段和非一致代码段的原因是:内核程序和用户程序要分开,内核程序不能被用户程序干扰。但是有时候用户程序也需要读取内核的某些数据,于是操作系统就从内核程序中分配一些可以供用户程序访问的段,但是不允许用户程序写入数据,用户程序访问这些段时遵循以下规则:
- 内核程序不知道用户程序的数据,不调用用户程序的数据,也不转移到用户程序中来
- 用户程序只能访问到内核的某些共享段,这些段称为
一致代码段
- 用户程序不能访问内核不共享的段
二、一致代码段
一致代码段:简单理解就是操作系统拿出来被共享的代码段,可以被低特权级的用户程序直接调用访问的代码段,这些代码段,通常是不去访问受保护的资源和某些类型异常处理。
一致代码段访问限制:
- 特权级高的程序不允许访问特权级第的数据:即内核态不允许调用用户态的数据。
- 特权级低的程序可以访问到特权级高的程序,但是特权级不会改变,即不会从用户态切换到内核态。
三、非一致代码段
非一致代码段:为了避免低特权级的访问而被操作系统保护起来的系统代码
非一致代码段访问限制:
-
只允许同特权级访问。
-
绝对禁止不同特权级直接访问:内核态不去用户态,用户态也不使用内核态。
-
通常低特权级代码必须通过
门调用
来实现对高特权级代码段的访问和调用。
有关不同特权级代码段之间的转移控制请看 代码段之间转移控制时的特权级检查
参考文章: https://blog.csdn.net/feijj2002_/article/details/4597174