计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.0-8.1)

时间:2024-04-07 14:17:30

8.0 异常控制流

控制流

  • 处理器只是简单地读取和执行一个指令序列(一次执行一条指令)
  • 这个指令序列就是处理器的控制流 ( control flow or flow of control)

 

改变控制流

  • 改变控制流的两种机制:   
    • 跳转和分支(Jumps and branches)
    • 调用和返回(Call and return)
    • 能够对(由程序变量表示的)程序状态的变化做出反应
  • 不足:难以对系统状态的变化做出反应
    • 磁盘或网络适配器的数据到达
    • 除零错误
    • 用户的键盘输入( Ctrl-C )
    • 系统定时器超时
  •          上述系统变化不能用程序变量表示
  • 现代计算机系统需要针对“控制流发生突变”的情况做出反应,称为“异常控制流”机制

 

异常控制流(Exceptional Control Flow)

  • 发生在计算机系统的所有层次
  • 低层机制(硬件层)
    • 1.异常 (Exceptions)
      • 硬件检测到的事件会触发控制转移到异常处理程序
      • 操作系统和硬件共同实现        
  • 高层机制
    • 2. 进程切换(Process context switch)
      • 通过操作系统和硬件定时器实现
    • 3. 信号(Signals)
      • 操作系统实现
    • 4. 非本地跳转(Nonlocal jumps): setjmp() and longjmp()
      • C运行库实现

 

总结

  • 异常Exceptions
    • 需要非常规控制流的事件
    • 外部产生——中断
    • 内部产生——陷阱和故障
  • 进程Processes
    • 任何给定的时间,系统中都有多个活动进程
    • 但是,在单个内核上,一个时刻只能有一个进程执行
    • 每个进程似乎完全拥有处理器和私有内存空间(的控制)
  • 创建进程
    • fork:1次调用、2次返回
  • 进程退出
    • exit:1次调用、0次返回
  • Reaping and waiting for processes
    • Call wait or waitpid
  • 加载和运行程序
    • execve (或exec函数的其他变体)
    • 一次调用,0次返回(如没有错误)

8.1 异常

  • 异常是指为响应某个事件将控制权转移到操作系统内核的情况
    • 内核指操作系统常驻内存的部分
    • 事件示例:被零除、算术运算溢出、缺页、 I/O请求完成、键盘输入
计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.0-8.1)
  • 每种类型的事件有一个唯一的异常号(Exception numbers )k
  • 异常号k是到异常表的索引(又名中断向量)
  • 任何时候异常k发生,则异常k的处理程序立刻被调用

 

异常表(中断向量表)是一张跳转表,表目k包含异常k的处理程序代码的地址

计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.0-8.1)
计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.0-8.1)
计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.0-8.1)
计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.0-8.1)
计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.0-8.1)
计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.0-8.1)
计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.0-8.1)
计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.0-8.1)
计算机系统课程 笔记总结 CSAPP第八章 异常控制流(8.0-8.1)