内存
大纲
3_1_1 内存的基础知识
3_1_4 连续分配管理
3_1_5 动态分区匹配算法
内存的基础知识
内存的编址
装入方法
绝对装入
绝对装入:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。
静态重定位
动态重定位
程序的运行
链接的方式
链接的三种方式:
- 静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
- 装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式。
- 运行时动态链接:在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享
内存管理
内存空间的扩充
覆盖技术
本质的意思就是说,只要是是一起运行的程序,那么就可以公用一个覆盖区域
交换技术
内存空间的分配与回收
连续分配方式
单一连续分配
固定分区分配
分区大小不定
如果是分区大小不等,怎么记录分区的大小?
使用一个分区说明表
如果是分区大小不等,有什么问题?
而且会产生内部碎片,也就是说,如果是10m 的应用,那么只能使用分区6,也就回浪费2m 的内存空间
动态分区分配算法
首次适应算法
本质上就是逐个遍历,知道找到合适的大小之后将其占用
可以从空闲分区表和空闲分区链中进行遍历,只需要找到一个合适的就行,然后拆分之后再修改链表的数据
最佳适应算法
这个时候连表的排序是从小到达的,遍历的时候,就只会匹配最临近的大小
最点就是会有很多小的外部碎片
最坏适应算法
临近适应算法
使用循环链表
每次都是从上次匹配的位置开始遍历
非连续性分配管理方式
分页存储
页框/叶帧
页表
相关计算
每一个页表占多少字节
注意为什么是3B 3个bit 是因为需要使用20bit 进行存储,但是计算机之后byte 一个byte 相等于8个bit 所以需要使用3个by t e
页号不占用存储空间
实现如何地址转换
内存
https://tsy244.github.io/2024/12/03/操作系统/内存/