内存管理

主要参考的原文

一、虚拟内存

(1)每个程序拥有自己的地址空间,被分割成多个块,每一块称为一

(2)这些页被映射到物理内存,但不要求所有页都要映射,也不要求映射到连续的物理内存。

(3)当程序引用到不在物理内存中的地址空间时,马上映射到物理内存,然后重新执行指令。

二、分页与分段

更详细的文章

1. 分页

虚拟地址空间划分成等长固定大小的,在物理内存中对应的单元称为页框
页和页框大小通常相同,它们之间通过页表进行映射。

程序最开始只将一部分页调入页框中,当程序引用到没有在页框的页时,产生缺页中断,进行页面置换,按一定的原则将一部分页框换出,并将页调入。

2. 分段

分页方式的缺点是页长与程序的逻辑大小不相关。

分段:
段长可变,例如 int 类型对象,char 类型对象就可以划分到不同的段。
虚拟地址到内存地址的变换通过段表来映射,虚拟地址由段号和段内地址组成。

缺点: 容易在段间留下许多碎片,造成存储空间利用率降低。

3. 段页式

(1)用分段来分配和管理虚拟内存
程序的地址空间按逻辑单位分成基本独立的段,而每一段有自己的段名。
然后把每段分成若干页。

(2)用分页来分配和管理物理内存
把整个内存分成与上述页大小相等的存储块,可装入作业的任何一页。

(3)程序对内存的调入或调出是按页进行的,但它又可按段实现共享和保护。

(4)举个栗子。
程序员想创建两个对象,一个是 int 型(4 字节),另一个是 char 型(1 字节)。于是他使用这样的语句char s; int a;,对程序员来说,这是分段,大小由自己指定。而对于计算机内存来说,由于 char 类型对象占的内存更小,则必须把内存分成一个个都是 1 字节的页,这是分页,大小固定。然后把 s 放入一页,再把 a 放入四页。

三、分页系统地址映射

  • MMU:内存管理单元,管理虚拟地址空间到物理内存的映射。
  • 页表:Page Table,页到页框的映射。(页是虚拟地址空间的概念,页框是物理内存的概念)。
分页系统地址映射
  1. 图中 Page Table 分为三部分,拿第 0 个表项(0-010-1)为例。
    最左边的 0 表示页面号(虚拟地址空间概念),中间的 010 表示页框号,即第 2 个页框(物理内存概念),最右边的 1 表示页已经放入内存。

  2. 图中有 16 条表项,需要用 4 个比特位来进行索引定位。
    因此对于虚拟地址(0010-000000000100),前 4 位是用来存储页面号,而后 12 位存储在页中的偏移量。

  3. (0010-000000000100)根据前 4 位得到页号为 2,读取表项内容为(110-1)。
    它的前 3 为为页框号,最后 1 位表示该页在内存中。最后映射得到物理内存地址为(110 000000000100)。

  4. 所以对于一个虚拟地址,把前面要索引定号的 n 位换成页表中的对应页框就转换好了。

四、页面置换算法

在程序运行过程中,如果要访问的页面不在内存中,就发生缺页中断从而将该页调入内存中。
此时如果内存已无空闲空间,系统必须从内存中调出页面到磁盘对换区中来腾出空间。

页面置换算法的主要目标是使页面置换频率最低(缺页率最低)。

1. 最佳(Optimal)

所选择的被换出的页面将是最长时间内不再被访问,通常可以保证获得最低的缺页率。

是一种理论上的算法,因为无法知道一个页面多长时间不再被访问。

举例:一个系统为某进程分配了三个物理块,并有如下页面引用序列:1234321

开始运行时,先将 1、2、3 三个页面装入内存。
当进程要访问页面 4 时,产生缺页中断。
这时会将页面 1 换出,因为页面 1 再次被访问的时间最长。

2. 先进先出(FIFO)

会将经常被访问的页面也被换出,导致缺页率升高。

3. 最近最久未使用(LRU)

Least Recently Used
虽然无法知道将来要使用的页面情况,但是可以知道过去使用页面的情况。

可以用栈来实现该算法,栈中存储页面的页面号。当进程访问一个页面时,将该页面的页面号从栈移除,并将它压入栈顶。这样,最近被访问的页面总是在栈顶,而最近最久未使用的页面总是在栈底。

4. 时钟(Clock)

我不懂!原文如下:
需要用到一个访问位,当一个页面被访问时,将访问位置为 1。

首先,将内存中的所有页面链接成一个循环队列,当缺页中断发生时,检查当前指针所指向页面的访问位,如果访问位为 0,就将该页面换出;否则将该页的访问位设置为 0,给该页面第二次的机会,移动指针继续检查。

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

推荐阅读更多精彩内容

  • 兜兜转转轮回也总不消逝, 不曾看见我的欢喜。 安静如深夜不动声色的静谧, 未曾到来的期许。 如梦初醒折射出的苍老容...
    瑶人柴阅读 299评论 6 14
  • - (void)showOrHideNavPrompt{ BOOL show = YES; double dela...
    i0S_毛_宇阅读 152评论 0 1