异常
控制流
从给处理器加电开始到断电,PC假设一个值序列a,a…a,其中每个a就是指令I的地址,每次从a到a的过渡即为控制转移(control transfer),控制转移序列即为处理器的控制流(control flow),而**异常就是控制流中的突变,用来响应处理器状态中的某些变化**,其基本思想如下
四类异常⭐
类别 | 原因 | 异步/同步 | 返回行为 |
---|---|---|---|
interrupt-中断 | 来自I/O设备的信号 | 异步 | 总是返回到下一条指令 |
trap-陷阱 | 有意的异常 | 同步 | 总是返回到下一条指令 |
fault-故障 | 潜在的可恢复错误 | 同步 | 可能返回到当前指令 |
abort-终止 | 不可恢复的错误 | 同步 | 不会返回 |
异常处理
异常处理是软硬件一起协作的过程:
- 操作系统在内存中分配并初始化异常表
- 运行时CPU检测到事件,明确异常号k,使用其索引异常表,找到适当的异常处理程序地址
- 开始处理异常 | 处理器 | 内存 | | :—-: | :—-: | | | |
线程与进程
进程(process)具有两大特点:
- 资源所有权: 进程包含存放进程映像的虚拟地址空间
- 调度/执行: 进程具有执行状态和优先级,是可被系统调度与分派的实体
通常把调度/执行的基本单位称为线程,拥有资源所有权的基本单位称为进程
多线程
操作系统在单个进程中支持多个并发执行路径的能力叫做多线程(multithreading)
线程与进程的区别
进程 | 线程 | |
---|---|---|
关联属性 | - 存放映像的虚拟地址空间 - 对处理器,其他进程,文件和IO资源的受保护访问 |
- 线程执行状态 - 未运行线程的上下文 - 执行栈 - 存放局部变量的静态存储空间 - 与其他进程内线程共享的内存和资源访问 |
进程管理 | - 进程只有一个相关的控制块和地址空间 - 进程运行时,CPU寄存器被进程控制 - 未运行时,保存寄存器中内容 |
|
- 每个线程有单独的栈和控制块,其中包含寄存器值,优先级等线程相关属性
- 进程中所有线程共享进程的状态和资源
|
选择题知识点
- 异常是①需要硬件&软件协作处理③依赖硬件:event的发现需要timer一类的硬件
- 对于异常处理程序(exception handle),它可能不会返回,也可能返回到异常发生处
- X86中system call的实现需要:trap;
demand paging的实现需要:fault;
hard disk interrupt的实现需要interrupt
- ⭐进程是资源所有权的单位;线程是调度/执行的单位
- ⭐以下关于进程的说法正确的是:all
①通过进程,可使程序独占CPU和memory
②进程是一个运行的程序
③进程可由异常实现
- MessageLoop的相关函数有GetMessage(),TranslateMessage(),DispatchMessage()
- WIndows程序的起点都是WinMain()
- WIndows系统内核态线程同步的实现依靠:信号量(semaphore)
- 优先级倒置(Priority inversion)指高优先级线程间接等待低优先级线程
- 在时间共享操作系统中,轮询(polling)是不可取的,因为会导致时间浪费
- 下列适合线程的情况有:all
背景进程:数据比较,拼写检查;
页面呈现:在整个web page到达前;
预先加载:在用户还未浏览到下方界面时
- 可重入函数(reentrant function)可并行的被不止一个线程调用
- 锁(lock)指限制临界区(critical section)的访问
- win下线程①由内核级线程实现②有多种同步机制,而linux下是用户级线程
- 一个进程的多个线程共享一个虚拟地址空间