分页存储管理概念 - wolai 笔记

1.思想

  • 把进程分页,各个页面可离散地放到各个内存块中
  • 操作系统以页框为单位为各个进程分配内存空间
  • 进程的页面与内存的页框有一一对应的关系
  • 各页面不必连续存放,可以放到不相邻的各个页框中
  • 虽然进程的各个页面是离散存放的,但是页面内部是连续存放的

2.易混概念

2.1内存块

  • 别称:页框、页帧、物理块、物理页
  • 将内存空间分为一个个大小相等的分区,每个分区就是一个页框

2.2页面

  • 别称:页
  • 将进程的逻辑地址空间也分为与页框大小相等的一个个部分,每个部分称为一个“页”

2.3内存块号

  • 别称:页框号、页帧号、物理块号、物理页号
  • 每个页框有一个编号,即“页框号”,页框号从0开始

2.4页号

  • 别称:页面号
  • 每个页面也有一个编号,即“页号”,页号从0开始

3.页表

  • 页表记录了页面和实际存放的内存块之间的映射关系
  • 一个进程对应一张页表,进程的每个页面对应一个页表项,每个页表项由“页号”和“块号”组成
  • 每个页表项的大小是相同的,页号是“隐含”的,即页号不占用内存空间
  • i号页表项存放地址 = 页表始值 + i * 页表项大小

4.逻辑地址结构

可拆分为 【页号,页内偏移量W
  • 页号 = 逻辑地址 / 页面大小
  • 页内偏移量 = 逻辑地址 % 页面大小
  • 逻辑地址结构包含两个部分:前K位页号,后M位页内偏移量
  • 如果有K位表示“页内偏移量”,则说明该系统中一个页面的大小是2^K个内存单元
  • 如果有M位表示“页号”,则说明在该系统中,一个进程最多允许有2^M个页面
页表项与逻辑地址结构区分
  • 页表项与地址都有两部分组成,而且第一部分都是页号;
  • 页表项的第二部分是物理内存中的块号
  • 逻辑地址结构的第二部分是页内偏移量
  • 页表项的第二部分和逻辑地址的第二部分共同组成物理地址。

5.如何实现地址转换

  1. 计算出逻辑地址对应的【页号,页内偏移量】
  2. 找到对应页面在内存中的存放位置(查页表)
  3. 物理地址 = 页面始址 + 页内偏移量

6.Sample

6.1每个页表项占多少字节

假设某系统物理内存大小为4GB,页面大小为4KB,则每个页表项至少应该为多少字节?
  • 内存块大小 = 页面大小 = 4KB = 2^12B
  • 4GB的内存总共会被分为 2^32 / 2^12 = 2^20 个内存块
  • 内存块号的范围应该是 0 ~ 2^20-1
  • 内存块号至少要用20bit来表示
  • 至少要用3B来表示块号(3*8=24bit)
  • 由于页号是隐含的,每个页表项占3B,存储整个页表至少需要3*(n+1)B,其中,n为页号数量
注意:页表记录的只是内存块号,而不是内存块的起始地址。J号内存块的起始地址 = J * 内存块大小

6.2地址转换

如果要访问逻辑地址A,则
  • 确定逻辑地址A对应的“页号”P
  • 找到P号页面在内存中的起始地址(需要查页表)
  • 确定逻辑地址A的“页内偏移量”W
  • 则,逻辑地址A对应的物理地址 = P号页面在内存中的起始地址 + 页内偏移量W
如,假设某计算机系统,页面大小是50B。某进程逻辑地址空间大小为200B,则逻辑地址110对应的页号、页内偏移量是多少?
  • 页号 = 110 / 50 = 2
  • 页内偏移量 = 110 % 50 = 10
如果每个页面大小为2^kB,用二进制数表示逻辑地址,则末尾k位即为页内偏移量其余部分为页号。
如,某计算机用32个二进制为表示逻辑地址,页面大小为4KB=2^12B=4096,逻辑地址为4098的页号和页内偏移量
  • 4097用二进制表示0000 0000 0000 0000 0001 0000 0000 0010
  • 页号 = 4098 / 4096 = 1 = 0000 0000 0000 0000 0001
  • 页内偏移量 = 4098 % 4096 = 2 = 0000 0000 0010
假设物理地址也用32位二进制表示,则由于内存块大小 = 页面大小,因此:
  • 0号内存块的起始物理地址是0000 0000 0000 0000 0000 0000 0000 0000
  • 1号内存块的起始物理地址是0000 0000 0000 0000 0001 0000 0000 0000
  • 2号内存块的起始物理地址是0000 0000 0000 0000 0010 0000 0000 0000
  • 3号内存块的起始物理地址是0000 0000 0000 0000 0011 0000 0000 0000
假设通过查页表得知1号页面存放的内存块是9(1001),则
  • 9号内存块的起始地址 = 9*4096 =0000 0000 0000 0000 1001 0000 0000 0000
  • 逻辑地址4098对应的物理地址 = 页面在内存中的起始地址 + 页内偏移量 = 0000 0000 0000 0000 1001 0000 0000 0010


Comment