CSAPP第八章 异常控制流上课笔记(1)
最近有点摸鱼晚上天天打游戏,上课也迷迷糊糊,有点后悔,写个文章追赶一下进度。
目的
了解操作系统程序下降或异常出现的原因 ,异常是再正常不过的事情了,计算机系统是多核多线程的,不止有一个程序,有多个加法器乘法器,理解异常和进程,有助于为操作系统的学习打下基础。异步异常和两种同步异常陷阱:掉操作系统完成函数的功能,还有一种是故障,他不是有意的可以恢复和不可恢复。
控制流概述
控制流
控制流:指令一条条的执行 发生什么事情打断程序的执行,发生事情怎么处理,
异常控制流
改变控制流的两种机制(跳转和分支) 和(调用和返回)
不足:难以对系统的变化进行处理 因为没有参数
系统变化引起的控制流突变叫异常控制流,其他的都是正常控制流。
异常
这里表示的异常不是异常控制流,异常是指控制权转移到操作系统内核中的情况
- 内核是指操作系统常驻内存部分
- 事件示例:被零除、算数运算溢出、缺页、IO请求完成、键盘输入
Return crurent 发现运行的指令没在内存里 发生缺页的现象这个时候需要去硬盘上找指令 Return to next 中断方式相应 我输入的数据转换成ACII码 Abort除以0 终止情况.
异常表/异常向量
异常需要执行异常处理程序 但是有多少个程序 执行哪个处理程序 计算机里有一套机制和数据结构,有操作系统有硬件配合来管理和使用。
IA32中断类型(用户自定义类型)(可屏蔽中断)(软中断指令)
练习1
//因为地址不能是负数 所以用unsigned //根据常识32和64位地址分别占 4个和8个字节
所以答案为
unsigned int et[256];//32位
unsignede long er[256];//6位
异常的分类
- 异步异常:我程序执行过程中,用户突然向输入一个数据打断当前执行的程序,执行完输入的程序之后才能接着执行指令。
- 同步异常:就发生在程序固定的位置,就发生在当前指令处。比如:有一个同步异常叫陷阱(System call/INT80)调用操作比如要打开文件,陷入到操作系统陷入到内核中叫陷阱 INT80,就是一个系统调用,返回到下条指令开始执行 在用户程序区特意写了一条指令来调用操作系统
系统调用的例子:文件打开
首先,把二号功能传递给累加器,syscall可以理解成调用函数,只不过他是调用操作系统的函数,只不过调用的是操作系统陷入到操作系统里,进入到内核态,函数有返回值,累加器rax放的是功能号。通过陷入内核态改变程序执行的流程。由于就在这个位置产生所以叫做同步异常。
另外一种同步异常是故障:像保护,比如这一块内存就禁止访问
- 故障不是有意的但是可以恢复
- 故障的举例:缺页(可恢复),保护故障(不可恢复),浮点异常(浮点处理发生了错误)
- 处理程序要么终止,要么重新执行引起故障的指令(已恢复)
- 如果可以恢复,他就回到当前的指令处。不是下一条指令 比如执行的时候发现指令不在内存而是在硬盘上,还没加载到内存,所以取指肯定取不到,就会产生一个缺页异常这个时候操作系统就会执行缺页异常的中断处理子程序。用中断处理子程序从硬盘上把一个页(比如4096个字节加载到内存里面,加载完之后重新执行那个指令
- (4)如果故障不可恢复那么程序就终止执行,就会异常退出了。比如对只读数据去进行写产生保护故障,
- 有些浮点异常是可恢复的
- 不是有意的,我也不知道这个地区的变量是只读的,我也不知道递归的栈不够用
终止:严重的不可恢复的异常
练习2-3
ABCD 硬件异常可以理解成异步异常
ABC A:同步异常 B同步异常可恢复 C同步异常中的终止或者不可恢复 异常处理程序是内核态的,一般情况下系统不会有返回结果的,除非像陷阱会发送一个返回值,其他一般不会有返回结果的。
异常控制流分为哪几种?(底层的硬件异常)(进程切换)(信号)(还原或者非本地跳转)。
异常控制流
异常控制流分为哪几种?(底层的硬件异常)(进程切换)(信号)(还原或者非本地跳转)。
底层硬件异常建议去接口的那本书上找,本文不做介绍
进程
程序或源程序储存在硬盘中执行的时候加载到硬盘中,需要通过CPU取指译码分析执行,这个时候他就不在硬盘里而是在CPU里,进程占用了计算机两个重要的资源-----CPU和存储器
进程的上下文