操作系统笔记

操作系统第四章(2)

2018-12-09  本文已影响28人  小公举凡

1,、连续分配方式

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

(1)单一连续分配

内存分为系统区和用户区两部分:

系统区:仅提供给OS使用,通常放在内存低址部分 

用户区:除系统区以外的全部内存空间,提供给用户使用

优点:易于管理。

缺点:对要求内存空间少的程序,造成内存浪费;程序全部装入,很少使用的程序部分也占用内存。

(2)固定分区分配

把内存分为一些大小相等或不等的分区(partition),每个应用进程占用一个分区。操作系统占用其中一个分区。

支持多个程序并发执行,适用于多道程序系统和分时系统

划分为几个分区,便只允许几道作业并发

固定分配的不足:

内碎片(一个分区内的剩余空间)造成浪费

分区总数固定,限制并发执行的程序数目

(3)动态分区分配

分区的大小不固定:在装入程序时根据进程实际需要,动态分配内存空间,即——需要多少划分多少。

优点:并发进程数没有固定数的限制,不产生内碎片。

缺点:有外碎片(分区间无法利用的空间)

*分区分配算法:

①首次适应算法FF(first-fit)

空闲分区排序:以地址递增的次序链接。

检索:分配内存时,从链首开始顺序查找直至找到一个大小能满足要求的空闲分区;

分配:从该分区中划出一块作业要求大小的内存空间分配给请求者,余下的空闲分区大小改变仍留在空闲链中。

若从头到尾检索不到满足要求的分区则分配失败

优点:优先利用内存低址部分,保留了高地址部分的大空闲区;

缺点:但低址部分不断划分,会产生较多小碎片;而且每次查找从低址部分开始,会逐渐增加查找开销

②循环首次适应算法(next-fit)

空闲分区排序:按地址

检索:从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个能满足要求的空闲分区。为实现算法,需要:

设置一个起始查寻指针

采用循环查找方式

分配:分出需要的大小

优点:空闲分区分布均匀,减少查找开销

缺点:缺乏大的空闲分区

③最佳适应算法(best-fit)

总是把能满足要求、又是最小的空闲分区分配给作业,避免“大材小用”。

空闲分区排序:所有空闲分区按容量从小到大排序成空闲分区表或链。

检索:从表或链的头开始,找到的第一个满足的就分配

分配:分出需要的大小

  缺点:每次找到最合适大小的分区割下的空闲区也总是最小,会产生许多难以利用的小空闲区(外碎片)

④最差适应算法/最坏匹配法(worst-fit):基本不留下小空闲分区,但会出现缺乏较大的空闲分区的情况。

⑤快速适应算法

根据进程常用空间大小进行划分,相同大小的串成一个链,需管理多个各种不同大小的分区的链表。进程需要时,从最接近大小需求的链中摘一个分区。类似的:伙伴算法

能快速找到合适分区,但链表信息会很多;实际上是空间换时间。

2、对换

把内存中暂时不能运行、或暂时不用的程序和数据调到外存上,以腾出足够的内存;把已具备运行条件的进程和进程所需要的程序和数据,调入内存。

按对换单位分类:

整体对换(或进程对换):以整个进程为单位(连续分配)

页面对换或分段对换:以页或段为单位(离散分配)

基本分页存储管理方式:

1、页面:内存划分成多个小单元,每个单元K大小,称(物理)块。作业也按K单位大小划分成片,称为页面。

物理划分块的大小 = 逻辑划分的页的大小

②页面大小要适中:太大,(最后一页)内碎片增大,类似连续分配的问题;太小的话,页面碎片总空间虽然小,提高了利用率,但每个进程的页面数量较多,页表过长,反而又增加了空间使用

2、页表:为了找到被离散分配到内存中的作业,记录每个作业各页映射到哪个物理块,形成的页面映射表,简称页表

每个作业有自己的页表

页表的作用:

                  页号到物理块号的地址映射

要找到作业A

         à关键是找到页表(PCB

         à根据页表找物理块

3、地址

连续方式下,每条指令用基地址+偏移量即可找到其物理存放的地址

分页方式:

地址映射(地址计算)

计算口诀:

页面大小决定偏移量(页内地址)的位数 n

作业大小à页面数量

页表长度 a

页号的位数 m(或总位数-页内位数)

内存容量决定块数,块数决定编址位数,即页表项位数 b

4、分页系统地址变换:

*访问内存的有效时间

进程发出逻辑地址的访问请求,经过地址变换,到内存中找到对应的实际物理地址单元并取出数据,所需花费的总时间,称为内存的有效访问时间EAT

EAT=2t

CPU操作一条指令需访问内存两次:

访问内存中的页表(以计算指令所在的实际物理地址)

访问指令内存地址

5、快表

基本分页机制下,一次指令需两次内存访问,处理机速度降低1/2,分页空间效率的提高以如此的速度为代价,得不偿失

改进:减少第1步访问内存的时间。增设一个具有“并行查询”能力的高速缓冲寄存器,称为“快表”,也称“联想寄存器”

快表放什么?:

正在执行进程的页表的数据项

EAT= a*t' + (1-a)(t'+t) +t= 2t +t' -t*a

6、两级页表

将页表分页,并离散地将页表的各个页面分别存放在不同的物理块中

为离散分配的页表再建立一张页表,称为“外层页表”,其每个表项记录了页表页面所在的物理块号

7、多级页表

64位操作系统下,两级仍然不足以解决页表过大问题时,可按同样道理继续分页下去形成多级页表

 

分段系统:

1、基本原理:

程序通过分段(segmentation)划分为多个模块,每个段定义一组逻辑信息

*段的特点:

每段有自己的名字(一般用段号做名),都从0编址,可分别编写和编译。装入内存时,每段赋予各段一个段号。

每段占据一块连续的内存。(即有离散的分段,又有连续的内存使用)

各段大小不等

*地址结构:段号 + 段内地址

2、段表与地址变换机构


3、分页和分段的主要区别

1)需求:分页是出于系统管理的需要,是一种信息的物理划分单位,分段是出于用户应用的需要,是一种逻辑单位,通常包含一组意义相对完整的信息。

一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。

2)大小:页大小是系统固定的,而段大小则通常不固定。分段没有内碎片,但连续存放段产生外碎片,可以通过内存紧缩来消除。相对而言分页空间利用率高。

3)逻辑地址:

分页是一维的,各个模块在链接时必须组织成同一个地址空间;

分段是二维的,各个模块在链接时可以每个段组织成一个地址空间。

4)其他:通常段比页大,因而段表比页表短,可以缩短查找时间,提高访问速度。分段模式下,还可针对不同类型采取不同的保护;按段为单位来进行共享

上一篇下一篇

猜你喜欢

热点阅读