一、基本地址变换结构
基本地址变换结构可以借助进程的页表将逻辑地址转换为物理地址。
通常在系统中设置一个页表寄存器(PTR Page-Table Register),存放页表在内存中起始地址F和页表长度M。
进程在未执行时,页表的起始地址和页表长度放在进程控制块(PCB)中,当进程被调度时,操作系统内核会把它们放在页表寄存器中。
逻辑地址到物理地址变换的过程:
- 计算页号P和页内偏移量W(如果用手算,P=A/L,W=A%L;但是在计算机实际运行中,逻辑地址结构是固定不变的,因此计算机硬件可以更快地得到二进制表示的页号、页内偏移量)
- 比较页号P和页表长度M,如果P>=M,则会产生越界中断,否则继续执行(注意:页号是从0开始的,则页表长度至少是1,因此P=M时也会越界)
- 页表中页号P对应的页表项地址 = 页表始址F + 页号P * 页表项长度,取出该页表项内容b,即内存块号
- 计算实际物理地址E = b * L + W,用得到的物理地址E去访存
注意页表项长度、页表长度、页面大小的区别:
- 页表长度是指页表最多能有多少个页表项,即总共有几个页
- 页表项长度指每个页表项所占用的内存大小
- 页面大小指一个页面占多大的内存空间
注意:页面大小是2的整数幂
二、例题
例:若页面大小L为1K字节(1024),页号2对应的内存块号b=8,将逻辑地址A=2500转换为物理地址E
等价描述:某系统按字节寻址,逻辑地址结构中,页内偏移量占10位(说明一个页面的大小为2^10B=1KB),页号2对应的内存块号b=8,将逻辑地址A=2500转换为物理地址E
在分页存储管理(页式管理)系统中,只要确定每个页面的大小,逻辑地址结构就可以确定。
因此,页式管理中地址是一维的。
即,只要给出一个逻辑地址,系统就可以自动算出页号、页内偏移量。
三、对上一小节的页表项大小进行进一步探讨
https://blog.****.net/dyw_666666/article/details/107166904
为什么每个页表项的长度是相同的,而页号是隐含的?
4GB = 2^32B,4KB = 2^12B
例:假设某系统物理内存大小为4GB,页面大小为4KB的内存总共会被分为2^32 / 2^12 = 2^20个内存块,因此内存块号的范围应该是0~2^20-1
因此至少要20个二进制位才能表示这么多内存块号,因此至少要3个字节才够
(每个字节8个二进制位,3个字节共24个二进制位)
各页表项会按顺序连续地存放在内存中
如果该页表在内存中存放的地址为X,则M号页对应的页表项存放的地址为:X + 3*M
一个页面为4KB(4096),则每个页面可以存放 4096 / 3 = 1365个页表项,但是这个页面会剩余 4096 % 3 = 1B页内碎片
因此,1365号页表项存放的地址为 X + 3*1365 +1
那么,如果每个页表项占4字节,则每个页框刚好可存放1024个页表项
1024号页表项虽然是存放在下一个页框中的,但是它的地址依然可以用 X + 4*1024得出
结论:理论上,页表项长度为3B即可表示内存块号的范围,但是为了方便页表的查询,常常会让一个页表项占更多的字节,使得每个页面恰好可以装得下整数个页表项
基本地址变换结构需要访问两次内存:
第一次访问内存查找页表;
第二次访问物理内存对应的内存单元。
四、小结
地址变换过程易出大题。