博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
缺页中断和缺页异常
阅读量:5781 次
发布时间:2019-06-18

本文共 955 字,大约阅读时间需要 3 分钟。

缺页异常

 

会出现缺页异常的情况:

  1. 线性地址不在虚拟地址空间中
  2. 线性地址在虚拟地址空间中,但没有访问权限
  3. 接上一条,没有与物理地址建立映射关系

fork等系统调用时并没有映射物理页,写数据->缺页异常->写时拷贝

  1. 映射关系建立了,但在交换分区中
  2. 页面访问权限不足

 

task_struct: linux描述进程的结构体

1.5个互斥状态,两个终止状态,同时定义了新的睡眠状态可以响应致命信号

  1. pidtgid
  2. 每个进程在内核上都存有进程堆栈,相邻的有一个县城描述符 8k

使用thread_union来存放 thread_info stack

  1. 进程标记 (如还未被执行,被信号杀死,开始关闭等)
  2. 表示进程的亲属关系 通过链表建立兄弟父子关系
  3. 优先级 以及 相应的调度策略
  4. mm  进程地址空间
  5. 信号处理

 

简述异常处理过程

  1. 判断是否在原子操作时出现异常   return0
  2. 判断是否是内核线程(mm_struct ==NULL)如果是进入内核异常处理,通过遍历异常链表试图修正,如果无法通过调试则打印后退出。
  3. 查找后面最近的虚拟地址空间(VMA),如果没有则地址错误,发送信号杀掉进程。
  4. 如果有,判断后面找到的VMA是否为栈(栈可以增长),如果是进入异常错误处理,不是发送信号后杀掉进程。
  5. 判断是否是权限错误
  6. 进行异常处理

先确定线性地址对应的目录项是否存在,如果不存在为引发缺页的进程分配一个物理页框

被访问的页框在主存中,(写时拷贝)将存在的只读页复制到新页框中。fork()后给子进程分配零页,只可以读。进行写操作时

被访问的页框不在主存中,分配页框,分为线性映射,非线性映射,swap映射。malloc后第一次访问该页。

释放信号量,返回0,异常处理完毕。

 

 

缺页中断

 

在请求分页的过程中,如果访问的页面不再内存中,会产生一次缺页中断,在外存中找到所缺的一页将其调入内存。

 

步骤:

  1. 保护cpu现场
  2. 分析中断原因
  3. 转入缺页中断处理函数
  4. 恢复cpu现场,继续执行

LRU算法 最近最久未使用

 

中断时一条指令处理完成后响应中断,异步。(通常不可预知)

异常是一条指令执行时就可以相应,同步。(通常可以预知)

转载于:https://www.cnblogs.com/zhangtiezi/p/8404589.html

你可能感兴趣的文章
基础,基础,还是基础之JAVA基础
查看>>
如何成为一个C++高级程序员
查看>>
haproxy mysql实例配置
查看>>
MySQL 8.0 压缩包版安装方法
查看>>
JS prototype 属性
查看>>
iphone-common-codes-ccteam源代码 CCEncoding.m
查看>>
nginx中配置文件的讲解
查看>>
HTTP库Axios
查看>>
CentOS7下安装python-pip
查看>>
gen already exists but is not a source folder. Convert to a source folder or rename it 的解决办法...
查看>>
20个Linux服务器性能调优技巧
查看>>
填坑记:Uncaught RangeError: Maximum call stack size exceeded
查看>>
SpringCloud之消息总线(Spring Cloud Bus)(八)
查看>>
实时编辑
查看>>
KVO原理分析及使用进阶
查看>>
【348天】每日项目总结系列086(2018.01.19)
查看>>
【294天】我爱刷题系列053(2017.11.26)
查看>>
可替换元素和非可替换元素
查看>>
2016/08/25 The Secret Assumption of Agile
查看>>
(Portal 开发读书笔记)Portlet间交互-PortletSession
查看>>