计算机科学与技术-操作系统-难点分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学习目标
1.理解进程间的相互作用及与时间有关错误的发生场景
2.掌握进程互斥、临界区的概念
3.掌握进程同步的概念
4.掌握经典的进程同步互斥问题的解决方案
5.掌握经典的同步机制
一、进程间的相互作用
在一个多道程序系统中同时运行的并发的进程通常有多个。

在逻辑上有某种联系的称为相关进程,反之称为无关进程。

如果一个进程的执行不影响其他进程的执行,并且与其他进程情况无关,即:各自独立,则这些进程相互之间是无关的,可以看成在各自数据集合上操作。

例如
有两个不同的源程序进行编译的两个进程,它们可以并发执行,但是它们之间却是无关的。

两个进程分别在不同的数据集合上,为不同的源程序进行编译。

与时间有关的错误
一个进程由于自身或外界的原因而可能被中断,并且断点是不固定的。

至于一个进程被中断后,哪个进程可以先运行,而被中断的进程在什么时候再去占用处理器等问题,则与进程的调度策略有关。

如果在程序中共享了公共变量,使得程序的计算机结果与并发程序执行的速度有关,由此出现的错误往往与时间有关,即:与时间有关的错误。

例子
假设一个民航售票系统有n个售票处。

在售票系统的公共数据库存储着某年某月某日某次航班的余票数,这些余票用单元A j(j=1,2,3,….n)代表。

每个售票处通过终端访问系统的公共数据库。

用P1、 P2、 P3,……,Pn表示各售票处为旅客服务的处理进程;而R1、 R2、R3,……,Rn为各进程执行时所使用的工作单元。

当某个售票处有旅客买票时,进程如下工作:进程P1、 P2、 P3,……,Pn
While (true){
Ri=Aj;/按旅客订票要求找到Aj
If(Ri>=1){
Rj=Rj-1;
Aj=Ri; /输出一张票
}else
输出“票已售完”
}
由于旅客到各售票处订票的时间以及要求购买的机票日期和航班都是随机的,因此存在着有若干旅客几乎在相同的时刻、不同的售票处要求购买同一天同一航班的机票的可能。

于是,若干进程都要访问同一个Aj
两个并发进程执行的相对速度是无法控制的,
进程Pi读出的Aj值与进程Pk读出的Aj值相同,当
Aj>=1时,这两个进程Pi与Pk都认为有票可售给旅客。

于是,进程继续执行,各自在进行余票数减1的操作,然后把当前的余票数存回Aj。

这样售票系统数据库
中的票数记录就会出错。

进程的同步与互斥
在计算机系统中,为了完成某一个工作,不同进程之间有可能需要协作。

例如:有一批数据记录需要进行加工处理,为此创建了两个进程,还设置了一个容量为一个记录的缓冲器。

进程A硬盘上读记录,每读一次记录就会存入缓冲器。

进程B从缓冲器取出记录加工,直至所有记录都处理结束。

进程的同步与互斥
进程的同步是指进程之间一种直接的协同关系,一些进程相互合作,共同完成一项任务。

进程的同步也可以是直接制约关系,一个进程的执行依赖另一个进程的消息,当一个进程执行到某一点时,必须得到另一个进程发来的消息,若无,则需等待,直至收到消息,方可执行。

进程的互斥
在计算机操作系统中,许多进程常常需要共享资源,而这些资源偏偏一次只能为一个进程服务,因此,各进程只能互斥使用这些资源,如:多个进程在竞争使用打印机等。

进程的互斥是进程间一个间接制约关系。

临界区
在计算机操作系统中,某些资源一次只允许一个进程使用,则这类资源称为临界资源或共享变量,而进程中访问临界资源的程序称为临界区。

如果有若干进程共享某一临界区,则该临界区称为相关临界区。

注意:两个以上进入相互临界区进程之间构成了互斥关系。

临界区
相关临界区调度原则:
(1)有空让进
(2)无空等待
(3)多中选一
(4)有限等待
(5)让权等待
调度原则1表示要有效利用临界资源;调度2反映了互斥的基本含义;调度4、5是为了避免发生死锁。

三、信号量及P、V操作
信号量
用常规的程序来实现进程之间同步、互斥关系需要复杂的算法,而且会造成“忙等待”
浪费处理器资源,为此就引入信号量的概念。

信号量是一种特殊的变量,它的表面形式是一个整型变量附加一个队列;而且,它只能被特殊操作(即:P操作和V操作)使用。

三、信号量及P、V操作
P、V操作
设信号量为S,S可以取不同的整数值。

可以利用信号量S的取值表示共享资源的使用情况,或用它来指示协作进程之间交换的信息。

在具体使用时,把信号量S放在进程运行的环境中,赋予其不同的初值,并在其上实施P操作和V操作,从而实现进程间的同步与互斥。

对信号量S实施的P操作和V操作,可用P(S)、V(S)表示。

三、信号量及P、V操作
P、V操作定义如下:
P(S)
{
S=S-1;
若S<0,将该进程状态设置为等待状态,然后将该进程的PCB插入相应的S信号量等待队列末尾,直到有其他进程在S上执行V操作为止;
}
三、信号量及P、V操作
P、V操作定义如下:
V(S)
{
S=S+1;
若S<=0,释放在S信号量队列中等待的一个进程,将其状态转变为就绪态,并将其插入就绪队列;然后执行本操作的进程继续执行;
}
三、信号量及P、V操作
P、V操作是对信号量S进行的,信号量S表示某类可用的临界资源。

而对于不同的临界资源,则用不同的信号量表示。

当S>0,S值的大小表示某类可用资源的数量;
当S<0,表示没有可分配的资源数量,其S的绝对值表示排在S信号量的等待队列中进程的数目。

每执行一次P操作,意味着请求的进程分配到一个资源;每执行一次V操作,意味着进程释放了一个资源。

三、信号量及P、V操作
用P、V操作实现进程之间的互斥
假设有进程A、B竞争进入临界区,用P、V操作实现进程之间的互斥程序可以写成:
进程A 进程B
P(S); P(S);
临界区操作临界区操作
V(S); V(S);
其中S的初始值=1
三、信号量及P、V操作
用P、V操作实现进程之间的同步
考虑一种同步关系,其中有两个信号量S1和S2,赋予它们初始值为0,S1表示在一个缓冲区中是否装满信息,S2表示该缓冲区中信息是否取走。

程序可写成:
进程A 进程B
Whlie(true){ Whlie(true){
把信息送入缓冲区; P(S1);
V(S1)把信息送入缓冲区;
P(S2) V(S2);
}; };
四、经典的进程同步问题
简单生产者-消费者问题
设有一个生产者进程P,一个消费者进程Q,它们通过一个缓冲区联系起来,如图:
生产者消费者
放产品取产品
缓冲

四、经典的进程同步问题
生产者-消费者同步问题的解决方案如下:
P: Q:
whlie(true){ whlie(true){
P(empty);//信息量 P(full);
生产一个产品;从缓冲区取出产品;送到缓冲区; V(empty);
V(full);消费产品;
}; };
四、经典的进程同步问题
读者-写者问题
在计算机系统找一个数据对象,是可以供若干进程共享的。

(1)读者-写者问题的描述
假定有某个共享文件F,系统允许若干进程对文件F进行读或写。

这里把要读文件的进程成为读者,把要写文件的进程称为写者。

四、经典的进程同步问题
读者和写者必须要遵守如下的规定:
(1)多个进程可以同时读文件F
(2)任一个进程在对文件F进行写时,不允许其他进程对文件进行读或写。

(3)当有进程正在读文件时不允许任何进程去写文件。

四、经典的进程同步问题
当有多个读者和写者都要读写文件F时,按规定每次只允许一个进程执行写操作,并且在有进程执行写时不允许进程读文件。

因此,写者与写者之间要互斥,写者与读者之间也要互斥。

读者-写者问题的解决方案
设read-count 记录当前正在读的读者进程个数,由于多个读者都对read-count 进行修改,所以read-count 是一个共享变量,需要互斥使用,故设置信号量mutex。

再设置信号量write,用于写者之间互斥。

读者进程:
Whlie(true){
P(mutex);
read-count = read –count+1;If(read –count=1)P(write);V(mutex);
读文件;
P(mutex);
read- count=read –count -1
If(read –count=0)V(write)V(mutex)
}
写者进程:Whlie(true){ P(write)
写文件;
V(write)
}。

相关文档
最新文档