十、内存管理
内存管理
存储器结构
- 存储器包括:寄存器、高速缓存、主存储器、硬盘缓存、固定磁盘和可移动存储介质
- 硬盘缓存是磁盘的一块区域,在进程被挂起时,进程被存入硬盘缓存中
- 高速缓存是一块独立的硬件,是我们平时说的L1,L2,L3级缓存
进程运行的基本原理
- 编译:由编译器将进程代码和依赖库代码编译成计算机能识别的语言
- 链接:由链接程序将进程代码与依赖库代码按照代码逻辑合并,生成装入模块
- 装入:由装入程序将装入模块加载到内存中
程序链接
- 静态链接:在装入阶段前的链接称为静态链接
- 装入时动态链接:进程一边执行装入过程,一边执行链接,称为动态链接
- 运行时动态链接:进程的核心功能在运行,发现需要的一些功能没有,引发缺页中断,然后加载需要的进程功能
- 动态链接的两种方式都是因为程序太大,一次性加载到内存中不合适
程序装入
- 绝对装入:知道内存中的空闲位置,将进程指定加载到这些位置(只适合单个进程)
- 可重定位装入:进程在加载时发现指定加载的位置不空闲,那么重新分配空间的位置加载
- 绝对装入和可重定位装入都是计算好进程所需的内存空间后,提前分配好的
- 动态运行时装入:进程加载多少就分配多少内存,适配运行时动态链接
逻辑地址和物理地址
- 在以前使用绝对装入的时候,代码中的内存地址和内存的物理地址一一对应
- 后来内存可以加载多个进程,代码中的内存地址还是以0作为起始地址,装入程序在加载进程时会做内存顺延,寻找新的空闲地址
- 新的空闲地址与代码中的内存地址是有偏差的,代码中的内存地址是逻辑地址,实际加载的地址要加上地址偏移量,进行逻辑地址与物理地址的转换
内存保护
- 防止cpu在执行进程时,跑到其他进程的内存区域
- 内存保护是使用寄存器将进程的起始地址和结束地址存储起来
内存扩充
- 覆盖:在内存中先划分出覆盖区,这部分区域存放的内容可以被覆盖。动态运行时装入加载所需进程功能就放在覆盖区
- 交换:内存中有些进程虽然加载了,但是使用频率不高。这种不活跃的进程,在内存不够用的时候会被放入硬盘缓存中