十、内存管理

35 阅读3分钟

内存管理

存储器结构

  • 存储器包括:寄存器、高速缓存、主存储器、硬盘缓存、固定磁盘和可移动存储介质
  • 硬盘缓存是磁盘的一块区域,在进程被挂起时,进程被存入硬盘缓存中
  • 高速缓存是一块独立的硬件,是我们平时说的L1,L2,L3级缓存

进程运行的基本原理

  • 编译:由编译器将进程代码和依赖库代码编译成计算机能识别的语言
  • 链接:由链接程序将进程代码与依赖库代码按照代码逻辑合并,生成装入模块
  • 装入:由装入程序将装入模块加载到内存中

程序链接

  • 静态链接:在装入阶段前的链接称为静态链接
  • 装入时动态链接:进程一边执行装入过程,一边执行链接,称为动态链接
  • 运行时动态链接:进程的核心功能在运行,发现需要的一些功能没有,引发缺页中断,然后加载需要的进程功能
  • 动态链接的两种方式都是因为程序太大,一次性加载到内存中不合适

程序装入

  • 绝对装入:知道内存中的空闲位置,将进程指定加载到这些位置(只适合单个进程)
  • 可重定位装入:进程在加载时发现指定加载的位置不空闲,那么重新分配空间的位置加载
  • 绝对装入和可重定位装入都是计算好进程所需的内存空间后,提前分配好的
  • 动态运行时装入:进程加载多少就分配多少内存,适配运行时动态链接

逻辑地址和物理地址

  • 在以前使用绝对装入的时候,代码中的内存地址和内存的物理地址一一对应
  • 后来内存可以加载多个进程,代码中的内存地址还是以0作为起始地址,装入程序在加载进程时会做内存顺延,寻找新的空闲地址
  • 新的空闲地址与代码中的内存地址是有偏差的,代码中的内存地址是逻辑地址,实际加载的地址要加上地址偏移量,进行逻辑地址与物理地址的转换

内存保护

  • 防止cpu在执行进程时,跑到其他进程的内存区域
  • 内存保护是使用寄存器将进程的起始地址和结束地址存储起来

内存扩充

  • 覆盖:在内存中先划分出覆盖区,这部分区域存放的内容可以被覆盖。动态运行时装入加载所需进程功能就放在覆盖区
  • 交换:内存中有些进程虽然加载了,但是使用频率不高。这种不活跃的进程,在内存不够用的时候会被放入硬盘缓存中