某计算机采用二级页表的分页存储管理方式,按字节编址,页面大小为1024B,每个页表项占2B,逻辑地址结构为:

页面大小1024B -> 业内地址10位
页面大小/页表项大小=1024B/2B=2^9(页表项个数) -> 页号9位
逻辑地址空间的大小为64K(2^16) -> 页目录号+页号共16位 ->页目录号7位(128个)
二级页表 : [7][9][10]
- 假设有一本书,这本书每一页固定大小,最多一页有 1000 个字(页面大小);
- 每一页对应有一个目录中的条目,这个条目用 2 个字表示(页表项大小);
- 那么我 一页纸 就可以写下 1000/2 = 500 个目录条目;
- 现在我整本书有 1000 页(逻辑地址空间大小),我们说了每一页对应一个目录条目,所以有 1000 个目录条目;
- 所以我需要 1000 个目录条目/ 500 个目录条目 = 2 页(注意前面说到了,一页可写 500 个条目。所以我需要 2 个页面来保存目录条目。
回到题目本身,对应的含义用黑体在上面标识出来了。 其计算过程如下: 页面大小 210B,页表项大小为 2B,所以一页可以写 210B/2B=29B 个页表项。 逻辑地址空间大小为 216 页,就是说需要 216 个与之对应的页表项,因此需要 216B/29B=27=128 个页面存放页表项。
页面大小1024字节,每个页表项占用8个字节,逻辑地址1234567对应的 外层页号,外层页内地址,页内地址?
解析:
页面大小1024B -> 页内地址10位 面大小/页表项大小=1024/8=2^7 -> 页号7位
二级页表 : [][7][10]
解决办法1: 外层页号=1234567 / 2^17=9 外层页内地址: 1234567 / 2^10 % 2^7=53 页内地址:1234567 % 2^10=647 解决办法2: 将逻辑地址1234567转化为2进制: 1001||0110101||1010000111 则对应 9 53 647
题目
假设内存大小是2GB,页面大小(物理块)是4KB,页表项长度是4B。
则整个内存可以被划分成2GB/4KB=512K个页面。
页表的长度=页表项的长度x页面的个数=4Bx512K=2M。
内存中用2M的大小来存放页表。
题目

主存容量为4MB,虚存容量为1GB,则虚拟地址和物理地址各为多少位? 若页面大小为4KB,页表共有多少个页表项? 如果设计一个反置页表,则有多少个页表项?
2^22=4m所以物理地址为22位
2^30=1G所以虚拟地址为30位
页表数=1G/4kb=256k(虚拟内存) 反置页表项=4MB/4Kb=1k(物理内存)
假设某系统物理内存大小为 4GB,页面大小为 4KB,则每个页表项至少应该为多少字节?
4GB=2^32^ b, 4KB=2^12^b,因此 4GB 的内存总共会被分为 2^32^/2^12^ = 2^20^ 个内存块,因此内存块号的范围应该是 0~2^20^-1。因此对于单个页表项,它至少要用一个 20 位二进制数才能表示这样的一个内存块号,而一个字节 8 位,所以至少要三个字节才可以表示这样的一个内存块号。又由于实际不知道哪个页表项存放哪个内存块号,所以所有的页表项统一得用到至少三个字节。
但是一个页表项用三个字节其实会出现一些问题。类似于进程被拆分为多个页面存储在内存中一样,页表也是被拆分为多个页表项存储在内存中的。假设页面/页框大小为 4kb,也即 4096b,由于一个页表项 3b,所以一个页框至多可以放 4096/3=1365 个页表项,并且这个页框剩余 1b 的空间。由于 1b 不足以再存放一个页表项,所以第 1366 个页表项(1365 号页表项)只能放在下一个页框中了。
这就会导致,前面 1365 个页表项的地址依然可以采用 X + 3P 的方式计算,但是第 1366 个页表项,它的地址却应该是 X + 3P + 1,也就是说,我们无法以一个通用的式子去计算页表项的地址。
为此,建议一个页表项大小应为 4b 而不是 3b(选取 2 的整数幂)。因为如果页表项大小为 4b,那么一个页框就刚好可以放 4096/4=1024 个页表项,不会有剩余空间,而余下的页表项也可以依次放在下一个页框中。这样的话,涉及到页表项地址的计算,都可以用通用的式子 X + 4*P 来计算,就无需考虑由于页框无法得到完全利用而带来的查询麻烦的问题了。当然,为了这个式子能够通用,页表通常也应该连续地存放在内存块中,中间不出现断节。
若系统采用两级分页存储方式,物理内存 64mb,页面大小 1kb,页表项大小 2b,则顶级页表有多少个页表项?
这里我们可以参考之前求页表项大小的思路。物理内存 64mb,即 2^26^b,所以逻辑地址一共 26 位。这 26 位中,一部分表示一级页号,一部分表示二级页号,剩下的表示页内偏移量。
因为页面大小 1kb,也即 2^10^b,所以页内偏移量一共需要 10 位来表示。一个页面大小 2^10^b,一个页表项 2b,所以一个页面可以最多可以放 2^9^ 个页表项,又由于各级页表不能超过一个页面,所以各级页表不能超过 2^9^ 个页表项。在逻辑地址余下的 16 位中,可以用其中 9 位去表示二级页表的页号(此时该页表的页表项个数取到了最大值),剩下的 7 位表示另一个 —— 顶级页表的页号。因为顶级页表页号有 7 位,所以顶级页表可以包含 2^7^ 个页表项,即包含 128 个页表项。
假设某虚存的用户空间为 IO24KB ,页面大小为 4KB ,内存空间为 512KB 。 已知用户的虚页 10 、11 、12 、13 页分得内存页框号为 62 、78 、25 、36 , 求出虚地址 BEBC ( 16 进制)的实地址( 16 进制)是多少?
解析: 虚地址0BEBC ( 16 进制)的二进制形式为:0000 1 011 1110 1011 1100 。由于页面大小为4KB ,故其中后12 位是位移,所以,虚地址的页号为:11 。查页表分得内存对应页框号为:78 。己知内存空间为512KB ,故内存共有128 个页框,78 是合法物理块。把78 化为16 进制是4E ,虚地址BEBC ( 16 进制)的实地址(16 进制)是:
4E * 1000(4Kb的16进制) + EBC = 4EEBC 页框号*页大小+偏移
有矩阵: int A[100][100] ;元素按行存储。 在一虚存系统中,采用 LRU 淘汰算法,一个进程有 3 页内存空间,每页可以存 放 200 个整数。其中第 1 页存放程序,且假定程序已在内存。
程序 A :
For(i=0;i<100;i++)
For(j=0;j<100;j++)
A[i][j]= 0 ;
程序 B :
For(j=0;j<100;j++)
For(i=0;i<100;i++)
A[i][j]= 0 ;
分别就程序 A 和 B 的执行进程计算缺页次数。
解析: 每页可以放200,而二维数组按行存储,所以数组2行可以存入1页中,100行存入50页中.
对于程序A:
循环也按行操作,也就是每页中的变量依次处理,各页都在全处理完成后转入下一页处理(缺页中断),每存2页发生一次中断,所以缺页中断数为50.
对于程序B:
由于数组2行可以存入1页,所以对于第1列,每页存两个列的元素,发生一次中断,也就是每个大循环(每一列)发生50次中断,而有100列,所以发生100*50=500次缺页
假设计算机有 2M 内存,其中,操作系统占用 512K ,每个用户程序也使用 512K 内存。如果所有程序都有 70 %的 I/O 等待时间,那么,再增加 1M 内存, 吞吐率增加多少?
由题意可知,内存中可以存放3个用户进程,而CPU的利用率为:1-(70%)^3=1-(0.7)^3=65.7%。再增加1M内存,可增加2个用户进程,这时CPU的利用率为:1-(70%)^5=1-(0.7)^5=83.2%。故再增加1M内存,吞吐率增加了:83.2%÷65.7%-100%=27%。
设有一页式存储管理系统,向用户提供的逻辑地址空间最大为 16 页,每页 2048 字节,内存总共有 8 个存储块。试问逻辑地址至少应为多少位?内存空间 有多大
2的4次方=16,所以页号占4位,页长为2048=2的11次方,所以页内地址占11位,逻辑地址15位 存储块有8个,每个存储块对应2048B大小的页框,所以主存空间为16KB
已知系统为32位实地址,采用48位虚拟地址,页面大小4KB,页表项大小为8B;每段最大为4GB。假设系统使用纯页式存储,则要采用多少级页表
正确答案 页面大小为4KB,故页内偏移为12位。系统采用48位虚拟地址,故虚页号为48-12=36位。采用多级页表时,最高级页表项不能超出一页大小;每页能容纳页表项数为4KB/8B=512=29。36/9=4,故应采用4级页表,最高级页表项正好占据一页空间。