如何理解“页式存储管理方案”

 

简单理解页式存储管理方案

页式存储管理方案属于虚拟存储器的一种操作。虚拟二字是我们理解页式存储管理方案很好的一个切入点。为什么要叫虚拟存储器?虚拟的是什么?是存储器的容量。

比如说,电脑的主存(也就是内存条)空间是有限的,这里假定实际物理地址为20位,即实际物理地址空间为2^{20 }B=1MB(多年之前还是很可能的,现在一般至少都是4GB了),如果数据在内存中是按块存储的,每块的大小为4KB,则该内存条里面可以容纳:

\frac{1MB}{4KB}=2^{8}个数据块。

那么在使用的时候,CPU就可以调用2^{8}个数据块,但是在虚拟存储技术下,虚拟地址为24位,即虚拟地址空间为2^{24}B=16MB的情况下,CPU会感觉自己可以调用的数据块变多了,从2^{8}变成了\frac{16MB}{4KB}=2^{12}个。但是实际上这个内存条的空间容量并没有变,一直都是1MB。那么虚拟存储技术是怎么做到“欺骗了CPU”的呢?

在实际的物理存储层次上,所编程序和数据在操作系统管理下,先送入磁盘,然后操作系统将当前运行所需要的部分调入主存,供CPU使用,其余暂不运行部分留在磁盘中。(这句话来自王道书)


说得直白一点,就像小明开了一家皮包公司,号称有在全省有十家分公司,总员工个数是50人,对外号称有员工至少500人,然后小明去诓骗投资人投资,在投资人身边收买了一个人,以后投资人在考察期间,要去小明的任何一家分公司调查,小明都会通过这个人事先得知,然后他就把这仅有的50个员工都调到投资人将要考察的那个分公司,投资人在调查完十家分公司后,就会产生一种确实有至少500个员工的错觉。(这里假装这个投资人是脸盲,实际生活中这样的例子也不是没有,就是对会被直接接触到的人注意一点不要被重复看见就行了,其他群众演员都是那么一批)

/*不过虚拟存储器虚拟的是空间的大小,而不是员工数量的多少*/


页式虚拟存储器呢,就是把数据按一页一页地打包,而不是之前说的一块一块地打包。

比如按照页式虚拟存储器,上例中的条件改为:

实际物理地址空间为2^{20 }B=1MB,数据在内存中是按页打包存储的,每页的大小为4KB,则该内存条里面可以容纳:

\frac{1MB}{4KB}=2^{8}个数据页。

虚拟地址空间为2^{24}B=16MB,CPU会感觉自己可以调用的数据页为\frac{16MB}{4KB}=2^{12}个。


在应用虚拟页式存储器技术的时候会碰到很多问题,我们一个一个攻克。

实际上只有1MB空间的内存条不能装下页大小为4KB的2^{12}个数据页啊。所以,只好部分装入,其他的数据页在辅存(比如硬盘里)里呆着,等CPU需要调用某个数据页的时候,再装进来,也有可能这个数据页已经在里面了,(比如根据程序的局部性原理还在这乖乖呆着的)。

问题1:但是电脑怎么知道CPU现在要用的数据页在不在内存里面呢??

这样我们自然想到,设置1bit位来记录这个数据页在不在内存里面。/*这个bit位学名“装入位”,1表示当前装入在内存里,0表示没有装入内存里*/

问题2:先看条件,假设内存条的虚拟空间包含8个数据页,而内存条的实际空间只能容纳4个数据页,因为还要留一个空间来存放信息,/*目前存放的信息为:设置1bit位来记录这个数据页在不在内存里面*/所以最终只能存下3个数据页。

问题2: CPU拿到的数据页并不是它想要的那一页

该图表示了CPU拿到的数据页并不是它想要的那一页,这是虚拟页式存储器中的遇到的问题2

怎么解决呢?在信息表中添加“CPU想要的数据页”与“实际上该页在内存中的位置”的对应关系:

于是,信息表变成了这样:(里面的颜色只是为了更直观的展示不同的数据页,里面有一个是灰色的!注意看)

表1

CPU想要的数据页 

颜色

是否在内存里(是否装入了)

实际上该页在内存中的位置

颜色

第0页

 

不在

 

 

第1页

 

不在

 

 

第2页

 

第1页

 

第3页

 

不在

 

 

第4页

 

第2页

 

第5页

 

不在

 

 

第6页

 

第0页

 

第7页

 

不在

 

 

于是这回对了

表1中的“CPU想要的数据页”与“实际上该页在内存中的位置”分别对应虚拟页式存储技术中的术语“虚页号”和“实页号”而表1的学名叫做页表。

“CPU想要的数据页” == “虚页号” == “逻辑页号”

“实际上该页在内存中的位置” == “实页号” == “页框号”

所以CPU想要数据页,跑去访问内存条的时候,需要先查页表,如果命中了(就是页表告诉CPU那一个数据页在内存中)就按照“实页号”去内存条中找;如果没命中,还要进行页面替换和页表修改。

其实看到这里应该已经理解了原理。下面的内容可不看。


看王道的一道题:

某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为16MB,主存(物理)地址空间大小为1MB,页面大小为4KB;

问:虚拟地址共有几位,哪几位表示虚页号?物理地址共有几位,哪几位表示页框号(物理页号)?

由计算机内用二进制存储信息且按字节编址的条件,得知:/*按字节编址如果无法理解请看我的另一篇文章,有关猪的那个*/

要表示16MB的虚拟地址空间,需要24位来表示,2^{24}=16M。

因为页面大小为4KB,所以共有\frac{16MB}{4KB}=2^{12}个数据页,要表示这么多数据页,需要12个bit位。

而要表示1MB的物理地址空间,需要20位来表示,2^{20}=1M。

而因为页面大小为4KB,所以实际内存条中共有\frac{1MB}{4KB}=2^{8}个页。(这些页空间不仅要存数据页,还要用来存放页表),要表示这么多页,需要8个bit位

虚拟地址共有24位,前12位用来表示虚页号,物理地址共有20位,前8位表示页框号(物理页号)


完整理解:页内地址是什么?

还是从例子开始:设定:一个房间有8个栅栏装8只猪,这个栅栏是订做的,所以为了物尽其用,一个房间一定要正好装8只猪,然后每只猪的身上有一个数字,0或1,现在,我有2^{12}个房间,那么总共有多少只猪?2^{12}*8=2^{15}只猪,但是在这个世界,所有的房间都规定是装的8只猪,所以,人们交流的时候不说我有多少只猪,而说我有多少个房间的猪。

类似地,在计算机领域,人们不说我有多少个bit位的数据,而说我有多少个Byte(字节)的数据。

所以你找到了某个数据页后,要读取页内“某个房间”的猪身上的信息的时候,你还需要一个信息:即页内地址,就是房间号啦。当页大小为4KB的时候,表示房间里有2^{12}*8=2^{15}只猪,即2^{12}*8=2^{15}bit数据;但是我们按8只猪编址(按字节编址)所以,我们说有4KB数据,然后我们要读取页内“某个房间”的猪身上的信息的时候,页面大小为4KB,说明有4K个房间,要表示4K个房间,即4K=2^{12},需要12个bit位,所以页内地址需要12bit位来表示。

这个页的情况类似下图:

希望能帮到大家。不足之处请提出。转载请注明出处! 

  • 13
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值