操作系统 内存分配算法
10.某虛拟存储器的用户编程空间共32个页面,每页为1KB,内存为16KB
假定某时刻一个用户页表中已调入内存的页面页号和物理块号如表所示。则逻辑地址0A5C H所对应的物理地址为 125C(H) 。
1KB=210B → 页内地址10位
0A5C (H) → 1010 0101 1100 (B) → 低10位10 0101 1100 (B)为页内地址;余下的高2位10 (B)为页号
二进制的10 = 十进制的2 → 页号2对应物理块号4 = 二进制的100
物理地址为100 10 0101 1100 → 十六进制为125C (H)
题目已经告诉我们,每个页的大小为1 KB,然而1KB=210B,所以页内地址有10位。
把虚地址0A5C (H)化为二进制为1010 0101 1100 (B),其中低10位10 0101 1100 (B)为页内地址,余下的高2位10 (B)为页号。
二进制的10等于十进制的2,查虚页号和物理页号对照表,可知物理页号为4,即二进制的100,所以物理地址为100 10 0101 1100,化为十六进制为125C (H)。
用同样方法求得1A5C(H)的页号为6,但此时的虚页号和物理页号对照表中没有虚页号6,所以会产生页失效错误。
1A5C(H) → 1 10 10 0101 1100 (B) → 低10位10 0101 1100 (B)为页内地址;余下的高2位110 (B)为页号
二进制的110 = 十进制的6
求得1A5C(H)的页号为6,但此时的虚页号和物理页号对照表中没有虚页号6,所以会产生页失效错误。
11.页式存储系统的逻辑地址是由页号和页内地址两部分组成。页面的大小为4K,地址变换过程如下图,图中逻辑地址用十进制表示。
图中有效地址经过变换后,十进制物理地址a应为 33220
解:考查页式存储管理中的地址变换知识。在页式存储管理中,有效地址除页的大小,取整为页号,取余为页内地址。
本题页面的大小为4K,有效地址8644除4096,取整为2,取余为452。
查页表得物理块号8,因此a的有效地址为8×4096+452= 33220。
逻辑地址8644 包括页面号和页内地址(偏移量),页面号转换成物理块号,大小也是4K,页内地址不变,最后的物理地址就是物理块号;
8644=4096(4K)×2(第2页)+452(偏移量)
物理地址:4096×8 +452 =33220
4K=4×1024=4096;(1K=1024)
8644/4096=2,对应2页,物理块号为8
8644%4096=452;
物理地址=8×4096+452= 33220。
12.页式存储系统的逻辑地址是由页号和页内地址两部分组成,地址变换过程如下图所示。
假定页面的大小为8KB,图中所示的十进制逻辑地址9612,经过地址变换后,形成的物理地址a应为十进制25996
解法1:
8KB=8192=8*1024=213,所以页内地址有13位。
9612/8196=1, 对应1页,物理块号为3
9612%8192=1420
物理地址=3×8192+1420=25996。
解法2:
逻辑地址十进制9612转换为二进制为:1 0 0101 1000 1100,最高
一位为页号,低13位为页内偏移量,所以逻辑地址9612的页号为1,由图可知其物理块号为3,转换为二进制是11。
最后把物理块号和页内偏移地址拼合得:11 0 0101 1000 1100,即为十进制的25996。
物理地址=页面大小X物理块号+页内地址
14.在UNIX系统中,假定磁盘块大小是1 KB, 每个盘块号占4B, 文件索引节点中的磁盘地址明细表如图6-25所示,
请将下列文件的字节偏移量转换为物理地址(写出计算过程)。
(1) 8000 (2) 13000 (3) 350000
(1)8000/1024=7(/表示整除),8000%1024=832(%表示取模)。
使用直接地址,其物理地址是:101# 块内832字节。
(2)13000/1024=12,13000%1024=712。
逻辑块数12超出直接地址范围(10),但是小于266(=10+256),利用一次间接。从428# 块中得到相应的物理块号为954。所以其物理地址是:954# 块内712字节。
(3)350000/1024=341,350000%1024=816。
逻辑块数341超出一次间接地址范围(266),但是小于65802(=10+256+2562),利用二次间接。
341-(10+256)=75,75/256=0,75%256=75
从9156#块中找到物理块331,再从331块中找到下标为75的项,进而得到物理块号333。所以其物理地址是:333#
块内816字节
1.某段表的内容见右表, 一逻辑地址为(2, 154), 它对应的物理地址为480K + 154
段号为2, 对应的首地址为480K,段长度为20K,大于154,所以逻辑地址(2,
154)对应的物理地址为480K + 154。
2.在一页式存储管理系统中,页表内容见右表。若页大小4KB,则地址转换机构将逻辑地址0转换成的物理地址为(块号从0计算) 8182
按页表内容可知,逻辑地址0对应块号2,页大小为4KB,故转换成的物理地址为2×4K =8K= 8192。
3.下图给出了页式和段式两种地址变换示意(假定段式变换对每段不进行段长越界检查,即段表中无段长信息)。
(1)指出这两种变换各属于何种存储管理。 (2)计算出这两种变换所对应的物理地址。
(1)由图所示逻辑地址结构知:页或段的最大个数为25 = 32。如果左图是段式管理,则段始址12加上偏移量586,远超第1段的段始址15,超过第4段的段始址20,所以左图是页式变换,右图满足段式变换。对于页式管理,由逻辑地址的位移量位数知,一页的大小为2KB。
(2)对图中的页式地址变换,其物理地址为12×2048 + 586 = 25162; 对图中的段式地址变换,物理地址为4000+586 = 4586。
4.在一个段式存储管理系统中,其段表见下表A。试求表B中的逻辑地址对应的物理地址。
1)由段表知,第0段内存始址为210, 段长为500,故逻辑地址(0, 430)是合法地址,对应的物理地址为210 + 430 = 640。
2)由段表知,第1段内存始址为2350,段长为20, 故逻辑地址(1, 10) 是合法地址,对应的物理地址为2350+ 10 = 2360.
3)由段表知,第2段内存始址为100, 段长为90,
逻辑地址(2, 500)的段内位移500超过了段长,故为非法地址。
4)由段表知,第3段内存始址为1350,段长为590,故逻辑地址(3, 400)是合法地址,对应的物理地址为1350 + 400=
1750。
5)由段表知,第4段内存始址为1938,段长为95,
逻辑地址(4, 112)的段内位移112超过了段长,故为非法地址。
6)由段表知,不存在第5段,故逻辑地址(5, 32)为非法地址。
5.页式存储管理允许用户的编程空间为32个页面(每页1KB),主存为16KB.如有一用户程序为10页长,某时刻该用户程序页表见表。
若分别遇到三个逻辑地址0AC5H、1AC5H、3AC5H处的操作,计算说明存储管理系统将如何处理。
页面大小为1KB, 所以低10位为页内偏移地址; 用户编程空间为32个页面,即逻辑地址高5位为虚页号: 主存为16个页面,即物理地址高4位为物理块号。
逻辑地址0AC5H转换二进制000 1010 1100 0101B,虚页号2(00010B),映射至物理块号4,系统访问物理地址12C5H(01 0010 1100 0101B)。
逻辑地址1AC5H转换二进制001 1010 1100 0101B, 虚页号为6(00110B),不在页面映射表中,产生缺页中断,系统进行缺页中断处理。
逻辑地址3AC5H转换二进制011 1010 1100 0101B,页号为14,而该用户程序只有10页,故系统产生越界中断。
注意: 在将十六进制地址转换为二进制地址时,可能会习惯性地写为16位,这是容易犯错的细节。例如,题中的逻辑地址为15 位,物理地址为14位。逻辑地址0AC5H的二进制表示为000
1010 1100 0101B,对应物理地址12C5H 的二进制表示为01 0010 1100 0101B.这一点应该引起注意。
6.在页式管理系统中,主存64KB,分成16块,块号0,1,2,.,15.
某进程有4页,页号为0,1,2,3,被分别装入主存的第9, 0, 1, 14块。
(1)该进程总长度多大? (2)写出该进程每页在主存中的始址。
(3)若给出逻辑地址(0,0),(1,72), (2, 1023),(3, 99),计算出相应的内存地址(括号内的第一个数为十进制页号,第二个数为十进制页内地址)。
(1)页面的大小为(64/16)KB =4KB,该进程共有4页,所以该进程的总长度为4 x 4KB = 16KB。
(2)页面大小为4KB,故低12位为页内偏移地址; 主存分为16块,故内存物理地址高4位为主存块号。
页号为0的页面被装入主存的第9块,故该地址在内存中的始址为1001 0000 0000 0000B,即9000H。
页号为1的页面被装入主存的第0块,故该地址在内存中的始址为0000 0000 0000 0000B, 即0000H。
页号为2的页面被装入主存的第1块,故该地址在内存中的始址为0001 0000 0000 0000B, 即1000H。
页号为3的页面被装入主存的第14块,故该地址在内存中的始址为1110 0000 0000 0000B, 即E000H。
(3)逻辑地址为(0, 0), 故内存地址为(9, 0) =1001
0000 0000 0000B,即9000H。
逻辑地址为(1, 72), 故内存地址为(0, 72) = 0000 0000 0100 1000B,即0048H。
逻辑地址为(2, 1023),故内存地址为(1, 1023)= 0001 0011
1111 1111即13FFH。
逻辑地址为(3, 99), 故内存地址为(14, 99) = 1100 0000 0110 0011.即0E063H。
7.某操作系统存储器采用页式存储管理,页面大小64B,一进程的代码段长度702B,页表见表A,该进程在快表中的页表见表B.
现进程有如下访问序列:其逻辑地址为八进制的0105, 0217, 0567, 01120, 02500。问给定的这些地址能否进行转换?
要注意题目中的逻辑地址使用哪种进制的数给出,若是十进制,则通过整数除法和求余得到页号和页内偏移,
若用其他进制给出,则转换成二进制,然后按照地址结构划分为页号部分和页内偏移部分,再把页号和页内偏移计算出来。
页面大小为64B=26,故页内位移为6位, 进程代码段长度为702B,故需要11个页面,编号为0~10。
(1)八进制逻辑地址0105的二进制0 0100 0101B.逻辑页号1,此页号可在快表查到,得页帧号为F1:页内位移为5,物理地址为(F1,5)。
(2)八进制逻辑地址0217的二进制0 1000 1111B.逻辑页号2,此页号可在快表查到,得页帧号为F2: 页内位移为15,物理地址为(F2, 15)。
(3)八进制逻辑地址0567的二进制1 0111 0111B.逻辑页号5,此页号不在快表中,在内存页表中可以查找到,得页帧号为F5:页内位移55,故物理地址(F5,
55)。
(4)八进制逻辑地址01120的二进制0010 0101 0000.逻辑页号9,此页号不在快表中,在内存页表中可以查找到,得页帧号为F9: 页内位移为16, 故物理地址为(F9,
16)。
(5)八进制逻辑地址02500的二进制0101 0100 0000B。逻辑页号21,此页号已超过页表的最大页号10, 产生越界中断。
注意:根据题中条件无法得知逻辑地址位数,所以在其二进制表示中,其位数并不一致,只是根据八进制表示进行转换。若已知逻辑地址空间大小或位数,则二进制表示必须保持一致。
8.某虚拟存储器的用户编程空间共32个页面,每页为1KB,内存为16KB。假定某时刻一用户页表中已调入内存的页面的页号和物理块号的对照表如下: 则逻辑地址0A5D (H)所对应的物理地址是什么?
0A5D (H) =0000 1010 0101 1101 2号页对应4号块,
所以物理地址是0001 0010 0101 1101即125D (H)。
页号 |
物理块号 |
0 |
5 |
1 |
10 |
2 |
4 |
3 |
7 |