linux内核学习——内存管理——(保护模式下)分段分页

首先是地址转换:逻辑地址(——分段部件——>)线性地址(——分页部件——>)物理地址。

接着就是为什么要分段,为什么要分页:

1.分段是面向用户,每一个段是一个逻辑单位。每一个段有一个段描述符,如何找到段描述符呢?以及段描述符在什么地方?那么回到上面的地址转换,逻辑地址通过分段部件成为线性地址,这个过程其实就是找段描述符,以及通过描述符找到段的线性地址。[逻辑地址[段选择符]]根据段描述符寄存器找到GDT(段描述符表——存放段描述符),然后通过逻辑地址中的段选择符找到相应的段描述符,就得到线性地址了。


2.分页是面向物理部件的,为的是提高物理部件的利用率,每一个页是一个物理单位。

也许大家都知道线性地址通过页表转换成物理地址,具体怎么转换的呢?首先分析线性地址是什么,既然涉及到了页表,页目录项,那么线性地址肯定包括页目录项信息,页表项信息,页内偏移等信息了。所有通过(与或非)提取16进制线性地址特定几位的信息就可以获取了,然后再去查找就得出了相应的物理地址了,如何找到页目录和页表,自然也是同分段一样,通过寄存器找到页目录项也页表在内存中的位置

当然上述过程不能想象成纯软件的过程,其中有是部分基本功能是硬件支持的。


现在讨论一下特权级的问题,主要讨论两种特权级:

1.CPU特权级,CPU特权级和linux进程的用户态和内核态有关,所谓用户态和内核态的区别是CPU当前的特权级来确定的,那么CPU的特权级怎么来的,通过CS寄存器中特权级标志位来的。既然由CPU的特权级来确定的,又由于CPU的特权级决定了硬件资源的访问级别,那么“用户进程想要访问硬件资源,比如说硬盘的访问...,必须从系统调用,陷入内核,也就是说从用户态转向内核态”就好理解了。


2.描述符特权级,可能大家都知道进程之间是可以段共享的,那么如何限制段的存取呢,以防止某些重要的段不被读取,通过描述符特权级。


关于分段部件就涉及到了段描述符问题

你可能感兴趣的:(linux,分页,内存管理,分段)