第4章 并发控制2

合集下载

精品课件-Linux操作系统原理与应用(张玲)-第4章

精品课件-Linux操作系统原理与应用(张玲)-第4章

第4章 进 程 管 理
2. 进程的特性 进程与程序的不同主要体现在进程有一些程序所没有的特 性。要真正理解进程,首先应了解它的基本性质。进程具有以 下几个基本特性: (1) 动态性:进程由“创建”而产生,由“撤销”而消 亡,因“调度”而运行,因“等待”而停顿。进程从创建到消 失的全过程称为进程的生命周期。 (2) 并发性:在同一时间段内有多个进程在系统中活动。 它们宏观上是在并发运行,而微观上是在交替运行。
第4章 进 程 管 理
(3) 独立性:进程是可以独立运行的基本单位,是操作 系统分配资源和调度管理的基本对象。因此,每个进程都独立 地拥有各种必要的资源,独立地占有CPU并独立地运行。
(4) 异步性:每个进程都独立地执行,各自按照不可预 知的速度向前推进。进程之间的协调运行由操作系统负责。
第4章 进 程 管 理
第4章 进 程 管 理
4) 现场信息 现场信息一般包括CPU的内部寄存器和系统堆栈等,它们 的值刻画了进程的运行状态。退出CPU的进程必须保存好这些 现场状态,以便在下次被调度时继续运行。当一个进程被重新 调度运行时,要用PCB中的现场信息来恢复CPU的运行现场。 现场一旦切换,下一个指令周期CPU将精确地接着上次运行的 断点处继续执行下去。
第4章 进 程 管 理
4.1.1 程序的顺序执行与并发执行 1. 程序的顺序执行 如果程序的各操作步骤之间是依序执行的,程序与程序之
间是串行执行的,这种执行程序的方式就称为顺序执行。顺序 执行是单道程序系统中的程序的运行方式。
程序的顺序执行具有如下特点: (1) 顺序性:CPU严格按照程序规定的顺序执行,仅当一 个操作结束后,下一个操作才能开始执行。多个程序要运行时, 仅当一个程序全部执行结束后另一个程序才能开始。

《并发控制》课件

《并发控制》课件
《并发控制》PPT课件
这个PPT课件将带你了解并发控制的基本概念、重要性以及各种策略和技术。 让我们一起探索并发控制的不同方面和未来发展方向。
什么是并发控制?
并发控制是指在多用户环境下,对并发访问数据库的各种操作进行协调和管 理的一种技术。它的目标是保证数据的一致性和隔离性。
并发控制的作用与意义
事务执行过程中数据库从一个一致状态转换到另 一个一致状态。
隔离性
事务之间相互隔离,各自独立运行,互不干扰。
持久性
事务一旦提交,对数据库的修改就是永久性的。
事务的提交与撤销
1 提交事务
将事务的修改结果持久化到数据库中,使其对其他事务可见。
2 撤销事务
撤销事务的修改操作,将数据库恢复到事务开始之前的状态。
日志文件的作用与种类
1 作用
记录数据库的操作和修改过程,用于数据库 的恢复和重做操作。
2 种类
包括事务日志、撤销日志和重做日志等。
数据库恢复的两种常用方法
基于备份
使用数据库备份文件进行恢复,可以恢复整个数据库的一致性状态。
基于日志
根据日志文件的记录,对数据库进行恢复和重做操作,使其回到一致性状态。
1 数据一致性保证
通过并发控制,可以避免数据被多个并发操作同时修改而导致不一致的情况发生。
2 并发性能优化
有效的并发控制策略可以提高数据库系统的并发处理性能,降低响应时间。
3 资源利用率提高
合理的并发控制可以充分利用系统资源,提高系统利用率。
并发控制策略的分类
乐观并发控制
基于假设操作之间的冲突很少发生,采用乐观锁和版本号等机制来解决冲突。
2 已提交读
一个事务中的修改只有在提交后才能被其他 事务读取,避免了脏读的问题。

数据库并发控制技术的使用教程

数据库并发控制技术的使用教程

数据库并发控制技术的使用教程随着数字化时代的到来,数据已经成为各个行业中不可或缺的重要资源。

数据库作为数据的存储和管理工具,也成为了企业和组织中必不可少的基础设施之一。

然而,在多用户访问数据库的情况下,就会出现并发访问的问题。

为了确保数据的一致性和完整性,我们需要使用并发控制技术来管理数据库。

本文将介绍数据库并发控制的概念、常见的并发控制技术,并给出相应的使用教程。

一、数据库并发控制的概念数据库并发控制是指在多个用户同时访问数据库时,通过一定的机制来保证数据的一致性和完整性。

在并发访问中,可能会出现以下问题:1. 脏读(Dirty Read):一个事务读取了另一个事务未提交的数据。

2. 不可重复读(Non-repeatable Read):在同一个事务内,由于其他事务的更新,多次读取同一数据得到不同的结果。

3. 幻读(Phantom Read):在同一个事务内,由于其他事务的插入或删除操作,多次查询同一范围的数据得到不同的结果。

为解决以上问题,需要使用并发控制技术。

二、常见的并发控制技术1. 锁(Locking):锁是最常见的并发控制技术。

通过为正在处理的数据加锁,其他并发事务需要等待锁的释放才能继续操作。

锁可以分为排它锁(Exclusive Lock)和共享锁(Shared Lock)两种。

排它锁只允许一个事务占有锁,其他事务需要等待;共享锁允许多个事务同时占有锁,但不允许写操作。

根据应用场景的需求,可以选择适合的锁机制。

2. 事务隔离级别(Transaction Isolation Level):事务隔离级别指的是并发事务之间相互隔离的程度。

常见的事务隔离级别有读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。

不同的隔离级别对并发控制的方式和效果有所不同。

3. 时间戳(Timestamp):时间戳是为每个数据项分配的一个唯一时间标记,用于记录事务对数据的读写操作。

数据库的安全性与完整性【模板范本】

数据库的安全性与完整性【模板范本】

4 数据库的安全性与完整性数据库在各种信息系统中得到广泛的应用,数据在信息系统中的价值越来越重要,数据库系统的安全与保护成为一个越来越值得重要关注的方面。

数据库系统中的数据由DBMS统一管理与控制,为了保证数据库中数据的安全、完整和正确有效,要求对数据库实施保护,使其免受某些因素对其中数据造成的破坏。

一般说来,对数据库的破坏来自以下4个方面:(1)非法用户非法用户是指那些未经授权而恶意访问、修改甚至破坏数据库的用户,包括那些超越权限来访问数据库的用户.一般说来,非法用户对数据库的危害是相当严重的。

(2)非法数据非法数据是指那些不符合规定或语义要求的数据,一般由用户的误操作引起。

(3)各种故障各种故障指的是各种硬件故障(如磁盘介质)、系统软件与应用软件的错误、用户的失误等。

(4)多用户的并发访问数据库是共享资源,允许多个用户并发访问(Concurrent Access),由此会出现多个用户同时存取同一个数据的情况。

如果对这种并发访问不加控制,各个用户就可能存取到不正确的数据,从而破坏数据库的一致性.针对以上4种对数据库破坏的可能情况,数据库管理系统(DBMS)核心已采取相应措施对数据库实施保护,具体如下:(1)利用权限机制,只允许有合法权限的用户存取所允许的数据,这就是本章4.1节“数据库安全性”应解决的问题。

(2)利用完整性约束,防止非法数据进入数据库,这是本章4。

2节“数据库完整性"应解决的问题。

(3)提供故障恢复(Recovery)能力,以保证各种故障发生后,能将数据库中的数据从错误状态恢复到一致状态,此即本章4。

3节“故障恢复技术”的内容.(4)提供并发控制(Concurrent Control)机制,控制多个用户对同一数据的并发操作,以保证多个用户并发访问的顺利进行,此即本章4.4节“并发控制”的内容。

4.1 数据库安全性4.1.1 数据库安全性问题的概述1.数据库安全问题的产生数据库的安全性是指在信息系统的不同层次保护数据库,防止未授权的数据访问,避免数据的泄漏、不合法的修改或对数据的破坏。

db4

db4

第四章数据库的保护4.1 数据库的安全性4.2 数据库的完整性4.3 数据库的并发控制4.4 数据库的恢复4.5 数据库的复制与镜像4.1 数据库的安全性●数据库的安全性是指保护数据库以防止不合法的使用造成泄漏、更改或破坏等。

●采用的方法有:–用户标识和鉴别–使用视图–数据加密●数据库系统的安全模型–存取权限控制–审计应用DBMS OS DB 用户标识存取控制操作系统保护密码存储4.1.1用户标识和鉴别●一般由系统管理员(DBA)为每个用户建立一个用户名(用户标识/帐号)和用户口令。

用户必须使用此标识方可进入系统●语法:CREATE USER <username> IDENTIFIED BY<password>●二次登录问题4.1.2存取控制●存取权限两要素:–数据对象–操作类型●授权–定义某用户对哪些数据对象具有哪些类型的操作●数据对象的粒度–表、列、行(一般由视图实现)–粒度越细,授权子系统越灵活,安全性越完善。

但系统开销越大,数据字典庞大权限限制的种类–对用户进行控制。

用户只可以访问自己的子模式–对操作类型进行控制操作一般包括:查询、修改、插入、删除等用户可以被授予不同的操作权限–对数据对象的控制用户可以被限制访问某些表或表的列权限组(角色)概念–角色是数据库预先设置的一系列具有某种常用权限的组合。

某用户属于一个角色就拥有该角色的所有权限了SYBASE的一些角色–sa_role–sso_role–sybase_ts_role–navigator_roleORACLE中的三类角色–Connect(用于数据库录入人员)●可以访问ORACLE●对于允许的表可以做查询和更新操作。

●建立视图和同义词–Resource(用于开发人员)●具有Connect的所有权限●建表、索引、聚簇等权限●对于自己创建的对象可以操作并可以给他人赋权●使用审计命令–DBA(用于管理人员)●具有Resource的所有权限●可以访问任何用户的数据●授予或收回用户权限●建立公共同义词●建立和修改分区●执行数据库的卸出●审计●Oracle中存取控制的语法–授权语句/新建用户GRANT[CONNECT | RESOURCE | DBA] TO<username> [IDENTIFIED BY <password> ]–收回权限/删除用户:REVOKE[CONNECT | RESOURCE | DBA] FROM<username>–操作权限控制GRANT <操作权> ON <表名> TO <username|public>[WITH GRANT OPTION]●其中“操作权”包括:SELECT、INSERT、DELETE、UPDATE、ALTER、INDEX、ALL●对象拥有者自然用于对对象的操作权,只有拥有者和DBA可以将对象的操作权赋予别人4.1.3定义视图●可以通过建立视图屏蔽用户不该看到的数据内容,但视图的主要功能是实现数据独立性,其安全保护功能不够精细4.1.4数据加密●ORACLE和SYBASE数据库都提供对存储过程的加密,在SYBASE中使用SP_HIDETEXT4.1.5审计●非强制性安全保护措施,自动记录对数据库的访问存取痕迹●分为用户级和系统级–用户级主要用户设置,针对用户自己创建的对象的审计,包括对这些对象的各种访问–系统级审计是DBA进行的,针对用户登录的成功与否以及对数据库级权限的操作●审计常常消耗大量时间和空间资源,所以一般作为可选项可灵活打开和关闭,视系统的安全性要求而定例:对SC表的ALTER和UPDATE进行审计AUDIT ALTER,UPDATE ON SC取消对SC表的任何审计NOAUDIT ALL ON SC4.2 数据库的完整性●数据库安全性是防止非法用户的非法操作,而完整性是是防止不合语义的数据●数据库完整性的实现机制–DBMS检查数据库中的数据是否满足语义规定的条件,这些加在数据库数据之上的语义约束条件称为数据库完整性约束条件–而DBMS中检查数据是否满足完整性条件的机制称完整性检查4.2.1完整性约束条件●完整性约束条件作用的对象可以分为:列级、元组级和关系级三个粒度–列级约束主要约束列的取值类型、范围、精度排序等–元组级约束主要约束记录中各个字段之间的联系–关系级约束主要是约束多个记录或关系之间的联系●完整性约束就其状态可以分为静态和动态的–静态主要是反映数据库的状态是合理的–动态主要是反映数据库的状态变迁是否合理1)静态列级约束–对数据类型的约束,包括数据的类型、长度、单位、精度等,如char(10)。

操作系统第4章答案(上)

操作系统第4章答案(上)

赵盈盈2011210593 第四章作业上1. 解释名词:程序的顺序执行;程序的并发执行。

答:程序的顺序执行:一个具有独立功能的程序独占cpu直到得到最终结果的进程。

程序的并发执行:两个或两个以上程序在计算机系统中同时处于一开始执行且尚未结束的状态。

2. 什么是进程?进程与程序的主要区别是什么?答:进程:进程是具有独立功能的程序关于某个数据集合的一次运行活动,进程是系统进行资源分配和调度的独立单元。

进程和程序的区别:●程序是静态的,进程是动态的●进程有程序和数据两部分组成●进程具有生命周期,有诞生和消亡,是短暂的;而程序是相对长久的●进程能更真实的描述并发,而程序不行。

●一个进程可以对应多个程序。

一个程序可以对应多个进程●进程可以创建其他进程,程序不能3. 图1所示,设一誊抄程序,将f中记录序列正确誊抄到g中,这一程序由get、copy、put三个程序段组成,它们分别负责获得记录、复制记录、输出记录。

请指出这三个程序段对f中的m个记录进行处理时各种操作的先后次序,并画出誊抄此记录序列的先后次序图(假设f中有1,2,…,m个记录,s,t为设置在主存中的软件缓冲区,每次只能装一个记录)。

图1 改进后的誊抄过程答:4. 进程有哪几种基本状态?试画出进程状态变迁图,并标明发生变迁的可能原因。

答:进程基本状态:运行、就绪、等待就绪到运行:调度程序选择一个新的进程运行 运行到就绪:运行进程用完了时间片或运行进程被中断,因为一个高优先级的进程处于就绪状态运行到等待:OS 尚未完成服务或对一资源的访问尚不能进行或初始化I/O 且必须等待结果 或等待某一进程提供输入(IPC )等待到就绪:当所有的事件发生时5. 什么是进程控制块?它有什么作用?答:PCB :为了便于系统控制和描述进程的活动过程,在操作系统核心中为进程定义的一个专门的数据结构。

作用:系统用PCB 来控制和管理进程的调用,PCB 也是系统感知进程存在的唯一标志GCGPCP G… CP6. n 个并发进程共用一个公共变量Q ,写出用信号灯的p 、v 操作实现n 个进程互斥时的程序描述,并说明信号灯值的取值范围。

第四章 预防与控制医院感染

第四章  预防与控制医院感染

第四章预防与控制医院感染一、选择题(一) A型题11.关于医院感染的概念,正确的是( )A.感染和发病应同时发生B.住院患者和探视陪住者是医院感染的主要对象C.患者出院后发生的感染可能属于医院感染D.一定是患者在住院期间遭受并发生的感染E.入院前处于潜伏期而住院期间发生的感染也属于医院内感染2.关于医院感染的判断正确的是( )A.新生儿出生后48h 内诊断为弓形体病属于医院感染B.肺炎患者原有的慢性阑尾炎在住院期间急性发作属于医院感染C.结核性胸膜炎患者并发结核性脓胸属于医院感染D.患者因“脾破裂”住院,出院半年查出“丙型肝炎”属于医院感染E.患者手术切口缝合针眼处有少许分泌物属于医院感染3.关于内源性医院感染的描述,错误的是( )A.又称自身感染,感染源是患者自身B.病原体是来自患者体内或者体表的常居菌或者暂居菌C.引起感染的主要传播途径是病原体通过手、媒介物直接或者间接接触D.患者反抗力下降或者免疫功能受损时易发生感染E.抗菌药物的广泛应用,使感染机会增加4.医院感染的主要对象是( )A.门诊患者B.急诊患者C.住院患者D.探视者E.陪护者5.能杀灭所有微生物以及细菌芽胞的方法是( )A.清洁B.消毒C.抑菌D.灭菌E.抗菌6.与湿热消毒灭菌法相比,干热法( )A.主要通过水蒸气及空气传导热力B.导热较快C.穿透力较强D.灭菌所需时间较短E.灭菌所需温度较高7.不适合使用于热法灭菌的是( )A.玻璃制品B.陶瓷类C.油剂D.粉剂E.橡胶制品8.煮沸消毒时,海拔每增加300m ,需要延长消毒时间( )A.2minB.3minC.4minD.5minE.6min9.在煮沸消毒血管钳、镊子时,为增强杀菌作用并能去污防锈,可加入( )A.氯化钠B.硫酸镁C.亚硝酸钠D.碳酸氢钠E.稀盐酸10.临床应用最广、效果最可靠的物理消毒灭菌法是( )A.燃烧法B.压力蒸汽灭菌法C.于烤法D.煮沸法E.电离辐射灭菌法11.不适合使用压力蒸汽灭菌的物品是( )A.油剂B.搪瓷物品C.玻璃器皿D.金属制品E.纤维织物12.杀菌作用最强的紫外线波段是( )A.210~230nmB.230~250nmC.250 ~270nmD.270 ~ 300nmE.300~320nm13.不合用于燃烧法灭菌的是( )A.污染的纸张B.手术刀片C.破伤风患者用过的敷料D.治疗碗E.血管钳14.适合微波消毒的物品是( )A.弯盘B.体温计C.血压计D.血管钳E.塑料奶瓶15.不适宜空气消毒的化学消毒剂是 ( )A.过氧乙酸B. 甲醛C.纯乳酸D.食醋E.过氧化氢16.属于易燃易爆的气体灭菌剂是( )A. 甲醛B.环氧乙烷C.过氧乙酸D.戊二醛E.过氧化氢17.化学消毒剂使用方法不包括( )A.擦拭法B.煮沸法C.浸泡法D.熏蒸法E.喷雾法18.能够杀灭芽孢的化学消毒剂是( )A.过氧乙酸B.乙醇C.碘酊D.碘附E.氯己定19.不适合电离辐射灭菌的物品是( )A.输血器B.注射器C.治疗碗D.羊肠线E.白蛋白20.内镜消毒时宜选择的消毒剂是( )A.过氧乙酸B.戊二醛C.环氧乙烷D.乙醇E.碘附21.属于高度危(wei)险性的医用物品是( )A.肠镜B.体温计C.手术刀片D.血压计袖带E.压舌板22.烧伤病区属于Ⅱ类环境,要求空气中的菌落总数不超过( )A. 10cfu/m3B.50cfu/m3C. 100cfu/m3D.200cfu/m3E.500cfu/m323.无菌技术操作时,正确的是( )A.操作环境要清洁,操作前1h 减少人员走动B.操作者要面向无菌区,身体应尽量挨近无菌区C.无菌物品取出后抓紧使用,如没实用完应及时放回原无菌容器中D.定期检查无菌物品保存情况,如疑有污染,应抓紧使用E.为防止交叉感染,一套无菌物品只供一位患者使用24.无菌持物钳能夹取( )A.凡士林纱布B.待消毒的治疗碗C.无菌导尿管导尿D.碘伏棉球消毒E.无菌治疗巾25.取用无菌溶液时,先倒出少许溶液是为了( )A.冲洗瓶口B.检查溶液的颜色C.冲洗无菌容器D.检查溶液有无污染E.检查溶液有无浑浊26.戴无菌手套,下列描述正确的是( )A.戴手套前,先检查手套的号码B.戴手套前,可不必洗手,但一定要修剪指甲C.未戴手套的手可触及手套的外面D.已戴手套的手可触及另一手套的内面E.戴好手套后两手应置于胸部以上水平27.铺好的无菌盘,有效期为( )A.2hB.4hC.6hD.8hE. 12h28.对于已穿过的隔离衣,被视为清洁的部位是( )A.衣领B.袖口C.腰部以上D.腰部以下E.胸部以上29.使用2%戊二醛浸泡手术刀片时,为了防锈,在使用前可加入( )A.5%碳酸氢钠B.5%亚硝酸钠C.0.5%碳酸氢钠D.0.5%亚硝酸钠E.0.5%醋酸钠30.关于碘酊和碘伏,正确的描述是( )A.碘伏属于低效消毒剂,碘伏属于中效消毒剂B.碘酊和碘附都用于皮肤和黏膜等的消毒C.碘酊对金属有腐蚀性,而碘附没有D.皮肤对碘过敏者禁用碘酊和碘附E.碘酊对黏膜刺激性强,碘附对黏膜无刺激31.清除治疗盘内的碘渍宜选用( )A.84 消毒液B.75%乙醇C.40%甲醛D.2%戊二醛E.0.2%过氧乙酸32.用燃烧法消毒搪瓷类容器时,需倒入少量的乙醇,其浓度为( )A.70%B.75%C.80%D.90%E.95%(二) A2型题33.护士王某,在换药过程中发现手套破损,她应( )A.加戴一副手套B.用消毒液消毒破损处C.用胶布粘贴破损处D.用无菌纱布覆盖破损处E.即将更换手套34.张女士,45 岁,诊断为“十二指肠溃疡”。

数据库系统概论

数据库系统概论

*
31
第三十一页,编辑于星期日:二十三点 四分。
封锁的粒度
定义:封锁对象的大小。 封锁的对象:
若并发执行的所有事务均遵守两段锁协议,则 对这些事务的任何并发调度策略都可是可串行 化。(充分条件)(可用反证法证明)
*
330
第三十页,编辑于星期日:二十三点 四分。
两段锁协议(2)
两段锁协议和一次封锁法的异同:
一次封锁法要求每个事务必须一次将所有要使 用的数据全部加锁,因此遵守两段锁协议
两段锁协议并不要求事务必须一次将所有要使 用的数据全部加锁,因此可能会发生死锁
读“脏”数据:事务T1修改某一数据,并将其写回 磁盘,事务T2读取同一数据后,T1由于某种原因被 撤销,这时T1已修改过的数据恢复原值,T2读到的 数据就与数据库中的数据不一致,则T2读到的数据 就为“脏”数据,即不正确的数据。 “读—写冲突”
*
5
第五页,编辑于星期日:二十三点 四分。
数据不一致性(2)
两段锁协议(2PL)就是保证并发调度可串行化的封 锁协议。
*
29
第二十九页,编辑于星期日:二十三点 四分。
两段锁协议(1)
两段锁协议是指所有事务必须分两个阶段对是 数据项加锁和解锁
在对任何数据进行读、写操作之前,首先要申 请并获得对该数据的封锁。——扩展阶段
在释放一个封锁之后,事物不再申请和获得任 何其它封锁。——收缩阶段
②乙售票点读出同一航班的机票余额A,也为16
③甲售票点卖出一张机票,修改余额A←A-1,把 A=15写回数据库
④乙售票点也卖出一张机票,修改余额A←A-1, 把A=15写回数据库
这种情况称为数据库的不一致性,是由并发 控制引起的。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4.6.2 用信号灯实现进程互斥
用两个进程共享打印机的例子 设信号灯print表示打印机,初值为1,表示打印 机可用(也可理解为有一台打印机)。 (print也是用于互斥的信号灯,教材上设 置为mutex。)
12
4.6 进程互斥和同步的实现
4.6.2 用信号灯实现进程互斥
13
4.6 进程互斥和同步的实现
16
4.6 进程互斥和同步的实现
4.6.3 用信号灯实现进程同步
用信号灯及P、V操作来描述左图 1、说明进程的同步关系 进程P1、P2可并行执行,P3的执 行必须等待P1、P2都完成后才能开始 执行。 2、设置信号灯,说明含义、初值。 s13 = 0 表示进程P1尚未执行完成; s23 = 0 表示进程P2尚未执行完成;
22
4.6 进程互斥和同步的实现
4.6.4生产者-消费者问题
对于生产者进程:产生一个数据,当要送入缓冲 区时,要检查缓冲区是否已满,若未满,则可将数据 送入缓冲区,并通知消费者进程;否则,等待; 对于消费者进程:当它去取数据时,要看缓冲区中 是否有数据可取,若有则取走一个数据,并通知生产 者进程,否则,等待。 这种相互等待,并互通信息就是典型的进程同步。 同时,缓冲区是个临界资源,因此,诸进程对缓冲 区的操作程序是一个共享临界区,因此,还有个互斥 的问题。
36
void barber () { while(TRUE); { p(cutomers); //若无顾客,理发师睡眠 p(mutex); //进入临界区 waiting--; //等候顾客数少一个 v(barbers); //准备好了为顾客理发 v(mutex); //开放临界区 cuting-hair( ); //正在理发……. } } void customeri() { if (waiting!=n) //人未满进入等待 { p(mutex); //进入临界区 waiting++; // 等候顾客数加1 v(customers); //来客了,唤醒理发师 v(mutex); //开放临界区 p(barbers); //无理发师, 顾客坐着养神 get-haircut( ); //顾客坐下接受理发…… } }
main() { mutex=1; //互斥信号灯 cutomers =0; //顾客数信号灯 barbers=0; //理发师数信号灯 waiting =0; //等待客人数 cobegin barber(); custumeri(); coend }
解决这个问题的步骤: (1)分析问题,弄清楚同 步关系,如上分析; (2)设置信号灯,说明含 义、初值; (3)写出程序描述。
20
4.6 进程互斥和同步的实现
4.6.3 用信号灯实现进程同步
21
4.6 进程互斥和同步的实现
4.6.4生产者-消费者问题
我们把上面的例子扩充, 假定缓冲区buffer是一个有界 缓冲区,可存放n个数据,同 时假定有n个CP进程不断地 产生数据,并送buffer;有m 个IOP进程从缓冲区中取数据 打印。
2
4.5 同步机构 4.5.1 锁和上锁、开锁操作
3
4.5 同步机构
4.5.1 锁和上锁、开锁操作 避免“忙等”改进的算法
4
4.5 同步机构
4.5.2信号灯和P、V操作 1. 信号灯的概念
信号灯的概念是由Dijkstra提出的(1968)。 他把互斥的关键概念抽象到信号量这个概念中 ,信号量是一个被保护的变量,只有P操作、V操 作和一种称为信号量初始化操作才能访问和改变 它的值。
4.5.2信号灯和P、V操作
算法:p操作 输入:s 输出:无 { s--; //表示申请一个资源; if (s<0) //表示没有空闲资源 挂起该进程; }
注:挂起该进程包括:保留调用进程CPU现场; 置“等待”状态;入等待队列;转进程调度;
8
4.5 同步机构
4.5.2信号灯和P、V操作
算法:v操作 输入:s 输出:无 { s++; //表示释放一个资源; if (s<=0) //表示有进程处于阻塞状态; 唤醒等待s的进程; } 注:唤醒等待s的进程包括:从等待s的队列取一 个(或全部)进程入就绪队列等待调度;
readeri() { p(mutex); if (count= =0) p(s); count++; v(mutex); reading(); p(mutex); count--; if (count= =0) v(s); v(mutex); }
30
补充2:哲学家进餐问题 (the dining philosophers problem) 问题描述:(由Dijkstra首先提出并解决) – 5个哲学家围绕一张圆桌而坐; – 桌子上放着5支筷子,每两个哲学家之间放一支; – 哲学家的动作包括思考和进餐; – 进餐时需要同时拿起他左边和右边的两支筷子; – 思考时则同时将两支筷子放回原处; 问题:如何保证哲学家们的动作有序进行?如: – 不出现相邻者同时要求进餐; – 不出现有人永远拿不到筷子;
editeri() { p(s); writing(); v(s); }
29
???
main() { int s=1; //文件锁 int mutex=1; //count访问锁 int counts=0; //读者计数器 cobegin readeri (); editeri (); coend } editeri() { p(s); writing(); v(s); }
19
4.6 进程互斥和同步的实现
4.6.3 用信号灯实现进程同步
要保证打印结果的正确, CP、IOP必须遵循以下同步规 则: (1)当CP把结果送入buffer后,IOP 才能从buffer中取,否则IOP必须 等待; (2)当IOP从buffer中取走数据后, CP才能将新产生数据送buffer,否 则也必须等待。
31
哲学家的生活规律
Repeat 思考; 取fork[i];取fork[(i+1) mod 5]; 进食; 放fork[i];放fork[(i+1) mod 5]; Until false;
32
为防止死锁发生可采取的措施 • 最多允许4个哲学家同时坐在桌子周围() • 仅当一个哲学家左右两边的筷子都可用时, 才允许他拿筷子 • 给所有哲学家编号,奇数号的哲学家必须首 先拿左边的筷子,偶数号的哲学家则反之 • 为了避免死锁,把哲学家分为三种状态,思 考,饥饿,进食,并且一次拿到两只筷子, 否则不拿
27
main() { int s1=1; //写置标 int s2=1; //读置标 cobegin readeri (); writeri (); coend }
readeri() { p(s1); reading(); v(s1); }
writeri() { p(s1); p(s2); writing(); v(s2); v(s1); }
23
4.6 进程互斥和同步的实现
4.6.4生产者-消费者问题
24
4.6 进程互斥和同步的实现
4.6.4生产者-消费者问题
25
4.6 进程互斥和同步的实现
4.6.4生产者-消费者问题
并发度降低
26
补充1:读/写问题
问题描述 – 有一个许多进程共享的数据区; 有一些只读取这个 数据区的进程(reader)和一些只往数据区中写数据 的进程(writer); 此外还必须满足下列条件: • 任意多的读进程可以同时读这个数据区 • 一次只有一个写进程可以往数据区写 • 如果一个写进程正在往数据区中写, 禁止任何 读进程读数据区 要求:“读-写” 互斥;“写-写” 互斥;“读-读 ” 允许
35
补充3:理发师睡觉问题
引入3个信号量和1个控制变量 1)控制变量waiting用来记录等候理发的顾客数, 初值均为0; 2)信号量customers用来记录等候理发的顾客数, 并用作阻塞理发师进程,初值为0; 3)信号量barbers用来记录正在等候顾客的理发师 数,并用作阻塞顾客进程,初值为0; 4)信号量mutex用于互斥,初值为1.
5
4.5 同步机构
4.5.2信号灯和P、V操作
信号灯的定义:
信号灯是一个确定的二元组(s,q),s 是一 个具有非负初值的整型变量,q 是一个初始状 态为空的排队站。 S代表资源的实体。在实际应用中应准确地 说明s的意义和初值,每个信号灯都有一个队 列,其初始状态为空。
6
4.5 同步机构
4.5.2信号灯和P、V操作
main() { int fork[5] = {1}; int room = 4; cobegin philospher(0); philospher(1); philospher(2); philospher(3); philospher(4); coend }
34
补充3:理发师睡觉问题
理发店里有一位理发师、一把理发椅和n把 供顾客等候理发坐的椅子。如果没有顾客,则 理发师便在理发椅上睡觉,当一顾客来到时, 他必须先叫醒理发师,如果理发师正在理发时 又有顾客来到,则如果有空椅子可坐,他们就 坐下来等,如果没有空椅子,他就离开。用信 号灯和P、V操作写出理发师和顾客行为的程序 描述。
在操作系统中,同步有各种各样,但归纳 起来有两类:
1)诸进程合作完成某工作的逻辑顺序。 2)对系统资源的共享。如两个进程共享一 个缓冲区完成誊抄问题。
15
4.6 进程互斥和同步的实现
4.6.3 用信号灯实现进程同步
(一)合作进程的执行次序 用进程流图来描述诸进程合作完成某一任务的次序, 其规则如下
94.6 ຫໍສະໝຸດ 程互斥和同步的实现4.6.1 用锁实现进程互斥
假设有两个进程共享 打印机,两个进程中使用 打印机的程序段为临界区 。 为保证打印的正确, 设置打印机的锁位print, 其初值为“0”,表示打印 机可用。
相关文档
最新文档