2 qq 32191893 qq_32191893 于 2016.02.28 00:25 提问

c++为进程创建页表,分配页框遇到问题,想请教一下

为进程创建页表,分配页框,页表包含页号和页框号,页号是用户自己定的,从零开始编号,那页框号又是怎么确定的,难道也是从零开始编号吗,那岂不是页号和页框号是一样的了

3个回答

qq423399099
qq423399099   Ds   Rxr 2016.02.29 10:11

每一个进程都拥有一个自己的页表,页表放在系统空间的页表区,存放逻辑页与物理页帧的对应关系。
用页号去检索页表,从页表中得到该页的物理块号
图片说明
图片说明

qq423399099
qq423399099 回复今天阳光正好: 我写在下面了
接近 2 年之前 回复
qq423399099
qq423399099 回复今天阳光正好: 页号 页框(Page Frame)号 有效位(存在位)0 101H 1 1 — 0 2 254H 1
接近 2 年之前 回复
qq_32191893
qq_32191893 举个例子,新建一个进程,通过进程大小可以知道进程需要分配5个页框,但是不知道是哪五个页框,页号可以编号0-5,那页框号呢?怎么确定的,还有我们老师说了不能用伙伴算法,因为那个是连续分配的,虚拟页式是不连续的
接近 2 年之前 回复
qq423399099
qq423399099   Ds   Rxr 2016.03.01 16:59

页号是页的编号
页框号可以理解为物理块号
因为一个页面大小是4K=2^12
所以这个物理块号需要12位来表示。
关于逻辑地址到物理地址的计算,
逻辑地址由页号和页内地址组成
例如:
对于地址2362H,后12位(即362)作为物理地址的后半部分
2是页号,找到相应的页2,它的物理块号作为物理地址的前半部分
即物理地址:254362H
图片说明

qq_32191893
qq_32191893 你说的我都知道,只是编程抽象实现MMU的时候,逻辑地址知道,也就是页号知道了,我就是不知道块号是怎么确定的,我怎么知道这个进程对应内存中的哪一块呢,
接近 2 年之前 回复
caozhy
caozhy   Ds   Rxr 2016.02.28 06:12

一般来说,页框包含多个页,页框的作用是连续分配空间,提高效率,如果一个页框对应一个页面,那么页框也就没意义了。至于编号,这个无关紧要。只要给一个唯一的编号就可以。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!