美文网首页计算机基础知识
操作系统拾遗--内存管理之分页式存储(一)

操作系统拾遗--内存管理之分页式存储(一)

作者: FrankerSung | 来源:发表于2019-02-26 19:36 被阅读0次
1. 概念
  • 逻辑地址:CPU所生成的地址。逻辑地址分为两部分:
    ① P--页号:它包含每个页在物理内存中的基址,用来作为页表的索引;
    ② W--页偏移:同基址相结合,用来确定送入内存设备的物理内存地址。
    ③ 如果有k位表示页内偏移量,则说明该系统中一个页面的大小是2k个内存单元。
    ④ 如果有m位表示页号,则说明在该系统中,一个进程最多允许有2m个页面。

    逻辑结构图
  • 物理地址:内存单元所看到的地址。逻辑地址空间为2m,且页大小为2n,那么逻辑地址的高m-n位表示页号,低n位表示页偏移。

  • 逻辑地址空间:由程序所生成的所有逻辑地址的集合。

  • 物理地址空间:与逻辑地址相对应的内存中所有物理地址的集合,用户程序看不见真正的物理地址。
    注:用户只生成逻辑地址,且认为进程的地址空间为0到max。物理地址范围从R+0到R+max,R为基地址,地址映射-将程序地址空间中使用的逻辑地址变换成内存中的物理地址的过程。由内存管理单元(MMU)来完成。

2.内存分页式存储--地址转换
2.1. 计算物理地址

1).算出逻辑地址对应的页号
2).要知道该页号对应页面在内存中的起始地址
3).要算出逻辑地址在页面内的偏移量
4).物理地址=页面始址+页内偏移量

2.2. 如何计算

页号=逻辑地址/页面长度(取除法的整数部分)
页内偏移量=逻辑地址%页面长度(取除法的余数部分)
页面在内存中的起始位置:操作系统需要用某种数据结构记录进程各个页面的起始位置。

2.3. 举例
页号          80/50=1
页内偏移量     80%50=30
1号页在内存中的起始位置为400[操作系统会采用页表记录]
则物理地址为 400 + 30
2.4. 计算机真实的计算方式[重复一遍~]

如果每个页面大小为 2k B,用二进制数表示逻辑地址,则末尾k位即为页内偏移量,其余部分就是页号。


3. 页表

为了能知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表
说是页表,其实就是一个类似数组的数据结构,每一项数据元素称为页表项,页表项又有页号和块号构成:

  1. 一个进程对应一张页表
  2. 进程的每一页对应一个页表项
  3. 每个页表项由页号和块号组成
  4. 页表记录进程页面和实际存放的内存块之间的对应关系
  5. 每个页表项的长度是相同的,页号是隐含的

为什么每个页表项的长度是相同的,页号是隐含的?

假设某系统物理内存大小为4GB,页面大小为4KB,则每个页表项至少应该为多少字节?

4GB=232 B, 4KB=212 B
因此4GB的内存总共会被分为232/212=220个内存块,因此内存块号的范围应该是0~220-1。
因此至少要20个二进制位才能表示这么多的内存块号,因此至少要3个字节才够(每个字节8个二进制位,3个字节共24个二进制位)。
各页表项会按顺序连续地存放在内存中,如果该页表在内存中存放的起始地址为x,则M号页对应的页表项一定是存放在内存地址为×+3M。
因此,页表中的页号可以是隐含的。
只需要知道页表存放的起始地址和页表项长度,即可找到各个页号对应的页表项存放的位置
在本例中,一个页表项占3B,如果进程由n个页面,则该进程的页表总共会占3
n个字节


4. 基本地址变换机构

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

设页面大小为L,逻辑地址A 到 物理地址E的变换过程如下:
① 计算页号P和页内偏移量W
(如果用十进制数手算,则P=A/L,W=A%L。但是在计算机实际运行时,逻辑地址结构是固定不变的,而且页面大小是2的整数幂次方,因此计算机硬件可以更快地得到二进制表示的页号、页内偏移量)
② 比较页号P和页表长度M,若P ≥ M,则产生越界中断,否则继续执行。
(注意:页号是从0开始的,而页表长度至少是1,因此P = M时也会越界)
③ 页表中页号P对应的页表项地址 = 页表起始地址F + 页号P * 页表项长度,取出该页表项内容b,即为内存块号。

注意区分页页表长度、表项长度、页面大小的区别。
页表长度指的是这个页表中总共有几个页表项,即总共有几个页;
页表项长度指的是毎个页表项占多大的存储空间;
页面大小指的是一个页面占多大的存储空间

④ 计算E=b*L+W,用得到的物理地址E去访存。(如果内存块号、页面偏移就是用二进制表示的,那么把二者拼接起来就是最终的物理地址了)。

image.png

参考
《MOOC 王道操作系统》

相关文章

网友评论

    本文标题:操作系统拾遗--内存管理之分页式存储(一)

    本文链接:https://www.haomeiwen.com/subject/sjgoyqtx.html