软考笔记--操作系统-内存管理

任何程序和数据都必须占用内存空间后才能执行,因此,内存管理的好坏直接影响整个操作系统的性能。操作系统的任务之一是尽可能地方便用户使用和提高内存的利用率。同时,内存管理也是多道程序设计系统的关键支撑。内存管理的功能主要包括以下几个方面:

  1. 内存空间的分配与回收。
  2. 配合硬件进行地址转换工作,把用户使用的逻辑地址转换成处理器能访问的物理地址。
  3. 内存空间的共享与保护,使得若干个进程能够同时访问公共程序所占的内存区,同时能够防止多个程序在执行中互相干扰,并保护区域内的信息不被破坏。
  4. 当内存容量不足时,操作系统要采取某种措施,在不改变实际内存容量的前提下,借助大容量的外存来解决内存不够用的问题。

一.地址变换 

 用户的程序通常使用高级语言编写的,这个称为源程序。源程序不能被计算机直接执行,而是需要通过编译程序或汇编程序编译获得目标程序。目标程序的地址不是内存的实际地址,一般将目标程序的地址单元称为逻辑地址。程序运行的时候,它将被装入内存地址空间的某些部分,此时程序和数据的实际地址一般不可能与原来的逻辑地址一样,将内存中的实际存储单元称为物理地址。物理地址的总体构成了用户实际程序运行的物理地址空间,它是由存储器地址总线扫描出来的空间,其大小取决于实际安装的内存容量。

为了保证程序的正确运行,必须将程序和数据的逻辑地址转换为物理地址,这一工作称为地址转换。地址转换的公式表示为:物理地址=起始的物理地址+逻辑地址。

地址转换通常有两种方式,静态转换和动态转换

静态转换是指在作业装入时由作业装入程序实现地址转换。其特点是容易实现,无需增加硬件地址变化机构,缺点是:它要求为每一个程序分配一个连续的存储区,在程序执行期间不能移动,难以做到程序和数据的共享,内存利用率低。

动态转换是指在程序执行过程中,CPU访问程序和数据之前实现地址转换。在多道程序系统中,可以用的内存空间常常被许多进程共享,程序员编程时事先不可能知道程序执行时的位置,而且必须允许程序因对换或空间搜集而被移动,这些现象都需要程序的动态重定位。动态转换的优点是程序可以在内存中移动,程序移动后,只要将新的内存区域的首地址放进基址寄存器就可以了,动态转换方式容易实现程序的共享,有可能提供虚拟存储空间。

二.分区存储管理

分区管理是支持多道程序运行的最简单的一种内存管理方式,主要有固定分区,可变分区,可重定位分区和多重分区四种方式。

1.固定分区

固定分区也称为静态分区,是在作业装入之前,内存就被划分为若干个分区。划分工作可以由系统管理员完成,也可以由操作系统完成。一旦划分完成,在系统运行期间不再重新划分。

固定分区的主要优点是实现技术简单,适用于作业的大小和多少事先都比较清楚的系统中,其缺点是由于每个分区只能存放一个作业,所以内存的利用率不高,内存碎片多。

2.可变分区

可变分区也称为动态分区,是指在作业装入内存时,从可用的内存中划出一块连续的区域分配给它,形成一个新的分区,且分区大小正好等于该作业的大小。可变分区中分区的大小和分区的个数都是可边的,而且是根据作业的大小动态划分的。这种内存管理技术是固定分区的改进,可以获得较大的灵活性,提高了内存利用率。

可变分区在分配时,首先找到一个足够大的空闲分区(自由分区),即这个空闲区的大小比作业要求的要大,系统则将这个空闲分区分成两个部分,一部分成为己分配的分区,剩余的部分仍作为空闲区。

几种可变分区选择自由分区的分配策略

(1)首次适应算法。从空闲区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法的目的在于减少查找时间。

(2)最佳适应算法。它从全部空闲区中找出能满足作业要求的,且最小的空闲区,这种方法能是碎片尽量小。

(3)最坏适应算法。从所有未分配的分区中挑选最大的且大于和等于作业大小的分区给要求的作业,空闲区按由大到小排序,每次查找从链头开始。

在针对存储空间利用情况的三种策略中,首次适应算法可能比最佳适应算法好,而首次适应算法和最佳适应算法一定比最坏适应算法好。

1.可重定位分区

可重定位分区分配是解决存储器碎片问题的简单有效的方法,基本思想是在适当的时候,把零散的空白区合并为一个大的空白分区,称为拼接,其实现方式是移动某些已分配区域中的信息,使所有的分配都紧挨着存储器的一端,而空白区在另一端。

2.多重分区

多重分区的思想是为一个作业分配一个以上的分区,允许一个作业在其运行过程中动态地申请附加存储空间,该空间不必和已有的作业分区相连接。多重分区的有点是便于使用共享子程序或者数据,缺点是需要较多的硬件支持,管理也比较复杂。

3.存储器保护

分区方式允许多道程序在内存中同时允许,因此,必须解决存储器保护问题。常用的方法有界地址保护和设置存储键保护。

 三.段页式存储管理

1.页式存储管理

在分页存储管理中,页帧可以是连续的,也可以是不连续的。系统为每道作业建立一张页映射表(称为页表),记录相应页在内存中对应的页帧号。这种管理方式消除了可变分区中紧致存储空间所带来的开销,同时,又能实现内存信息共享和虚拟存储技术。

在分页存储管理中,地址结构由两部分组成,分别是页号和页内位移(页内地址)。地址变换机构的基本任务是利用页表把用户程序中的逻辑地址变换成内存中的物理地址。

2.段式存储管理

段式存储管理按用户作业中的自然段来划分逻辑空间,每段占用连续的地址空间,其逻辑地址是二维的,由段号和段内地址组成。系统为每个作业建立一张段表,记录该段在内存中的起始地址和段长,各段可以存放在内存不同的分区中,段的分配与回收与可变分区存储管理相同。段式存储管理的地址转换采用动态重定位方式,地址转换机构取出逻辑地址的段号和段内地址,根据段号检索段表,找到该段对应的表目,将该段的起始地址与段内地址相加得到绝对地址。段式存储管理也存在二次访存问题,可以通过增设快表来解决。

段式存储管理和分页存储管理相似之处与区别

相同点:都采用离散分配方式来提高内存利用率,都要通过地址变换机构来实现地址变换。不同点: ( 1 ) 分页是一个单一的线性地址空间,分段作业地址空间是二维的。 ( 2 ) 页是信息的物理单位,大小固定,分页活动是用户看不见的,分页的目的是为了提高内存的利用率;段是信息的逻辑单位,其长度不定,分段是用户可见的活动,分段的目的是为了更好地满足用户的需要。( 3 ) 分页存储管理实现单段式虚拟存储系统,而段式存储管理实现多段式虚拟存储系统。

3.段页式存储管理

段页式存储管理的基本思想是将段式存储管理与分页存储管理结合起来,正好克服了各自存在的一些问题。段页式存储管理将作业分成若干段,每个段分成若干页,每段赋给一个段名,为了实现地址转换,必须为每个作业配置一张段表和若干页表。内存的分配与回收以页为单位进行。作业的逻辑是二维的,包括段号和段内地址,其中段内地址又包含页号和页内地址两部分。

四.虚拟存储管理

虚拟存储管理基本原理:应用程序在运行之前不必全部装入内存,仅需当前运行到的那部分程序和数据装入便可启动程序的运行,其余部分仍然驻留在外存储上。当要执行的指令或访问的数据不在内存时,再由操作系统通过请求调入功能将它们调入内存。这样可以使一个大的用户程序能够在较小的内存空间中运行,从用户的角度看,该系统具有的内存容量比实际的内存容量要大的多。将这种具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的存储器系统称为虚拟存储系统。

1.局部性原理

虚拟存储管理能够在作业信息不全部装入内存的情况下保证作业正确运行,是利用了程序执行时的局部性原理。局限性原理是指程序在执行时呈现局部性规律,即在一个较短的时间内,程序的执行仅仅局限于某个部分。响应地,它所访问的存储空间也仅仅局限于某个区域。

2.工作集

在虚拟存储管理中,可能会出现这种情况,即对于刚被替换出去的页,立即又要被访问,需要将它调入,因无空闲内存又要替换另一页,而后者是即将被访问的页,于是造成了系统需花费大量的时间忙于进行这种频繁的页面交换,致使系统的实际效率很低,严重时导致系统瘫痪,这种现象称为抖动现象。防止抖动现象有多种办法,例如,采取局部替换策略、引入工作集算法和挂起若干进程等。工作集是指在某段时间间隔内,进程实际要访问的页面的集合。引入虚拟内存后,程序只需有少量的内存就可运行,但为了使程序有效地运行,较少产生缺页,必须使程序的工作集全部在内存中。

3.页面置换算法

当内存中没有空闲页面,而又有程序和数据需要从外存中装入内存运行时,就需要从内存中选出一个或多个页面淘汰出去,以便新的程序和数据装入运行,良好的页面置换算法应该淘汰那些被访问概率最低的页,并将它移除内存。

(1)随机淘汰算法。无法确定那些页被访问的概率高低时,随机选择某个页面淘汰。

(2)轮转算法。按照内存页面的编号,循环换出内存中一个可以换出的页。

(3)先进先出FIFO。选择在内存驻留时间最长的一页淘汰。

(4)最近最久未使用算法LRU。当需要淘汰某一页时,选择离当前最近的一段时间内最久没有使用过的页先淘汰。

(5)最近没有使用页面責换算法(N U R )。在需要置换某一页时,从那些最近的一个时期内未被访问的页任选一页置换。

(6)最优置换算法。选择那些永久不使用的,或者在最长时间内不再被访问的页面置换出去。

(7)时钟页面替换算法(Clock)。使用页表中的引用位,将作业已调入内存的页面构成循环队列,用一个指针指向循环队列中的下一个将被替换的页面。

你可能感兴趣的:(软考,笔记,jvm)