操作系统学习 - 逻辑地址转物理地址

文章目录

  • 1. 基本地址变换机构
  • 2. 具有快表的地址变换机构
    • 局部性原理
    • 快表
    • 引入快表后,地址变换过程

1. 基本地址变换机构

定义:用于实现逻辑地址到物理地址转换的一组硬件机构

基本地址变换机构可以借助进程的页表将逻辑地址转换为物理地址。

通常会在系统中设置一个页表寄存器(PTR),存放页表在内存中的起始地址F和页表长度M(就相当于一个数组),进程未执行时,F和M放在进程控制块(PCB)中,当进程被调度时,操作系统内核会把他们放到页表寄存器(PTR)中。

过程描述:
进程被调度后,操作系统从PCB中取得页表始址F和页表长度M,放入到页表寄存器PTR中。当程序想访问一个逻辑地址A的时候,根据页表大小,就可以自动算出页号P和页内偏移量W。

首先检查页号P是否合法,如果不合法,就产生一个越界中断。如果合法,就去页表中查询对应的帧号b,再根据偏移量,计算出物理地址(直接把b和W按二进制拼起来就是物理地址)。
操作系统学习 - 逻辑地址转物理地址_第1张图片

  • 页表长度:页表内有多少表项。
  • 页表项长度:每个页表项占多大的内存空间。
  • 页面大小:一个页面占多大的存储空间,页面大小是2的整数次幂。这也确定了一个逻辑地址中,偏移量最多有多少位。
  • 页表项:页表中的一个元素,PTR。

页表在内存中的存储,与数组类似,但不完全一样 ,可能出现跨页存储的情况。
操作系统学习 - 逻辑地址转物理地址_第2张图片
所以,最好用一个Byte把一个页表项补齐成4Byte。这样,一般情况下都不会产生碎片。
结论:理论上,页表项长度为3Byte即可表示页帧号的范围了,但是,为了方便页表的查询,尝尝会让一个页表项占更多的Byte,使得每个页面恰好可以装得下整数个页表项。

2. 具有快表的地址变换机构

局部性原理

  • 时间局部性

    执行了程序中的某条指令,那么不久后这条指令很可能再次执行。如果某个数据刚刚访问过,那么不久后,该数据很可能再次被访问。(因为程序中存在大量的循环)

  • 空间局部性

    程序访问了某个内存单元,在不久之后,该内存单元附近的存储单元也很有可能被访问。(因为很多数据在内存中都是连续存放的)

快表

在基本地址变换机构中,每次想访问一个物理地址,都需要到内存中去先查一下页表,再去访问物理地址。由于局部性的原理,这个页表项可能很快就被再次访问到,既然如此,能否利用局部性的原理减少页表查询的次数呢?

  • 快表TLB,是一种访问速度比内存快很多的高速缓冲存储器,用来存放当前访问的若干页表项,以加速地址变换的过程。与此对应,内存中的页表常被称为慢表

引入快表后,地址变换过程

每次访问逻辑地址时,先到快表中看一下有没有对应的帧号,如果有的话,就直接用,如果没有,再去慢表中查询。查询到(命中)以后,回头更新一下快表。再去访问物理地址。因为快表的访问速度比慢表的速度要快得多。所以这样一来,效率得以提高。
(页表寄存器PTR是个寄存器,速度也很快)

  • 如果快表命中的话,则访问某个逻辑地址仅需一次访存即可(原来需要两次,第一次是访问页表,页表在内存中;第二次是访问目标物理地址去读数据。)。
  • 如果快表未命中的话,仍然按照原来的方式,需要两次访存。
  • 若快表已满,则需要按照一定的算法对旧的页表项进行替换。
    操作系统学习 - 逻辑地址转物理地址_第3张图片
    要注意的是,有的系统支持快表和慢表同时查找。
    操作系统学习 - 逻辑地址转物理地址_第4张图片

你可能感兴趣的:(操作系统)