江小南

V1

2023/05/04阅读:43主题:萌绿

【操作系统】内存管理——分页存储的概念、基本地址变换机构、快表

1. 分页存储管理的基本概念

连续分配:为用户进程分配的必须是一个连续的内存空间。 非连续分配:为用户进程分配的可以是一些分散的内存空间。

1. 什么是分页存储

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

进程的逻辑地址空间也分为与页框大小相等的一个个部分,每个部分称为一个“”或者“页面”。每个页面也有一个编号,即“页号”,页号也是从0开始

操作系统也以页框为单位为各个进程分配内存空间。进程的每个页面分别放入一个页框中。也就是说,进程的页面与内存的页框一一对应的关系。

各个页面不必连续存放,可以放到不相邻的各个页框中。

注:分页存储有可能产生内部碎片(最后一个页框),因此页框不能太大,否则可能产生过大的内部碎片造成浪费。

2. 页表

为了能知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表。(页表通常存在PCB中)

  1. 一个进程对应一张页表。
  2. 进程的每个页面对应一个页表项。
  3. 每个页表项由“页号”和“块号”组成。
  4. 页表记录进程页面和实际存放的内存块之间的映射关系
  5. 每个页表项的长度是相同的。
思考1:

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

分析 注意:页表项是连续存放的,因此页号可以是隐含的,不占存储空间(类比数组)。每个页表项占3B,存储整个页表至少需要3*(n+1)B

说明:页表记录的只是内存块号,而不是内存的起始地址。J号内存块的起始地址=J*内存块大小。

思考2:

将进程地址空间分页之后,操作系统如何实现逻辑地址到物理地址的转换?

特点:虽然进程的各个页面是离散存放的,但是页面内部是连续存放的。

如果要访问逻辑地址A,则

  1. 确定逻辑地址A对应的“页号”P。
  2. 找到P号页面在内存中的起始地址(需要查页表)。
  3. 确定逻辑地址A的“页内偏移量”W。

逻辑地址A对应的物理地址=P号页面在内存中的起始地址+页内偏移量W。

思考:如何确定一个逻辑地址对应的页号、页内偏移量?

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

计算 在计算机内部,地址是用二进制表示的,如果页面大小刚好是2的整数幂,则计算机硬件可以很快速的把逻辑地址拆分成(页号、页内偏移量)。

2. 基本地址变换机构

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

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

页面大小是2的整数幂。设页面大小为L,逻辑地址A到物理地址E的变换过程如下: 示例: 在分页存储管理(页式管理)的系统中,只要确定了每个页面的大小,逻辑地址结构就确定了。因此,页式管理中地址是一维的。即,只要给出一个逻辑地址,系统就可以自动地算出页号、页内偏移量两个部分,而不需要显式地告诉系统这个逻辑地址中,页内偏移量占多少位。

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

快表,又称联想寄存器(TLB,translation lookaside buffer ),是一种访问速度比内存快很多的高速缓存(TLB不是内存!),用来存放最近访问的页表项的副本,可以加速地址变换的速度。与此对应,内存中的页表常称为慢表

①CPU给出逻辑地址,由某个硬件算得页号、页内偏移量,将页号与快表中的所有页号进行比较。

②如果找到匹配的页号,说明要访问的页表项在快表的副本中,则直接从中取出该页对应的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后,访问该物理地址对应的内存单元。因此,若快表命中,则访问某个逻辑地址仅需要一次访存即可。

③如果没有找到匹配的页号,则需要访问内存中的页表,找到对应的页表项,得到页面存放的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后,访问该物理地址对应的内存单元。因此,若快表未命中,则访问某个逻辑地址需要两次访存注意:在找到页表项后,应同时将其存入快表,以便后面可能得再次访问。但若快表已满,则必须按照一定的算法对旧的页表项进行替换)

4. 小结

分类:

后端

标签:

操作系统

作者介绍

江小南
V1