嵌入式系统设计师学习笔记十一:进程管理②

进程管理:进程的同步与互斥

区别:

互斥:是指散布在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。

同步:是指散布在不同进程之间的若干程序片断,它们的运行必须严格按照规定的 某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。

图解:

互斥:(过独木桥,同一时间仅允许一个单位过桥)

同步:(某个流程的进行依赖于另一个流程运行后的结果)

联系:

同步是一种更为复杂的互斥,而互斥是一种特殊的同步。也就是说互斥是两个线程之间不可以同时运行,他们会相互排斥,必须等待一个线程运行完毕,另一个才能运行,而同步也是不能同时运行,但他是必须要安照某种次序来运行相应的线程(也是一种互斥)。

互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。

同步与互斥的经典问题:生产者与消费者


在上图中:假设搬运工甲每小时从A仓库运送6件货物至中转站,搬运工乙每小时从中转站搬运3件货物至B仓库,中转站最多只能存6个货物,第一个小时后:中转站中的货物=6(甲送来的)-3(乙运走的)=3,第二个小时后:中转站中的货物:6=3(第一个小时剩下的)+6(甲再次运来的)-3(乙运走的)=6;第三个小时后,中转站中的货物:3=6(第二个小时剩下的)-3(乙运走的),由于甲每次运来6个但是中转站中经过乙拿走3个以后还剩3个不能使得甲运来的6个货物全部装入,因此甲搬运工停止运送。

从第三个小时开始,便形成了生产者与消费者的问题,生产者生产的速度大于消费者消费的速度,由于中转站的容量有限,生产者不得不等待消费者,这便是同步,当中转站中的货物不允许生产者将一次生产的全部数据存入时,生产者便等待,这便是互斥。

为了提高效率,可将单中转站变为多中转站,在计算机中便是单缓冲区变为多缓冲区,这使得生产者和消费者的效率都得到了提升。

进程管理:PV操作

临界资源:各个进程间需要互斥方式对其进行共享的资源,如打印机、磁带机等

临界区:每个进程中访问临界资源的那段代码成为临界区
(临界区就是一段代码)

信号量:是一种特殊的变量(一般用S表示,若S>=0,则表示资源的个数,若S<0,则|S|表示被阻塞进程的个数(进程等待的数量))

PV操作是P原语(P操作)和V原语(V操作)。

在上图中,P操作是用于申请资源的,并且会被阻塞进程,每执行一次S=S-1,若信号量小于0(无资源可用)则将该进程放入等待队列中,若S>=0则,可以立即使用V操作执行当前进程。
对于V操作来说,V操作是用于释放资源的,每执行一次,S=S+1,若S<=0的话则从等待队列中唤醒一个等待中的进程,然后执行该进程。

原语:一旦开始执行,便不会被中断。

单缓冲区生产者、消费者问题PV原语描述:


在上图中(单缓冲区生产者与消费者问题):
生产者生产一个产品,
第一轮:
执行P(s1),则s1=s1-1=0,s1不小于0则继续,将产品送入缓冲区,然后执行V(s2),s2=s2+1=1。
此时s1=0,s2=1。
第二轮:
执行P(s1),则s1=s1-1=-1,s1小于0,此时进程被阻塞,将s1送入等待队列。此时V(s2)不会被执行。
此时s1=-1,s2=1。
消费者消费产品:
第一轮:
执行P(s2),则s2=s2-1=0,s2不小于0,从缓冲区取产品,然后执行V(s1),s1=s1+1=0,s1<=0,则此时从s1等待队列中唤醒一个进程,即开始执行左边的V(s2),s2=s2+1=1。
此时s1=0,s2=1,再次回到了生产者第一轮结束后的状态,随后便成为一个循环过程。