zoukankan      html  css  js  c++  java
  • [每天五分钟,备战架构师-3]操作系统基本原理之存储管理

    每天五分钟,轻松备考系统架构师

    存储管理

    存储器是计算机系统中最重要的资源之一,任何程序和数据及各种控制用的数据结构都必须占有一定的存储空间,因此,存储管理直接影响系统性能。

    存储器由内存和外存组成。存储管理主要是指对内存的管理,目的是尽量提高内存的使用效率。

    1.1 内存

    内存是系统实际提供的存储单元组成的一个连续地址空间,处理器可以直接存取。其访问速度快,价格较高。

    1.2 外存

    外存包括软盘、硬盘、光盘、磁带等,处理器不能直接访问。其访问速度慢,价格较便宜。

    存储管理的功能

    开始之前需要首先明确两个概念:物理地址空间 和 逻辑地址空间。一般来说,用户程序使用的是逻辑地址空间,逻辑地址空间是相对地址。物理地址是内存中各存储单元的编号,是真实的地址。

    2.1 内存分配与回收

    1. 单一连续区管理,单一连续分配

    这种分配方式的运用场景是:一个用户独占连续的内存用户去,只能用于单用户、单任务的操作系统中。这时的内存区包含系统区和用户区,可以要求对系统区进行保护(给一个基址,只能使用基址后面的内存空间,0到基址范围都归系统),也可不对系统进行保护。

    连续分配会造成内存碎片问题,空闲内存不能被利用,包括内部碎片和外部碎片。外部碎片,在分配单元间的未使用内存,内部碎片,在分配单元中的未使用内存。

    2. 分区存储管理

    分区管理的思想是将内存划分为若干个连续区域,每个分区装入一个作业运行。

    2.1 固定分区管理

    把内存固定的划分为若干个大小不等的区域。(系统对内存的管理和控制通过分区说明表进行,分区说明表说明各分区号,分区大小,起始地址和是否空闲(分区状态)。内存的分配释放,保护,地址变换都是通过分区说明表进行)

    2.2 可变分区管理

    在作业执行前不建立分区,分区的建立是建立在作业的处理过程中进行的,大小随着作业或进程对内存的要求而改变的。动态分区除了分区说明表还把内存中的可以分区单独构成可用分区表或可以分区自由链。

    2.3 分配算法

    2.3.1 首次适配

    从0地址往后查找和使用第一个可用空闲快(要比需要的空间大)。基本实现机制要求把空闲的内存块按地址排序。回收要考虑能否合并内存块。
    优点:简单,易于产生更大的空闲快,向着地址空间的结尾
    劣势:易产生外部碎片(随着动态分配加剧),不确定性

    2.3.2 最优适配

    找比需求大但最接近需求的空闲内存块,产生尽可能小的内存碎片。原理是为了避免分配大空闲块,最小化外部碎片,要求对空闲地址快按尺寸size排序,回收要合并。
    优点:当大部分分配需要小空间时使用,简单。
    缺点:外部碎片太小太细,不利于后续重分配。

    2.3.3 最差匹配

    使用最大的空闲快,大块拆分变小块,可以避免产生太多微小的碎片,也要排序,回收合并。
    优点:分配中大型SIZE时实用。
    缺点:重分配慢,对大块的请求可能没得用了。

    3. 页式存储管理

    连续内存分配有碎片的缺点,对应非连续的优点:更好的内存利用和管理,允许共享代码和数据(共享库。。),支持动态加载和动态链接。最大的问题在于管理的开销。在虚拟地址和物理地址之间的转换,如果用软件来实现,开销巨大。因此要考虑用硬件来协同解决。

    页面,进程逻辑地址空间分成大小相等的区,每个区称为页面或页。
    页框,又称页帧。内存物理地址空间分成大小相等的区,其大小和页面大小相等,每个区就是一个页框。
    逻辑地址,分页存储器的逻辑地址由页号和页内偏移两部分组成。

    页面调度算法有最优算法、随机算法、先进先出算法、最近最少使用算法。

    4. 段式存储管理

    分段管理就是将一个程序按照逻辑单元分成多个程序段,每一个段使用自己单独的虚拟地址空间。

    优点:
    4.1每个逻辑单元可单独占用一个虚拟地址空间,这样使得编写程序的空间大为增长。
    4.2由于段式按逻辑关系划分,因此共享起来十分方便。
    4.3对于空间稀疏的程序来说,分段管理将节省大量的空间。
    缺点:
    4.1外部碎片和一个段必须全部加载到内存。

    分段和分页的比较:

    1. 分段是信息的逻辑单位,由源程序的逻辑结构及含义所决定,是用户可见的,段长由用户根据需要来确定,段起始地址可以从任何内存地址开始。引入的目的是满足用户模块化程序设计的需要。
    2. 分页是信息的物理单位,与源程序的逻辑无关,是用户不可见的,页长由系统(硬件)决定,页面只能从页大小的整数倍地址开始。引入目的是实现离散分配并提高内存利用率。

    5. 段页式存储管理

    段页式管理就是将程序分为多个逻辑段,在每个段里面又进行分页,即将分段和分页组合起来使用。这样做的目的就是想同时获得分段和分页的好处,但又避免了单独分段或单独分页的缺陷。

    2.2 地址变换(重定位)

    操作系统把用户程序指令中的相对地址变换成为所在存储中的绝对地址的过程,实现了从逻辑地址到物理地址的转换。分为静态重定位、动态重定位。

    2.3 内存保护

    内存分配前,需要保护操作系统不受用户进程的影响,同时保护用户进程不受其他用户进程的影响。通过釆用重定位寄存器和界地址寄存器来实现这种保护。重定位寄存器含最小的物理地址值,界地址寄存器含逻辑地址值。每个逻辑地址值必须小于界地址寄存器;内存管理机构动态地将逻辑地址与界地址寄存器进行比较,如果未发生地址越界,则加上重定位寄存器的值后映射成物理地址,再送交内存单元。每一个逻辑地址都需要与这两个寄存器进行核对,以保证操作系统和其他用户程序及数据不被该进程的运行所影响。

    参考资料:
    1、操作系统之存储管理
    2、计算机操作系统之存储管理
    3、操作系统Day1地址空间与地址生成
    4、操作系统 笔记(三)
    5、操作系统 - 地址重定位
    6、操作系统原理总结
    7、操作系统核心原理-5.内存管理(下):段式内存管理

  • 相关阅读:
    To Do List
    Linux 替换文本中对空格为下划线
    Jumpserver开源堡垒机
    用jmeter编写脚本做实时线上监控
    Supervisor使用详解
    Python模块之pysnooper
    Java读取json文件并进行处理
    IOS APP自动化测试 真机测试 遇到的坑
    测试人员入职必须了解的东西包括下面一些内容
    linux 和MacBook下的批替换
  • 原文地址:https://www.cnblogs.com/cocowool/p/sa_memory_management.html
Copyright © 2011-2022 走看看