这是我参与「第五届青训营 」伴学笔记创作活动的第 20 天
请求分页存储管理方式
请求分页=基本分页+请求调页功能+页面置换功能。触发缺页中断,将缺少的页从外存调入内存。
缺页中断
访问的页面不在内存,触发缺页中断,产生缺页中断信号,程序被中断,内核态的中断处理程序,将外存调入内存。
如果有空闲页分配空闲页,没有则选择淘汰页,淘汰页内内容如果更改则写回外存,没有则直接覆盖读取即可。
页面置换算法
最佳置换:淘汰后不再使用或最迟被用,无法实现
FIFO:会发生belady异常(分配的物理块越多,反而缺页可能更多,原因:换出页选的不好·)
LRU/LFU
时钟置换:访问置1,缺页则第一遍遍历淘汰0同时1变0,还没有就第二遍找0。淘汰0时优先淘汰没被修改的,修改的还要写到外存,这样可以减少IO次数
页分配策略:
固定分配局部替换 分配一定数量物理内存页,不够就自身换出一部分再换入新的
可变分配全局替换 只要缺页就分配新的内存页
可变分配局部替换 根据缺页率调整新的内存页/换出换入
MMU内存管理单元
虚拟地址和物理地址的转换,控制访问权限
TLB地址转换后援缓冲器:也叫快表,高速缓存,存放最可能访问的页表项。在用户进程切换时只需要flush掉其他用户进程的TLB内容,多个用户进程共享的内核部分的TLB不需要flush。在内核进程和用户进程切换时不需要flush。通过ASID在TLB中区分不同进程,可以不flush
段错误:用户访问虚拟地址,MMU查找后无权访问,产生异常,cpu执行异常处理,把进程终止