2.2进程状态以及状态转换
2.2.1进程控制块PCB,系统管理进程时,修改PCB
进程在运行时,通用寄存器要保存现场信息,不运行的时候,这些信息都要保存下 来
比如,指针等,现场要保存在自己的空间中,文件系统中。 现场信息包括很多内容。
进程控制块PCB时贯穿始终的
2.2.2状态的设置与进程的控制有关系,什么时候创建进程,什么时候中止进程,完全 由
原语来将进程从一个状态转变为另一个状态 最主要的就是了解进程的控制 3.进程的同步和互斥
这部分与 \与时间有关的错误\有关
同步是开发人员有意识安排的:在完成一个特定功能的软件中,由多个进程协作,这 些进程间有时序关系,互相配合完成,而这些时序是事先安排好的,OS不知道这些关系, 用
户通过OS提供的原语来维持这种时序。
同步:第一个进程执行道某一点后能否继续执行取决于另一个进程能够给它发消息。 进程的互斥:各个进程间要求共享资源,竞争使用资源。 书上讲解了“竞争条件”这一概念。
4.临界区:只允许一个进程使用的资源叫临界资源 竞争使用同一个资源的
不是一个进程的,而是以上进程
对于临界区的要求
1)任何两个进程不能同时处于临界区,即两段程序是不能交叉的 临界区的程序是可以中断执行的
2)如果想进入临界区,又进不去,则阻塞“有空让进,无空等待,有限等待” 3)不应对进程的速度和进程的数目作假设
解决互斥的问题:
*1 用户关闭中断会出现问题(忘了开中断,怎么办?) *2 锁变量在解决互斥问题时,也可以引入新得互斥 *3 严格轮换法
以上三种方法都不能解决互斥。
以下两个都不考:
#1 Peterson Delker 知道算法,但不考 #2 用硬件法解决互斥也不考
重点:5. 掌握信号量以及PV操作 5.1 信号量和PV操作
down --up (首选) P---V (也对)
wait--signal(错误)
原理:在执行过程中,不可分割.
down操作:对信号量:-1,若小于1,则阻塞,送到等待队列
up 操作:+1,若小于等于0,相应的信号量等于等待队列上的进程。
重点中重点:必有P V操作的题:
解题的要素:1)设置好每个信号量(每道题的分数由若干部分组成) 列出所有的信号量及其初值就给分
2)写PV,操作时,PV操作部分不能用自然语言,其余的部分 可用伪码,自然语言均可
begin ---end , repeat --until(搞清楚 2分)
读者---写者(循环) 生产---消费(不循环)
6.几个典型模型(考试不会超过此类模型)
6.1 生产者---消费者类型
思想:由一些 buffer,一些进程向Buffer 中写,另一些向Buffer中读 回家总结:
*1 一个生产者,一个消费者,一个buffer *2 一个生产者,一个消费者,一些buffer
*3 一个生产者,多个消费者,一个或者多个buffer
*4 多个生产者,多个消费者,一个或者多个buffer(最复杂,不考!0)
6.2 哲学家进餐问题(认真读书上的每句话)
对于多个竞争进程互斥访问资源是非常有用的!
6.3 读者---写者问题(P42) 对共享资源的操作
读有许多读者,但写时只有一个写。
若是两组读者问题,第二个读者将第一个得拷贝过来,变量改变一下 2003年的考研题,运河问题均是读者---写者问题 2003年考研题思路:
如何限制只有3个过,第四个不能过。 关键在于问题如何分解
树上这种读者,写者会出现饥饿,但本题要求不出现饥饿 大船方向:写者,小船方向:写者
把原来程序的框架写出,将细节只允许3个船过(不允许出现饥饿)补充进去
6.4 理发师问题(P43)
6.5 吸烟者模型
小的问题:eg:银行叫号, 阅览室问题,(来一个申请一个资源,若干个进程对资 源的使用问题),考场问题(同步关系,比较简单)
做题套路:1)先写出程序 2)找出进程间的关系(分解开找,先找互斥,再找同步,一 个关系设置一个信号量) 3)P,V嵌入到相应的位置,信号量是在找关系的时候定好的!一 个一个关系找,不要嫌麻烦 4)赋好初值 5)注意细节(是否需要循环)
PV匹配,但存在 if--else 语局时会有问题,信号量的操作,只能出现在P V中,而不会 出现在P,V语句之外,且不要写出有死锁的程序。 五. 进程通信
进程通信包括同步,互斥,本部分是高级的进程通信,P,V是简单进程通信! linux中,信号量,共享内存,消息队列,Socket,管道均是通信机制 Windows中,互斥队列,信号量对象等均是通信机制。
分为如下几类: 1. 共享内存
与读--写者问题是同一模型,若P个进程互相通信(重点),要了解实现和设计细节
1.1 设置共享内存存取方式
读者如何互斥,写者如何互斥 1.2消息传递方式(OS 中用的多) 设计要点:
1)两个进程间收发消息模型 send-receive的操作来完成
消息的传递会产生如下问题:发送的消息会不会丢失,解决方案:作一个回答 ;
应答会不会丢!
重发一条消息,接受道两个同一信息所带来的问题! 消息本身会不会有差错!
2) 给谁发消息,进程的命名会不会产生二义性! 3)
以上问题会在多机系统中出现
如何知道所发的消息是正确的,合法的(安全性) 4)有几种可能性来实现消息的传递 有阻塞,无阻塞,有无缓冲 a:消息传递是最常用的
系统中会开辟出缓冲区,系统把消息从A地址空间复制到buffer
然后从buffer中放到消息队列中,挂到B地址空间(接受进程的地址空间) 这个buffer是有缓冲的。
消息缓冲是:生产----消费者模型 b:信箱模型
建一个信箱,把消息放在信箱中 一套操作:建信箱,信箱满如何办 c:有/无阻塞
d:管道:建立两个进程通信的通路,实现时利用了文件系统,在文件系统中支持 通过读/写文件实现! write---read!
六:进程调度
处理机调度:在有些书上分为两个层次 1):CPU调度,2)中级调度 :两极调度 在这里狭义的说法就是选择哪些进程上CPU,考虑以下问题 1)什么原则(what) 2)什么时候(when) 3)如何进行(How)
1.what 什么算法:FIFO,时间片轮转法,优先级调度,搞清调度问题的区别
*FIFO:一个进程上CPU后,除非由于它自身的原因,否则没有进程能够打断它, (#基于优先级的不可剥夺算法) 时间片轮转法,时间片用完就切换下来
基于优先级:1):抢占:一旦有了高优先级就可以切换原来运行的进程! 2):不可抢占
可变的一定是动态的,固定的一定是静态的。 2机制和策略问题在此部分有所体现 策略是用户可选的 机制是定好的
最新版本的OS要求抢占
多级排列:几种策略的结合(时间片,优先级,抢占)
2)时机(WHEN) 什么时候做什么工作
什么时候进行进程调度:一个进程运行完毕,进程出错,时间片到,基于优先级的可抢占 式
调度,自己用阻塞原语将自己阻塞
3)如何进行上下文切换(HOW)
一个进程让出来,另一个进程上去。
如何保存被换下来的现场,以及如何将要换上去的现场换上去, 是用汇编来做的
线程和进程之间的关系问题:
如果同一系统中线程和进程都存在,他们的关系: 原来进程:资源分配和CPU调度的单位;
接着:进程粒度变小,进程只管分配资源,线程是CPU调度单位, 线程的引入:从资源系统开销的角度,系统使用的角度。