操作系统对于物理内存的管理

内存体系

由快到慢:

寄存器 > 缓存 > 物理内存 > 磁盘(虚拟内存)

 

操作系统内存管理目标

抽象:使应用程序不用考虑物理地址空间,只需访问逻辑地址空间

保护:隔离进程间的地址空间

共享:安全可靠有效地完成进程间的数据传递

虚拟化:更多地址空间

 

地址空间和地址生成

LA 逻辑地址空间 和 PA 物理地址空间

之间通过CPU中的MMU表示映射关系

逻辑地址到物理地址的转换:

 

 链接的三种方式:

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

地址安全检测

确保每个程序访问内存空间是合法的

程序调用CPU时,操作系统会给到两个内存数据,逻辑地址空间的基址,和逻辑空间的长度。

如果超出区域,会报错内存异常。

 

内存空间分配与回收

连续内存分配

内存碎片问题

  • 外部碎片:在分配单元间未使用的内存
  • 内部碎片:在分配单元中未使用的内存

分区的动态分配

  分配策略:在程序申请一定空间大小的内存后,实际分配的内存空间

  • 首次分配:使用第一块及递增次序空闲块,简单但容易产生外部碎片
  • 最优适配:使用大小最接近申请空间大小的内存块,小尺寸有效,但产生外部碎片很小难以利用,而且算法开销大,重分配慢,回收分区后可能需要对空闲分区队列重新排序
  • 最差适配:先拆大块,中等尺寸效果较好,但后续如果需要大块空间可能无法满足,算法开销大
  • 邻近适应:每次从上次查找结束位置开始查找空闲块,算法开销小,但会使高地址的大分区也被用完

碎片式压缩整理

压缩式碎片整理

把程序从内存挪到一起

一是不能在程序运行的时候挪动,二是要注意挪动的开销

交换式碎片整理

把等待程序的内存空间挪到硬盘中

 

非连续内存管理

优点:更好内存利用和管理,运行共享代码和数据,支持动态加载和动态链接

缺点:软件管理开销大,以下两种是硬件管理

分段 Segmentation

程序分段地址空间

把程序的逻辑空间分成多段

 

 

 

分段寻址方案

逻辑地址由不同段组成。

把段寻址 s 和段内偏移量 addr 的寻址组合成逻辑地址

 

(图)

分页 Paging

相比分段,每一页的大小是是固定的

物理内存划分成固定大小的帧,如512,4096

逻辑的地址页与物理地址帧的大小相同

每个页框有一个编号,即“页框号”(页框 号=页帧号=内存块号=物理块号=物理页号),页框号从0开始。

 

 

pages to frames 方案: 页表、MMU/TLB

页表

记录页相应帧是否存在

 

 

 

 

 

问题:

1.访问一个内存需要访问2次内存

2.页表可能非常大,解决方案如下:

TLB 快表:缓存近期访问的叶准转换表项

如果TLB命中,物理页号可以很快被获取,降低寻址开销

 

 

多级列表

p1页表存放p2页表启示地址,

 

 

反向页表

和物理空间大小联系更加密切

从物理页查找逻辑页

关联存储器:key - 页号,value - 帧号

或者利用hash table

posted on 2022-04-05 23:45  MIXTAPE_208  阅读(51)  评论(0编辑  收藏  举报

导航