期末复习其实已经过了好久,当时复习的时候写了md文件来看。
就放在这里造福学弟学妹/自己以后复习看看吧。
换了windows之后感觉用md文档方便好多。
部分图片后续有时间再传上来吧。
操作系统2
第四章
编译 -> 链接(形成逻辑地址) -> 装入(地址变换)
装入
绝对装入(单道程序)
可重定位装入
不允许程序运行时在内存中移动位置
动态运行时的装入方式(重定位寄存器)
经常换入换出
链接 形成逻辑地址
(根据时间不同划分)
动态链接与程序的逻辑结构相关,分段存储管理将程序按照逻辑段划分,有利于其动态链接。
静态链接
装入时动态链接
运行时动态链接
连续分配存储管理 (分区是在装入时建立的)
单一连续分配
分为系统区、用户区,单一程序用户空间独占
固定分区分配
可实现静态重定位
-
分区大小相等
-
分区大小不等
动态分区分配(可变分区分配)
基于顺序搜索的动态分区分配算法(注意:可能每次分区需要排序,问第几个的时候特别注意)
首次适应(FF)
① 优先利用低地址空闲区,保留高地址大空闲区;
② 低地址不断划分,留下碎片;
③ 每次都从低地址开始查找,增加开销。
循环首次适应(NF)
从上一次找到的空闲分区的下个分区开始查找第一个合适的空闲分区。
使分区更均匀,减少了开销,但缺少大分区。
最佳适应(BF) (最易产生内存碎片)
需要排序
容易产生碎片。
最坏适应(WF)
需要排序
产生碎片的可能性最小,查找效率高。
基于索引搜索的动态分区分配算法
快速适应(quick fit)
对于每一类具有相同容量的所有空闲分区,单独设立一个空闲分区链表。
在内存中设立一张管理索引表,其中的每一个索引表项对应了一种空闲分区类型。
以进程为单位分配空闲分区。
查找效率高,系统开销大。
伙伴系统(buddy system)
分配长度为n的存储空间,计算i,使2i-1<n≤2i,在2i空闲分区链表中找,找不到则在2(i+1)中分出一个,分成两个相等的分区,一个分配,一个加入链表。
对一个大小为2^k,地址为x的内存块,其伙伴块的地址为
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2i4kXiqj-1599102180687)(C:\Users\Dimension\Desktop\os\图片1.png)]
哈希算法
构造一张以空闲分区大小为关键字的哈希表
动态可重定位分区分配
紧凑
动态重定位(增设重定位寄存器,存放程序在内存中的起始地址) 动态运行时装入的方式中,作业装入内存后的所有地址是逻辑地址。执行时再 相对地址+重定位寄存器中存放的程序在内存中的起始地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A5qxocfs-1599102180691)(C:\Users\Dimension\Desktop\os\动态重定位示意图.jpg)]
动态重定位分区分配算法与动态分区分配算法区别:增加了紧凑
覆盖、对换(交换)
用来扩充内存的两种方法
覆盖用于同一进程,对换在不同进程之间进行。
覆盖:把空间分为一个固定区,若干覆盖区,经常活跃的部分放在固定区,即将访问的放在覆盖区,其他段放在外存。内存中能更新的地方只有覆盖区的段。
对换:把处于等待状态的程序从内存移到辅存换出,把准备好竞争cpu的换入。
覆盖在单一连续存储管理、固定分区分配存储管理中可使用
对换类型:整体、页面(分段)对换
对文件区管理的目标
提高文件存储空间利用率。离散分配。
对对换区管理的目标(易错)
提高进程换入和换出的速度。连续分配
回收
4种情况
进程的换入换出
离散分配
分页存储管理
物理块=页框
地址变换:页号 -> 物理块号
具有快表 (TLB)
计算访存时间
EAT=а×λ+(t+λ)(1—а)+t=2t+λ—t×а
λ表示查找快表所需要的时间,а表示命中率,t表示访问一次内存所需要的时间
注意一次访存时间是必需的,其他的查找过程另算。
两级、多级页表
多级页表不会加快地址的变换速度。但能减少页表所占的连续内存空间。
反置页表
每个物理块设置一个页表项,按物理块编号排序。
分段存储管理
段号位数决定了每个进程最多可以分几个段,段内地址位数决定了每个段的最大长度。
优点/要求:
- 方便编程
- 信息共享
- 信息保护
- 动态增长
- 动态链接
2次访存
分页和分段的区别:
- 页是信息的物理单位
- 页的大小固定且由系统决定/
- 分页的用户程序地址空间是一维的
信息共享:可重入
不允许可重入代码在执行中有任何改变。
全局变量不可重入
局部变量可重入
段页式存储管理(碎片最少)
3次访存
碎片
内碎片:分页、固定分区、段页式存储管理
外碎片:分段式存储管理