操作系统3.1.7 基本地址变换机构

时间:2024-04-13 10:12:47

操作系统3.1.7 基本地址变换机构

 

一、基本地址变换结构

基本地址变换结构可以借助进程的页表将逻辑地址转换为物理地址。
通常在系统中设置一个页表寄存器(PTR Page-Table Register),存放页表在内存中起始地址F和页表长度M
进程在未执行时,页表的起始地址和页表长度放在进程控制块(PCB)中,当进程被调度时,操作系统内核会把它们放在页表寄存器中。

操作系统3.1.7 基本地址变换机构

 

逻辑地址到物理地址变换的过程:

  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去访存

注意页表项长度、页表长度、页面大小的区别:

  1. 页表长度是指页表最多能有多少个页表项,即总共有几个页
  2. 页表项长度指每个页表项所占用的内存大小
  3. 页面大小指一个页面占多大的内存空间

注意:页面大小是2的整数幂

 

 

二、例题

例:若页面大小L为1K字节(1024),页号2对应的内存块号b=8,将逻辑地址A=2500转换为物理地址E

等价描述:某系统按字节寻址,逻辑地址结构中,页内偏移量占10位(说明一个页面的大小为2^10B=1KB),页号2对应的内存块号b=8,将逻辑地址A=2500转换为物理地址E

操作系统3.1.7 基本地址变换机构

在分页存储管理(页式管理)系统中,只要确定每个页面的大小,逻辑地址结构就可以确定。

因此,页式管理中地址是一维的

即,只要给出一个逻辑地址,系统就可以自动算出页号、页内偏移量。

 

 

三、对上一小节的页表项大小进行进一步探讨

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个二进制位)
操作系统3.1.7 基本地址变换机构

各页表项会按顺序连续地存放在内存中
如果该页表在内存中存放的地址为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即可表示内存块号的范围,但是为了方便页表的查询,常常会让一个页表项占更多的字节,使得每个页面恰好可以装得下整数个页表项

 

基本地址变换结构需要访问两次内存:

第一次访问内存查找页表;

第二次访问物理内存对应的内存单元。

 

 

四、小结

操作系统3.1.7 基本地址变换机构

地址变换过程易出大题。