1、操作系统概述
2、进程管理
进程:为了能使程序并发执行,并且可以对并发执行的程序加以控制和描述,人们引入了“进程”的概念。
2.1 进程的状态
2.2 前驱图
2.3 进程的同步与互斥
互斥的反义词是共享
同步的反义词是异步
生产者消费者
市场就是互斥的
同步就是生产者在市场放入资源会等待消费者把资源拿走后再次放入资源
2.4 PV操作
对于上面的生产者——消费者问题,s1的初值为1、s2的初值为0,我们参照上面的图,假设s1为空区,s2为满区。
①先执行生产者,后执行消费者:首先P(s1),表示生产者生产产品,要在空区中进行,当执行完P(s1),就代表生产了一个产品,此时空区数量减少1,再执行V(s2),满区数量增加1,即此时s1=s1-1=0、s2=s2+1=1。接下来我们如果继续执行生产者操作P(s1),s1=s1-1=-1,此时s1<0,对于P操作,就要进入等待队列中等候。所以我们此时只能执行消费者操作,首先P(s2),表示消费者消费产品,要在满区中进行,当执行完P(s2),就代表消费了一个产品,此时满区数量减少1,再执行V(s1),空区数量增加1,即此时s2=s2-1=0、s1=s1+1=0。
②先执行消费者,后执行生产者:首先P(s2),表示消费者消费产品,要在满区中进行,s2的初值为0,经过P操作,s2=s2-1=-1,此时s2小于0,无法继续执行下去。换一种思路理解就是,这种情况下,生产者还没有生产任何一个产品,那么消费者自然是无法消费产品的(因为空区的数量为0)。
PV操作练习
答案选 A C
解析:我们来看上面这道题,购书者和收银员两个进程,设置了三个信号量:S1、S2、Sn(初值分别为0、0、n),可以假设有两种情况:①先执行购书者进程,后执行收银员进程(此情况符合大家日常去书店买书的情形),②先执行收银员进程,后执行购书者进程(此情况不太符合常理,如果没有人来书店买书,那收银员去为谁结账呢???),所以我们只能采取第一种情况:先执行购书者进程、后执行收银员进程。
首先P(Sn):Sn=Sn-1,表示有一个购书者进入书店,此时书店最多允许进入的购书者人数就应该减少1;之后购书者可以进行购书,后面进入付款步骤(联系到a1和a2),此时我们想,在购书者没有选择购书付款之前,收银员应该是被阻塞的(通俗的讲:就是坐在那里喝茶,闲着没事干),所以在b1这里需要一个P操作来阻塞它,只有当购书者付款步骤中的a1来到收银员面前结账时,收银员才有事情可做,即a1这里应该是与b1(收银员为购书者结账)相对应的V操作,所以a1:V(S1)、b1:P(S1)。即购书者买书付款→收银员进行结账,购书者不买书或者没有购书者→收银员没事干(阻塞)。
下面我们这样考虑,因为购书者此时在收银员这里等待付款,并不是说购书者直接扔几张100的红票子直接就走人了,而是需要等待收银员把购书者所买书籍一一扫码消磁、计算出总价之后,再由购书者付款,所以在这期间,购书者是在等待(即购书者处于阻塞状态),也就是说a2这里需要一个P操作来阻塞购书者,而b2需要一个V操作与a2相对应,所以a2:P(S2)、b2:V(S2)。即收银员将总价计算好→购书者进行付款,收银员结账过程中→购书者等待(阻塞)。
2.5 PV操作与前驱图
答案:C、A、A
2.6 死锁问题
死锁的预防与避免
2.7 银行家算法
分配资源的原则
对于银行家算法这类问题,其实并不是太难。上面这道题,首先我们需要计算的就是当前系统中还有多少可用的资源,因为三类资源的总数分别为9、8、5,而已经分配给5个进程的三类资源数为:7、7、5,所以此时这三类资源还剩2、1、0。下面的做法其实就是将当前可用的资源数分配给5个进程中的一个,看能否达到它的最大需求量,如果不能,则选择其他进程;如果能,就加上该进程已分配的资源数,运行完释放,此时资源数=已分配给该进程的资源数+当前系统中剩余的资源数。后面是同样的道理,继续分配给其他的进程,能满足最大需求量就分配,直到所有进程都可以顺序运行,就可以找到这样一条安全序列来保证系统不发生死锁。
而下面这种情况,当运行完P2进程,将可用资源数分配给P1进程时,无法达到P1的最大需求量,所以系统无法继续运行下去,就会发生死锁,这就是一个不安全序列!!!
过程: