操作系统概念(高等教育出版社,第七版)复习——第八章:内存管理

来源:互联网 发布:程序员学英语有用吗? 编辑:程序博客网 时间:2024/06/05 05:17

第八章 内存管理

基础知识

背景

基地址寄存器:含有最小的合法物理内存地址。

界限地址寄存器:决定了范围大小。

地址绑定(地址映射)

将指令与数据绑定到内存地址有以下几种情况:

编译时、加载时、执行时。

逻辑地址

CPU所生成的地址。

物理地址

内存单元看到的地址(即加载到内存地址寄存器中的地址)。

动态加载

一个子程序只有在调用时才被加载。目的是为了获得更好的内存空间使用率。

动态链接

类似于动态加载,只是这里不是将加载延迟到运行时,而是将链接延迟到运行时。

交换

进程需要在内存中以便执行。不过进程可以暂时从内存中交换到备份存储上,当需要再次执行时再调回到内存中。

连续内存分配

将用户区划分成多个分区,每个分区每个时刻运行一道程序。支持多道程序设计技术。

两种分区管理技术:

静态分区管理、动态分区管理。

固定分区分配

系统初始化时,系统将内存分成多个分区:

分区的数目固定,分区的大小固定,每个分区每个时刻只能运行一道程序。

固定分区表:

记录各分区的位置、大小及使用情况,用于系统对分区进行管理。

内碎片(内零头)

地址映射及存储保护:

使用Relocation register,limit register。

动态分区管理

基本思想:

系统初始化时,只划分成一个分区,内存“按需分配”。

分区表:

对已分配的分区进行管理

空闲分区表:

对空闲分区进行管理

分区分配算法:

First-fit, Best-fit, Worst-fit。

地址映射与存储保护:

使用Relocation register,limit register。

外碎片(零头外)

在可变分区管理里,可用内存区域称为孔。

新的孔与其他孔相邻,那么这些孔将被合并成大孔。

从一组可用孔中选取一个空闲孔的方法:

首次适应、最佳适应、最差适应。

首次适应

分配第一个足够大的孔

最佳适应

分配最小的足够大的孔

最差适应

分配最大的孔

碎片

首次适应与最佳适应可产生外部碎片、分页可产生内部碎片

分页(超级重要哦)

将物理内存分为固定大小的块,称为

将逻辑内存分为同样大小的块,成为

逻辑地址÷页面大小=页号……页偏移

基本思想:

内存分块(页框,frame),作业分页(page),页与页框大小相等。

内存分配以页为单位。

一个作业在内存中的各页面可以分配不相邻的页框,但一个页面在内存中是连续的(在一个页框中)。

逻辑地址的格式:页号,页内偏移量。

页表-页号与页框号的对应关系。

内碎片。

需要记录块(页框)的使用情况(已分配的、空闲的)-例如位示图。

地址变换机构(过程)。

存储保护:

页号越界检查(或设置相应的标志位(有效位))

共享页的访问权限

页面共享:

通过页表实现

转换表缓冲区(TLB)

类比cache,会同时与所有键进行比较(并行查找)。

地址越界检查

1、在页表中对应每一页设置一个valid/invalidbit,用于检测页号是否越界;

2、或者将页号(P)与页表长度(PTL)比较,如果P>=PTL,则产生地址越界中断。

<注>页内偏移量(d)不需检测是否地址越界;

共享页

如果代码是可重入代码(或称为纯代码),则可以共享。

可重入代码是不能自我修改的代码,它从不会在执行期间改变。

可共享页码代码的逻辑地址相同才能共享

页表结构

层次页表、哈希页表、反置页表

分段

分段和分页的主要区别

页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外碎片,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要;

段是信息的逻辑单位,它包含有一组其意义完整的信息。分段的目的是为了能更好地满足用户的需要。

页的大小固定且由系统决定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因为一个系统只有一种大小的页面;

段的长度不固定,决定于用户所编写的程序,通常由编译程序对源程序进行编译时,根据信息的性质来划分。

分页的作业地址空间是一维的,即单一的线性地址空间,程序员只须一个地址记忆符,即可表示一个地址;

分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。

课后作业

1.

外部碎片:总内存空间存在,以满足请求,但它不是连续的。

内部碎片:分配内存可能略大于请求内存,此大小差异是内存内部的分区,不被使用。

 

3.

首次适应算法:212K放到500K里,417K放到600K里,112K放到288K(500-212),426K等待。

最佳适应算法:212K放到300K里,417K放到500K里,112K放到200K,426K放到600K。

最差适应算法:212K放到600K里,417K放到500K里,112K放到388K(600-212),426K等待。

最佳适应算法内存利用率最高。

 

4.

a.连续内存分配:当没有足够的空间给程序去扩大它已分配的内存空间时,将要求重新分配整个程序。

b.纯分段:当没有足够的空间给程序去扩大它已分配的内存空间时,将要求重新分配整个程序。

c.纯分页:在没有要求程序地址空间再分配的方案下,新页增加的分配是可能的。

 

5.

连续内存分配会产生外部碎片,因为地址空间是被连续分配的,当旧进程结束,新进程初始化的时候,洞会扩大。连续内存分配也不允许进程共享代码,因为一个进程的虚拟内存段是不被允许闯入不连续的段的。

纯段式分配也会产生外部碎片,因为在物理内存中,一个进程的段是被连续放置的,以及当死进程的段被新进程的段所替代时,碎片也将会产生。然而,段式分配可以使进程共享代码;比如,两个不同的进程可以共享一个代码段,但是有不同的数据段。

纯页式分配不会产生外部碎片,但会产生内部碎片。如果一页没有被完全利用,它就会产生内部碎片并且会产生空间浪费。页式分配也允许进程共享代码。

 

6.

地址在页式分配系统上是一个逻辑页号和一个偏移量。在逻辑页号的基础上产生一个物理页号,物理页通过搜索表被找到。因为操作系统控制这张表的内容,只有在这些物理页被分配到进程中时,它可以限制一个进程的进入。一个进程想要分配一个它所不拥有的页是不可能的,因为这一页在页表中不存在。为了允许这样的进入,操作系统只简单的需要准许入口给无进程内存被加到进程页表中。当两个或多个进程需要交换数据时,这是十分有用的。——它们只是读和写相同的物理地址(可能在多样的物理地址中)。在进程内通信时,这是十分高效的。

 

9.

a.400毫秒:200毫秒访问页表,200毫秒访问内存。

b.0.75×200+0.25×400=250毫秒

 

12.

a.0430+219=649

b.2300+10=2310

c.500>100非法地址

d.1327+400=1727

e.122>96非法地址

 

13.

在某些情况下,分页的页表可以变得足够大,可以简化内存分配问题(确保全部可以分

配固定大小的页,而不是可变大小的块),确保当前未使用的部分页表可以交换。

思考题

1、几个地址及相应的地址空间概念

逻辑地址(相对地址、虚地址):编译及动态链接时使用的地址

物理地址(绝对地址、实地址):实际运行时使用的内存地址

 

2、静态链接与动态链接

静态链接:

运行之前完成连接,将所有的程序模块链接起来,形成一个可执行文件,   运行时直接装入内存;

链接及装入过程费时,有些用不到的模块不需要链接及装入;

不便于模块的升级;

运行速度快;

动态链接:

运行时仅链接所需要的模块;

运行调用时进行链接;

减少了链接需要的时间;

节省内存空间;

便于模块的升级、共享;

 

3、静态装入与动态装入

静态装入:

运行前装入所有模块;

装入时费时,浪费内存;

但管理简单,运行时速度快

动态装入:

运行时可只装入主控模块;

其他模块被调用时再装入,提高了内存的利用率,只有需要的模块才被 装入;

管理复杂,运行时速度降低

 

4、分区管理中的几个分区算法

静态分区管理

固定分区:数目固定、大小固定

动态分区管理

首次适应(first-fit):

分配第一个足够大的孔。查找可以从头开始,也可以从上次首次适  应结束时开始。一旦找到足够大的空闲孔,就可以停止。

最佳适应(best-fit):

分配最小的足够大的孔。必须查找整个列表,除非列表按大小排序。   这种方法可以产生最小剩余孔。(升序)

最差适应(worst-fit):

分配最大的孔。同样,必须查找整个列表,除非列表按大小排序。  这种方法可以产生最大剩余孔,该孔可能比最佳适应发放产生的较   小剩余孔更为有用。(降序)

 

5、Fragmentation

外碎片:内存空间被分为小片段,但不连续,无法分配

内碎片:分配内存大于使用内存,未被使用

 

6、分页、分段管理的基本思想

分页:

l  内存分块(页框,frame),作业分页(page),页与页框大小相等

内存分配以页为单位

l  一个作业在内存中的各页面可以分配不相邻的页框,但一个页面在内存中是连续的(在一个页框中)

l  逻辑地址的格式:页号,页内偏移量

l  页表-页号与页框号的对应关系

l  内碎片

l  需要记录块(页框)的使用情况(已分配的、空闲的)

分段:

l  作业分段,内存按动态分区管理

l  内存分配以段为单位

l  每个段都有一个段名和长度

l  一个作业在内存中可以不连续,但在一个段内是连续的

l  逻辑地址的格式:段号 ,段内偏移量

l  段表-段与段所在内存位置的对应关系

l  外碎片

 

7、分页、分段管理的地址变换过程;变换工作中硬件与软件的分工

分页:

l  当进程要访问某个逻辑地址中的数据或指令时,MMU中的分页地址变换机构会自动地将有效地址(相对地址)分为页号页内地址两部分,再以页号为索引去检索页表。

l  查找操作由硬件执行。

l  在执行检索之前,先将页号与页表长度进行比较,如果页号大于或等于页表长度,则表示本次所访问的地址已超越进程的地址空间,产生地址越界。

l  若未出现越界错误,则将页表始址与页号和页表项长度的乘积相加,便得到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入MAR中的高位部分,再将逻辑地址中页内偏移量送入MAR的低位部分。这样便完成了从逻辑地址到物理地址的变换。(或者将帧号与页内偏移量拼接后形成物理地址,再送入MAR)

OS与cpu的分工

(1)根据当前执行的进程的PCB保存的进程页表设置系统的PTBR及PTLR的内容;(软件)

(2)CPU对执行的指令进行解析,分离出欲访问存储单元的逻辑地址;(硬件)

(3)MMU将逻辑地址根据规定的页面大小分成页号(P)与页内偏移量(d)两部分;(MMU,硬件)

(4)根据页号P进行地址越界检查(MMU,硬件),如果产生地址越界,则对越界进行处理(软件)

(5)如果没有产生地址越界,则依据页号P查找页表,得到页号P所对应的物理帧号f;(MMU,硬件)

(5)将帧号f作为物理地址的高位部分,页内偏移量d作为物理地址的低位部分,形成逻辑地址所对应的物理地址,送入MAR;(硬件)

 

分段:

 

 

8、分页、分段管理的存储保护方法

分页:

l  页号越界检查(或设置相应的标志位(有效位))

l  共享页的访问权限

分段:

l  段号、段内偏移量的越界检查,段的访问权限

 

9、分页、分段管理的内存共享(方法、条件)

分页:

l  通过页表实现

分段:

l  共享段,相同段号

 

10、Structure of the Page Table(页表结构)

l  Hierarchical Paging(层次页表)

l  Hashed Page Tables (哈希页表)

l  Inverted Page Tables (反置页表)

阅读全文
0 0