开篇语
今天终于一口气把操作系统的视频全部看完了,整整五十六个视频。每个视频半小时。掐指一算,至今计算机网络和操作系统已经看了我112个视频了。功德圆满只差一个计算机三级网络技术的粗略扫描了。高兴,所以特地作业都不做来简书写一篇文章再说!(另外,望主编给个过,这篇文章我自己画线图都画了九个,这还不算原创我就直播吃X了。这要会看了还没收获,那我无法想象看鸡汤、小说会有多少收获。)
前面还有五篇类似的:
计算机四级网络工程师--《操作系统(Operating System)》重点内容学习
计算机四级网络工程师--《操作系统(Operating System)》重点内容学习2
计算机四级网络工程师--《操作系统(Operating System)》重点内容学习3
深入电脑运行原理之进程的同步与并发(Operating System四级内容)
深入电脑运行原理之进程通信(Operating System四级内容)
正文
1、存储体系模型:
(寄存器其实也是体系之一,但是寄存器其实是在处理机中,并没有独立的区域,所以只有三层模型)
2、存储体系管理任务
(1) 为用户作业分配和回收主存空间
(2) 内存分配方式
- 静态分配
在程序进入内存之前就已经确定了内存分配的大小以及地址。运行程序的时候不允许额外申请和“搬家” - 动态分配
Program在目标模块装入的时候才确定并且分配内存。可以额外的申请内存和“搬家”
(3)存储共享
在程序运行的时候,多个进程同事共享使用内存中的某个区域,就产生了存储共享,后面会细讲这一块。
(4) 存储保护(三种方式)
- 地址越界保护
- 操作权限保护
- 存储键保护
(5)内存的扩充
采用虚拟存储技术,或者是其他的交互技术,可以达到逻辑上的内存扩充(其实就是提高了内存的利用率,可以达到类似于内存扩充了的效果,是逻辑上的扩充)
(6) 地址转换(地址映射)/ 重定位
对于程序内的地址,由于存在动态分配内存,所以只会记录逻辑地址,而不会是物理地址,所以就存在了一个从逻辑地址读取,映射到物理地址去读取内存数据的过程,这就是地址映射。
- 静态重定位
程序装入的时候,在执行之前就把代码、数据地址转换为物理上的绝对地址,这样就可以直接读取
*动态重定位
程序装入的时候不进行地址转换,读取的时候再进行逻辑地址到物理地址的转换。
3、固定分区(这是对主存的分区办法)
固定分区有如下特定:
- 一个作业进去一个分区,一个分区只装一个作业,分区大小固定
- 分区分配表
- 分区大,作业小,那么就会浪费内存空间,极大地限制了并发的数量
4、可变分区(动态分区)
作业要求进入主存的时候,才对作业进行内存空间的分配。
这里就牵扯出来了三个很大的问题。也是下面会要花费不少篇幅去讲的一个内容
1、可变分区中所用的数据结果
已分分区表、空闲分区表
PS:这里我要说一下,就是本来的内存如果没有任何进程,那么就是一块完整的内存,但是随着进程的进入,就会占据一定的位置,并且在进程使用结束之前是不会退出的,也就是类似于在一个空地上盖房子,房子推倒之前,这个地方是不能供给别人使用的,但是房子的推倒时间不是由系统来安排,所以就会造成了--有的地方会因为进程的退出,从而造成形成散列的空闲分区存在,空闲分区表也就有了存在的意义。
2、分区的分配算法
(1)最先适应分配算法(FF)
空闲分区表是按照地址递增的顺序排列,从小到大一直顺序查找,找到第一个满足作业大小要求的空闲分区就停止,并且分割这个分区,登记在已分分区表上,并且删除在空闲分区表上的记录。
(2)最优适应分配算法(BF)
遍历空闲分区表,找到一个能满足作业要求的最小的空闲分去进行分配,分区表的排列不再跟FF算法一样按照地址排列,而是按照空闲长度进行递增排列。回收的时候要按照长度来进行回收,这样会额外的增加系统开销。
(3)最坏适应算法(WF)
跟BF完全反其道而行之,直接找到最大的分区占了,当然了,空闲分区表也就是按照长度来进行递减排序的,这样的好处就是,不容易产生碎片化的内存空间,但是不利于大作业,并且也会增加系统开销
下面我们从一块空地盖房子的角度来讨论:
- FF的盖房子策略是:直接从左到右跟一直找,找到一个跟你要的房子尺寸相符合的,就直接让你在这里盖房子,爽快是爽快,但是在两栋房子之间本来能盖一个别墅的地方就盖了个平房,然后剩下的地方(空间碎片)也就凑合拿来做个猪圈了。这就很不合理的规划了,当然要是你财大气粗,随便搞啊。西部地区盖房子你不就这样?
- BF的策略就是:我做个表,按照从小到大的顺序排好,你来找我要地皮盖房子,那么我就从小到大给你找个能让你盖好,但是绝对留不出一个盖厕所的地方的地皮,这就比较鸡贼。但是对于系统来说,是很不错的,因为这种分配方式,随时都在等待盖大房子,大房子一来保证有地皮盖的下。
- WF的策略就是相反的了,我不管以后有没有大房子,我要多盖点。你先到空地最大的那一块去盖房子,后面剩下来的还能盖个饭馆啥的。至于要盖个百货商城,那得看我剩下的最大的那块地能不能盖的下了。该不下就等拆几个小房子再说吧。
其实还有第四种分配算法,就是下次分配算法,从上次分配的地方开始分配。扫描到合适的地方就分给你。类似于初始地址可动的最佳分配算法。
这里有三个分配算法的一个练习题:
有两个空闲区,分别有F1:220K、F2:120K的长度。有三个进程要进驻,J1 :40K ;J2 : 160K ; J3 : 100K 。 地址从F1---F2 进程按照递增顺序请求内存。每下一个进程过来,都要重新排表,进行计算,方可进行内存分配,请注意!
三种分区方式进行的结果如上图,可见,最佳的分配算法其实有时候不是最佳的。最起码别的分配都好歹人人有房住,最佳的办法是留了好地方,但是得不偿失,那些零碎的内存都成了碎片,难以处理。
3、主存的分配与回收
运行结束后,会从已分分区表得到需要撤销的分区的信息,然后通过这些信息修改空闲分区表。共有四种情况(可能会出考题):
- 前后无相邻空闲块
- 前面有空闲块
- 后面有空闲块
- 前后都有空闲块
上图是四种情况的图示,黄色的是进程撤销后空出来的内存区域,粉色的是本来就有的空闲区域,银色的都是正在使用的区域。一目了然,第一种情况下,空闲区域会多出来一块。第二种第三种空闲区域数量不变,但是其起始地址与终止地址分别产生了变化。第四种的空闲区域数量反而减小。起止地址都发生了变化
6、覆盖技术
覆盖技术的实现是把程序划分为若干个功能上相对独立的程序段,按照其自身的逻辑结构使那些不会同时运行的程序段共享同一块内存区域。程序段先保存在磁盘上,当有关程序的前一部分执行结束后,把后续程序段调入内存,覆盖前面的程序段。
7、交换技术
交换技术:在分时系统中,用户的进程比内存能容纳的数量更多,系统将那些不再运行的进程或某一部分调出内存,暂时放在外存上的一个后备存储区,通常称为交换区,当需要运行这些进程时,再将它们装入内存。
8、页式存储管理
#结束语
>预告:本章节内容下次独立排一篇文章,现在有点晚了,吃酸菜鱼去也~ ~
![我的安排😭😭😭](http://upload-images.jianshu.io/upload_images/3810775-1bde0cedfb29dfa5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![time](http://upload-images.jianshu.io/upload_images/3810775-d6de9ab518cb1ad7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![推荐歌曲是不是都成了我的习惯了。还有 这首歌贼鸡儿带感了。。。感觉曾经应该是B站宠儿!就算不是 我也预言这首歌会成为第二个极乐净土这种毒药的。](http://upload-images.jianshu.io/upload_images/3810775-6fe64be673dde759.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
考三四级的朋友们,high起来啊,还有不到两周就要开始怼了。潮水般的快感就要袭来,赶紧把自己往死里怼啊。爽到爆炸!另外@XNC二级C准备好了吗?
#个人宣言
>知识传递力量,技术无国界,文化改变生活!