教材学习内容总结
异常处理
·异常号:到异常表中的索引
·异常表基址寄存器:异常表的起始地址存放的位置。
异常与过程调用:
(1)过程调用时,在跳转到处理器之前,处理器将返回地址压入栈中。然而,根据异常的类型,返回地址要么是当前指令,要么是下一条指令。
(2)处理器把一些额外的处理器状态压入栈里,在处理程序返回时,重新开始被中断的程序会需要这些状态。
(3)如果控制从一个用户程序转移到内核,那么所有这些项目都被压到内核栈中,而不是压到用户栈中。
(4)异常处理程序运行在内核模式下,意味着它们对所有的系统资源都有完全的访问权限。
异常分为:中断、陷阱、故障和终止。
1·中断:异步发生,是来自处理器外部的I/O设备的信号的结果。
(1)硬件异常中断处理程序通常称为中断处理程序。
(2)异步异常是有处理器外部的I/O设备中的时间产生的,同步异常是执行一条指令的直接产物。
(3)陷阱、故障、终止时同步发生的,是执行当前指令的结果,我们把这类指令叫做故障指令。
2·陷阱和系统调用
(1)陷阱最重要的用途是在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用。
(2)普通的函数运行在用户模式中,用户模式限制了函数可以执行的指令的类型,而且它们只能访问与调用函数相同的栈。系统调用运行在内核模式中,内核模式允许系统调用执行指令,并访问定义在内核中的栈。
3·故障:是由错误情况引起的。
例如:abort例程会终止引起故障的应用程序。
根据故障是否能够被修复,故障处理程序要么重新执行引起故障的指令,要么终止。例如:缺页故障。
4·终止:是不可恢复的致命错误造成的结果,通常是一些硬件错误。终止处理程序从不将控制返回给应用程序。
上下文切换
机制:
·保存当前进程的上下文
·恢复某个先前被抢占的进程被保存的上下文
·将控制传递给这个新恢复的进程
上下文就是内核重新启动一个被抢占的进程所需的状态。
上下文切换的情况:
1、当内核代表用户执行系统调用时
2、中断时
信号
•底层的硬件异常是由内核异常处理程序处理的,正常情况下,对用户进程而言是不可见的。
1、发送信号:内核通过更新目的进程上下文中的某个状态,发送(递送)一个信号给目的进程。
发送信号的两个原因:
(1)内核监测到一个系统事件,比如被零除错误或者子进程终止。
(2)一个进程调用了kill函数,显式地要求内核发送一个信号给目的进程。一个进程可以发送信号给它自己。
2、接收信号:信号处理程序捕获信号的基本思想。
信号处理问题
1、待处理信号被阻塞
2、待处理信号不会排队等待
3、系统调用可以被中断
部分代码截图
代码托管截图
建立的项目结构
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 4000行 | 25篇 | 350小时 | |
第一周 | 0/ 0 | 2/2 | 20/30 | |
第二周 | 100/100 | 1/3 | 20/50 | |
第三周 | 300/400 | 1/4 | 20/70 | |
第四周 | 0/400 | 0/4 | 0/70 | |
第五周 | 300/700 | 2/6 | 20/90 | |
第六周 | 100/800 | 2/8 | 20/110 | |
第七周 | 100/900 | 2/10 | 20/130 | |
第八周 | 0/900 | 3/13 | 20/150 | |
第九周 | 200/1100 | 3/16 | 20/170 | |
第十周 | 300/1400 | 3/19 | 25/195 | |
第十一周 | 500/1400 | 3/19 | 35/230 |