18 x86 linux-kernel memory-segmentation
因此,我知道Linux对x86处理器使用四个默认段(内核代码,内核数据,用户代码,用户数据),但它们都具有相同的基数和限制(0x00000000和0xfffff),这意味着每个段映射到相同的一组线性地址.
鉴于此,为什么甚至有用户/内核段?我理解为什么代码和数据应该有单独的段(仅仅是由于x86处理器如何处理cs和ds寄存器),但为什么没有单个代码段和单个数据段呢?内存保护通过分页完成,用户和内核段无论如何都映射到相同的线性地址.
Dan*_*ien 15
x86体系结构将类型和权限级别与每个段描述符相关联.描述符的类型允许段被设置为只读,读/写,可执行等,但是具有相同基数和限制的不同段的主要原因是允许使用不同的描述符权限级别(DPL).
DPL是两位,允许对值0到3进行编码.当权限级别为0时,则称其为响铃0,这是最有特权的.Linux内核的段描述符是ring 0,而用户空间的段描述符是ring 3(最小特权).大多数分段操作系统都是如此; 操作系统的核心是环0,其余是环3.
正如您所提到的,Linux内核设置了四个部分:
所有四个的基数和限制是相同的,但内核段是DPL 0,用户段是DPL 3,代码段是可执行和可读的(不可写),并且数据段是可读写的(不可执行) .
也可以看看:
| 归档时间: |
|
| 查看次数: |
5569 次 |
| 最近记录: |