进程管理
进程是程序中一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位,由程序块、进程控制块(PCB)和数据块三部分组成
程序和进程区别:进程是程序一次执行过程。程序是一个静态的概念,而进程是动态的概念。
进程的状态
进程的三态模型
等待又被称为阻塞
进程在就绪时,所有需要的资源都就绪,只需要等待CPU调度
运行状态可以回到就绪,也可以进入等待(阻塞)。当CPU时间片用完,不能再占用资源了,或者有更高优先级的进程调度时,低优先进程会回到就绪;运行完很有可能会等待某些事件(比如I/O),会**进入等待(阻塞)**状态
进入等待时,只有等待的事件发生才会进入就绪状态
五态模型
了解即可,主要考查三态
进程的互斥与同步
进程的互斥:合作进程的间接制约关系,因为需要争夺临界资源(比如图中独木桥)
进程的同步:合作进程之间的直接制约关系
PV操作
一些概念:
**临界资源:**诸进程间需要互斥方式对其进行共享的资源,如打印机
临界区:每个进程中访问临界资源的那段代码
**信号量:**一种特殊变量
除了起始与终止进程,PV操作在进程中只能有一次,并且需要成对出现
详情:
**P操作:**申请资源的操作
**V操作:**释放资源的操作
**S:**信号量
分析:
对于P操作,申请资源,使信号量-1,如果信号量(代表资源数)不够,那么就阻塞,直到资源足够,被V操作唤起,就继续P操作
对于V操作,释放资源,使信号量+1,如果信号量(资源数)<=0,说明有任务在阻塞,那么就唤起一个阻塞的任务
举个例子:
有两个某类资源,四个进程A、B、C、D要用该类资源,最开始S=2,当A进入,S=1,当B进入S=0,表明该类资源刚好用完, 当C进入时Sem=-1,表明有一个进程被阻塞了,D进入,S=-2。当A用完该类资源时,进行V操作,S=-1,释放该类资源,而这时S<0,表明有进程阻塞在该类资源上,于是唤醒一个。
互斥模型
多个进程共享一台打印机的问题
互斥模型初始信号量为1
P(S);
使用打印机;
V(S);
后续代码;
同步模型
单缓冲区生产者、消费者问题
[解析]:
s1表示市场容量,初值1;s2表示商品量,初值0
生产者生产一个产品后,P(S1)申请市场位,如果有,送入缓冲,否则阻塞;然后V(S2)释放一个商品量
消费者先P(S2)申请一个产品,如果没有,阻塞,否则取产品;然后V(S1)释放一个市场位,消费产品
来一道例题
答案 : A C
[解析]:
碰到这种题,先从简单部分入手。
先看收银员进程,收银员收费,肯定是先等待,再收费,然后唤醒下一个(接待人数+1),所以b1 b2应该是P(S1) V(S2)
再看顾客,当顾客进店,要进行购书,肯定需要先唤醒收银员,收费完毕后,离开(接待人数保持为1)所以是V(S1) P(S2)
前驱图
如图所示的前驱图,每一个圆圈表示一个进程,被箭头指向的必须等待指向者完成
箭头尖是入度 根部是出度
死锁问题
如果一个进程在等待一件不可能的事情,那么会发生进程死锁
如果一个或多个进程死锁,就会导致系统死锁
例:
系统有五个进程: A、 B、 C、 D、 E,这五个进程都需要四个系统资源,系统至少有多少个资源,不可能发生死锁?
[解析]:3 3 3 3 4时不可能发生死锁
形成死锁的必要条件
四个必要条件:互斥、保持和等待、不剥夺、环路等待
如果要预防死锁,就要打破这四个必要条件
如果要避免死锁,需要有序资源分配法或者银行家算法
有序资源分配:逐进程分配资源,类似于排队
**银行家算法:**对资源合理分配,规则如下:
- 当一个进程对资源最大需求量不超过系统资源总数时可以接纳
- 进程可以分期请求资源,但总数不能超过最大需求数
- 系统现有资源不能拿满足进程需要时,对进程请求可以推迟分配,但总能使进程在有限时间得到资源
银行家算法例子:
[解析]:
首先观察图标,发现R3已经被分配完,
所以第一个要找分配的R3已经满足需求的进程,
可以发现只有P2满足要求,所以先执行P2.
P2执行完后释放2个R1,1个R2,1个R3,同理…..
可得答案B
进程资源图
主要考察节点的阻塞类型
资源出箭头代表分配,用完之前,不能给其它资源用;入箭头代表申请资源
[分析]:
R1资源有2个,分配2个,剩余0,但P2在R1申请1个,只能阻塞等待资源,P2是阻塞型节点
R2有3个资源,分配3个,剩余0,P1在R2申请,因此P1是阻塞型节点
R3有2个资源,分配1个,剩余1,P3申请1,不会阻塞,P3是非阻塞型
进程完成顺序:P3先完成,然后释放资源,P1和P2可以同时完成