.

来源:互联网 发布:政府利用大数据分析 编辑:程序博客网 时间:2024/06/05 16:15
一致代码段与非一致代码段的出现,是因为系统要安全,内核要和用户程序分开,内核不能被用户程序直接操作。


但是有时候用户程序也需要读取内核的某些数据,于是内核程序开辟了一些可供用户程序读取的段,但不允许用户程序写入数据。
1. 内核不用访问用户程序的数据,内核不用转移到用户程序中来。
2. 用户程序只能访问到内核的某些共享的段,即一致代码段。
3. 用户程序不能访问内核不共享的段。


1. 在x86中,数据和代码按段(
section)来存放。
2. 程序是通过 选择子/调用门 等等来在段之间来回走动的.
3. 每一个 选择子/调用门 是分等级的,这个是在选择符的结构中,即RPL(最后2位)。
4: 每一个 代码段/数据段 也是分等级的,这个是在gdt描述符中。


调用的选择符和被调用的段都分了等级,这些等级在一致代码段,也就是共享段使用,规则如下: 


对于一致代码段: 
1. 
特权级程序不允许访问特权级程序的数据,核心态不允许访问用户态的数据。

对于一致代码段: 

2. 特权级程序可以访问到特权级程序的数据(如访问内核某些共享的数据段),但特权级不会改变: 用户态还是用户态。


对于普通代码段,也就是非一致代码段:
1. 只允许同级间访问。

2. 绝对禁止不同级访问,核心态不允许访问用户态.用户态也不允许访问核心态。


核心态并不能为所欲为,想访问谁都可以。这是为了防止用户篡改核心态的数据,导致核心态执行用户代码而造成内核崩溃。


扩展: 

http://blog.csdn.net/li4850729/article/details/7781706

原创粉丝点击