zoukankan      html  css  js  c++  java
  • 缺页中断和缺页异常

    缺页异常

     

    会出现缺页异常的情况:

    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算法 最近最久未使用

     

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

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

  • 相关阅读:
    采坑总结01
    Django设置联合唯一约束 -- migrate时报错处理
    Web前端开发资源整理
    kindEditor 使用
    Django模版语言自定义标签-实现前端 关联组合过滤查询
    django views视图函数返回值 return redirect httpresponse总结
    前端图片实现以瀑布流样式显示
    性能优化中CPU、内存、磁盘IO、网络性能的依赖(转)
    几种浏览器内核(百度百科)
    特殊格式文件(视频、声音等) 在数据库中的存储方式
  • 原文地址:https://www.cnblogs.com/zhangtiezi/p/8404589.html
Copyright © 2011-2022 走看看