notebook notebook
首页
  • 计算机网络
  • 计算机系统
  • 数据结构与算法
  • 计算机专业课
  • 设计模式
  • 前端 (opens new window)
  • Java 开发
  • Python 开发
  • Golang 开发
  • Git
  • 软件设计与架构
  • 大数据与分布式系统
  • 常见开发工具

    • Nginx
  • 爬虫
  • Python 数据分析
  • 数据仓库
  • 中间件

    • MySQL
    • Redis
    • Elasticsearch
    • Kafka
  • 深度学习
  • 机器学习
  • 知识图谱
  • 图神经网络
  • 应用安全
  • 渗透测试
  • Linux
  • 云原生
面试
  • 收藏
  • paper 好句
GitHub (opens new window)

学习笔记

啦啦啦,向太阳~
首页
  • 计算机网络
  • 计算机系统
  • 数据结构与算法
  • 计算机专业课
  • 设计模式
  • 前端 (opens new window)
  • Java 开发
  • Python 开发
  • Golang 开发
  • Git
  • 软件设计与架构
  • 大数据与分布式系统
  • 常见开发工具

    • Nginx
  • 爬虫
  • Python 数据分析
  • 数据仓库
  • 中间件

    • MySQL
    • Redis
    • Elasticsearch
    • Kafka
  • 深度学习
  • 机器学习
  • 知识图谱
  • 图神经网络
  • 应用安全
  • 渗透测试
  • Linux
  • 云原生
面试
  • 收藏
  • paper 好句
GitHub (opens new window)
  • csapp

    • 信息的处理与表示
    • 程序的机器级表示

    • 处理器体系结构

    • 优化程序性能
    • 链接

    • 异常控制流
      • 8.1 异常
        • 8.1.1 异常的处理
        • 8.1.2 异常的类别
  • MIT 6.S081

  • 计算机系统
  • csapp
yubin
2021-12-07
目录

异常控制流

# 8.1 异常

处理器中每条指令的过渡称为控制转移,这样的控制转移序列叫做处理器的控制流。

用来响应某些处理器状态变化的控制流的突变称为异常控制流(ECF),状态变化称为事件。

  • 异常控制流发生在计算机系统的各个层次。在高层中,如进程切换(OS+硬件定时器实现)、信号到来(OS实现)、非本地跳转(C运行库实现);在低层中,如异常(OS+硬件实现)。
  • 事件可能和当前指令的执行直接相关,如缺页、算术溢出等;也可能和当前指令的执行无关,如系统定时器产生信号、IO请求完成。

事件发生时,处理器通过异常表进行间接过程调用一个异常处理程序。

# 8.1.1 异常的处理

每个异常有一个唯一的异常号。

系统启动时,操作系统分配和初始化一张称为异常表的跳转表,使得表目 k 包含异常 k 的处理程序的地址。异常号是到异常表的索引,异常表的起始地址放在异常表基址寄存器中。

image-20211207124147205

一旦硬件触发异常,剩下的工作就是由异常处理程序在软件中完成。处理完后通过执行“从中断返回”指令,可选地返回到被中断的程序。

# 8.1.2 异常的类别

类别 原因 异步/同步 返回行为
中断 来自 I/O 设备的信号 异步 总是返回到下一条指令
陷阱 有意的异常,是执行一条指令的结果 同步 总是返回到下一条指令
故障 潜在的可恢复的错误,如缺页 同步 可能返回到当前指令
终止 不可恢复的错误,如硬件错误 同步 不会返回
  • 异步异常是由处理器外部的 I/O 设备中的事件产生的,同步异常是执行一条指令的直接产物。

# 1)中断(interrupt)

硬件中断不是由任何一条专门的指令造成的,是来自处理器外部的 I/O 设备的信号的结果。硬件中断的异常处理程序也叫中断处理程序。

image-20211207125113138

# 2)陷阱(trap)

为了允许对操作系统内核服务的受控访问,处理器提供了syscall n指令,执行该指令会导致一个到异常处理程序的陷阱,处理程序解析参数并调用适当的内核程序。

image-20211207125323810

# 3)故障(fault)

故障由错误情况引起,它可能能够被故障处理程序修正。能修正就在返回后重新执行指令;不能修正则返回到内核的 abort 例程,从而终止应用程序。

image-20211207125544806

一个经典的故障示例是缺页异常。发生缺页时引发故障,缺页处理程序从磁盘加载适当的页面后将控制重新返回给引起故障的指令,从而可以正常继续运行了。

# 4)终止(abort)

终止是不可恢复的致命错误造成的结果,通常是一些硬件错误。终止处理程序从不将控制返回给应用程序。

image-20211207125812604

编辑 (opens new window)
#csapp
上次更新: 2021/12/07, 04:58:57
符号解析与重定位
Introduction and Examples

← 符号解析与重定位 Introduction and Examples→

最近更新
01
Deep Reinforcement Learning
10-03
02
误删数据后怎么办
04-06
03
MySQL 一主多从
03-22
更多文章>
Theme by Vdoing | Copyright © 2021-2024 yubincloud | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×