操作系统页表项长度问题的记录

学习分页存储管理的过程中,对于每个页表项大小的下限如何确定这个问题不是很理解,经过一番周折终于弄懂,特此记录。

问题描述
以32位逻辑地址空间、字节编址单位、一页4KB为例,地址空间有232B / 4 KB = 1M页,需要log21M = 20位才能保证范围容纳所有页面,而又因为以字节作为编址单位,即页表项的大小大于等于20 /8 = 3B.这个3B是个下界,可以选择4B使得一个页面正好可以装下1K个页表项。

对于虚拟分页存储的每个进程来说,它的逻辑地址空间为32位,进程之间互不影响。
按字节编址的意思是每一个地址所对应的存储单元可以存放一个字节的数据,也就是8位的数据。
分页系统中一个逻辑地址分为两个部分,高位是页号,低位是页偏移量。因为是32位的逻辑地址空间,假设后12位表示页偏移量,也就是一个页面所对应212个逻辑地址,相对应的就是包含212个存储单元,按照上面的字节编址,也就是说一个页面所包含的数据量是212B也即4KB。
一个地址总共32位,现在后12位表示了页容量的大小,前20位可以表示页的编号。即可以包含220个页面,总共是1M个,这里的1M并不是存储容量,而是数量单位。计算机中基本的存储单元是B,即一个字节。一字节只能包含8位,所以至少要3个字节才可以将20位容纳,所以页表项所占内存大小至少是3B。
一个页表有多个页表项,要想准确定位每个页表项从上述问题出发即可解决。
当一个进程得到处理机的调度,其PCB中存储的页表始址和页表长度就存到了处理机的页表寄存器之中。根据逻辑地址所给出的页号 * 页表项的长度 + 始址就得到每个页表项的地址,从页表项地址的对应的数据单元取出数据。

这里应注意的是,因为一个地址所对应仅一个字节,而一个页表项的大小不一定小于一个字节,所以往往页表项的地址并不是连续的,换算的时候需要乘以页表项的长度。也就是说我们计算出来的是页表项数据的基址而不是一对一的地址。

  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值