Linux学习-内存管理篇(三)-节点、分区、页、页框、页表关系分析

Linux支持多种硬件体系结构,因此Linux必须采用通用的方法来描述内存,以方便对内存进行管理。为此,Linux有了内存节点、分区、页框的概念。

内存节点:主要依据CPU访问代价的不同而划分。多CPU下环境下,本地内存和远端内存就是不同的节点。即使在单CPU环境下,访问所有内存的代价都是一样的,Linux内核依然存在内存节点的概念,只不过只有一个内存节点而已。内核以struct pg_data_t来描述内存节点。

内存分区(ZONE):Linux对内存节点再进行划分,分为不同的分区。内核以struct zone来描述内存分区。通常一个节点分为DMA、Normal和High Memory内存区。

  • DMA内存区:即直接内存访问分区,通常为物理内存的起始16M。主要是供一些外设使用,外设和内存直接访问数据访问,而无需系统CPU的参与。

  • Normal内存区:从16M到896M内存区。

  • HighMemory内存区:896M以后的内存区。

896M是个分界点,低于这个界限的称为low memory,高于这个界限的称为high memory。low memory包含了ZONG_NORMAL+ZONE_DMA。

32位Linux虚拟内存空间为0-4G,其中0-3G用于用户态,3G-4G用于内核态。其中相当于内核态又分为3G-3G+896M 和3G+896M-4G 这两个部分,其中最后的128M划分到了high memory,为什么要这样设计?原因是低内存区页表的映射关系是固定的,系统初始化时就建立了,内核空间本来1G就小,还不灵活,当然不行,所以留出128M来做两件事:1.这部分空间可以通过页表操作映射到高端物理地址,2.连续的虚拟地址空间可以映射到非连续的物理内存。这在没有大段连续的空闲物理地址时,是非常重要的。
x86-32上分区总结如下:

页框:操作系统内存管理方式有:段式、页式、段页式。Linux采用页式内存管理,页是物理内存管理的基本单位,每个内存分区又由大量的页框组成。内核以struct page来描述页框。页框有很多属性,这些属性描述了这个页框的状态、用途等,例如是否被分配。

三者之间的关系如下图所示:

介绍完节点、分区和页框关系后,我们接着再看看页、页表、页框的关系:

我们知道,CPU并不是直接访问物理内存地址,而是通过虚拟地址空间来间接的访问物理内存地址。操作系统为每一个正在执行的进程分配的一个虚拟地址空间(逻辑地址),在32位机上,其范围从0 ~ 4G-1。操作系统通过将虚拟地址空间和物理内存地址之间建立映射关系,让CPU间接的访问物理内存地址。

:将进程分配的虚拟地址空间划分的块,对应的大小就叫页面大小。

页框:将内存物理地址划分的块。

页和页框二者一一对应,一个页放入一个页框,(理论上)页的大小和页框的大小相等。

页表:操作系统通过维护一张表,这张表上记录了每一对页和框的映射关系,这个表即页表。页表被放在物理内存中,由操作系统维护。

三者关系关系如下图所示:

两个小例子来捋下他们之间的关系:

一、计算页表占用的内存大小:

已知条件:逻辑地址32位、页面大小4KB、页表项大小4B,按字节编址。

首先 32 位的虚拟地址可表示的进程大小应该是2^32B = 4GB(暂时别去想页号P占多少位,W占多少位)。根据页的定义和页面大小的定义将进程进行分页:

页面的数目为:2^20页, 所以页表就需要4B*2^20 = 4MB的空间存储。

二、物理地址访问流程分析

首先通过计算得到CPU访问的虚拟地址,虚拟地址是由页表号+业内偏移地址组成,把这个地址传给页表寄存器即MMU,它对应到物理地址的页框号,访问物理地址找到框的起始地址,然后加上偏移,访问最终物理地址。

注意,每个进程都有页表,页表起始地址和页表长度的信息在进程不被CPU执行的时候,存放在其PCB内。

按照上述的过程,可以发现,CPU对内存的一次访问动作需要访问两次物理内存才能达到目的。

为了提升效率,为了提高CPU对内存的访问效率,在CPU第一次访问内存之前,加了一个快速缓冲区寄存器TLB(Translation Lookaside Buffer),TLB是MMU的核心部件,它缓存少量的虚拟地址与物理地址的转换关系,是转换表的Cache,俗称“快表”。当TLB中没有缓冲对应的地址转换关系时,需要通过对内存中转换表(大多数处理器的转换表为多级页表)的访问来获得虚拟地址和物理地址的对应关系,引出MMU的另一核心部件TTW(TranslationTable walk)。TTW成功后,结果应写入TLB中。TLB里面存放了近期访问过的页表项。当CPU发起一次访问时,先到TLB中查询是否存在对应的页表项,如果有就直接返回了。整个过程只需要访问一次内存。如图:

这种方式极大的提高了CPU对内存的访问效率。然而这样的方式还是存在弊端,在物理内存中需要拿出至少1M的连续的内存空间来存放页表。注意关键字不是1M,而是连续的。

解决办法是可以通过多级页表的方式,将页表分为多个部分,分别存放,这样就不要求连续的整段内存,只需要多个连续的小段内存即可。

参考:
https://www.cnblogs.com/youngerchina/p/5624516.html
https://blog.csdn.net/displayMessage/article/details/80905810
http://www.it610.com/article/3744890.htm

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容

  • SWAP/swappiness/kswapd原理,swap分区优先级的妙用 概述 本文讨论的swap基于Linux...
    xywzhen阅读 5,204评论 1 5
  • 1 内存寻址 1.1 物理地址、虚拟地址以及线性地址 物理地址: 物理内存的内存单元地址 虚拟地址: 程序员看到的...
    疯狂小王子阅读 2,810评论 3 21
  • 操作系统对内存的管理 没有内存抽象的年代 在早些的操作系统中,并没有引入内存抽象的概念。程序直接访问和操作的都是物...
    Mr槑阅读 16,695评论 3 24
  • 第17章 回收页框 页框回收算法 内存及磁盘高速缓存抓取了那么多的页框但从未释放任何页框。因此,迟早所有的空闲内存...
    rlkbk阅读 1,118评论 1 2
  • 概述 我们都知道一个进程是与其他进程共享CPU和内存资源的。正因如此,操作系统需要有一套完善的内存管理机制才能防止...
    SylvanasSun阅读 3,848评论 0 25