内存分段
- 将程序分成若干个段,每个段有各自的用途
- 运行程序时,不是将整个程序放进内存,而是将各个段放进内存
- PCB中存放各个段的基址,寻找段内数据时根据基址+偏移量来完成
- 进程与操作系统的交互
内存分区
- 动态分区:有内存请求时,从空闲内存中分配出一段内存来响应请求
- 当有多个空闲分区时,应该怎么选择?
- 最佳适配:选择满足要求的最小内存块
- 最差适配:在满足要求的空闲分区中选择最大的分区
- 首先适配:选择第一个满足要求的分区
内存分页
- 针对每个内存请求,系统一页一页的分配响应请求
- 操作系统初始化时就将物理内存分页
- 地址定位:
- 页号 = 地址 / 页面尺寸
- 偏移量 = 地址 % 页面尺寸
多级页表
- 页小了,相应的页表就会增大,这导致内存的浪费
- 页目录表(类比书目录的章)+页表(类比书目录的节),如果要查找某一节的内容首先找到这一章的地方,然后再查具体的某一节。这样一来,既保证了页目录和页号的地址连续又节约了内存。
- 多级页表缺点:每增加一级就要多一次访问内存,比较浪费时间
块表(TLB)
- TLB是寄存器,记录最近使用的页号,当TLB没有命中时就去多级页表寻找对应页的物理地址,再把对应的地址放入TLB中
段页结合的实际内存管理
- 段面向用户,页面向硬件
内存换入
- 当使用到程序某一部分时才将这部分映射到实际内存中
内存换出
- 换入和换出是一起工作的,有换入就该有换出
- 置换算法
- FIFO
- OPT
- LRU
内存换入换出的总结
- 当访问页表发现缺页时从磁盘上读取对应数据放入内存,如果分配的页框不足那么就需要换出页框中的一页数据将该数据写回磁盘