页框和页面
将内存空间分为一个个大小相等的分区 (比如:每个分区4KB),每个分区就是一个“页框”(页框=页=内存块=物理块=物理页面)。每个页框有一个编号,即“页框号”(页框号=页帧号=内存块号=物理块号=物理页号),页框号从0开始。
为了将各个进程的数据放到页框当中,将进程的逻辑地址空间也分为与页框大小相等的一个个部分,每个部分称为一个“页”或“页面”。每个页面也有一个编号,即“页号”,页号也是从0开始。
操作系统以页框为单位为各个进程分配内存空间。进程的每个页面分别放入一个页框中。也就是说,进程的页面与内存的页框有一一对应的关系。(各个页面不必连续存放,可以放到不相邻的各个页框中)
页框指的是内存在物理上被划分为的一个一个块,页面指的是进程在逻辑上被划分的一个一个块
那么进程的页面是怎么记录这种与页框的一一对应的关系的呢?
页表
为了能知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表
注:页表通常存在PCB(进程控制块)中
页表的结构
每个页表项的大小:
内存块号的数量---->页表项中块号至少占多少字节
页框的大小=页面大小=4KB= B 4GB= 字节
所以4GB的内存可被分为 / = 个内存块
内存块号的范围应该是0~ -1,内存块号至少要用20bit表示,而计算机分配内存空间以字节为单位,所以至少要用3B来表示块号(3*8=24bit)
页号占的字节:
页表项连续存放,因此页号可以是隐含的,不占存储空间 (类比数组)
由于页号不占存储空间,只有块号占存储空间,所以存储0~n页则需要3*(n+1)B
注意:页表记录的只是内存块号,而不是内存块的起始地址,J号内存块的起始地址 =J* 内存块大小
逻辑地址到物理地址的转换
进程在内存中连续存放时,操作系统是如何实现逻辑地址到物理地址的转换的?
物理地址是绝对的地址,而内存块只需要将其
逻辑地址(相对于起始位置的偏移量)+进程在内存中的起始地址
就能得到物理地址
将进程地址空间分页之后,操作系统该如何实现逻辑地址到物理地址的转换?
虽然进程的各个页面是离散存放的,但是页面内部是连续存放的
如果要访问逻辑地址 A,则
①确定逻辑地址A对应的“页号”P
②找到P号页面在内存中的起始地址(需要页表)
③确定逻辑地址A的“页内偏移量”w
逻辑地址A对应的物理地址 =P号页面在内存中的起始地址+页内偏移量w
如何确定一个逻辑地址对应的页号、页内偏移量?
注:在计算机内部,地址是用二进制表示的如果页面大小 刚好是 2 的整数幂,则计算机硬件可以很快速的把逻辑地址拆分成(页号,页内偏移量)
可以看到末尾的12为就是页内偏移量,而前面的20位就是页号
采用之前的公式验证一下:
页号 = 逻辑地址/页面长度(取除法的整数部分)
页内偏移量 = 逻辑地址%页面长度(取除法的余数部分)
采用之前的公式验证一下:
页号 = 逻辑地址/页面长度(取除法的整数部分)
页内偏移量 = 逻辑地址%页面长度(取除法的余数部分)
在一个分页储存管理系统中,进程的逻辑地址空间占32页,每页1024字节。系统的物理内存为1M字节。进程的页表以及所有的逻辑页面都已在内存中。系统有T L B,平均命中率为85%,一次T L B查找需要20ns,一次内存访问需要100ns。问:
1.进程的逻辑地址共几位?
所以逻辑地址一共占了15位。
2.进程的页表项共几项?
页表项=逻辑地址空间=32项
3.页表项中物理块号占几位?
系统的物理内存为1M,1M=1024K=1024*1024=
物理块号=物理内存/每页字节=/=
所以物理块号占10位。
4.进程访问一个逻辑页面的平均时间是多少?
平均时间=
t:一次访问
:一次查找
:命中率
所以平均时间
= 2*100+20-100*85%
=220-85
=135ns
例题2:
某计算机系统页面大小为4K,进程的页面变换表如下所示。若进程的逻辑地址为2D16H。该地址经过变换后,其物理地址应是()
第一步,先将系统页面大小按字节单位byte化成二进制,那么4*1024=4096
4096转化为16进制为:1000
4096/16=256,余数为0 记录一个0
256/16=16,余数为0 记录一个0
16/16=1,余数为0 记录一个0
1/16=1,余数为1 记录一个1
得到1000
再将16进制的数转化为2进制的数,得到:0001 0000 0000 0000
这里的4K转成二进制的12个0,就代表了逻辑地址的后12位,是页内偏移量。
第二步,把逻辑地址 2D16H 转成二进制为:0010 1100 0001 0110
将前4位取出来,前4位二进制(0010)化成十进制对应的页号为2,在看图,2对应的物理块号是4,化成2进制为0100
第三步,把上面物理块号二进制作为物理地址的开头二进制,把逻辑地址的后12位取出来,作为物理地址的后12位,组合如下:
0100 1101 0001 0110 化成16进制的物理地址是:4D16H
例题3:
某虚拟存储器的用户编程空间共32个页面,每页为1KB,内存为16KB。假定某时一用户页表中已调入内存的页面的页号和物理块号的对照表如下:
则逻辑地址 0A5C(H) 所对应的物理地址是什么?
页面大小1K即是1024的二进制表示为:0100 0000 0000 这里一共有10个0,取逻辑地址的后10位作为物理地址的实际地址。
逻辑地址(0A5C)的二进制为:0000 1010 0101 1100 后10位是: 10 0101 1100
逻辑地址的剩余位是:000010 前面多余的2位0可以省略,化成十进制为2,页号2对应物理块号 11,物理地址块号11直接化成二进制是:1011
将块号的二进制以及逻辑地址的后10位拼在一起是: 1011 10 0101 1100,不够16位,前面补零,那么,真正的逻辑地址二进制是: 0010 1110 0101 1100 化成十六进制是:2E5CH
总结一下做题的逻辑
1:页面大小K化成字节即是乘以1024,再化成二进制。看里面的0的个数,这里假设为n个
2:逻辑地址的后n位置取出来作为物理地址的后n位的真实地址,逻辑地址的剩余位化成 十进制,对应页号表
3:页号表对应的物理块号是 十进制 ,化成二进制作为物理地址的开头
4:将整个物理地址拼好,将二进制换算成十六进制
5:特别注意,如果剩余N位的十进制超出表给出的页号表,则为超出范围。要么是超出范围,要么就是算错了!
6:有的计算题给的页面单位为:M,这里的单位是 K ,请仔细注意换算后有多少个0
7:计算地址必须仔细看参数!最重要的参数是:每页面的大小单位K 而且必须要化成字节(byte)才能换算!即是要乘以1024
例题3:
分页式存储管理系统中,主存容量为1M,假定某采用分页式虚拟存储系统中,主存储容量为1M,被分为256份,某作业的地址空间占4页,页号为0,1,2,3 被分配要主存的第2,4,1,5块中,回答
(1)主存地址应该用是____位来表示
(2)作业每一页的长度为_____,逻辑地址中的页内地址(单元号)占用____位
分析:主容量为1M,而且被分成256份L,那么先把M化成K
1*1024=1024K 1024K被分成256份,那么每一份的大小为:1024除以256=4K
问题(2)中的每页长度为4K,然后4K换算成二进制即是次方,12个0,这里的页内地址是术语,意思即是对应物理地址的真实二进制地址,即是后面的12位。
问题(2)中的答案为占用了12位
1024K*1024=1048576Byte 这个时候再换算成二进制!即是次方,有20个0,问题(1)中的答案为 20
所以:
(1)主存地址应该用是_20_位来表示
(2)作业每一页的长度为_4K_,逻辑地址中的页内地址(单元号)占用_12_位
逻辑地址结构
地址结构包含两个部分:前一部分为页号,后一部分为页内偏移量 W。在上图所示的例子中,地址长度为32位,其中0~11位为“页内偏移量”,或称“页内地址”;12~31位为“页号”
如果有 K位 表示“页内偏移量”,则说明该系统中一个页面的大小是 个内存单元
如果有 M位 表示“页号””,则说明在该系统中,一个进程最多允许有 个页面