访问为何转入系统
分页系统的普通路径依赖有效映射和允许的访问权限。页面暂不驻留、映射尚需建立,或者访问违反保护规则,都可能需要系统介入;具体异常类别与状态编码由架构规定。
因此“缺页”不能一概解读为程序写错,也不能把无效地址当作只要调入内容就能修好。系统必须结合页面状态和自己保存的地址空间资料,判断这是可满足的合法请求,还是应当拒绝的访问。
合法请求可以补页后继续
若合法页面的内容位于外部存储,处理程序取得物理页框,读取内容并更新映射,再让受影响指令按系统规则继续。等待输入输出期间,调度器可以执行其他已经就绪的任务。
内容可能来自交换区,也可能来自原有程序文件。没有空闲页框时还涉及替换与回收;这些操作解释了为何同样一次内存读取,有时会引出远大于普通内存访问的延迟。
参考:[1]
区分缺页、I/O与TLB未命中
TLB没有缓存某个转换时,页面本身可能已经在内存,查页表并补入转换就能继续。TLB未命中与需要取回页面,是不同层次的事件,不能互相替代计数。
Linux的getrusage分别统计不涉及I/O和需要I/O的页面错误,说明缺页也不必然读盘。诊断性能时应查看实际类别和耗时,而不能只把总缺页数量乘上一个固定磁盘延迟。