清华大学操作系统课件_向勇老师的讲义汇总
- 格式:ppt
- 大小:1.07 MB
- 文档页数:76
清华⼤学操作系统(陈渝,向勇)课程笔记——(⼗)协同多道程序设计和并发问题主要内容背景—些概念临界区 (Critical section)⽅法1:禁⽤硬件中断⽅法2:基于软件的解决⽅法⽅法3:更⾼级的抽象背景多道程序设计(multi-programming):现代操作系统的重要特性并⾏很有⽤(为什么? )提⽰:多个并发实体:CPU(s),I/O, …,⽤户,…进程/线程:操作系统抽象出来⽤于⽀持多道程序设计CPU调度:实现多道程序设计的机制调度算法-不同的策略独⽴的线程:不和其他线程共享资源或状态确定性=输⼊状态决定结果可重现→能够重现起始条件,I/OI/O调度顺序不重要合作线程:在多个线程中共享状态不确定性不可重现不确定性和不可重现意味着bug可能是间歇性发⽣的进程/线程,计算机/设备需要合作优点1:共享资源—台电脑,多个⽤户⼀个银⾏存款余额,多台ATM机嵌⼊式系统〔机器⼈控制:⼿臂和⼿的协调)优点2:加速I/O操作和计算可以重叠多处理器–将程序分成多个部分并⾏执⾏优点3:模块化将⼤程序分解成⼩程序使系统易于扩展以编译为例,gcc会调⽤cpp,cc1,cc2,as,ld程序可以调⽤函数fork()来创建⼀个新的进程操作系统需要分配⼀个新的并且唯⼀的进程ID因此在内核中,这个系统调⽤会运⾏共享的全局变量翻译成机器指令new_pid = next_pidit ++(不是原⼦操作);1) LOAD next_pid Regl2)STORE Regl new_pid3)INC Regl4STORE Regl next_pid假设两个进程并发执⾏如果next_pid等于100,那么其中⼀个进程得到的ID应该是100,另⼀个进程的ID应该是101,next_pid应该增加到102⽆论多个线程的指令序列怎样交替执⾏,程序都必须正常⼯作多线程程序具有不确定性和不可重现的特点不经过专门设计,调试难度很⾼不确定性要求并⾏程序的正确性先思考清楚问题,把程序的⾏为设计清楚切忌急于着⼿编写代码,碰到问题再调试Race Condition(竞态条件)系统缺陷:结果依赖于并发执⾏或者事件的顺序/时间不确定性不可重现怎样避免竞态?让程序不会被打断Atomic Operation(原⼦操作)原⼦操作是指⼀次不存在任何中断或者失败的执⾏该执⾏成功结束或者根本没有执⾏并且不应该发现任何部分执⾏的状态实际上操作往往不是原⼦的有些看上去是原⼦操作,实际上不是连x++这样的简单语句,实际上是由3条指令构成的有时候甚⾄连单条机器指令都不是原⼦的Pipeline,super-scalar,out-of-order,page fault问题Critical section(临界区)临界区是指进程中的⼀段需要访问共享资源并且当另⼀个进程处于相应代码区域时便不会被执⾏的代码区域Mutual exclusion (互斥)当⼀个进程处于临界区并访问共享资源时,没有其他进程会处于临界区并且访问任何相同的共享资源Dead lock (死锁)两个或以上的进程,在相互等待完成特定任务,⽽最终没法将⾃⾝任务进⾏下去Starvation(饥饿)⼀个可执⾏的进程,被调度器持续忽略,以⾄于虽然处于可执⾏状态却不被执⾏临界区临界区属性互斥:同⼀时间临界区中最多存在⼀个线程Progress:如果⼀个线程想要进⼊临界区,那么它最终会成功有限等待:如果⼀个线程i处于⼊⼝区,那么在i的请求被接受之前,其他线程进⼊临界区的时间是有限制的⽆忙等待(可选)∶如果⼀个进程在等待进⼊临界区,那么在它可以进⼊之前会被挂起临界区代码保护⽅法⽅法1:禁⽤硬件中断没有中断,没有上下⽂切换,因此没有并发硬件将中断处理延迟到中断被启⽤之后⼤多数现代计算机体系结构都提供指令来完成进⼊临界区禁⽤中断离开临界区开启中断缺点⼀旦中断被禁⽤,线程就⽆法被停⽌整个系统都会为你停下来可能导致其他线程处于饥饿状态要是临界区可以任意长怎么办⽆法限制响应中断所需的时间(可能存在硬件影响)所以要⼩⼼使⽤另外,禁⽤软件中断⽆法在多CPU情况下⽆法解决互斥问题⽅法2:基于软件的解决⽅法经典逻辑线程可以共享⼀些共有的变量来同步他们的⾏为。