操作系统笔记(三)

操作系统——内存管理

1、第三章:内存管理

通过下面的思维导图来依次分享「内存管理」里面重要知识点的笔记。

 

2、第一节:内存管理概念

1.  内存管理(Memory Management):操作系统将内存空间进行合理地划分和有效地动态分配。

2.  内存管理的功能:

①内存空间的分配与回收:  由操作系统完成主存储器空间的分配和管理,使程序员提股  存储分配的麻烦,提高编程效率。

②地址转换:在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致,因此存储管理必须提供地址变换功能,把逻辑地址转换成相应的物理地址。

③内存空间的扩充:  利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。

④存储保护:保证各道作业在各自的存储空间内运行,互不干扰。

3.  覆盖与交换:在多道程序环境下用来扩充内存的两种方法。

①覆盖:在程序运行时并非任何时候都要访问程序及数据的各个部分,因此可以把用户空间分成一个固定区和若干个覆盖区。将经常活跃的部分放在固定区,其余部分按调用关系分段;将那些即将要访问的段放入覆盖区,其他段放在外存中,在需要调用前,系统再将其调入覆盖区,替换覆盖区中原有的段。

②交换:  指把处于等待状态(或在CPU调度原则下被剥夺运行权利)的程序从内存移到辅存,把内存空间腾出来,这一过程叫换出;把准备好竞争CPU运行的程序从辅存移到内存,这一过程叫换入

例如:

在CPU采用时间片轮转调度算法的多道程序环境下,时间片到,内存管理器将刚刚执行过的进程换出,将另一进程换入到刚刚释放的内存空间中。同时,CPU调度器可以将时间片分配给其他已在内存中的进程。每个进程用完时间片都与另一进程交换。

4.  连续分配管理方式

①单一连续分配:内存在此方式下分为系统区和用户区,系统区仅提供给操作系统使用,通常在低地址部分;用户区是为用户提供的、除系统区之外的内存空间。

优点是简单、无外部碎片,可以采用覆盖技术,不需要额外的技术支持。

缺点是只能用于单用户、单任务的操作系统中,有内部碎片(即当程序小于固定分区大小时,也占用了一个完整的内存分区空间,这样分区内部有空间浪费,这种现象称为内部碎片),存储器的利用率极低。

②固定分区:是最简单的一种多道程序存储管理方式,它将用户内存空间划分为若干个固定大小的区域,每个分区只装入一道作业。当有空闲分区时,便可以再从外存的后备作业队列中,选择适当大小的作业装入该分区。

固定分区是可用于多道程序设计最简单的存储分配,无外部碎片,但不能实现多进程共享一个主存区,所以存储空间利用率低。

③动态分区分配(又称为可变分区分配):是一种动态划分内存的分区方法。即不预先将内存划分,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要,系统中分区的大小和数目是可变的。

动态分区在开始分配时是很好的,但是之后会导致内存中出现许多小的内存块。随着时间的推移,内存中会产生越来越多的碎片,内存的利用率随之下降。这些小的内存块称为外部碎片,指在所有分区外的存储空间会变成越来越多的碎片,这与固定分区中的内部碎片正好相反。

5.  非连续分配管理方式:

1)基本分页存储管理方式:把主存空间划分为大小相等且固定的块,块相对较小,作为主存的基本单位。每个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间。

2)基本分段存储管理方式:按照用户进程中的自然段划分逻辑空间。例如,用户进程由主程序、两个子程序、栈和一段数据组成,于是可以把这个用户划分为5个段,每段从0开始编址,并分配一段连续的地址空间(段内要求连续,段间不要求连续)

从计算机的角度考虑设计的,以提高内存的利用率,提升计算机的性能,且分页通过硬件机制实现,对用户完全透明;而分段管理方式的提出则是考虑了用户和程序员,以满足方便编程、信息保护和共享、动态增长及动态链接等方面的需要。

3)段页式管理方式:作业的地址空间首先被分成若干个逻辑段,每段都有自己的段号,然后再将每一段分成若干个大小固定的页。对内存空间的管理仍然和分页存储管理一样,将其分成若干个和页面大小相同的存储块,对内存的分配以存储块为单位。

3、第二节:虚拟内存管理

1.  虚拟存储器:基于局部性原理,在程序装入时,可以将程序的一部分装入内存,而将其余部分留在外存,就可以启动程序执行。在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存,然后继续执行程序。另一方面,操作系统将内存中暂时不使用的内容换出到外存上,从而腾出空间存放将要调入内存的信息。这样,系统好像为用户提供了一个比实际内存大得多的存储器,称为虚拟存储器。

之所以称为虚拟存储器,是因为这种存储器实际上并不存在,只是由于系统提供了部分装入、请求调入和置换功能后(对用户完全透明),给用户的感觉是好像存在一个比实际物理内存大得多的存储器。虚拟存储器的大小由计算机的地址结构决定的,并非是内存和外存的简单相加。

2.  虚拟内存技术的实现:需要建立在离散分配法内存管理方式的基础上。虚拟内存的实现有以下三种方式:

①请求分页存储管理;

②请求分段存储管理;

③请求段页式存储管理。

不管上面的那种方式,一般都需要一定的硬件支持,如下:

①一定容量的内存和外存;

②页表机制(或段表机制),作为主要的数据结构;

③中断机构,当用户程序要访问的部分尚未调入内存,则产生中断;

④地址变换机构,逻辑地址到物理地址的变换。

3.  页面置换算法(决定应该换入哪页换出哪页):

①最佳置换算法(OPT):选择的被淘汰页面是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。但由于人们目前无法预知进程在内存下的若王页面中哪个是未来最长时间内不再被访问的,因而该算法无法实现。

②先进先出(FIFO)页面置换算法:优先淘汰最早进入内存的页面,亦即在内存中驻留时间最久的页面。该算法实现简单,只需把调入内存的页面根据先后次序链接成队列,设置一个指针总指向最早的页面。但该算法与进程实际运行时的规律不适应,因为在进程中,有的页面经常被访问。FIFO算法还会产生当所分配的物理块数增大而页故障数不减反增的异常现象,称为Belady异常,只有FIFO算法可能出现Belady异常,而LRU和OPT算法永远不会出现Belady异常。

③最近最久未使用(LRU)置换算法:选择最近最长时间未访问过的页面予以淘汰,它认为过去一段时间内未访问过的页面,在最近的将来可能也不会被访问。该算法为每个页面设置一个访问字段,来记录页面自上次被访问以来所经历的时间,淘汰页面时选择现有页面中值最大的予以淘汰。LRU性能较好,但需要寄存器和栈的硬件支持,LRU是堆栈类的算法。

④时钟(CLOCK)置换算法:CLOCK算法是给每一帧关联一个附加位,称为使用位。

当某一页首次装入主存时,该帧的使用位设置为1:当该页随后再被访问到时,它的使用位也被置为1。对于页替换算法,用于替换的候选帧集合看做一个循环缓冲区,并且有一个指针与之相关联。

当某一页被替换时该指针被设置成指向缓冲区中的下一帧。当需要替换一页时,操作系统扫描缓冲区,以查找使用位被置为0的一帧。每当遇到一个使用位为1的帧时,操作系统就将该位重新置为0;如果在这个过程开始时,缓冲区中所有帧的使用位均为0,则选择遇到的第一个帧替换;如果所有帧的使用位均为1,则指针在缓冲区中完整地循环一周,把所有使用位都置为0,并且停留在最初的位置上,替换该帧中的页。由于该算法循环地检查各页面的情况,  故称为CLOCK算法,又称为最近未用(Not Recently Used, NRU)算法。

4.  页面分配策略:

①固定分配局部置换:它为每个进程分配定数目的物理块, 若进程在运行中发生缺员,则只能人该进程在内在中的页面中选出一页换出,然后在调入需要的页面。

②可变分配全局置换:这是最易于实现的物理块分配和置换策略,为系统中的每个进程分配一定数目的物理块,操作系统自身也保持一个空闲物理块队列。当某进程发生缺页时,系统从空闲物理央队列中取出一个物理 块分配给该进程,并将欲调入的页装入其中。

③可变分配局部置换:它为每个进程分配一定数目的物理块,当某进程发生缺页时,只允许从该进程在内存的页面中选出一页换出,这样就不会影响其他进程的运行。如果进程在运行中频繁地缺页,系统再为该进程分配若干物理块,直至该进程缺页率趋于适当程度;  反之,  若进程在运行中缺页率特别低,则可适当减少分配给该进程的物理块。

注意:没有固定分配全局置换,因为全局置换将会改变固定分配的区块大小,故没有固定分配全局置换策略。

将自己的学习笔记通过本博客展现出来,也是对自己学习的一种记录。

             扫一扫,关注公众号

猜你喜欢

转载自blog.csdn.net/ziyu_one/article/details/86654903