操作系统-经典进程的同步问题

合集下载

操作系统第6章 进程互斥与同步

操作系统第6章 进程互斥与同步

Co-begin void Producer_i( ) (i=1,2…k) { item next_p; while(1){ produce an item in next_p P(empty); P(s); add next_p to buffer V(s); V(full); } } void consumer_j( ) (j=1,2…m) { item next_c; while(1){ P(full); P(s); remove an item from buffer to next_c V(s); V(empty); consume the item in next_c}} Co-end
• 进入临界段之前要申请,获得批准方可进入; • 退出临界段之后要声明,以便其他进程进入。
用程序描述: While(1){ entry_section; critical_section; exit_section; remainder_section; }
解决临界段问题的软件算法必须遵循:
准则1:不能虚设硬件指令或假设处理机数目。 准则2:不能假设n个进程的相对速度。 准则3:当一个进程未处于其临界段时,不应阻止 其他进程进入临界段。 准则4:当若干进程欲进入临界段时,应在有限时 间内选出一个进程进入其临界段。 用准则3,4不难推出下面原则 协调各进程入临界段的调度原则: • 当无进程处于临界段时,允许一个进程立即进入临界段。
3.实现临界段的硬件方法
利用处理机提供的特殊指令实现临界区加锁。 常见硬件指令有: ⑴ “Test_and_Set”指令 该指令功能描述为: int *target ( 限定为0,1) int Test_and_Set (int *target) { int temp; temp = *target ; *target = 1; return temp; }

计算机操作系统进程同步算法习题选

计算机操作系统进程同步算法习题选

s
t
解:
设置四个信号量Sin=1,Sout=0,Tin=1,Tout=0; get: while(1) { wait(Sin); 将数放入S; signal (Sout); } copy: while(1) { wait (Sout); wait (Tin); 将数从S取出放入T; signal (Tout); signal (Sin); } put: while(1) { wait (Tout); 将数从T取走; signal(Tin); }

A1: while (1) { wait(Sin[1]); wait(Sin[2]); 将数据放入缓冲区 signal(Sout[1]); signal(Sout[2]); }
Bi: while (1) { wait(Sout[i]); 从缓冲区取数 signal(Sin[i]); }
向目标前进一步:
司机进程: while(1) { 启动车辆
正常驾驶 到站停车 }…
售票 员 进程 : while(1) { 关门
售票
}…
开门
分析:
为保证车辆行驶安全,售票员必须关好车门, 然后通知司机启动车辆,在行驶过程中售票员不 能打开车门,待车到站停稳后,司机通知售票员 才能打开车门,如此不断重复。为此,须设置两 个信号量S1,S2用来控制司机和售票员的行为, 初值都为0。
解:
算法如下: 司机进程: while(1) { wait(S1) 启动车辆 正常驾驶 到站停车 signal(S2) }… 售票员进 程: while(1) { 关门 signal(S1)
售票
wait(S2) 开门 }…
【例题2】
1.用wait、signal操作解决下图之同步问题 提示:分别考虑对缓冲区S和T的同步,再 合并考虑 get copy put

操作系统:进程同步

操作系统:进程同步

操作系统:进程同步基本概念在 Os 中引⼊进程后,虽然提⾼了资源的利⽤率和系统的吞吐量,但由于进程的异步性,也会给系统造成混乱,尤其是在他们争⽤临界资源时。

例如,当多个进程去争⽤⼀台打印机时,有可能使多个进程的输出结果交织在⼀起,难于区分;⽽当多个进程去争⽤共享变量、表格、链表时,有可能致使数据处理出错。

进程同步的主要任务是对多个相关进程在执⾏次序上进⾏协调,以使并发执⾏的诸进程之间能有效地共享资源和相互合作,从⽽使程序的执⾏具有可再现性。

在资源共享的情况下:保证诸进程以互斥的⽅式访问临界资源—必须以互斥⽅式访问的共享资源;在相互合作的关系中:进程同步的主要任务是保证相互合作的诸进程在执⾏次序上协调,(有些教材把这种功能称做“协调”)。

相互合作的进程可能同时存在资源共享的关系。

如何实现进程互斥,需要让进程以互斥的⽅式进⼊各⾃的临界区,先执⾏进⼊区的代码。

⼈为地加⼀段代码。

临界资源必须以互斥⽅式访问的共享资源counter的例⼦:在机器语⾔中实现两个进程给count加⼀的操作register1 = countregister1 = register1 + 1count = register1register2 = countregister2 = register2 + 1count = register2但是如果是并发执⾏,可能会出现下⾯的情况register1 = countregister2 = countregister1 = register1 + 1register2 = register2 + 1count = register1count = register2结果就不对了。

可见,counter应该作为临界资源。

多个进程必须对其进⾏互斥访问临界区在每个进程中访问临界资源的那段代码称为临界区。

如果能保证诸进程互斥地进⼊⾃⼰的临界区,便可实现诸进程对临界资源的互斥访问。

每个进程在进⼊临界区之前,应先对欲访问的临界资源进⾏检查,看它是否正被访问。

计算机操作系统 第二章 进程管理(2)

计算机操作系统 第二章 进程管理(2)

缺点:
(1)进程在等待进入临界区时也要耗费处理器时间, 不能实现“让权等待” (2)可能出现进程“饥饿”
2.3.2 信号量机制
新的同步工具——信号量和P、V操作。
信号量:是一种数据结构,代表可用资源实 体的数目。
信号量只能通过初始化和两个标准的原语: P(wait(S))、V((signal(S))来访问。 P原语相当于进入区操作,V原语相当于退 出区操作。
AND同步机制
AND同步机制的基本思想是:进程运行时所 需要的所有资源,要么全部分配给它,使用完 毕后一起释放;要么一个都不分配给它。实现 时,采用原子操作:要么全部分配到所有资源, 要么一个也不分配到。 称AND型信号量P原语为:
Swait(Simultaneous wait)
V原语为Ssignal(Simultaneous signal)。
SP原语描述
Swait(S1,S2,„,Sn) /* SP原语描述 */ {while(1) {if(S1>=1&&S2>=1&&„&&Sn>=1) {for(i=1;i<=n;i++) Si--; /* 先确信可满足所有资源要求再减1操作 */ berak; } else /* 资源不够时 */ {将进程放入第一个信号量小于1的阻塞队列Si.sqeue; 将PC中的地址回退到SP开始处; 阻塞进程; } } }
第二章 进程管理(2)
2.3 进程同步
多进程并发执行时,由于资源共享或进程合 作,使进程间形成间接相互制约和直接相互制 约关系,这需要用进程互斥与同步机制来协调 两种制约关系。 进程同步的主要任务:协调进程执行次序, 使并发执行的诸进程间能有效地共享资源和相 互合作,使程序的执行具有可再现性。

计算机操作系统-汤小丹第4版复习讲义教程第2章进程

计算机操作系统-汤小丹第4版复习讲义教程第2章进程

对于进程的定义,从不同的角度可以有不同的定义,其 中较典型的定义有:
(1) 进程是程序的一次执行。 (2) 进程是一个程序及其数据在处理机上顺序执行时所 发生的活动。 (3) 进程是具有独立功能的程序在一个数据集合上运行 的过程,它是系统进行资源分配和调度的一个独立单位。
进程与程序的主要区别
1)程序是指令的有序集合,其本身没有任何运行的含 义,它是一个静态的概念。而进程是程序在处理机上 的一次执行过程,它是一个动态概念。
图2-6 进程的五种基本状态及转换
2.2.3 挂起操作和进程状态的转换 1. 挂起操作的引入:使正在执行的进程暂停执行; 引入挂起操作的原因,是基于系统和用户的如下需要: (1) 终端用户的需要。 (2) 父进程请求。 (3) 负荷调节的需要。 (4) 操作系统的需要。
与挂起原语Suspend相应的是激活原语Active
如图2-9所示,OS管理的这些数据结构一般分为以下四 类:内存表、设备表、文件表和用于进程管理的进程表,通 常进程表又被称为进程控制块PCB。
图2-9 操作系统控制表的一般结构
2. 进程控制块PCB的作用 (1) 作为独立运行基本单位的标志。 (2) 能实现间断性运行方式。 (3) 提供进程管理所需要的信息。 (4) 提供进程调度所需要的信息。 (5) 实现与其它进程的同步与通信。
图2-5 进程的三种基本状态及其转换
3. 创建状态和终止状态 1) 创建状态 如前所述,进程是由创建而产生。创建一个进程是个很 复杂的过程,一般要通过多个步骤才能完成:如首先由进程 申请一个空白PCB,并向PCB中填写用于控制和管理进程的 信息;然后为该进程分配运行时所必须的资源;最后,把该 进程转入就绪状态并插入就绪队列之中。但如果进程所需的 资源尚不能得到满足,比如系统尚无足够的内存使进程无法 装入其中,此时创建工作尚未完成,进程不能被调度运行, 于是把此时进程所处的状态称为创建状态。

国开期末考试《操作系统》机考试题及答案(第8套)

国开期末考试《操作系统》机考试题及答案(第8套)

国开期末考试《操作系统》机考试题及答案(第8套)一、单选题1. 操作系统的基本功能不包括以下哪项?- (A) 进程管理- (B) 文件管理- (C) 网络管理- (D) 内存管理- Answer: (C)2. 下列哪种文件系统不支持文件共享?- (A) FAT- (B) NTFS- (C) ext4- (D) NFS- Answer: (A)3. 进程同步的经典问题中,以下哪个问题不属于资源分配类问题?- (A) 哲学家就餐问题- (B) 读者写者问题- (C) 指令冲突问题- (D) 吸烟者问题- Answer: (D)4. 以下哪种调度算法不考虑进程优先级?- (A) 先来先服务调度- (B) 短作业优先调度- (C) 时间片轮转调度- (D) 最高响应比优先调度- Answer: (A)5. 下列哪项不属于虚拟内存的功能?- (A) 内存保护- (B) 内存扩充- (C) 内存共享- (D) 内存加密- Answer: (D)二、填空题1. 进程的特征有______(5个字)。

- Answer: 动态性、并发性、独立性、不确定性、制约性2. 磁盘调度算法的目标是______(4个字)。

- Answer: 提高磁盘的利用率3. 在分页存储管理方式下,逻辑地址由______和______两部分组成。

- Answer: 页号、页内偏移4. 进程调度算法中,______是指将处理机从一个进程转移到另一个进程的过程。

- Answer: 上下文切换5. 用户态和核心态的切换是通过______指令实现的。

- Answer: 特权指令三、简答题1. 请简要解释进程和线程的区别。

- Answer: 进程是操作系统进行资源分配和调度的基本单位,具有独立的内存空间和系统资源。

而线程是进程的执行单位,一个进程可以包含多个线程,共享进程的资源。

线程之间的切换比进程之间的切换开销更小,线程间的通信更加方便。

2. 请简要描述页面置换算法中的FIFO算法。

操作系统复习资料全第二章 进程管理(3)-经典同步问题

操作系统复习资料全第二章 进程管理(3)-经典同步问题
的进程数,即系统中因请求该类资源而被阻塞的进程数目。
信号量S的值除初始化(为资源数目)外,其值只能通过原
语wait和signal,也称P、V操作来改变。
整型信号量的P、V操作描述
wait和signal
wait(S): while S≤0 do no-op S∶=S-1; signal(S): S∶=S+1; 解释:P或wait操作:当S≤0时,说明无资源可用,一直测试直到其他进程 释放该类资源。
1. 至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少 有一位哲学家能够进餐。(增加一个总资源信号量S=4)
2. 仅当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐 (AND型信号量)。
3. 规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子; 而偶数号哲学家则相反。按此规定,将是1、 2号哲学家竞争1号 筷子;3、4号哲学家竞争3号筷子。即五位哲学家都先竞争奇数 号筷子,获得后,再去竞争偶数号筷子,最后总会有一位哲学家 能获得两只筷子而进餐。
1. 利用记录型信号量解决读者 为实现Reader与Writer进程间在读或写时的互斥而设置了一个互 斥信号量Wmutex; 设置一个整型变量Readcount表示正在读的进程数目; 当 Readcount=0 时,表示尚无 Reader 进程在读时, Reader 进 程才需要执行 Wait(Wmutex) 操作。若 wait(Wmutex) 操作成功, 做Readcount+1和读文件操作; 当Reader进程在执行了Readcount减1操作后其值为0时,才须 执行signal(Wmutex)操作,以便让Writer进程写; 又因为Readcount是一个可被多个 Reader进程访问的临界资源, 因此,应该为它设置一个互斥信号量rmutex。

计算机操作系统课件02-3进程同步

计算机操作系统课件02-3进程同步

若进程A和B按下述次序交替执行wait操作: process A: wait(Dmutex); 于是Dmutex=0 process B: wait(Emutex); 于是Emutex=0 process A: wait(Emutex); 于是Emutex=-1 A阻塞 process B: wait(Dmutex); 于是Dmutex=-1 B阻塞
若加1后仍是S.value≤0,则表示在该信号量链表中,仍有等待 该资源的进程被阻塞,故还应调用wakeup原语,将S.L链表中 的第一个等待进程唤醒。
如果S.value的初值为1,表示只允许一个进程访问临界资源, 此时的信号量转化为互斥信号量,用于进程互斥。
3.AND型信号量
上述的进程互斥问题,是针对各进程之间只共享一个临界资 源而言的。在有些应用场合,是一个进程需要先获得两个或 更多的共享资源后方能执行其任务。
……
producer: repeat
produce an item in nextp;
while counter=n do no-op; buffer[in]:=nextp; in:=in+1 mod n; counter:=counter+1; until false;
consumer: repeat while counter=0 do no-op; nextc:=buffer[out]; out:=(out+1) mod n; counter:=counter-1; consumer the item in nextc; until false;
register1:=register1+1; register2:=register2-1;
counter:=register1; counter:=register2;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5
第一章 操作系统引论
2.5.2 哲学家进餐问题 1. 利用记录型信号量解决哲学家进餐问题 经分析可知,放在桌子上的筷子是临界资源,在一段时
间内只允许一位哲学家使用。为了实现对筷子的互斥使用, 可以用一个信号量表示一只筷子,由这五个信号量构成信号 量数组。
6
第一章 操作系统引论
2. 利用AND信号量机制解决哲学家进餐问题 在哲学家进餐问题中,要求每个哲学家先获得两个临界 资源(筷子)后方能进餐,这在本质上就是前面所介绍的AND 同步问题,故用AND信号量机制可获得最简洁的解法。
9
3
第一章 操作系统引论
3. 利用管程解决生产者-消费者问题 在利用管程方法来解决生产者-消费者问题时,首先便 是为它们建立一个管程,并命名为procducerconsumer,或简 称为PC。其中包括两个过程: (1) put(x)过程。 (2) get(x)过程。
4
第一章 操作系统引论
对于条件变量notfull和notempty,分别有两个过程cwait 和csignal对它们进行操作:
1
第一章 操作系统引论
2.5.1 生产者-消费者问题 1. 利用记录型信号量解决生产者-消费者问题 假定在生产者和消费者之间的公用缓冲池中具有n个缓
冲区,这时可利用互斥信号量mutex实现诸进程对缓冲池的 互斥使用;利用信号量empty和full分别表示缓冲池中空缓冲 区和满缓冲区的数量。又假定这些生产者和消费者相互等效, 只要缓冲池未满,生产者便可将消息送入缓冲池;只要缓冲 池未空,消费者便可从缓冲池中取走一个消息。
第一章 操作系统引论
2.5 经典进程的同步问题
在多道程序环境下,进程同步问题十分重要,也是相当 有趣的问题,因而吸引了不少学者对它进行研究,由此而产 生了一系列经典的进程同步问题,其中较有代表性的是“生 产者—消费者”问题、“读者—写者问题”、“哲学家进餐 问题”等等。通过对这些问题的研究和学习,可以帮助我们 更好地理解进程同步的概念及实现方法。
(1) cwait(condition)过程:当管程被一个进程占用时,其 他进程调用该过程时阻塞,并挂在条件condition的队列上。
(2) csignal(condition)过程:唤醒在cwait执行后阻塞在条 件condition队列上的进程,如果这样的进程不止一个,则选 择其中一个实施唤醒操作;如果队列为空,则无操作而返回。
8
第一章 操作系统引论
2. 利用信号量集机制解决读者-写者问题 这里的读者—写者问题,与前面的略有不同,它增加了 一个限制,即最多只允许RN个读者同时读。为此,又引入 了一个信号量L,并赋予其初值为RN,通过执行wait(L, 1, 1) 操作来控制读者的数目,每当有一个读者进入时,就要先执 行wait(L, 1, 1)操作,使L的值减1。当有RN个读者进入读后, L便减为0,第RN + 1个读者要进入读时,必然会因wait(L, 1, 1)操作失败而阻塞。
7

第一章 操作系统引论
2.5.3 读者-写者问题 1. 利用记录型信号量解决读者-写者问题 为实现Reader与Writer进程间在读或写时的互斥而设置
了一个互斥信号量Wmutex。另外,再设置一个整型变量 Readcount表示正在读的进程数目。由于只要有一个Reader进 程在读,便不允许Writer进程去写。因此,仅当Readcount=0, 表示尚无Reader进程在读时,Reader进程才需要执行 Wait(Wmutex)操作。若wait(Wmutex)操作成功,Reader进程 便可去读,相应地,做Readcount+1操作。
2
第一章 操作系统引论
2. 利用AND信号量解决生产者-消费者问题 对于生产者-消费者问题,也可利用AND信号量来解决, 即用Swait(empty,mutex)来代替wait(empty)和wait(mutex); 用Ssignal(mutex,full)来代替signal(mutex)和signal(full);用 Swait(full,mutex)代替wait(full)和wait(mutex),以及用 Ssignal(mutex,empty)代替Signal(mutex)和Signal(empty)。
相关文档
最新文档