操作系统_离散分配存储管理方式

目录

概述

一、分页存储管理方式

1,设计思想概述

 

2,页面大小

3,页表

4,地址机构

5,地址重定位

指令跨页怎么办?

6,地址变换机构

性能问题:

解决办法: 快表

7,页表的存储问题

我们可以采用这样两个方法来解决这一问题:

这里介绍一下方法一:离散分配方式——多级页表

二、分段存储管理方式

1,分段管理方式的引入

2,分段

3,地址结构

4,段表

5,地址变换机构

6,分段与分页的区别

三、段页式存储管理方式

1,基本思想

2,地址结构

3,段表与页表

4,地址变化机构


概述

为进程分配内存空间的两个基本原则——出于直觉:
(1)位置:为程序分配连续的内存空间,亦即按顺序存储在内存中: 
(2)尺寸:按程序的大小来确定所分配内存空间的大小;

连续分配方式会形成许多“碎片”,虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。如果允许将一个进程直接分散地装入到许多不相邻接的分区中, 便可充分地利用内存空间,而无须再进行“紧凑”。基于这一思想而产生了离散分配方式。根据在离散分配时所分配地址空间的基本单位的不同,又可将离散分配分为以下三种:分段、分页、段页式存储管理方式。

一、分页存储管理方式

1,设计思想概述

分页存储管理将进程逻辑地址空间分成若干个页,并为各页加以编号,从0开始,如第0页、第1页等。相应地,也把内存物理地址空间分成若干个块(页框),同样也为它们加以编号,如0#块、1#块等等。在为进程分配内存时,以块为单位,将进程中的若干个页分别装入到多个可以不相邻接的物理块中。由于进程的最后一页经 常装不满一块,而形成了不可利用的碎片,称之为“页内碎片”。

Windows系统使用此方法。

操作系统_离散分配存储管理方式

2,页面大小

页面过小:虽然一方面可以减小内存碎片,起到减少内存碎片总空间的作用,有利于内存利用率的提高,但另一方面却会造成每个进程占用较多的页面,从而导致进程的页表过长,占用大量内存。此外,还会降低页面换进换出的效率。

页面过大:虽然可以减少页表的长度,提高页面换进换出的速度,但却又会使页内碎片增大。因此,页面的大小应选择适中,且页面大小应是2的幂,通常为1 KB~8 KB。
 

3,页表

在分页系统中,允许将进程的各个页离散地存储在内存的任一物理块中,为保证进程仍然能够正确地运行,即能在内存中找到每个页面所对应的物理块,系统又为每个进程建立了一张页面映像表,简称页表。在进程地址空间内的所有页(0~n),依次在页表中有一页表项,其中记录了相应页在内存中对应的物理块号。在配置了页表后,进程执行时,通过查找该表,即可找到每页在内存中的物理块号。可见,页表的作用是实现从页号到物理块号的地址映射。

即使在简单的分页系统中,也常在页表的表项中设置一存取控制字段,用于对该存储块中的内容加以保护。当存取控制字段仅有一位时,可用来规定该存储块中的内容是允许读/写还是只读;若存取控制字段为二位,则可规定为读/写、只读和只执行等存取方式。如果有一进程试图去写一个只允许读的存储块时,将引起操作系统的一次中断。如果要利用分页系统去实现虚拟存储器,则还须增设一个数据项

操作系统_离散分配存储管理方式

页表描述

  • 以数组形式存放至内存中;(进程开始时,大小就已经固定)
  • 页表大小不固定,故不存放在PCB中,只是在PCB中记录页表起始地址;

页表的作用:分页系统的核心数据结构

  • 记录程序各页面所在的页框位置;
  • 支持进行地址重定位;
  • 实现页面访问控制;(地址结构中存取控制字段,但有时一个页面中数据和程序混合存放,而存取控制类型唯一,这也是分页存储的缺点)
  • 存储保护:限制程序在操作系统指定的内存区域内运行。(页表长度寄存器)
     

4,地址机构

操作系统_离散分配存储管理方式

5,地址重定位

操作系统_离散分配存储管理方式

操作系统_离散分配存储管理方式

指令跨页怎么办?

PC+地址重定位

PC指向(逻辑地址中的)下一条指令的地址,每次取出一个字节,并对其进行地址重定位。

如图,一条多字节指令跨1-2两个页面,PC先指向页面1中的指令,进行地址重定位,并将物理地址放入内存,然后PC加一,到达页面2,接着进行地址重定位......。这样便解决了指令跨页的问题。

操作系统_离散分配存储管理方式

6,地址变换机构

操作系统调度某个进程到CPU上执行时,需要先布置CPU现场(包括通用寄存器设置,以及PCB中页表地址寄存器和页表长度寄存器)

操作系统_离散分配存储管理方式

性能问题:

访问1次内存变量,涉及2次地址访问:页表+变量(访问内存中的页表,进而获得内存地址;访问内存地址,进而获得变量)

解决办法: 快表

  • 设置在CPU内 部;
  • 具有并行查找能力;
  • 暂存当前正在使用的页表项;
  • 尺寸:16-512。可达到90%以上命中率
  • 别名:联想存储器(相联存储器) ( associative memory),Intel术语: TLB( Translation lookaside buffers )
     

操作系统_离散分配存储管理方式

7,页表的存储问题

现代的大多数计算机系统都支持非常大的逻辑地址空间(操作系统_离散分配存储管理方式 B~操作系统_离散分配存储管理方式 B)。在这样的环境下,页表就变得非常大,要占用相当大的内存空间。
例如,对于一个具有32位逻辑地址空间的分页系统,规定页面大小为4KB即操作系统_离散分配存储管理方式B,页表项占4字节,故一个页面可以存放1K个页表项。然而当一个进程所需页表项超过1K时(当页表项不超过1K时,一个页框可以存放所有页表项,故只需将页框号存放至PCB中即可),便无法满足需求。

操作系统_离散分配存储管理方式

我们可以采用这样两个方法来解决这一问题:

①对于页表所需的内存空间,可采用离散分配方式,以解决难以找到一块连续的大内存空间的问题;
②只将当前需要的部分页表项调入内存,其余的页表项仍驻留在磁盘上,需要时再调入。
 

这里介绍一下方法一:离散分配方式——多级页表

仍然假设一个页框4KB,每个页表项占4字节,一个页框可容纳1024个页表项。由于页表的大小超过一个页框的大小,所以可以将页表分为若干个小的页表,每个1024个连续页表项占一个页框,并设置外部页表,来指向这些页表(即对页表项的存储也使用分页思想)。

此时地址结构变为:

操作系统_离散分配存储管理方式

外层页号确定页表在哪个页框(物理块),找到页框后,再对应页号找到变量在哪个页框,最后根据这个页框+偏移量,找到变量的物理地址。

操作系统_离散分配存储管理方式

 

二、分段存储管理方式

1,分段管理方式的引入

为什么要引入分段存储管理方式,可从下面两个方面说明:

  • 一方面是由于通常的程序都可分为若干个段,如主程序段、子程序段A、子程序段B、...数据段以及栈段等,每个段大多是一个相对独立的逻辑单位;
  • 另一方面,实现和满足信息共享、信息保护、动态链接以及信息的动态增长等需要,也都是以段为基本单位的。更具体地说,分段存储管理方式更符合用户和程序员多方面的需要。(分页系统中,4K的空间数据、程序混合存放,且只有一种存取方式,不方便进行信息共享)

2,分段

在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。(这些分段在内存中的分配类似于动态分区分配的思想,会产生零头)

 

例如,有主程序段MAIN、子程序段X、数据段D及栈段S等,如图4-19 所示。每个段都有自己的名字。为了实现简单起见,通常可用一个段号来代替段名,每个段都从0开始编址,并采用一段连续的地址空间。段的长度由相应的逻辑信息组的长度决定,因此各段的长度并不相等。

整个作业的地址空间由于被分成多个段,所以呈现出二维特性,亦即,每个段既包含了一部分地址空间,又标识了逻辑关系。其逻辑地址由段号(段名)和段内地址所组成。
 

  • 分段是一段有意义的信息集合;
  • 分段的划分由程序员完成;
  • 分段的长度不定; 
  • 指令不存在跨分段情况;
     

3,地址结构

包括段号和段地址。

在下图地址结构中,允许-一个作业最长有64K个段,每个段的最大长度为64 KB。

操作系统_离散分配存储管理方式

操作系统_离散分配存储管理方式

4,段表

在前面所介绍的动态分区分配方式中,系统为整个进程分配一个 连续的内存空间。 

而在分段式存储管理系统中,则是为每个分段分配一个连续的分区。

进程中的各个段,可以离散地装入内存中不同的分区中。为保证程序能正常运行,就必须能从物理内存中找出每个逻辑段所对应的位置。为此,在系统中,类似于分页系统,需为每个进程建立一张段映射表,简称“段表”。每个段在表中占有一一个表项,其中记录了该段在内存中的起始地址(又称为“基址”)和段的长度。

段表可以存放在一组寄存器中,以利于提高地址转换速度。但更常见的方法是将段表放在内存中。在配置了段表后,执行中的进程可通过查找段表,找到每个段所对应的内存区。

可见,段表是用于实现从逻辑段到物理内存区的映射的。
操作系统_离散分配存储管理方式

段表的作用:分段系统的核心数据结构

  • 记录程序各分段所在的内存位置;
  • 支持进行地址重定位;
  • 实现分段访问控制;
  • 存储保护:限制程序在操作系统指定的内存区域内运行。

 

5,地址变换机构

为了实现进程从逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段表始址段表长度TL

在进行地址变换时,系统将逻辑地址中的段号与段表长度TL进行比较。若S>TL,表示段号太大,是访问越界,于是产生越界中断信号。若未越界,则根据段表的始址和该段的段号,计算出该段对应段表项的位置,从中读出该段在内存的起始地址。

然后,再检查段内地址d是否超过该段的段长SL。若超过,即d>SL,同样发出越界中断信号。若未越界,则将该段的基址d与段内地址相加,即可得到要访问的内存物理地址。
 

操作系统_离散分配存储管理方式

操作系统_离散分配存储管理方式

6,分段与分页的区别

操作系统_离散分配存储管理方式

 

三、段页式存储管理方式

1,基本思想

分页系统:负责解决主存分配问题,内存按页分配; 

分段系统:负责解决逻辑地址空间管理问题,按段为应用程序分配逻辑地址空间;
 

操作系统_离散分配存储管理方式

2,地址结构

操作系统_离散分配存储管理方式

3,段表与页表

在段页式系统中,为了实现从逻辑地址到物理地址的变换,系统中需要同时配置段表和页表。段表的内容与分段系统略有不同,它不再是内存始址和段长,而是页表始址和页表长度

操作系统_离散分配存储管理方式

4,地址变化机构

在段页式系统中,为了获得一条指令或数据,须三次访问内存。第一次访问是访问内存中的段表,从中取得页表始址:第二次访问是访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址起形成指令或数据的物理地址: 第三次访问才 是真正从第二次访问所得的地址中取出指令或数据。

操作系统_离散分配存储管理方式