Linux内核:分段和分页的区别
发布网友
发布时间:2022-05-02 16:47
我来回答
共1个回答
热心网友
时间:2022-06-20 22:29
首先说明内核的保护模式和是模式,在计算机刚刚启动的时候处于实模式,在该模式下cpu产生20位的地址,然后计算机经过某种变换转换到保护模式。保护模式下cpu产生32位的地址,也就是说从实模式到保护模式,cpu的寻址空间扩大了。
在计算的发展的初期,intel 8086是16位的cpu,它只能运行在实模式下。在该模式下其寄存器是16位的,但是为了可以寻址20位的地址空间,所以采用了内存的分段模式。
物理内存地址=段基址×16+偏移 这样可以寻址20位的地址空间。
关于现代计算机内存的分段机制,也是为了向下兼容的需要。单纯的向下兼容或许还不够有说服力,因为在现代cpu中产生的就是32的地址,而由分段机制产生的线性地址也是32位的。32位的地址完全可以访问4G内存的任何一个地方,看上去分段机制好像完全没有了作用,其实不然。在多线程,多任务的操作系统中,一个地址能否被一个进程写入,能被什么优先级的进程访问,是否允许执行这些问题有出来了。而解决这些问题需要在地址上添加一些属性,也就是说其地址应该还是高于32位的。这时候有体现了分段机制的作用。
关于分页机制。由分页机制产生线性地址,加入没有分页,这个线性地址就是物理地址。而分页机制就是把线性地址装换成物理地址。关于其原因,一方面在进程产生子进程的时候,会复制内存页,而父子进程无论是代码数据还是产生的地址都是一样的,这样为创建进程提供了便利,可以不必考虑进程在内存中分布的情况而产生地址,至于父子进程的真实物理地址在哪里,那是mmu(内存控制单元)的问题。另一方面,由于进程不知道真实的物理地址子啊什么地方,也为操作系统提高了安全性。