基本地址变换机构

重点理解、记忆基本地址变换机构(用于实现逻辑地址到物理地址转换的一组硬件机构)的原理和流程。

1.页表寄存器的作用

1.存放页表起始位置
2.存放页表长度
基本地址变换机构可以借助进程的页表将逻辑地址转换为物理地址
通常会在系统中设置一个页表寄存器(PTR),存放页表在内存中的起始地址F和页表长度M。进程未执行时,页表的起始地址和页表长度放在进程控制块(PCB)中,当进程被调度时,操作系统内核会把他们放到页表寄存器中。
注意:页面的大小是2的整数幂
设页面的大小为L,逻辑地址A到物理地址E的变换过程如下:

基本地址变换机构_页表项
1.根据逻辑地址计算出页号、页内偏移量
2.判断页号是否越界(页号和页表的长度M进行比较,页表是存在连续内存空间中,并从0开始,当页号和长度M相等时,也属于越界)
3.查询页表,找到页号对应的页表项,确定页面存放的内存块号(页框号)
4.用内存块号和页内偏移量相加得到物理地址。(注意一个内存块中还有n个地址)

设页面大小为L,逻辑地址A到物理地址E的变换过程如下:
1.计算页号P和页内偏移量W(如果用十进制数手算,则P=A/L,W=A%L;但是在计算机实际运行时,逻辑地址结构是固定不变的,因此计算机硬件可以更快的得到二进制的页号、页内偏移量)
2.比较页号P和页表长度M,若P>=M;则产生越界中断,否则继续执行。(注意:页号是从0开始的,而页表长度至少是1,因此P=M时也会越界)
3.页表中页号P对应的页表项地址=页表项起始地址F+页号P*页表项长度,取出该页表项内容b,即为内存块号。(注意分区页表项长度、页表长度、页面大小的区别。页表长度指的是这个页表中总共有几个页表项,即总共有几个页;页表项长度指的是每个页表项占多大的存储空间;页面的大小指的是一个页面占多大的存储空间)
4.计算E=b*L+W,用得到的物理地址E去访存(如果内存块号、页面偏移量是用二进制表示的,那么把二者拼起来就是最终的物理地址了)

实例:

基本地址变换机构_逻辑地址_02

对页表项大小进行进一步探讨

每个页表项的长度是相同的,页号是“隐含”的

实例:
假设某系统物理内存大小为4GB,页面的大小为4KB,内存总共会被分为2^32 除以2的12次方=2的20次方个内存块

所以内存块号的范围应该是0~(2^20 - 1 )
因此至少要20个进制位才能表示这么多的内存块号。因此至少要3个字节才够

各页表项会按顺序连续的存储在内存中,如果该页表在内存中存放的起始地址是X,则M号页对应的页表项是存放在内存地址为X+3*M

一个页面为4kb,则每个页框可以存放4096/3=1365个页表项,但是这个页框会剩余1B的页内碎片。因此,1365号页表项存放的地址为X+31365+1
如果每个页表项占4字节,则每个页框刚好可存放1024个页表项
1024号页表项虽然是存放在下一个页框中的,但是它的地址依然可以用X+41024得出

结论:理论上,页表项的长度为3B即可表示内存块号。但是,为了方便页表的查询,常常会让一个页表项占更多的字节,使得每一个页面恰好可以装得下整数个页表项。

2.地址变换过程

1.根据逻辑地址算出页号、页内偏移量
2.页号的合法性检查(与页表长度对比)
3.若页号合法,再根据页表起始的位置、页号找到对应页表项
4.根据页表项中记录的内存块号、页内偏移量得到最终的物理地址
5.访问物理内存对应的内存单元

3.其他

1.页内偏移量位数与页面大小之间的关系(要用其中一个条件推出另一个条件)
2.页式管理中地址是一维的
3.实际应用中,通常使一个页框恰好能放入整数个页表项
4.为了方便找到页表项,页表一般放在连续的内存块中。