非连续分配方式根据分区的大小是否固定分为分页存储管理方式和分段存储管理方式。在分页存储管理方式中,根据允许作业时是否要把作业的所有页面都调入内存才能运行分为基本分页存储管理方式和请求分页存储管理方式。
- 0. 分类
- 1. 基本分页存储管理方式



配置页表后,进程执行时,通过查找该表,即可找到每页在内存中的物理块号。
系统中设置的页表寄存器(PTR),存放页表在内存的起始地址F和页表长度M。进程未执行时页表的始址和长度存放在进程控制块(PCB)中;进程执行时,才放入页表寄存器(PTR)中。整个地址变换过程由硬件自动完成。页式管理中地址空间是一维的。

- (0)前言
- 引入分页的目的:为了尽量避免碎片的产生。(固定分区会产生内部碎片、动态分区会产生外部碎片) 采用分页管理后不会产生外部碎片,每个进程平均只产生半个块大小的内部碎片(也称业内碎片)。
- 分页的思想:把内存空间划分为大小相等且固定的块,块相对较小,作为内存的基本单位。每个进程也以块为单位进行划分,进程在执行时,也以块为单位申请内存中的块空间。
- (1)分页存储的几个基本概念
- ①页面和页面大小
- 页(Page):进程中的块称为页。
- 页框(Page Frame):内存中的块称为页框。 进程执行时申请内存空间,即页面分配可用页框,页和页框一一对应。
- 块(Block):外存也以同样的单位划分,直接称为块。
- 页面大小:为了方便地址转换,页面大小应是2的整数幂。页面大小要适中。
- 页面太小:造成进程的页面数过多,这样页表就会过长,占用大量内存;而且会增加硬件地址转换的开销,降低页面换入/换出的效率。
- 页面过大:使业内碎片增多,降低内存的利用率。
- ②地址结构 注意:地址结构决定了虚拟内存的寻址空间有多大。
- 分页存储管理的逻辑地址结构
- ③页表
- 页表的组成:页表项。页表项的组成如下:
- 页表项的作用:找到该页在内存中的位置。
- 页表项与地址结构的区别:
- 都由两部分组成;
- 第一部分都是页号;
- 页表项的第二部分是物理内存中的块号,地址结构中的第二部分是业内偏移;
- 页表项的第二部分与地址的第二部分共同组成物理地址。
- 页表的作用:实现从页号到物理块号的地址映射,页表一般存放在内存中。
- (2)基本地址变换机构
- 地址变换机构的作用:将逻辑地址转换为内存中的物理地址。地址变换借助于页表实现。
- 设页面大小为L,逻辑地址A到物理地址E的变换过程如下(逻辑地址、叶红、每页的长度都是十进制数):

- ①计算页号P(P=A/L,如5/2=2)和页内偏移量W(W=A%L,如5%2=1)。
- ②比较页号P和页表长度M,若P>=M,则产生越界中断,否则继续执行。
- ③页表中页号P对应的页表项地址 = 页表始址F + 页号P x 页表项长度,取出该页表项内容b,即为物理块号。 区分页表长度和页表项长度:页表长度指一共有多少页;页表项长度指页地址占多大的存储空间。
- ④计算逻辑地址E = b x L + W,用得到的物理地址E去访问内存。
- ⑤例题:若页面大小L为1KB,页号2对应的物理块为b=8,计算逻辑地址A=2500的物理地址E的过程如下: 页号P=A/L=2500/1KB=2500/1024=2;页内偏移量W=A%L=2500%1KB=2500%1024=452;逻辑地址E=b x L + W=8*1KB+452=8*1024+452=8644。
- 分页管理方式存在的两个主要问题:
- ①每次访存操作都需要进行逻辑地址到物理地址的转换,地址转换过程必须足够快,否则访存速度会降低。
- ②每个进程引入页表,用于存储映射机制,页表不能太大,否则内存的利用率会降低。
- (3)具有快表的地址变换机构
- 单纯的地址变换机构存在的问题:若页表全部放在内存中,则存取一个数据或一条指令需要至少两次访问内存,第一次是访问页表确定所取数据或指令的物理地址,第二次是根据该地址存取数据或指令。这种方法比通常执行指令速度慢了一半。解决方法是引入快表。
- 快表(又称相联存储器(TLB)):一个具有并行查找能力的高速缓冲存储器,用来存放当前访问的若干页表项,以加速地址变换的过程。与此对应,主存中的页表称为慢表。 快表的有效性基于著名的局部性原理。
- 具有快表的地址变换结构,地址的变换过程如下:先去快表找,若找到则取出对应页号同业内偏移量拼接形成物理地址,这样存取数据近一次访存就能实现;若未找到则访问主存中的页表,在读出页表后,同时将其存入快表以便以后可能的再次访问。若快表已满,按一定算法对旧的页表项进行替换。
- (4)两级页表
- 两次页表逻辑地址空间的格式
- 二级页表结构示意图

- 建立多级页表的目的:在于建立索引,以便不用浪费主存空间去存储无用的页表项,也不能盲目地顺序式查找页表项。
- 2. 基本分段存储管理方式

页式系统中,逻辑地址的页号和页内偏移量对用户是透明的。段式系统中,逻辑地址的段号和段内偏移量必须由用户显式提供,在高级程序设计语言中,这个工作由编译程序完成。

每个进程都有一张段表,其中每个段表项对应进程的一段,段表项记录该段在内存中的始址和长度。
- (0)前言
- 分页管理方式的目的:提供内存的利用率,提升计算机的性能,分页通过硬件机制实现,对用户完全透明。
- 分段管理方式的目的:考虑了用户和程序员,以满足方便编程、信息保护和共享、动态增长及动态链接等多方面的需要。
- (1)分段
- 分段:按照用户进程中的自然段划分逻辑空间。 例如,用户进程由主程序、两个子程序、栈和一段数据组成,则可用划分为5段,每段从0开始编址,并分配一段连续的地址空间。(要求段内连续,段间不要求连续,整个作业空间是二维的)
- 分段系统中的逻辑地址结构
- (2)段表
- 段表的组成:段表项。段表的内容如下:
- 段表的作用:用于实现从逻辑段到物理内存区的映射。
- (3)地址变换机构
- 地址变换机构的作用:实现进程从逻辑地址到物理地址的变换功能。 系统中设置的段表寄存器,用于存放段表始址F和段表长度M。
- 从逻辑地址A到物理地址E之间的地址变换过程如下:

- ①从逻辑地址A中取出前几位为段号S,后几位为段内偏移量W。 注意,段式存储管理的题目中,逻辑地址以二进制给出;页式存储管理的题目中,逻辑地址以十进制给出。但具体问题具体分析。
- ②比较段号S和段表长度M,若S>=M,则产生越界中断,否则继续执行。
- ③段表中段号S对应的段表项地址=段表始址F + 段号S x 段表项长度。取出该段表项的前几位得到段长C。若段内偏移量>=C,则产生越界中断,否则继续执行。 段表项实际只有两部分,前几位是段长,后几位是始址。
- ④取出段表项中该段的始址b,计算物理地址E=b+W,用得到的物理地址E去访问内存。
- (4)段的共享与保护
- 段的共享:在段式系统中,通过两个作业的段表中相应表项指向被共享的段的同一个物理副本来实现的。 注意:当一个作业正在从共享段读取数据时,必须防止另一个作业修改此共享段中的数据。不能修改的代码称为纯代码或可重入代码(它不属于临界资源),这样的代码和不能修改的数据可以共享,可修改的代码和数据不能共享。
- 段的保护: 注意:页式管理可以根据给出的一个整数确定对应的物理地址,但段式管理不能,因为段的长度不固定,页面大小是固定的,所以必须给出段号和段内偏移,因此段式管理的地址空间是二维的。
- 一种是存取控制保护;
- 另一种是地址越界保护。 地址越界保护将段表寄存器中的段表长度与逻辑地址中的段号进行比较,若段号大于段表长度,则产生越界中断;再将段表项的段长和逻辑地址中的段内偏移进行比较,若段内偏移大于段长,页号产生越界中断。注意:分页管理中的地址越界保护只需要判断页号是否越界,页内偏移是不可能越界的。
- 3. 段页式管理方式
段页式管理的地址空间是二维的。

进行一次访问需要三次访问主存,可以使用快表技术加快查找速度,其关键字由段号、页号组成,值是对应的块号和保护码。
- 引入:页式存储管理提供了内存利用率,段式存储管理反映程序的逻辑结构有利于段的共享,将这两种存储管理方法结合起来就是段页式存储管理方式。
- 段页式管理:在段页式系统中,作业的地址空间被分成若干逻辑段,然后将每个段分成若干固定大小的页。对内存空间的管理仍然和页式管理一样。

- 段页式系统的逻辑地址结构:
- 段表与页表:为了实现地址变换,系统为每个进程建立一张段表,每个分段建立一张页表。(注意:在一个进程中,段表只有一个,而页表可能有多个) 段表寄存器和页表寄存器的作用都有两个:一个是在段表或页表寻址;而是判断是否越界。
- 地址变换机构:进行地址变换时,首先通过段表查到页表始址,然后通过页表找到块号,最后形成物理地址。
