内核缺页异常处理

本文探讨了内核缺页异常的发生原因,包括设计错误、无效参数和vmalloc区域访问,重点讲述了vmalloc异常的正确处理方式,即更新进程页表。此外,介绍了内核如何针对用户态和内核态的缺页异常采取不同策略,如异常修正和异常表,以及在未找到修正例程时如何触发内核Oops状态。
摘要由CSDN通过智能技术生成

在访问内核地址空间时,缺页异常可能被各种条件出发,如下所述:

  • 内核本身的程序设计错误导致访问不正确的地址,这个在稳定版本中永远不会发生,在开发版本中偶尔会发生
  • 内核通过用户空间传递的参数访问了无效地址
  • 访问使用vmalloc分配的区域,触发缺页异常

前两种情况是真正的错误,内核必须使用最后的手段---异常修正(exception fixup)机制来进行处理
vmalloc的情况是导致缺页异常的合理情况,必须加以校正。直至对应的缺页异常发生之前,vmalloc区域中的修改都不会传输到进程的页表中。因此在对vmalloc异常进行处理时,必须从主页表复制适当的访问权限信息到进程的页表中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值