读书笔记-操作系统之哲学原理-第四篇 内存原理

静态地址翻译:在程序运行前就计算出所有的物理地址。

动态地址翻译:程序加载完毕后才能计算物理地址,也就是在程序运行时进行地址翻译。

固定地址的内存管理其缺点:

  • 第1个缺点是整个程序要加载到内存空间中去。这样将导致比物理内存大的程序无法运行。

  • 第2个缺点是,只运行一个程序造成资源浪费。如果一个程序很小,虽然所用内存空间小,但剩下的内存空间也无法使用。

  • 第3个缺点是可能无法在不同的操作系统下运行,因为不同操作系统占用的内存空间大小可能不一样,使得用户程序的起始地址可能不一样。这样在一个系统环境下编译出来的程序很可能无法在另一个系统环境下执行。

多道编程下的内存管理策略有两种:固定分区和非固定分区。

基址和极限:分别由基址寄存器和极限寄存器保存。

地址保护模式:每次程序发出的地址需要和极限比较大小;如果大于极限,则属非法访问。在这个时候我们将陷入内核,终止进程(在个别操作系统上,也可能进入一个异常处理的过程);否则将基址加上偏移获得物理地址,就可以合法访问这个物理地址。

交换(swap):当一个程序所占空间不够时,我们将其倒到磁盘上,再加载到一片更大的内存空间。这种将程序倒到磁盘上,再加载进内存的管理方式

双基址:设定两组基址和极限。数据和代码分别用一组基址和极限表示,使两个程序共享部分内存空间。

虚拟地址由两部分组成:页面号和页内偏移值

页面号 页内偏移值

内存管理单元MMU:负责翻译虚拟页面到物理页面的映射,MMU接收CPU发出的虚拟地址,将其翻译为物理地址后发送给内存。内存单元按照该物理地址进行相应访问后读出或写入相关数据

页表的一个记录所包括的内容

缓存禁止位 访问位 修改位 保护标识位 在内存否 物理页面号
  • 缓存禁止位:指示该页面是否允许存放在缓存里

  • 访问位:记录该页面是否被访问过(被读过或者被写过)

  • 修改位:记录该页面自从加载到物理内存后是否被修改过。

  • 保护标识位:记录该页的受保护情况,如是否允许读、写、执行等。

  • 访问位和修改位是内存管理单元进行页面置换时依赖的信息。

  • 一个记录条通常还会有一个保留区(reserve area),设置保留区的目的是为以后有需要时增加信息用的。

CPU发出虚拟地址0010000000000100。由于页面大小为4KB,后面的12位为页内偏移值。前面的4位则为页面号。按此分解后,我们得出该地址在虚拟页面2,页内偏移值4的地址上。将这两部分地址分开,以2作为索引到找到页表的第2个记录,发现该记录所对应的页面在物理内存,其物理页面号是110,即6。这样,我们再将物理页面号与页内偏移值合并,获得物理地址为:110000000000100。

多级页表:顶级页表、一级页表、二级页表、三级页表等。顶级页表里面存放的是一级页表的信息,一级页表里面存放的是二级页表的信息,以此类推,到最后一级页表存放的才是虚拟页面到物理页面的映射。一个程序在运行时其顶级页表常驻内存,而次级页表则按需要决定是否存放在物理内存。

如果使用两层页表的话,虚拟地址的前10位可作为顶级页表的索引,中间10位可作为次级页表的索引,最后12位可作为页内偏移值如图12-9所示。

多级页表为什么占用的内存空间少:大部分次级页表会放到磁盘上,而放在内存里面的页表较少。因此,内存占用少。

多级页表的缺点:降低了系统的速度。因此每次内存访问都变成多次内存访问。对于二级页表,一次内存访问变成了三次内存访问。如果次级页表不在内存,还需要加上一次磁盘访问。这样,系统的速度将大为下降。对于级数更多的页表来说,内存访问速度额下降将更加明显。

反转页表:而反转页表存放的是物理页面到虚拟页面的映射。由于反转页表存放的是物理地址到虚拟地址的映射,而CPU发出的地址却是虚拟地址,这就造成页表查找困难。不过,这个问题可以通过散列来解决,即将虚拟页号散列到物理页号,然后以这个散列出来的物理页号作为索引在反转页表里面查找。但由于虚拟页面远多于物理页面的缘故,多个虚拟页号将很可能散列到同一个物理页号对应的记录里。这样,在散列后,仍然需要检查该虚拟页面是否在物理内存内,而这种检查需要进行多次内存访问。如果使用开放式散列,则散列表的尺寸将随着程序使用的虚拟页面数的增加而增加。

散列:Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。

翻译快表(Translation Look-Aside Buffer,TLB):在进行地址翻译时,如果TLB里有该虚拟地址记录,即“命中”,就从TLB获得其对应的物理页面号,而无须经过多级页表或反转页表查找,从而大大提高翻译速度。如果TLB里面没有该虚拟页面号,即“未命中”,则需要按正常方式读取页表内容。

TLB比较方式:我们在TLB里面进行的比较不是一个个地顺序比较,而是同时比较,即将所有的TLB记录与目的虚拟地址同时比较,因此只需要一次查找就能确定一个虚拟页面号是否在TLB里。这种设计需要同时配备多套比较电路,比较电路的套数需与TLB的大小一样。这也就是为什么TLB非常昂贵。

缺页中断的处理步骤:

  • 1)硬件陷入内核。

  • 2)保护通用寄存器。

  • 3)操作系统判断所需的虚拟页面号。

  • 4)操作系统检查地址的合法性。

  • 5)操作系统选择一个物理页面来存放将要调入的页面。

  • 6)如果选择的物理页面包含有未写磁盘的内容,则首先进行写盘操作。

  • 7)操作系统将新的虚拟页面调入内存。

  • 8)更新页表。

  • 9)发生缺页中断的程序进入就绪状态。

  • 10)恢复寄存器。

  • 11)程序继续。

可变页面页面策略的缺点也十分明显,首先是操作系统对内存的管理将更为复杂。其次,我们也很难正确地判断每个程序使用何种页面尺寸最为合适。最后,可变页面尺寸也不是一定就能消除内部碎片的。因此,可变页面尺寸策略听上去动听,实际上并不中用。历史上的Multic操作系统就因为支持可变页面尺寸而受人诟病。

LRU算法:最近使用最少算法(LeastRecently Used)。

矩阵为n×n维,n是相关程序当前驻内存的页面数。在一开始矩阵的初值为0。每次一个页面被访问时,例如第k个虚拟页面被访问时,我们进行如下操作:1)将第k行的值全部设置为1。2)将第k列的值全部设置为0。在每次需要更换一个页面时,选择矩阵里对应行值最小的页面更换即可。此处的行值是指把该行所有的0和1连起来看做一个二进制数时的取值

移位寄存器实现LRU算法:每个存放在内存的页面配备一个移位寄存器。该寄存器用来记录该页面被访问频率和最近的属性。所有移位寄存器的初值皆为0。然后在每个规定长度的周期内,将移位寄存器的值往右移动一位,并将对应页面的访问位的值加到该移位寄存器的最左位。当需要寻找一个页面进行更换时,只需要找到对应移位寄存器值最小的页面即可。

工作集算法:每次需要替换页面时,扫描所有的页面记录,并进行如下操作:

1)如果一个页面的访问位是1,则将该页面的最后一次访问时间设为当前时间,并将访问位清零。2)如果页面的访问位为0,则查看其访问时间是否在当前时间减去t之前。

a)如果在,则该页面将是被替换页面,算法结束。

b)如果不在,记录当前所有被扫描过页面的最后访问时间里面的最小值。扫描下一个页面并重复1、2两个步骤。

工作集时钟算法:方法就是将工作集算法与时钟算法结合起来,设计出工作集时钟算法,即使用工作集算法的原理,但是将页面的扫描顺序按照时钟的形式组织起来。这样每次需要替换页面时,从指针指向的页面开始扫描,从而达到更加公平的状态。而且,按时钟组织的页面只是在内存里的页面,在内存外的页面不放在时钟圈里,从而提高实现效率。鉴于其时间和空间上的优势,工作集时钟算法被大多数商业操作系统所采纳。

分页系统的缺陷

  • 1.共享困难,一个页面的内容很可能既包括代码又包括数据,即很难使一个页面只包含需要共享的内容或不需要共享的内容。

  • 2.一个进程只能占有一个虚拟地址空间。在此种限制下,一个程序的大小至多只能和虚拟空间一样大,其所有内容都必须从这个共同的虚拟空间内分配。

逻辑分段:一个程序分为多个段的分段管理

一个虚拟地址将由段号和段内偏差两个部分构成

段号 段内偏差

逻辑分段的管理机制是一组存放在段表里面的基址与极限


A0118151CA014C4E91491304EE0A553B.jpg

段管理的方法:分段管理的一个重要数据结构就是段表。和页表类似,该表存放的是虚拟段号到该段所在内存基址的映射。如果一个段不在内存中,则该段号对应的基址将不存在。这里需要注意的是,由于段的数量很少,通常为3~5段,段表的尺寸非常小。

逻辑分段的优点

  • 每个逻辑单元可单独占一个虚拟地址空间,这样使得编写程序的空间大为增长

  • 段是按逻辑关系而分,共享起来就非常方便。

  • 对于空间稀疏的程序来说,分段管理将节省大量的空间。

分段管理的缺点:外部碎片和一个段必须全部加载到内存。

段页式内存管理:段页式管理就是将程序分为多个逻辑段,在每个段里面又进行分页,即将分段和分页组合起来使用。

段页式的页表管理与多级页表结构类似


E025D0F8F7B145AFB4B612CA2D3119E4.jpg

当前的商用计算机均支持段页式内存管理模式。例如,奔腾就支持段页式内存管理。其段表有两个:一个全局段表供系统程序使用,一个局部段表供用户程序使用。奔腾结构通过一个选择器(selector)来选择全局或局部段表。此外,奔腾也支持纯粹分段。

段号不占虚地址空间位数是如何实现的:使用单独的寄存器来存放段号,或者将段号隐含在指令操作码里,即每条指令都隐含了自己到底属于哪一个逻辑段。

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

推荐阅读更多精彩内容