OS零碎知识整理(10)

常用的内存管理方法

 

一  分区式管理 

基本原理:给每一个内存中的进程划分一块适当大小的存储区,以连续存储各进程的程序和数据,使各进程得以并发执行。

各作业或各进程对应于不同的分区以及在分区内各作业或进程连续存放,所以进程的大小仍受分区大小或内存可用空间的限制。

 

1.固定分区法

基本思想: 把内存固定地划分为若干个大小不等的区域,分区一旦划分结束,在整个执行过程中每个分区的长度和内存的总分区个数将保持不变。

优点:内存分配和回收较为简单,找到满足要求的分区,修改分区状态即可。

缺点:存在内部碎片。

 

2.动态分区法

基本思想:分区的建立是在作业的处理过程中进行的,且其大小可随作业或进程对内存的要求而改变。

优点:不存在内部碎片。

缺点:存在外部碎片,且分区回收可能较为麻烦,有时需要进行分区合并。

 

在动态分区法中有三种常用的分配方法

(1)最先适应算法 - First Fit Algorithm

要求可用表或自由链按起始地址递增的次序排列,开始寻找其中大小满足要求内存长度的分区,从所找到的分区中划出所要求的内存长度分配给用户,并把余下的部分进行合并(如果有相邻空闲区存在的话)。

优点:尽可能地利用了低地址空间,从而保证了高地址有较大的空闲区来放置要求内存较多的进程或作业。

(2)最佳适应算法 - Best Fit Algorithm

要求以从小到大的次序组成空闲区可用表或自由链,找到第一个满足要求的空闲区。

缺点:做分区大小排序有一定的消耗,且从小到大选择分区,可能会留下很多难以利用的小碎片。

(3)最坏适应算法 - Worst Fit Algorithm

要求以从大到小的次序组成空闲区可用表或自由链,找到第一个满足要求的空闲区。

缺点:做分区大小排序有一定的消耗,且从大到小选择分区,会先消耗大分区,从而使得大作业难以放入内存。

 

不论是固定分区法还是动态分区法都用到了分区说明表。

分区说明表 = 各分区号 + 分区大小 + 起始地址 + 分区状态

E.g.

分区说明表
区号分区长度起始地址状态
18K20K已分配
232K28K已分配
364K60K已分配

 


二  页式管理

基本原理:各进程的虚拟空间被划分成若干个长度相等的页(page),将内存空间按页的大小划分为片或页面(Page Frame),经过页划分后,进程的虚地址由页号P与页内地址W所组成。用户进程在内存空间内除了在每个页面内地址连续之外,页面之间不再连续。

 

1.静态页面管理

基本思想:在作业或进程开始执行之前,把该作业或进程的程序段和数据全部装入内存的各个页面中,并通过页表(Page Mapping Table)和硬件地址变换机构实现虚拟地址和内存物理地址的地址映射。

(所以在静态页面管理下,进程或作业的大小仍然受到内存或页面大小的限制。)

地址变换

页号页面号
02
13
28

         设一个3页长的进程具有页号0,1,2,其对应的页面号为2,3,8,设每个页面长度为1K。

         问(1)虚拟地址100的物理地址是多少?

             (2)虚拟地址2500的物理地址是多少?

             (1) 页号 = 100 / 1024(页面大小) = 0  ,由页号0找到对应页面号2

                  页内地址 = 100 % 1024 = 100 

                                                               物理地址 = 2 * 1024 + 100 = 2148

                                                           (2)页号 = 2500 / 1024 = 2  , 由页号2找到对应页面号为8

                                                               页内地址 = 2500 % 1024 = 452

                                                               物理地址 = 8 * 1024 + 452 = 8644

                

2.动态页面管理

基本思想:在作业或进程开始执行之前,都不把作业或进程的程序段和数据段一次性地全部装入内存,而只装入被认为是经常反复执行和调用的工作区部分,其他部分在执行过程中动态装入。

由此,进程或作业的大小并不受限于内存或可用页面数的大小。

但会发生所需页面不在内存中的情况,此时需要发出中断请求,请求从外存调入相应的页面。更甚,如果内存中没有空闲页面,需要采用内存页面置换算法淘汰内存中暂时用不到的页面,用于存放外存中刚调入的页面。

页式管理时的地址变换过程需经过二次以上的内存访问。

(1)请求页式管理

当需要执行某条指令而又发现它不在内存时或当执行某条需要访问其他的数据或指令时,这些指令和数据不在内存中,从而发生缺页中断,系统将外存中相应的页面调入内存。

几种常用的置换算法

1)随机淘汰算法

如其名,在系统设计人员认为无法确定哪些页被访问的概率较低时,随机地选择某个用户的页面并将其换出。

2)轮转法 - RR 

轮流换出内存可用区内一个可以被换出的页,无论该页是刚被换进或已换进内存很长时间。

3)先进先出算法 - FIFO

总是选择在内存驻留时间最长的一页将其淘汰。

实际上,RR算法与FIFO算法的内存利用率不高。且FIFO算法可能存在Belady现象,即在未给进程或作业分配足它所要求的页面数时,有时会出现分配的页面数增多,缺页次数反而增加的现象。

4)最近最久未使用页面置换算法 - Least Recently Used

当需要淘汰某一页时,选择离当前时间租金的一段时间内最久没有使用过的页先淘汰。

(2)预调入页式管理

系统对那么在外存中的页进行调入顺序计算,估计出这些页中指令和数据的执行和被访问的顺序,并按此顺序将它们顺次调入和调出内存。


三  段式管理

基本思想:把程序按内容或过程(函数)关系分成段,每段有自己的名字。一个用户作业或进程所包含的段对应于一个二维线性虚拟空间。段式管理程序以段为单位分配内存,然后通过地址映射机构把段式虚拟地址转换成实际内存物理地址。

与页式管理相同,段式管理也采用只把那些经常访问的段驻留内存,而把那么在将来一段时间不被访问的段放入外存,待需要时自动调入的方法实现二维虚拟存储器

!段的长度是不固定的。P.s 页的长度是固定的

段式管理时的地址变换过程需经过二次以上的内存访问。

(以下图来自《计算机操作系统》 张尧学)

 

 


四  段页式管理

基本原理:结合页式管理与段式管理。

段页式管理时,一个进程仍然拥有一个自己的二维地址空间,划分为段,每个段又划分成不同的页。

因此,段页式管理时的进程的虚拟地址空间中的虚拟地址由三部分组成:段号S,页号P,页内相对地址D。(P+D =W 段内相对地址)

因为此时虚拟空间的最小单位是页,所以内存可用区被划分成若干个大小相等的页面,且每段所拥有的程序和数据在内存中可以分开存放。

系统要为每个进程建立一张段表,每个段又要建立一张页表,将段中的虚页变换成内存中的实际页面。

(以下图来自《计算机操作系统》 张尧学)

在段页式管理系统中,要对内存中指令或数据进行一次存取的话,至少需要访问三次以上的内存。

第一次是由段表地址寄存器得到段表始址去访问段表,由此取出对应段的页表地址

第二次是访问页表得到所要访问的物理地址

第三次是访问真正需要访问的物理单元。

 


五、Basic Concepts

(1)局部性原理(Principle of locality) 

由模拟实验知道,在几乎所有的程序的执行中,在一段时间内,CPU总是集中地访问程序中的某一个部分而不是随机地对程序所有部分具有平均访问概率。

(2)工作集 - 内存要求的临界值

任何程序在局部性放入时,都有一个临界值要求。当内存分配小于这个临界值时,内存和外存之间的交换频率将会急剧增加,而内存分配大于这个临界值时,再增加内存分配也不能显著减少交换次数。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值