操作系统5——存储器管理

旧巷老猫 提交于 2020-02-03 02:27:01

存储器管理

目录

存储器管理

1、程序的装入与链接

(1)程序的装入

(2)程序的连接

2、连续分配存储管理方式

(1)单一连续分配

(2)固定分区分配

(3)动态分区分配

(4)可重定位分区分配

(5)对换

3、分页和分段方式及其概述

(1)为什么要用分页和分段方式?

(2)分段与分页的去区别

4、基本分页存储管理方式

(1)页面与页表

(2)页表

(3)地址变换

(4)地址变换机构

(5)具有块表的地址变换机构

(6)两级页表

(7)反置页表

5、基本分段存储管理方式

(1)分段与分页的区别:

(2)分段的基本原理

(3)段表

(4)段表访问数据的过程

6、基本段页式存储管理方式


本章知识点流程图:

层次越高,越靠近CPU,访问速度越快,价格越高。

内存掉电之后信息不保存,除非已经写入到外存中。

1、程序的装入与链接

(1)程序的装入

多道程序环境下,程序要运行必须为之创建进程,而创建进程的第一件事就是分配内存。

将一个装入模块装入内存(第三步开始)时,有三种装入方式:

重定位:把在装入时对目标程序中指令和数据的地址修改过程称为重定位。

(2)程序的连接

 

2、连续分配存储管理方式

连续分配方式为一个用户程序分配一个连续的内存空间

连续分配有以下几种:

(1)单一连续分配

即将内存分为系统区和用户区,整个内存的用户空间由该程序独占。

优点:易于管理

缺点:对要求内存空间少的程序,造成内存浪费.

(2)固定分区分配

固定分区分配是最简单的可运行多道程序的存储管理方式;内存用户空间划分为若干个固定大小的区域,每个分区中只装入一道作业;

固定分区分配的缺点是:并发进程数受分区个数的制约!

 

划分分区的方法

分区大小相等

方便实用

 

缺乏灵活性。可能造成空间浪费和装不下大的程序。

分区大小不相等

灵活度高

 

(3)动态分区分配

根据进程的实际需要,动态地为之分配内存空间;

需要设置空闲分区表和空闲分区链:

 分配算法:需要选择合适的内存动态分配算法,按照算法从空闲分区(链)中选出一个分区分配给该作业。

a. 基于顺序搜索的动态分区分配算法

算法

思想

优点

缺点

效果

首次适应算法FF

分配时从链首开始查找,找到一个大小可满足的空闲分区,划出一块给程序

简单;优先利用低地址空闲区,保留高地址大空闲区

会造成在低地址部分很多难以利用的小空闲分区,查找效率低

最好、最快

循环首次适应算法

每次分配时从上一次找到空闲分区的下一个空闲区开始查找

减少查找空闲分区开销,空闲分区分布更均匀

缺乏大的空闲区

其次好和其次快的

最佳适应算法

空闲区按容量由小到大排序

每次分配时,把能满足要求、又是最小的分区分配给作业

不缺乏大的空闲区

会在存储器中留直许多难以利用的小分区——“零头(或碎片)”;查找效率低

最差的(每次分配后剩下小碎片,难再分,不得不经常压缩内存,反而浪费CPU

最坏适应算法

空闲区按容量由大到小排序

每次分配时,把能满足要求、又是最大的分区分配给作业

会在存储器中留直许多难以利用的小分区——“零头(或碎片)”;查找效率低

缺乏大的空闲区

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b. 基于索引搜索的动态分区分配算法

算法

思想

优点

缺点

快速适应算法

将空闲分区根据容量进行分类,对于每一类,单独设立一个空闲分区链表;分级索引

查找效率高,满足大空间的需求

分区合并算法较复杂

伙伴系统算法

 

 

 

哈希算法

 

 

 

c. 动态分区的优缺点

优点: 便于动态申请内存;便于共享内存;便于动态链接

缺点:碎片问题(外碎片),要求连续的内存空间,内存利用率不高,受实际内存容量限制

(4)可重定位分区分配

1. 对于碎片的处理方式

紧凑技术:通过在内存移动程序,将所有小的空闲区域合并为大的空闲区域.

(紧缩技术,紧致技术,浮动技术,搬家技术)

问题:开销大;移动时机

2. 动态重定位

在连续分配存在方式中,程序载入必须有足够大的连续空间才能分配。

动态重定位分区分配算法,与动态分区分配算法基本上相同;

差别仅在于:在这种分配算法中,增加了紧凑功能;

3.  优缺点

优点:解决了可变分区分配所引入的“外零头”问题。消除内存碎片,提高内存利用率。

缺点:提高硬件成本,紧凑时花费CPU时间。

(5)对换

  1. 所谓“对换”,是指把内存中暂时不能运行的进程或者暂时不用的程序和数据,调出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序和数据,调入内存。对换是提高内存利用率的有效措施。
  2. 对换是以整个进程为单位,称之为整体对换进程对换,解决内存紧张问题;
  3. 对换是以为单位,则分别称之为页面对换分段对换,又统称为部分对换
  4. 为了实现进程对换,系统必须能实现以下三方面的功能:
  • (1)对换空间的管理
  • (2)进程的换出:选择处于“阻塞”状态且优先级最低的进程作为换出进程;
  • (3)进程的换入就绪状态但已换出的进程,中换出时间最久的进程作为换入进程;
  •  

3、分页和分段方式及其概述

(1)为什么要用分页和分段方式?

因为连续分配地址空间会形成许多碎片,虽然有“紧凑”的方法可以拼接碎片,但是开销很大。所以考虑将进程分散的装入不相邻的分区中,充分用空间。

分页存储管理:将用户程序分成若干大小固定的区域成为页面,(典型为1KB大小),相应的也将内存空间分为若干和页块大小相同的物理块,用户程序可以放入任意一物理块。

分段存储管理:为满足用户要求,将程序分为大小不同的若干段,每一段定义相对完整的信息,在内存分配时以段为单位,段在内存中可以不邻接。

段页式存储管理:先将用户程序分为若干个段,再将每个段分为若干页,并为每一个段命名。

2)分段与分页的去区别

分页

分段

页的信息是物理单位,分页实现离散分配方式

段是信息的逻辑单位,包含一组完整的信息

消减外零头,提高内存利用率,对用户不可见

为了便于满足用户的需求

页面大小固定,由系统决定

段的长度不固定,用户决定

分页的用户程序的地址空间是一维的

分段的用户程序的地址空间是二维的

4、基本分页存储管理方式

定义:分页存储管理的方式中,不具备页面对换功能,则基本的(纯)分页管理方式,它不具有支持实现虚拟存储器的功能,它要求把每个作业全部装入内存后方能运行。

(1)页面与页表

分页:把用户程序按逻辑页划分成大小相等的部分,称为页或页面。从0开始编制页号,页内地址是相对于0编址。

碎片,进程划分到最后一页没有填满整个页,形成不可利用的碎片

物理块:内存空间分为若干物理块,块和页的大小相等;

页面,将进程逻辑地址空间分成若干页,编号:0,1,2…;

页面大小:页面的大小应选择的适中,且页面大小应是2的幂,通常为

1KB~8 KB,页面过大,减少页表长度,导致碎片增大;页面过小造成程序占用较多页面,导致页表过长,占用大量内存。

(2)页表

用户程序中的逻辑地址——主存中的物理地址,对应关系表。

(3)地址变换

(4)地址变换机构

地址变换机构的作用是,在进程运行期间,实现从逻辑地址到物理地址的转换,页表的功能是由一组专门的寄存器来实现的,一个页表项用一个寄存器。

这种方式,由于页表是存放在内存中的,这使CPU每次要存取一个数据时,都要两次访问内存。  第一次 访问内存中的页表。  第二次 获得所需数据。

进程访问某个逻辑地址的数据过程如下:

  1. 分页地址机构自动将有效地址分为页号和页内地址(逻辑地址);
  2. 将页号与页表长度进行比较,若大于页表长度则不存在这一页产生中断;
  3. 若为出现错误则将页表起始地址与页表*页表长度的值相加,得到该表项在页表中的位置,
  4. 以页号为索引去检索页表,得到对应的物理块号,将之装入物理寄存器中
  5. 与此同时再将第一步中的(逻辑地址)中的页内地址送入物理地址寄存器的块内地址的地址字段中。

(5)具有块表的地址变换机构

为提高地址变换速度,在地址变换机构中增设一个具有并行查询能力的高速缓冲寄存器,又称为“联想寄存器”或“快表”。

由于成本关系,块表不可能很大,快表通常可存放16-512个表项,如果设计得当,命中率可达90%以上。通常可以把循环指令中的页放到快表中(访问次数多)

在查找访问对于逻辑数据时,一部分直接查找快表,一部分按照页表寄存器查找,可以有效增加效率。

快表相当于只需要一次访问就可以获得数据,查页表则需要两次访问

(6)两级页表

二级页表需要三次访问才能获取数据。

(7)反置页表

5、基本分段存储管理方式

(1)分段与分页的区别:

  1. 分页存储管理的主要目的是为了提高内存利用率;
  2. 分段存储管理的主要目的是为了满足用户在编程和使用上的要求;
  3. 页是信息的物理单位,段则是信息的逻辑单位;
  4. 页的大小固定且由系统决定,而段的长度却不固定,决定于用户所编写的程序;
  5. 分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址; 而分段的作业地址空间则是二维的,程序员在标识一个地址时,既需给出段名, 又需给出段内地址。

(2)分段的基本原理

(3)段表

  1. 在分段式存储管理系统中,为每个分段分配一个连续的分区,而进程中的各个段可以离散地移入内存中的不同的分区
  2. 系统为每个进程建立一张段映射表,简称为“段表”
  3. 每个段在段表中占一个表项,其中记录了该段在内存中的起始地址(又称为“基址”)和段的长度

(4)段表访问数据的过程

(重点)

加入快表的分段访问数据的过程:

分段存储管理的特点

  1. 分段存储管理在:方便编程,信息共享,信息保护,动态增长,动态链接
  2. 可重入代码又称为“纯代码”是一种允许多个进程同时访问的代码。可重入代码是一种不允许任何进程对它进行修改的代码
  3. 将可重入代码写成单独的段项就可以实现共享。
  4. 分段存储管理也会产生碎片,因为段还需要连续的存储空间。

 

6、基本段页式存储管理方式

  • 是分段和分页原理的结合。
  • 将用户程序分成若干个段,再把每一段分成若干个页,并为每一段赋予一个段名。
  • 段页式管理中,地址机构由段号、段内页号及页内地址三部分所组成。

 在段页式系统中,需三次访问内存。

第一次访问,是访问内存中的段表。

第二次访问,是访问内存中的页表。

第三次访问,才是真正从第二次访问所得的地址中,取出指令或数据。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!