linux内核态是实模式还是分页模式

linux内核态是实模式还是分页模式,第1张

linux运行在保护模式下,并且在启动保护模式之前准备好了分页式内存管理的页表,在进入保护模式的同时一并开启了分页模式(同时置PE和PG位,即or eax,0x80000001)。

需要注意的是不要把保护模式和分页模式混淆,与实模式相对的是保护模式,与分页式内存管理相对的是分段式内存管理;当然,也有两者结合的段页式。

首先说明内核的保护模式和是模式,在计算机刚刚启动的时候处于实模式,在该模式下cpu产生20位的地址,然后计算机经过某种变换转换到保护模式。保护模式下cpu产生32位的地址,也就是说从实模式到保护模式,cpu的寻址空间扩大了。

在计算的发展的初期,intel 8086是16位的cpu,它只能运行在实模式下。在该模式下其寄存器是16位的,但是为了可以寻址20位的地址空间,所以采用了内存的分段模式。

物理内存地址=段基址×16+偏移 这样可以寻址20位的地址空间。

关于现代计算机内存的分段机制,也是为了向下兼容的需要。单纯的向下兼容或许还不够有说服力,因为在现代cpu中产生的就是32的地址,而由分段机制产生的线性地址也是32位的。32位的地址完全可以访问4G内存的任何一个地方,看上去分段机制好像完全没有了作用,其实不然。在多线程,多任务的 *** 作系统中,一个地址能否被一个进程写入,能被什么优先级的进程访问,是否允许执行这些问题有出来了。而解决这些问题需要在地址上添加一些属性,也就是说其地址应该还是高于32位的。这时候有体现了分段机制的作用。

关于分页机制。由分页机制产生线性地址,加入没有分页,这个线性地址就是物理地址。而分页机制就是把线性地址装换成物理地址。关于其原因,一方面在进程产生子进程的时候,会复制内存页,而父子进程无论是代码数据还是产生的地址都是一样的,这样为创建进程提供了便利,可以不必考虑进程在内存中分布的情况而产生地址,至于父子进程的真实物理地址在哪里,那是mmu(内存控制单元)的问题。另一方面,由于进程不知道真实的物理地址子啊什么地方,也为 *** 作系统提高了安全性。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8679133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存