【系统架构师修炼之道】(18):操作系统基础知识——分区存储管理

存储管理的概念

逻辑地址:用户程序经编译后,每个目标模块以0为基地址进行的顺序编址,它不是主存中的真实地址,是相对基地址而言的。

物理地址:主存中各存储单元的地址,从统一的基地址进行的顺序编制,是主存中的真实地址,可以寻址并实际存在,物理地址又称绝对地址

存储空间:是地址的集合。

分区存储管理

固定分区存储管理

预先把可分配的主存储器空间分割成若干个连续区域,每个区域的大小可以相同,也可以不同,存储管理需设置一张“主存分配表”,例如:

【系统架构师修炼之道】(18):操作系统基础知识——分区存储管理_第1张图片

当标志位为0 的时候代表没有被占用,如果某一个分区分配给一个作业后,则在状态标志栏里填上占用该分区的作业名。

特点: 存储空间利用率不高,但是分配简单

可变分区存储管理

根据作业的大小来划分分区,要装入一个作业时,根据作业的需要的主存量查看主存中是否有足够的空间,按需分配,分区的个数也是随机,可以避免空间浪费,但是管理起来,稍微复杂。

具体过程:
当一个新的作业要求装入,必须找一个足够大的空闲区,把该作业装入该区,如果找到的空闲去大于作业需求量,则作业装入后把原来的空闲区分成两部分,一部分给作业,另一部分变成较小的空闲区。当该作业撤离时,如果归还区域和其他空闲区相邻,则可以合成一个较大的空闲区

主存分配表:已分配区情况表,未分配区情况表

【系统架构师修炼之道】(18):操作系统基础知识——分区存储管理_第2张图片

如图:当要装入长度为30K的作业时,先从未分配的情况表中找到长度为36K的空闲区,此时在已分配区添加一条新的条目记录30K的分配,标记作业,然后在未分配表中修改之前长度36K的空闲区的起始地址,长度。作业撤离的时候,将分配区情况表中的标志置为空,将回收的分区以及相邻空闲的分区一起登记到未分配情况表。由于分区的个数不定,则表格最好用链表

分区存储管理的放置策略

  • 首次适应算法
    目的:尽量减少查找时间
    具体做法:把空闲区按地址从小到大排列在未分配表,每次按照顺序查找未分配表,把最先找到的满足需求的地址最小的那个空闲分区作为分配对象,这种算法有利于大作业的装入,但是回收的时候,必须移动表格中的登记(重新插入新的记录,保持从大到小)
    特点:简单,保证有大的空闲分区,保证大作业的执行

  • 最佳适应算法
    目的:尽可能不把大的空闲区分割成小的分区,保证大作业的需要
    方法:从空闲区挑选一个能满足作业要求的最小分区,这样可以保证不去分割一个更大的区域,使得装入大作业比较容易,但是如果所要求的略大,则分割后的剩下空闲区就太小,以至于无法使用。
    具体做法:把空闲区按从小到大排序,从最小的区开始查找,一直到能满足要求的区为止。回收的时候,也要对表格重新排序。
    特点:比较费时,麻烦

  • 最坏适应算法
    目的:让中,小作业比较好装入
    具体做法:挑选一个最大的空闲区分割给作业使用,可以让剩下的空闲区不至于太小,这种分配算法把空闲区从大到小排序,回收的时候,也要对表格重新排序。

移动技术

当未分配表中找不到一个足够大的空闲区来装入作业的时候,可以采用移动技术把主存中的作业改变存放区域,

空闲分区的合并方案:

  • 调度到某个作业时,系统中的每个空闲分区的尺寸都比它所需要的存储量小,但是空闲区的总存储量大于它的需求,于是进行存储区的合并

  • 只有作业运行完毕归还他所占用的存储分区,系统就进行空闲分区合并

一般采用第一种方案。

注意点

  • 合并会增加系统的时间开销

  • 合并是有条件的,正在进行I/O进程不能移动

  • 合并时尽量减少信息的移动量


感谢您的耐心阅读,如果您发现文章中有一些没表述清楚的,或者是不对的地方,请给我留言,你的鼓励是作者写作最大的动力,
如果您认为本文质量不错,读后觉得收获很大,不妨小额赞助我一下,让我更有动力继续写出高质量的文章。

  • 支付宝

  • 微信

作 者 : @mousycoder

原文出处 : http://mousycoder.com/2015/10/14/the-pragmatic-sa-18/

创作时间:2015-9-1

更新时间:2015-10-16

你可能感兴趣的:(系统架构师修炼之道)