linux分页机制

1.分页的机制废弃了分段的设计,之前我们在博客中说过分段模式,即每一个进程有自己的段描述符,记录了自己的各个段基址。分页机制实际上废弃了这种设计模式。

2.分页机制实际是把所有的段基址都设置为0,很显然如果关闭分页机制那么线性地址就是物理地址如果开启了就不能是直接的对应关系了。

3.假设我们不知道分页机制怎么做,猜测一下他必须实现的功能有1.隔离不同进程的相同地址值,也就是说同一个线性地址在不同进程中会被映射到不同的物理地址中。2.实现线性地址向物理地址的映射。

4.我们先说一下分页的设计原理。首先我们把线性地址以4kb的大小切分,同样也把物理地址按照4kb的大小进行切分,是不是想到了磁盘分块?是的道理差不多的,我们只需要把线性地址对应的块对应到物理地址就ok了。对应的方式有很多种我们只说一下一级分页和二级分页。

5.一级分页。我们现在内存弄一块连续的空间(页表),多大呢?线性地址有4G(2^32个内存单元),以4KB(2^12)切分能切分为2^20个单元(页表项),每一个单元有32位。我们得到一个线性地址32位,首先拿到高20位作为这段内存的索引,得到一个32位单元,这32位存放着物理地址单元的基地址,有意思的是由于线性地址和物理地址都是以4kb做切分所以,分开的这些单元首地址最低12位肯定都是0,所以我们的最低12位不会存为0而是存一些该页面的属性比如权限神马的。线性地址高20为索引在页表中得到页表项,页表项的前20位再连接上线性地址的后12位得到一个物理地址,这么看线性地址的后12位可以看做偏移地址了。关于该页的其他属性在页表项的后12位存储着。

6.为了让进程编程地址独立,每一个进程都有自己的页表,与3中提及的一样,那么每一个进程的页表基址怎么得到呢,老办法用寄存器呗。

7.一级页表有两个遗憾,1页表在内存分配必须连续,不然怎么索引啊2每一个进程的页表必须都是实实在在占用4M的,必须全部分配完毕,进程才可用奥。

8.为了解决这两个遗憾人们开始用二级分页。一级分页中线性地址被分为两部分高20位索引页表项取得物理地址基地址,低12位物理地址偏移地址。在二级分页中线性地址被分为3部分,高10位,中10位,低20位。具体的名称就不多说了,因为说了反而会觉着混乱。高10位用于在一张2^10大的表中获得一个地址,这个地址又指向一个内存表,这个内存表很明显了也是2^10大小,这个内存表中存放物理地址的高20位,连接上线性地址的低12获得物理地址。你会问了尼玛这一点没有节约啊,妙处在于当一级表被索引的时候,索引到的单元指向的第二张表才会被动态分配。二级表很明显也不用在内存连续分配。

参考 http://blog.163.com/wmk_2000_ren/blog/static/1388461922010228101742134/

时间: 2024-08-15 22:36:59

linux分页机制的相关文章

[转帖]Linux分页机制之分页机制的演变--Linux内存管理(七)

Linux分页机制之分页机制的演变--Linux内存管理(七) 2016年09月01日 20:01:31 JeanCheng 阅读数:4543 https://blog.csdn.net/gatieme/article/details/52402967 ~ 版权声明:本文为博主原创文章 && 转载请著名出处 @ http://blog.csdn.net/gatieme https://blog.csdn.net/gatieme/article/details/52402967 日期 内核版

Linux的分段和分页机制

1 基于80x86的Linux分段机制 80386的两种工作模式:80386的工作模式包括实地址模式和虚地址模式(保护模式).Linux主要工作在保护模式下. 在保护模式下,80386虚地址空间可达16K个段,每段大小可变,最大达4GB.逻辑地址到线性地址的转换由80386分段机制管理.段寄存器CS.DS.ES.SS.FS或GS各标识一个段.这些段寄存器作为段选择器,用来选择该段的描述符. 分段逻辑地址到线性地址转换图: Linux对80386的分段机制使用得很有限,因为Linux的设计目标是支

Linux内存寻址之分页机制

http://blog.xiaohansong.com/2015/10/05/Linux内存寻址之分页机制/ 在上一篇文章Linux内存寻址之分段机制中,我们了解逻辑地址通过分段机制转换为线性地址的过程.下面,我们就来看看更加重要和复杂的分页机制. 分页机制在段机制之后进行,以完成线性-物理地址的转换过程.段机制把逻辑地址转换为线性地址,分页机制进一步把该线性地址再转换为物理地址. 硬件中的分页 分页机制由CR0中的PG位启用.如PG=1,启用分页机制,并使用本节要描述的机制,把线性地址转换为物

JIURL文档-Linux的虚拟内存与分页机制(x86-64位)(一)

作者:JIURL 日期:2015年10月30日 分页机制 Linux(x64CPU)使用基于分页机制的虚拟内存.每个进程有256TB(48位)的虚拟地址空间.基于分页机制,这256TB地址空间的一些部分 被映射了物理内存,一些部分什么也没有映射.程序中使用的都是256TB地址空间中的虚拟地址.而访问物理内存,需要使用物理地址. 物 理地址(physical address):放在寻址总线上的地址.放在寻址总线上,如果是读,电路根据这个地址每位的值就将相应地址的物理内存中的数据放到数据总线中传输.

一个操作系统的实现(8)-进一步体会分页机制

上面的两篇文章中,我们对可用内存进行了统计,并且合理的分配了页表的大小.这节中,我们来看看分页的好处 在此之前不知道你有没有注意过一个细节,如果你写一个程序(在Linux或Windows下均可),并改个名复制一份,然后同时调试,你会发现,从变量地址到寄存器的值,几乎全部都是一样的!而这些"一样的"地址之间完全不会混淆起来,而是各自完成着自己的职责.这就是分页机制的功劳,下面我们就来模拟一下这个效果. 线性地址到物理地址的映射 先执行某个线性地址处的模块,然后通过改变cr3来转换地址映射

linux页表机制

每个进程都拥有一个自己的页表,在linux中,有一个页目录数组,这是分页机制的最高层,每个进程的页表对应其中的一个页目录项,通过cr3寄存器可以访问. 一个进程的页表,对应的页表项中对应页的物理地址. 2. 分页机制 分页机制的作用  分页机制是在段机制之后进行的,它进一步将线性地址转换为物理地址.  80386使用4K字节大小的页,且每页的起始地址都被4K整除.因此,80386把4GB字节线性地址空间划分为1M个页面,采用了两级表结构. 两级页表  两级表的第一级表称为页目录,存储在一个4K字

linux进程同步机制_转

转自:Linux进程同步机制 具体应用可参考:线程同步       IPC之信号量 为了能够有效的控制多个进程之间的沟通过程,保证沟通过程的有序和和谐,OS必须提供一 定的同步机制保证进程之间不会自说自话而是有效的协同工作.比如在共享内存的通信方式中,两个或者多个进程都要对共享的内存进行数据写入,那么怎么才能保证一个进程在写入的过程中不被其它的进程打断,保证数据的完整性呢?又怎么保证读取进程在读取数据的过程中数据不会变动,保证读取出的数据是完整有效的 呢?常用的同步方式有: 互斥锁.条件变量.读

操作系统篇-浅析分页机制

|| 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言 在我们进行程序开发的时候,一般情况下,是不需要管理内存的,也不需要操心内存够不够用,其实,这就是分页机制给我们带来的好处.它是实现虚拟存储的关键,位于线性地址与物理地址之间,在使用这种内存分页管理方法时,每个执行中的进程(任务)可以使用比实际内存容量大得多的连续地址空间.而且当系统内存实际上被分成很多凌乱的块时,它可以建立一个大而连续的内存空间的映象,好让程序不用操心和管理这些分散的内存块.分页机制增强了分段机制的性能.页地址

linux入门基础——linux权限机制

linux权限机制 权限 权限是操作系统用来限制对资源访问的机制,权限一般分为读.写.执行.系统中每个文件都拥有特定的权限.所属用户以及所属组,通过这样的机制来限制哪些用户.哪些组可以对特定文件进行什么样的操作. 每个进程都以某个用户的身份运行,所以进程的权限与用户的权限一样,用户的权限越大,该进程拥有的权限越大. 文件权限 linux中,每个文件拥有三种权限: 权限        对文件的影响        对目录的影响 r读取    可读取文件内容    可列出目录的内容 w写入    可修