操作系统——内存管理(非连续)

一、分页存储管理的基本概念
将内存空间分为一个个大小相等的分区(比如:每个分区4KB),每个分区就是一个页框或页帧或内存块或物理块。每个页框有一个编号,即页框号或内存块号或页帧号或物理块号,从0开始。

将用户进程的地址空间也分为与页框大小相等的一个个区域,称为页或页面。每个页面也有一个编号,即页号,页号也是从0开始。

注意:页框不能太大,否则可能产生过大的内部碎片

操作系统以页框为单位为各个进程分配内存空间。进程的每个页面分别放入一个页框中。也就是说,进程的页面与内存的页框有一一对应的关系。
各个页面不必连续存放,也不必按先后顺序来,可以放到不相邻的各个页框中。

s
如何实现逻辑地址与物理地址的转换:
在这里插入图片描述①要算出逻辑地址对应的页号
②通过页号找到对应物理地址的起始地址
③算出逻辑地址在页面内的偏移量
④物理地址 = 页面起始地址+ 页内偏移量

页号 = 逻辑地址 / 页面长度
页内偏移量=逻辑地址%页面长度
在这里插入图片描述
页表
为了能知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表
在这里插入图片描述
基本地址变换机构:
基本地址变换机构可以借助进程的页表将逻辑地址转换为物理地址。
通常会在一个系统中设置一个页表寄存器,存放页表在内存中的起始地址F和页表长度M。
进程未执行时,页表的始址和页表长度放在进程控制块(PCB)中,当进程被调度的时候,操作系统内核会把它们放在页表寄存器中。
在这里插入图片描述
具有块表的地址变换机构:

时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很可能再次执行了如果某个数据被访问过,不久后改数据很可能再次被访问。(因为程序中存在大量的循环)

空间局部性:一旦程序访问了某个存储单元,在不久后,其附近的存储单元也很有可能被访问。(这是因为很多数据在内存中是连续存放的)

快表,又称联想寄存器(TLB),是一种访问速度比内存快很多的高速缓冲存储器,用来存放当前访问的若干页表项,以加速地址变换的过程,内存中的页表常称为慢表。

在这里插入图片描述

引入快表后,地址的变换过程:
在这里插入图片描述
两级页表:
单级页表存在的问题:

  • 页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框。
  • 没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面。

为了避免页表占用过多的内存空间,可以将长长的页表进行分组,使每个内存块刚好可以放入一个分组,为离散分配的页表再建立一张页表,称为页目录表,或者外层页表或者顶层页表。
在这里插入图片描述

二、基本分段存储管理
进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名(在低级语言中,程序员使用段名来变成),每段从0开始编址。
内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各个段之间可以不相邻。
在这里插入图片描述

分段系统的逻辑地址结构由段号和端内地址所组成。如:

在这里插入图片描述
段号的位数决定了每个进程最多可以分几个段
段内地址位数决定了每个段的最大长度是多少

程序分多个段,各段离散地装入内存,为了保证程序能正常运行,就必须能从物理内存中找到各个逻辑段的存放位置。为此,需要为每个进程建立一张段表。
在这里插入图片描述

地址变换过程:
在这里插入图片描述

分段与分页的比较:
在这里插入图片描述
三、段页式管理方式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xiaowanziddd/article/details/125645598