内存

大纲

3_1_1 内存的基础知识

image-20241203114114782

3_1_4 连续分配管理

image-20241209205502502

3_1_5 动态分区匹配算法

image-20241209211228499

内存的基础知识

内存的编址

image-20241203111727115

装入方法

绝对装入

绝对装入:在编译时,如果知道程序将放到内存中的哪个位置,编译程序将产生绝对地址的目标代码。装入程序按照装入模块中的地址,将程序和数据装入内存。

静态重定位

image-20241203112647835

动态重定位

image-20241203113150877

程序的运行

image-20241203113736859

链接的方式

链接的三种方式:

  1. 静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
  2. 装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式。
  3. 运行时动态链接:在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享

内存管理

内存空间的扩充

覆盖技术

image-20241203165122930

本质的意思就是说,只要是是一起运行的程序,那么就可以公用一个覆盖区域

交换技术

image-20241203165756580

内存空间的分配与回收

连续分配方式

单一连续分配

image-20241203170530180

固定分区分配

image-20241203170734534

分区大小不定

如果是分区大小不等,怎么记录分区的大小?

使用一个分区说明表

image-20241203170919958

如果是分区大小不等,有什么问题?

image-20241203171023680

而且会产生内部碎片,也就是说,如果是10m 的应用,那么只能使用分区6,也就回浪费2m 的内存空间

动态分区分配算法

首次适应算法

本质上就是逐个遍历,知道找到合适的大小之后将其占用

image-20241209210055869

可以从空闲分区表和空闲分区链中进行遍历,只需要找到一个合适的就行,然后拆分之后再修改链表的数据

最佳适应算法

image-20241209210459954

这个时候连表的排序是从小到达的,遍历的时候,就只会匹配最临近的大小

最点就是会有很多小的外部碎片

最坏适应算法

image-20241209210736874

临近适应算法

image-20241209211034848

使用循环链表

每次都是从上次匹配的位置开始遍历

非连续性分配管理方式

分页存储

页框/叶帧

image-20241209211718721

页表

相关计算

每一个页表占多少字节

image-20241209221632827

注意为什么是3B 3个bit 是因为需要使用20bit 进行存储,但是计算机之后byte 一个byte 相等于8个bit 所以需要使用3个by t e

页号不占用存储空间

实现如何地址转换

内存
https://tsy244.github.io/2024/12/03/操作系统/内存/
Author
August Rosenberg
Posted on
December 3, 2024
Licensed under