操作系统(三十七)基本分页存储的概念

3.6 基本分页存储的概念

介绍完连续分配管理方式后我们再来介绍非连续分配管理方式,非连续管理方式主要有三种:基本分页存储管理、基本分段存储管理、段页式存储管理。这节主要介绍分页存储管理方式。

目录

3.6 基本分页存储的概念

3.6.1 分页存储

3.6.2 页表

3.6.3 页表的大小

3.6.4 通过页表实现逻辑地址与物理地址的转换


3.6.1 分页存储

  将内存空间分为一个个大小相等的分区,每个分区就是一个“页框”(页框=页帧=内存块=物理块=物理页面)。每个页框有一个编号,即“页框号”(页框号=页帧号=内存块号=物理块号=物理页号),页框号从0开始

  将进程的逻辑地址空间也分为与页框大小相等的一个个部分,每个部分称为一个“页”或“页面” 。每个页面也有一个编号,即“页号”,页号也是从0开始。
  易混辨析:页、页面 & 页框、页帧、物理页页号、页面号 vs 页框号、页帧号、物理页号
 
操作系统以页框为单位为各个进程分配内存空间。进程的每个页面分别放入一个页框中。也就是说,进程的页面与内存的页
框有一一对应的关系。各个页面不必连续存放,可以放到不相邻的各个页框中。(注:页框不能太大,否则可能产生过大的内部碎片造成浪费)

3.6.2 页表

  在分页系统中,允许将进程的各个页离散地存储在内存不同的物理块中,但系统应能保证进程的正确运行,即能在内存中找到每个页面所对应的物理块。为此,系统又为每个进程建立了一张页面映像表,简称页表
操作系统(三十七)基本分页存储的概念
  
  从上面这张示意图我们可以看出: 一个进程对应一张页表、进程的每个页面对应一个页表项每个页表项由“页号”和“块号”组成页表记录进程页面和实际存放的内存块之间的映射关系、每个页表项的长度是相同的。
  那么问题来了,每个页表项的长度是多少呢以及如何通过页表实现逻辑地址与物理地址的转换呢?

3.6.3 页表的大小

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

  内存块大小=页面大小=4KB=操作系统(三十七)基本分页存储的概念B则4GB/操作系统(三十七)基本分页存储的概念B=操作系统(三十七)基本分页存储的概念个内存块。所以要想表示操作系统(三十七)基本分页存储的概念个内存块那么内存块的地址就是0-操作系统(三十七)基本分页存储的概念-1即需要20bit来表示。又1B=8bit所以20bit至少3B来表示,因此我们得到需要3B来表示块号。在页表中页表项是连续存放的,所页号只是一个虚拟概念并不会占用存储空间(类似于数组下标),如果一个进程有(n+1)(从0页到n页)页那么就需要3*(n+1)B来存储这个页表。

  注意这只是逻辑地址,要想计算物理地址还需要加上起始的基地址。

3.6.4 通过页表实现逻辑地址与物理地址的转换

  在上节讲装入方式时我们提到动态重定位通过重定位寄存器可以实现装入时的逻辑地址与物理地址的转换。在这里页表就类似于重定位寄存器起到了中介的作用:逻辑地址A 对应的物理地址 = P号页面在内存中的起始地址+页内偏移量W

  在某计算机系统中,页面大小是50B。某进程逻辑地址空间大小为200B,则逻辑地址 110 对应的页号、页内偏移量是多少?

由题意可知逻辑地址被划分为如下四部分:

操作系统(三十七)基本分页存储的概念

页号以及页内偏移量的计算如下:页号 = 逻辑地址 / 页面长度     页内偏移量 = 逻辑地址 % 页面长度

则本题中       页号 = 110 / 50 = 2       页内偏移量 = 110 % 50 = 10

按照上述的计算方式我们不难总结出一个规律:如果每个页面大小为 2KB,用二进制数表示逻辑地址,则末尾 K 位即为页内偏移量,其余部分就是页号。这也是计算机用2的整数次幂来表示页面大小的原因。如果遇到一些奇奇怪怪的数据我们还是按照公式计算页号以及页内偏移量。