本次笔记内容: 3.1 计算机体系结构及内存分层体系 3.2 地址空间和地址生成 3.3 连续内存分配:内存碎片与分区的动态分配 3.4 连续内存分配:压缩式与交换式碎片整理
图中,主存不够,P4的代码和数据被导到硬盘上去(因为不紧急)。
例:c程序通过编译、汇编、链接、载入生成程序在内存中的地址。
.c file 函数位置、变量名即逻辑地址.s file 汇编语言中更加贴近机器语言,但是依然用符号代表变量名字.o file 机器语言中,起始地址都是从0开始的linker将一个项目中多个.o file变成一个单一的executable file。executable file中,不同的.o file程序的地址在单一程序中已经有各自的定义。executable file载入内存中,可能会有偏移量,执行。上述是逻辑地址生成的过程。
具体步骤:
CPU执行某条指令时,算术逻辑单元(arithmetic and logic unit, ALU)发出请求:逻辑地址;
CPU中MMU表查找逻辑地址对应的物理地址,如果没有去内存中找;
找到后,CPU控制器给主存发出情况:需要某个物理地址上的内容。
主存把内存的内容通过总线传给CPU,CPU执行。
操作系统起了什么作用?
操作系统在四步之前,要把映射建立好;确保访问的地址空间是合法、安全的。用数据结构算法进行管理。
需求:
按地址排序的空闲块列表分配需要寻找一个合适的分区重分配需要检查,看是否自由分区能合并于相邻的空闲分区(若有)优势:
简单易于产生更大的空闲块,向着地址空间的结尾劣势:
外部碎片不确定性优势:
当大部分分配是小尺寸时非常有效比较简单劣势:
外部碎片重分配慢易产生很多没用的微小碎片优势:
分配是中等尺寸效果最好
劣势:
重分配慢外部碎片抑郁破碎大的空间块以致大分区无法被分配总结:应该使用更加有效的算法进行内存分配。
看起来很简单,但是重定位的时机、开销都需要考虑。比如运行时无法操作。
利用起硬盘,将等待中的内存放到硬盘上。
问题为:哪些程序进行交换?开销?
