目录





程序执行前需要先放到内存中才能被CPU处理——缓和CPU与硬盘之间的速度矛盾








- 静态链接:程序运行之前,将库函数连接成一个完整的可执行程序
- 装入时动态链接:将用户源程序编译后得到目标模块,装入内存时,采用边装入边链接的方式
- 运行时动态链接:对于某些目标模块的链接,程序需要时才会对其链接 ,便于修改和更新,便于实现对目标模块的共享









注意: PCB 会常驻内存,不会被换出外存 ,其内部记录了该进程换出去的那个位置


连续分配:指为用户进程分配的必须是一个连续的内存空间






动态分区分配没有内部碎片,但是有外部碎片。
如果内存中空闲空间的总和本来可以满足某进程的要求但由于进程需要的是一整块连续的内存空间,因此这些“碎片”不能满足进程的需求可以通过紧凑(拼凑,Compaction) 技术来解决外部碎片。

在动态分区分配方式中,当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配?
算法思想: 每次都从低地址开始查找,找到第一个能满足大小的空闲分区。
如何实现: 空闲分区以地址递增的次序排列。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

算法思想: 由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域。因此为了保证当“大进程”到来时能有连续的大片空间,可以尽可能多地留下大片的空闲区即,优先使用更小的空闲区。
如何实现: 空闲分区按容量递增次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

又称 最大适应算法 (Largest Fit)
算法思想: 为了解决最佳适应算法的问题-一即留下太多难以利用的小碎片,可以在每次分配时优先使用最大的连续空闲区,这样分配后剩余的空闲区就不会太小,更方便使用。
如何实现: 空闲分区按容量递减次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

算法思想: 首次适应算法每次都从链头开始查找的。这可能会导致低地址部分出现很多小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销。如果每次都从上次查找结束的位置开始检索,就能解决上述问题。
如何实现: 空闲分区以地址递增的顺序排列 (可排成一个循环链表)。每次分配内存时从上次查找结束的位置开始查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。


为用户进程分配的可以是一些分散的内存空间









总结

用于实现逻辑地址到物理地址转换的一组硬件机构





总结

是基本地址变换机构的改进版本,可以让地址变化的过程更快





局部性原理


TLB和普通Cache 的区别--TLB 中只有表项的副本,而普通Cache 中可能会有其他各种数据的副本
- 根据页号查询页表的方法: K 号页对应的页表项存放位置 = 页表始址 + K*4要在所有的页表项都连续存放的基础上才能用这种方法找到页表项
- 根据局部性原理可知,很多时候,进程在一段时间内只需要访问某几个页面就可以正常运行了。因此没有必要让整个页表都常驻内存。
由上述分析可得到单级页表的问题如下:







![]()

与“分页”最大的区别就是--离散分配时所分配地址空间的基本单位不同

















虚拟内存技术,允许一个作业分多次调入内存。如果采用连续分配方式,会不方便实现。因此,虚拟内存的实现需要建立在离散分配的内存管理方式基础上。
主要思想:在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。
- 操作系统要提供请求调页 (或请求调段) 功能,即把需要的分页/端从外存调入内存中
- 操作系统要提供页面置换 或段置换) 的功能,即把暂时不需要的分页/端从内存调出外存中




未修改过的页面不需要写回外存的原因是,如果页面在内存期间没有被修改过,那么其与外存中的页面是一致的,不需要进行同步操作。因此,在页面置换时,只需要将被淘汰的未修改页面从内存中移除即可,不需要进行写回操作,以提高系统的效率。





最佳置换算法 (OPT,Optimal): 每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。

最佳置换算法可以保证最低的缺页率,但实际上,只有在进程执行的过程中才能知道接下来会访问到的是哪个页面。操作系统无法提前预判页面访问序列。因此,最佳置换算法是无法实现的。
先进先出置换算法(FIFO): 每次选择淘汰的页面是最早进入内存的页面
实现方法:把调入内存的页面根据调入的先后顺序排成一个队列,需要换出页面时选择队头页面即可
队列的最大长度取决于系统为进程分配了多少个内存块。


最近最久未使用置换算法 (LRU,least recently used): 每次淘汰的页面是最近最久未使用的页面
实现方法: 赋予每个页面对应的页表项中,用访问字段记录该页面自上次被访问以来所经历的时间t.当需要淘汰一个页面时,选择现有页面中t值最大的,即最近最久未使用的页面。




驻留集: 指请求分页存储管理中给进程分配的物理块的集合。
在采用了虚拟存储技术的系统中,驻留集大小一般小于进程的总大小。
考虑一个极端情况,若某进程共有100个页面,则该进程的驻留大小为100时进程可以全部放入内存,运行期间不可能再发生决页。若驻留集大小为1,则进程运行期间必定会极频繁地缺页



系统会锁定一些页面,这些页面中的内容不能置换出外存(如: 重要的内核数据可以设为“锁定”)




内存映射文件一一操作系统向上层程序员提供的功能(系统调用)



