一、存储器的层次结构
- 存储层次越往上,存储介质的访问速度越快,相对存储容量也越小。
- 寄存器、高数缓存、主存储器和磁盘缓存属于操作系统存储管理的管辖范畴,掉电后(关机)他们存储的信息不再存在。
- 固定磁盘和可移动存储介质(如U盘)属于设备管理范畴,存储信息将会长期保存。
其中寄存器和主存储器又称为可执行存储器,进程可以在很少的时钟周期内使用一条load或store指令对可执行存储器进行访问,但对辅存的访问则需要通过I/O设备实现。
1.主存储器(内存或主存)
用于保存进程运行时的程序和数据。CPU中的控制部件只能从内存中取得指令和数据,数据能够在内存和寄存器之间传递。
内存的访问速度元低于CPU的执行指令速度,因此在系统中引入寄存器和高速缓存,提升CPU与内存之间的信息交换效率。
2.寄存器
寄存器的访问速度最快,但容量较小,长度一般以字(word)为单位。寄存器用于加速存储器的访问速度,如用寄存器存放操作数,或用地址寄存器加快地址转换速度等。
3.高速缓存
高速缓存的容量大于寄存器而小于内存,访问速度比内存快。高速缓存用于存放主存中经常被访问到的信息,减少访问主存的次数,提高程序的执行速度。当CPU访问一组特定信息时,先检查它是否在高速缓存中,若已存在则直接取出避免访问内存,若没有再从内存中寻找。
4.磁盘缓存
由于磁盘的I/O速度远低于主存的访问速度,因此将磁盘中频繁使用的数据和信息存入磁盘缓存中,以减少对磁盘的访问。磁盘缓存本身并不是单独的存储介质,而是利用主存的存储空间暂存磁盘中读出(或写入)的数据。
二、程序的装入和链接
在系统中,要运行一个程序必须先为程序创建一个进程。要将用户程序转换为一个在内存中可执行的程序一般需要经过以下几个步骤:
- 编译,将用户代码编译成若干目标模块
- 链接,将目标模块与需要用到的库函数链接在一起,形成完整的装入模块
- 装入,将装入模块装入内存
程序的装入
将装入模块装入内存的方式有:绝对装入、可重定位装入和动态运行时装入;
1.绝对装入
在编译时如果已知程序将驻留在内存的什么位置,编译程序将会产生绝对地址的目标代码。绝对装入程序按照模块中的地址将程序和数据装入内存。模块装入后,程序中的逻辑地址和实际地址相同,不需对程序和数据的地址进行修改。
程序中使用的绝对地址可以在编译中由系统给出,也可以由程序员直接赋予(但不建议);
2.可重定位装入
可重定位装入是根据内存的当前情况,将模块装入到内存的适当位置。
采用可重定位装入的方式会使模块中的所有逻辑地址和实际装入内存的地址不同,需要修改指令和数据地址,把对目标程序中指令和数据的修改过程称为重定位。
eg:
3.动态运行时转入方式
动态运行时装入方式在模块装入内存后并不立即把装入模块的相对地址转换为绝对地址,而是等待程序真正需要执行时才进行转换。为使地址转换不影响指令的执行速度,这种方式需要一个重定位寄存器的支持。
程序的链接
链接方式可分为:静态链接、装入时动态链接、运行时动态链接。
1.静态链接方式
三、连续分配方式(存储管理)
连续分配方式指一个用户程序分配一个连续的内存空间。
连续分配方式可进一步分为单一连续分配、固定分区分配、动态分区分配及动态重定位分区分配;
单一连续分配
单一连续分配只能用于单用户、单任务的操作系统中,这种方式将内存分为系统区和用户区两部分,系统区仅提供给系统使用。
固定分区分配
固定分区分配是最简单的可运行多道程序的存储管理方式。这种方法是将用户空间划分为若干个固定大小(各分区之间大小可以不相同,一旦划分大小不变)的分区,每个分区只装入一个作业,因此有几个分区就能并发几个作业。
动态分区分配(重点!)
动态分区分配是根据进程的实际需要,动态分配内存空间(即分区大小可变)。实现可变分区分配时,将涉及到分区分配中所有的数据结构、分区分配算法和分区的分配与回收操作。
1.分区分配中的数据结构
分区分配中的数据结构用来描述空闲分区和已分配的分区情况,主要有空闲分区表和空闲分区链两种。
空闲分区表:用于记录每个空闲分区的情况,每个空闲分区占一个表目,表目中包含分区序号,分区始地址及分区大小等数据。
空闲分区链:在每个分区的起始部分及分区尾部设置设置前后向指针,将空闲分区链接成一个双向链。分区起始部分包含控制分区分配的信息。
2.分区分配算法(重点!)
(1)首次适应算法(first fit)简称FF
算法要求空闲分区链以地址递增的次序链接,在分配内存时从链首开始查找,直到找到一个大小满足要求的空闲分区再按照作业大小从该空间中分配给作业,其余空闲空间仍留着空闲链中。若直至链尾都找不到合适的分区则分配失败。算法每次都要从链首开始查找,查询效率低。
(2)循环首次适应算法(next fit)
与首次适应算法大致相同,区别是循环首次适应不再是每次都从链首开始查找而是从上一次分配后的空闲分区的下一个分区开始。算法也会导致缺乏大的空闲分区。
(3)最佳适应算法(best fit)
最佳表示的是满足要求且最小的空闲分区。为提升查找效率,算法要求空闲分区按空间大小由小到大排序。该算法会导致空间中产生大量难以利用的小空闲区。
(4)最坏适应算法(worst fit)
该算法与最佳适应算法相反,要查找到满足要求且空间最大的分区进行分配。可以使产生小分区的几率变小。算法要求分区按空间大小从大到小排序。
(5)最快适应算法(quick fit)
又称分类搜索。是将空闲分区按照大小进行分类,对于有相同大小的空闲分区单独建立一个空闲分区链表,因此系统中包含多个空闲分区链表,提高了查找效率但使系统开销变大。
3.分区分配操作
在动态分区存储管理方式中,主要的操作是分配内存和回收内存。
可重定位分区分配
![](https://img-blog.csdnimg.cn/cf84895b91234a07a83730372e89e5a9.png)
对换:是指把内存中暂时不能运行的进程或者暂时不用的程序和数据调出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序和数据调入内存