操作系统对于物理内存的管理
内存体系
由快到慢:
寄存器 > 缓存 > 物理内存 > 磁盘(虚拟内存)
操作系统内存管理目标
抽象:使应用程序不用考虑物理地址空间,只需访问逻辑地址空间
保护:隔离进程间的地址空间
共享:安全可靠有效地完成进程间的数据传递
虚拟化:更多地址空间
地址空间和地址生成
LA 逻辑地址空间 和 PA 物理地址空间
之间通过CPU中的MMU表示映射关系
逻辑地址到物理地址的转换:
链接的三种方式:
- 静态链接:在程序运行之前, 先将各目标模块及它们所需 的库函数连接成一个完整的 可执行文件(装入模块), 之后不再拆开(编译器完成,单道程序阶段,无操作系统)
- 装入时动态链接:将各目标 模块装入内存时,边装入边 链接的链接方式。(早期多道批处理)
- 运行时动态链接:在程序执 行中需要该目标模块时,才 对它进行链接。其优点是便 于修改和更新,便于实现对 目标模块的共享(现代操作系统)
地址安全检测
确保每个程序访问内存空间是合法的
程序调用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) 编辑 收藏 举报