操作系统 分页存储

文章目录

  • 分页存储管理方式
    • 分页存储概念
    • 分页管理存储方式可以解决“可用存储总容量足够大”但是“大作业不能运行”的情况
    • 分页存储管理下的相对地址和物理地址

分页存储管理方式

分页存储概念

  • 页框:将内存空间,也就是整个用户空间划分为一个大小相等的分区,每一个分区叫做一页框(也叫做页帧,内存块、物理块、物理页面),页框号从0开始

  • 页面:将进程的逻辑地址空间也划分为与页框大小相同的一个个部分,叫做页面或者页(这个概念十分重要,后面忘记这个概念会很懵),页号也是从0开始的。

  • 操作系统是以页框为单位进行各个进程的内存分配的,一次分配一个页框,也就是一个内存块

  • 页表:为了知道进程的每一个页面在内存中的存放位置,操作系统为每一个进程建立一张页表,页表存放在PCB进程控制块中,只有当进程被访问的时候页表才会被赋值到寄存器中。一个进程对应一张页表,页表项由页号+块号组成
    操作系统 分页存储_第1张图片

页表项占用多少字节:

  • 首先块号占多少字节
    Eg:假设某系统物理内存大小为 4GB,页面大小为 4KB,则每个页表项至少应该为多少字节?
    内存块大小=页面大小=4KB= 212 B
    4GB 的内存总共会被分为 232 / 212 = 220个内存块,每一个内存块都需要编号
    内存块号的范围应该是 0 ~ 220 -1
    内存块号至少要用 20 bit 来表示
    至少要用3B来表示块号(3*8=24bit),在内存中表示如下:
    操作系统 分页存储_第2张图片
  • 假设页表中各个页表项从内存地址为X的地址开始连续存放如何找到页号为 i 的页表项?
    i 号页表项的存放地址 = X + 3*I
    因此,页表中的页号可以是隐含的,即页号不占用存储空间
    因此,存储页表的时候只需要存储页号,所以每一个页表项只占3B

分页管理存储方式可以解决“可用存储总容量足够大”但是“大作业不能运行”的情况

① 把装入模块(即链接后的可执行程序)切分为一系列等长的片段,每个片段称为一个页面(页面长度为512B、1KB、2KB、4KB等,小于动态分区的很多碎片),页号依次为0、1、2、…,(具有n-1个页面的进程大小是多少字节)
② 也把系统物理内存划分为一系列等长的片段,每个片段称为一个物理块(或一个页帧)物理块长度与页面长度相同,块号为0、1、2、…
③ 用户程序运行时,操作系统将其各个页面装载到一系列任意的物理块(地址可能不连续)
④ 结果:只要系统可用物理内存块之和满足作业内存容量要求,就可为作业分配内存,因为分配内存是以内存块为单位进程分配的在这之前已经划分好了内存块,所以不会出现外部碎片的问题,但是会有内部碎片的问题。
操作系统 分页存储_第3张图片

分页存储管理下的相对地址和物理地址

1、两种地址是同样计算方式(十进制)

① 一般情况下,进程的相对地址(物理地址)都从0开始安排,各单元编号就是其相对地址
② 第0页起始地址为0,若页面长度为L,第P页起始相对地址(起始物理地址)为P×L,第P页离页首偏移量(页内地址)为d的位置,其相对地址(物理地址)为:LA=P×L+d
③ 若逻辑地址(物理地址)为LA,页长为L,则页号P={LA/L}(取下限),页内偏移量d=LA-P*L=LA mod L

2、相对地址和物理地址变换方法

①从逻辑地址LA中提取页号P;
②用页号P查页表,得到物理块号Q;
③用物理块号Q和页内地址d,计算物理地址PA。

3、分页存储管理的实际实现(二进制)
计算机的实现是使用二进制0和1来实现的,但是计算方法和上面讲到(相对地址和逻辑地址)的都是一样的,只是具体实现需要转换二进制代码来计算

一般来说,页长L是取2的幂

例如:若逻辑地址(物理地址)长度为W位(通常W=32或64),页长为K,则逻辑地址(物理地址)结构为:
在这里插入图片描述
也就是说,页内地址(偏移量)的位数就是我们的页长,它的数值就是我们的偏移量,前面的w-k 位的数值是我们要找的页号

  • 逻辑地址=87654321H ,页面大小1024B
    则页号=21d950H ,页内偏址=321H
  • 解释:87654321H=1000 0111 0110 0101 0100 0011 0010 0001 B
    因为页长=1024B=2的10次方,所以页内偏移量d= 11 0010 0001 B=321 H
    前面的就是页号=1000 0111 0110 0101 0100 00 B=21d950H

4、地址变换机构
变换过程:
①从逻辑地址LA中提取页号P、页内地址d
②若页号>页表长度,则越界异常
③页号+页表地址得到页表项地址(页表地址存的是块号为0的那个初始地址)
④查页表,得物理块块号Q,即PT[P]
⑤将物理块号Q与页内地址拼接,的物理地址PA
操作系统 分页存储_第4张图片
三、提高地址转换效率

  • 分页存储操作每次都需要两次访问内存位置
    第一次访问内存是获取到物理地址PA
    第二次访问地址是获取PA中的数据

  • 为了提高获取数据的速率,我们引入了快表——将经常使用的页表项放在联想存储器(即快表),它通常比内存块5倍以上

  • 效率计算方法

记快表查找时间为λ,实际物理内存访问所需时间为t,内存有效访问时间为EAT,则有效范围时间EAT计算方法如下:

  • 被访问页在内存,对应页表项在在快表:
    EAT= λ+t
  • 被访问页在内存,对应页表项不在快表:
    快表、主存页表同时查找:EAT= λ+t +t
    以上 快表命中率为h,页表、快表查找同时进行:
    EAT=(1-h)[2 (λ+t)] +h(λ+t)

四、空闲页面管理
操作系统 分页存储_第5张图片

五、总结分页存储管理的碎片问题

  • 结论:分页存储管理是不会产生外部碎片的,但是会产生内部碎片,解释如下:
    • 明显看到,分页存储管理下,内存空间会被划分为等长的内存块,而一个程序或者作业也会被划分为和内存块等长若干的块,称为页或者页面,一个页面的存储是刚好可以满足内存的一个内存块,所以分页存储是不会产生外部碎片的
    • 但是不是每一个进程或者作业都刚好可切分成若干块满足内存块大小的页面,比如说内存块大小为4KB,那么如果一个进程为7KB,那么它最后会被切分为一个4KB和一个3KB的两个页面,存储在内存的两个存储块中,很明显最后一个存储块是不能完全把内存块的空间用完的,所以说分页存储管理是会产生内部碎片的。

你可能感兴趣的:(操作系统,java,网络,开发语言)