408王道操作系统强化——存储管理及大题解构

9 篇文章 71 订阅
7 篇文章 73 订阅

目录

1.物理地址/逻辑地址相互关系

2.存储系统

3.进程的存储空间

4.二级页表的转换过程

4.1.正常情况

4.2.缺页

4.3.结合TLB查询

5.进程通信

5.1.页表方式

5.2.共享内存方式


1.物理地址/逻辑地址相互关系

1.系统位数、虚拟地址空间大小、虚拟地址总位数(按字节编址)三者等价,可以相互推出

2.一级页表情况下,页号和页表索引是同一概念:页号 + 页内偏移量 = 虚拟地址总位数;也是多级页表下最后一级的页表

3.二级页表情况下,顶级页表的页号为页目录号:页目录号 +  页号 + 页内偏移量 = 虚拟地址总位数

4.页目录表大小(顶级页表总占用空间)= 页目录号总个数(通过页目录号的位数推出) * 单个页目录项的长度(每个页目录项的大小相同)

5.逻辑页号/虚页号 = 页目录号 + 页号:总的虚页号用于查找TLB

①逻辑地址 = 逻辑页号 + 页内偏移量

②逻辑页号根据使用的是几级页表被拆分为几个部分,即一级页表情况下,逻辑页号 = 页号;二级页表情况下,逻辑页号 = 页号 + 页目录号

6.页内偏移量/页内地址、页面大小、页框大小三者等价

7.具体的地址(例如123456H)和被拆分成三部分的虚拟地址(12H、34H、56H)之间可以相互转化

8.页框号 + 页内偏移量 = 物理地址:

①查找根据逻辑地址TLB或者内存中的慢表的目的是得到物理地址的页框号

②查到物理地址的页框号后,根据逻辑地址中的页内偏移量可以拼接得到最终的物理地址

③逻辑地址到物理地址的转换过程中页内偏移量是不变的

9.页表大小(二级页表总占用空间)= 页表项总个数(通过页表的位数推出) * 单个页表项长度(每个页表项的大小相同)(与页目录项同理)

10.目标页表项的物理地址 = 页表的起始物理地址 + 页号 * 页表项长度:

①页表在内存中是连续存放的(类似数组),故它们可以根据页号和单个页表项长度找到目标页表项的物理地址(数组元素大小和数组下标)

②根据页表项的物理地址可以找到该页表项中的具体内容,根据具体内容答题

11.目标页目录项的物理地址 = 页目录的起始物理地址 + 页目录号 * 页目录项长度:找到该页目录项的具体内容后,可以根据10中关系再最终找到目标页表

2.存储系统

1.磁盘以块为单位

2.内存物理上被分为若干页框(考试中一般认为页框大小和磁盘块大小一致,但是现实中可能一致)

3.进程被分为若干页面,每个进程的页面被离散的放在内存中的页框中

4.CPU访问进程某个页面时需要查询TLB/慢表进行地址转换:

①进程的页面和页表项一一对应

②每个页表项中记录页号和实际物理地址的页框号的映射关系,以及是否有效(是否已经调入内存/是否缺页)

5.进程间有共享的页面(每个进程都有一个固定的地址部分映射到内核区的代码和内核数据,用于实现各种系统调用):

①当进程之间利用系统调用进行通信的时,进程A先通过系统调用(存放在内核代码区)将要通信的内容存放在内核数据区

②进程B再通过系统调用将存放在内核数据区的内容取出,并放入自己的数据区中(进程A和进程B的内核区映射到的是同一片主存地址空间

6.进程的数据区由若干指令组成,执行指令时可能需要访问某个虚拟地址,CPU就会将虚拟地址从指令中拆分出来,并进行虚拟地址到物理地址的转换:

①使用虚拟地址中的虚拟页号查询TLB(TLB存放的是虚拟页号和物理地址页框号的映射关系)

②TLB命中(TLB中有和虚拟页号对应的表项)且有效位为1时:该情况下不可能发生缺页

(1)将该表项中存放的页框号和页内偏移量进行拼接得到物理地址

(2)根据物理地址中的页框号找到对应页框

(3)根据页内偏移量找到对应的具体数据,并取出该数据

③TLB命中但有效位为0,或者TLB未命中: 

(1)根据页表始址寄存器中存放的内容(页表始址)得到存放该进程页表的页表始址(进程未运行,页表始址存放在PCB中;进程上处理机运行时,CPU将页表始址从PCB中取出并放入页表始址寄存器中)

(2)查询该页的页表项得到物理地址的页框号,并将该映射关系复制到TLB中:该页的页表项(记录放该页号和其实际主存中物理页框的映射关系)的地址 = 页表始址 + 页号 * 单个页表项大小(页表项采用连续存储的方式,占用一片连续的存储空间)

(3)根据页表项中记录的物理页框号和页内偏移量进行拼接,得到具体数据的物理地址,取出数据

④TLB未命中,且慢表命中但有效位为0,即发生缺页:

(1)发生缺页异常(页故障),操作系统检测到该异常后,会对该异常进行处理,即调页(读磁盘块),慢表中的页表项中保存着其外存地址,根据此外存地址将外存中的物理块(考试中默认大小与页相等)读入主存

(2)主存仍有空闲页框:该块调入主存的空闲页框中,并修改相应页表项

(3)主存没有空闲页框:先根据页面置换算法选择一个页面淘汰,并且根据其脏位判断是否应该写回外存;然后再将该页面放入被淘汰页面之前所占用的页框中(覆盖),并修改相应页表项(慢表和TLB)

(4)执行完调页后,将会重新执行引发缺页异常的指令(重新执行一遍访存过程):在408中,某一条指令引发缺页异常,操作系统处理完缺页异常(即完成调页),该指令重新执行时,TLB命中(缺页异常处理也会将TLB中的表项进行更新)

7.假设物理页框中可以存放数组A的1024个数组元素(即A[0] - A[1023]),TLB表初始为空,执行一下代码:

for (int i = 0; i < 1024; i++) a[i] = 0;

共需要访问1025次内存:

第1次访存,TLB未命中,根据内存中的慢表得到A[0]的逻辑地址得到A[0]的物理地址,并将该逻辑地址和物理地址的映射关系存入TLB中

第2次访存:根据A[0]的物理地址取出A[0]的数据

第3 - 1025次访存:TLB命中,分别根据表中的映射关系得到A[1] - A[1023]的物理地址,取出A[1] - A[1023]的数据(A[1] - A[1023]的物理地址到逻辑地址的转换无需访存此时TLB中已经有存放A[0] - A[1023]的主存块的逻辑地址和物理地址的映射关系,而查询TLB不用访存;故仅需从内存中取出数据一次访存

3.进程的存储空间

1.进程虽然拥有很大的一块逻辑地址空间,但是有很大一部分空间可能是空着的,只有需要使用的时候才进行相应的分配

2.通过将不同进程的某些页表项映射到同一内存空间(相同页框号)的方式实现页面共享(虚拟页号可以不同,两个进程的虚拟页号是相互独立的)

3.低地址部分进程独享;高地址部分(操作系统内核区)所有进程共享,即都是映射到相同的一片物理页框中(通过页表映射的方式实现)

4.二级页表的转换过程

4.1.正常情况

1.查页目录表需要一次访存,查二级页表需要一次访存,访问最终的物理地址需要一次访存

2.页目录表的存储地址由页表始址寄存器指明;二级页表的存储地址通过根据页目录号查询页目录表得到

3.页目录表常驻内存(需要通过页目录表逐级查询低级页表,跟根目录常驻内存相同原理)

1.将进程中的3号页面转换为物理地址,即00 03H转换为物理地址

2.将00 03H拆分为两个部分:前8bit 00H为页目录号,后8bit 03H为页表号

3.根据页目录号00H查询页目录表 → 对应二级页表00H的页框号为00DH

4.根据页表号03H查询二级页表 → 逻辑地址00 03H对应的物理地址的页框号为012H

4.2.缺页

1.设访问00 07 001H → 页目录号00H,页表号07H,页内偏移量001H

2.根据页目录号00H查询页目录表 → 对应二级页表00H的页框号为00DH

3.根据页表号07H查询二级页表 → 有效位为0,说明此时该页并未调入内存中,需要从外存调入内存

4.将20号物理块调入内存,并修改相应页表项

4.3.结合TLB查询

1.根据虚拟页号00 03H查询TLB → TLB命中,且有效位为1 → 得到物理地址页框号012H

2.根据虚拟页号00 07H查询TLB → TLB命中,但有效位为0 → 查询页目录表 → 查询二级页表

5.进程通信

5.1.页表方式

1.进程A先发出系统调用请求,操作系统将数据(通信内容)放入(复制)操作系统内核区中

2.进程B再发出系统调用请求,操作系统将1中的数据从操作系统内核区中放入(复制)进程B的用户区中
3.原理:每个进程的页表中都有映射到相同物理页框的操作系统内核区,即这些物理页框在所有进程中共享

5.2.共享内存方式

两个进程各自选择一片逻辑地址映射到同一物理页框中,这样每个进程往这片区域写数据之后,另一个进程就能实时的看见

  • 24
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 30
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值