本系列参考王道考研-操作系统以及博主@BitHachi


因为cpu的处理速度很快,而外存的读取速度又很慢,所以我们就需要先加载到内存中,内存的读取速度比外存要快得多,如此实现更高效的处理

从X=X+1大致看一下指令的执行过程




指令的工作基于地址。每个地址对应一个数据的存储单元。


不修改装入模块中的指令地址就直接装入内存的话:


也就是说只有当装入模块使用的内存从#0开始时,不修改装入模块中的指令地址才能行得通
绝对装入 
这也叫就意味着这个程序换一台就不能运行了,此方式灵活性较低
静态重定位

动态重定位



首先我们了解一下什么是链接:
程序的链接阶段主要做了以下几件事:
符号解析:将各个模块中使用的符号(函数名、全局变量名等)替换为实际的地址。例如如果模块A调用模块B的函数foo(),那么链接器会找到模块B中foo()的实际地址,并在模块A的调用指令中填入那个地址。重定位:修改程序中用到的地址,以适应最终的加载地址。例如模块A中有一个data段从0x1000开始,模块B有一个data段从0x2000开始。那么链接器可能决定模块A加载到0x5000,模块B加载到0x6000。这时候链接器需要修改模块A中所有0x1000的地址为0x5000,修改模块B中的0x2000为0x6000。解决外部符号:如果有模块调用了未定义的外部符号(例如调用了标准库函数),那么链接器需要链接适当的库来满足这些外部需求。重复符号处理:如果有多个模块定义了相同的符号,链接器需要决定使用哪一个,并可能报错。生成输出文件:链接的最后,链接器会将所有输入的目标文件组合成一个输出文件(可执行文件或共享库)。这个输出文件就包含了所有符号解析、重定位等处理的结果。所以简单来说,链接的作用是将多个目标模块组合为一个连贯的程序,使其可以顺利执行或被其他程序使用。它解决了跨模块的符号引用和地址变化等问题,并生成最终的输出文件。
静态链接

装入时动态链接
运行时动态链接

我们总结一下这一章:




地址转换三种方式


内存保护的两种方式


最后我们总结一下这一章:





复习一下进程调度

最后我们总结一下这一章:




分区说明表





系统要用怎样的数据结构记录内存的使用情况呢?

当多个空闲分区都能满足要求时,应该选择哪个分区进行分配?

如何进行分区的分配?



如何进行分区的回收?






最后总结一下本章内容:


























为什么页面大小一般设为2的整数次幂?





最后我们总结一下这一章的内容:






例题:

总结一下:

我们前面说了分页存储管理的基本地址变换结构,这一章是对基本地址变换结构的改进版。


能否把整个页表都放在TLB中?

一个例图了解基于快表的地址变换结构

引入快表后,地址变换的过程的文字描述:



因为单级页表存在一些问题,所以引入二级页表和多级页表,有两个问题:



对页表再次分组

二级页表的地址结构及对应关系


上面的部分我们解决了问题一,接下来是问题二,这里简单叙述一下,后面的文章会继续深入剖析。


最后总结一下:











分段比分页更容易实现信息共享的原因主要有:
具体例子:
相比而言,分页实现共享信息较为困难,通常需要更复杂的机制,如复制现有的共享页等,比较低效。所以,总体来说,分段更容易高效实现信息共享。
最后总结一下:








最后总结一下:








最后总结一下:












最后总结一下:













只需一轮

需要两轮

需要三轮:


需要四轮




总结:



驻留集(Resident Set)是操作系统管理内存的一个重要概念。它指的是一个进程当前占用的内存页面集合。
当一个进程运行时,它需要从辅助存储器(如硬盘)将代码和数据读入内存。不可能将整个进程的所有代码和数据都读入内存,因为内存有限。所以,操作系统会根据一定的页面置换算法(如LRU),选择将一些页面驻留在内存中,这些驻留在内存中的页面集合就是驻留集。
驻留集是描述一个进程运行时实际占用内存的页面集合,它的大小和内容随着进程的运行而动态变化,密切相关到操作系统的内存管理和进程调度。








工作集(Working Set)是操作系统内存管理的一个重要概念,与驻留集相类似,但有一定区别。
工作集指的是进程在最近一段时间内实际访问的页面集合。它表示进程近期的内存访问局部性,通过工作集的大小可以反映出进程最近一段时间的内存使用情况和访问模式。
操作系统通过定期统计每个进程的工作集,来发现进程的内存访问模式的变化。当工作集大小发生较大变化时,说明进程的内存访问模式可能已发生改变,这时操作系统会相应地调整进程的驻留集,以适应新的工作集大小和访问模式。
工作集与驻留集的主要区别在于:
总之,工作集和驻留集都描述进程占用和访问的内存,但工作集更注重内存访问模式,用于发现进程内存模式的变化;而驻留集直接影响进程运行,由操作系统根据工作集信息加以管理。两者互为依存,共同服务于操作系统的内存管理。

总结:
