第四章 并发与同步

1、进程间关系:由于多进程在操作系统中并发执行,它们之间存在着相互制约的关系。主要有两种:
(1)进程同步:多个进程中发生的事件存在某种时序关系,必须协同动作,相互配合,以共同完成一个任务;
(2)进程互斥:由于共享资源要求的排他性,进程间要相互竞争以使用这些资源。
2、进程互斥的解决方法:
(1)竞争各方平等协商;
(2)引入进程管理者,由管理者来协调竞争各方对互斥资源使用。
3、临界资源:计算机系统中需要互斥使用的硬件或软件资源,需要互斥共享,有外设、共享代码段、共享数据结构、CPU、存储信息等。
4、计算机系统中资源共享的程度分为三个层次:
(1)互斥——保证资源互斥使用是指多个进程不能同时使用同一个资源(正确使用资源的最基本要求);
(2)死锁——避免死锁是避免多个进程互不相让,避免出现得不到足够资源的情况,从而保证系统功能的正常运行;
(3)饥饿——避免饥饿指避免某些进程一直得不到资源或得到资源的概率很小,从而保障系统内资源使用的公平性。
5、进程间的相互感知程度:
(1)相互不感知(完全不了解其他进程的存在)。一个进程的操作对其他进程的结果无影响,交互关系为竞争,可能导致——互斥、死锁、饥饿;
(2)间接感知(双方都与第三方交互)。一个进程的结果依赖于从其他进程获得的信息,交互关系为通过共享进行协作,可能导致——互斥、死锁、饥饿;
(3)直接感知(双方直接交互)。一个进程的结果依赖于从其他进程获得的信息,交互关系为通过通信进行协作,可能导致——死锁、饥饿。
6、为保证临界资源的正确使用,把对临界资源的访问分为四个部分:
(1)进入区:为了进入临界区使用临界资源,在进入临界区要检查可否进入临界区;如果可以进入临界区,通常设置“正在访问临界区”的标志,阻止其他进程同时进入临界区;
(2)临界区:进程中访问临界资源的一段代码;
(3)退出区:将“正在访问临界区”的标志清除;
(4)剩余区:代码中的其余部分。
7、为合理使用计算机中的资源,在操作系统中采用的进程同步机制应该遵循:
(1)空闲则入——任何时刻只有一个进程位于临界区;
(2)忙则等待——当有进程进入临界区,后来的进程只能进入进入区等待;
(3)有限等待——为避免死锁等现象的出现,等待进入临界区的进程不能无限期地“死等”;
(4)让权等待——在进入区等待而不能进入临界区的进程,应释放处理机,转化到阻塞状态,以使其他进程有机会得到处理机的使用权。
8、进程互斥的硬件方法:
(1)TS(Test-and-Set)指令:测试锁变量的值,若为1,则重复执行本命令;若为0,立即将锁变量置为1,进入临界区;退出临界区,将锁变量测试值设为0;
(2)Swap指令(Exchange指令):每一个临界资源设置一个公共布尔变量lock,初值为FALSE;每一个进程设置一个私有布尔变量key,用于与lock间信息交换。
9、进程互斥硬件方法的优点:
(1)使用范围广——适用于任意数目进程,在单处理和多处理器上完全相同;
(2)简单——标志设计简单,含义明确,容易验证其正确性;
(3)支持多个临界区——在一个进程内有多个临界区,只需为每一个临界区设置一个布尔变量。
10、进程互斥硬件方法的缺点:
(1)进程在等待进入临界区时,要耗费处理机时间,不能实现“让权等待”;
(2)进入临界区的进程是从等待进程中随机选择的,有的进程可能一直选不上,从而导致“饥饿”。
11、信号量:代表可用资源实体的数量。是操作系统提高管理公有资源的有效手段,信号量机制采用P、V原语操作。
12、作为操作系统核心代码的一部分,P、V原语的执行,不受进程调度和执行的打断,可以很好解决原语操作的整体性。信号量的初始化可以指定一个非负整数值,表示空闲资源总数;若为负值,其绝对值表示当前等待临界区的进程数。
13、对信号量的4种操作:
(1)初始化
(2)等信号(挂起、P操作)
(3)给信号(V操作)
(4)清理
14、信号量机制的P、V原语:
(1)利用操作系统提供的信号量机制,可实现临界资源的互斥访问。为临界资源设置一个互斥信号量,初值为1;在每个进程中将临界区代码置于P、V之间;
(2)使用信号量进行共享资源访问控制时,必须成对使用P和V原语。遗漏P原语不能保证互斥访问,遗漏V则不能在使用临界资源后将其释放给其他等待的进程——P、V的使用顺序不能颠倒和遗漏;
(3)利用信号量机制可以实现进程间的同步,即前趋关系。
15、简单生产者-消费者问题:生产者进程P,消费者进程Q,二者通过一个缓冲区联系起来。P进程不能往“满”的缓冲区中放入产品;设置信号量empty,其初值为1,用于指示空缓冲区数量;Q进程不能从已经空的缓冲区中取出产品,设置信号量full,初值为0,用于指示满缓冲区数量。
16、采用P、V机制编写并发程序的缺点:
(1)程序易读性差;
(2)程序不利于修改和维护,任一组变量或一段代码的修改都可能影响全局;
(3)正确性难以保证。
17、管程:由过程、变量及数据结构等组成的集合,它们组成一个特殊的模块或软件包。管程内使用的对象包括:共享数据结构和一组操作过程。
组成部分:
(1)管程名称;
(2)共享数据的说明;
(3)对数据进行操作的一组过程;
(4)对共享数据赋初值的语句。
注:管程能保障共享资源互斥执行,该性能由管程本身实现,程序员不必显式地编写代码去实现这种同步机制。
18、管程的三个特性:
(1)模块化。一个管程是一个基本程序单位,可以单独编译;
(2)抽象数据类型。其中不仅有数据,还有对数据进行操作的代码;
(3)信息隐蔽。管程是半透明的,管程外部过程函数实现了某些功能,这些功能的实现细节对外部不可见。
注:任一时刻管程中只能有一个活跃的进程,这一特性使管程能有效地完成互斥;
19、进程通信的方式:
(1)共享内存——可同步或异步
(2)消息机制——可同步或异步
(3)套接字——可同步或异步
(4)管道通信——只能同步
注:P、V原语是一类低级通信原语,不能承担进程间大量信息交换任务,需要引入大量信息交换的原语——共享内存、消息机制、管道通信。
20、共享内存:在相互通信的进程之间设有一个公共内存区,一组进程向该公共内存中写,另一组进程从公共内存中读,通过这种方式实现两种进程间的信息交换。
面临两个问题:
(1)怎样提高共享内存——由操作系统负责;
(2)公共内存中的读写互斥问题——程序开发人员负责。
21、消息机制:包含两种方式,消息缓冲通信和信箱通信。
(1)消息缓冲通信:根据“生产者-消费者”原理,利用内存中公用消息缓冲区实现进程间的信息交换。每当一个进程向另一个进程发送消息时,便申请一个消息缓冲区,并把已准备好的消息送到缓冲区,然后把该消息缓冲区插入到接受进程的消息队列中,最后通知接受进程。
(2)信箱通信:为了实现进程间的通信,可以设立一个通信机构——信箱,以发送信件以及接收回答信件的方式为进程间通信。
22、消息缓冲通信机制包含的内容:
(1)消息缓冲区,由消息长度、消息正文、发送者、消息队列指针组成的数据结构;
(2)消息队列首指针m_q,一般保存在PCB中;
(3)互斥信号量m_mutex,初值为1,用于互斥访问消息队列,在PCB中;
(4)同步信号量m_syn,初值为0,用于消息计数,在PCB中设置;
(5)发送消息原语send(receiver,a)。发送进程调用send原语发送消息,调用参数receiver为进程接受名,a为发送进程存放消息的内存区首地址;
(6)接受进程原语receiver(a).
注:进程中关于消息队列的操作是在临界区。
23、信箱通信中的一个信箱结构可以由“信箱说明”和“信箱体”组成。
信箱说明中包含如下数据结构:
(1)可存信件数——是设立信箱时预先确定的,表明信箱的容量大小;
(2)已有信件数——指出信箱中已有信件数量。
24、采用信箱通信的好处:发送方和接受方不必直接建立联系,没有处理时间上的限制。发送方可以在任何时间发信,接受方也可以在任何时间收信。
25、管道通信:连接两个进程之间的一个打开的共享文件,发送进程可以源源不断地从管道一段写入数据流,每次写入的信息长度是可变的;接受进程在需要时可以从管道另一端读出数据,读出单位长度也是可变的。在对管道文件进行读写操作时,发送进程和接受进程要实施正确的同步和互斥,以确保通信的正确性。
(1)管道通信机制中的同步和互斥都由操作系统自动完成,对用户是透明的。
(2)管道通信的优点:传送数据量大;
(3)管道通信的缺点:通信速度较慢。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值