您好、欢迎来到现金彩票网!
当前位置:秒速牛牛开奖 > 同步通信量 >

进程同步

发布时间:2019-07-07 07:11 来源:未知 编辑:admin

  进程为了协调其推进速度,在某些地方需要相互等待或者唤醒,这种进程间的相互制约就被称作是进程同步。这种合作现象在操作系统和并发式编程中属于经常性事件。

  如果车里有其他人,司机一般会在启动车前检查车门是否关好,如果没关好就得提醒乘客关好车门,然后等待车门关好再启动车。司机和乘客之间的这种动作就是一种合作进程。

  我记得小时候坐的公交车是带有售票员的(现在都是自动售票了,只需要一个司机盯一下就好了),每到一个站,售票员负责开车门,下车售票,上车关门,而司机就只负责开车,停车,两人的分工倒是很明确的,记得某一次坐车,售票员中途跑去上厕所顺手把车门一关,司机一脚油门就走了,售票员在后边追半天也没追上,索性就放弃了,到了第二站的时候司机才发现售票员不见了……(那会儿的公交车小,坐的人还不少,拥挤程度有时候能和日本地铁媲美)

  公交车司机和售票员需要协同工作,那么就需要一种协同工作的机制——即进程同步,而如果同步中的问题没有处理好,那么发生上面说的司机丢掉售票员的事情也可能就是常态了。

  这个进程同步机制应该算的上是古董级的了,这种机制的主要思想就是——通过将资源数量化,将申请资源和释放资源的动作具体化,从而达到对资源的操作及结果可视化的程度。

  从中我们可以看见司机和售票员均需对方完成相应的动作才能继续进行,而S1,S2两个信号量则是将两人互相等待的动作具体化了。

  一家面包店货架上有K个位置,每个位置只能放一块儿面包,当货架上还有位置可以摆放面包时,面包师就会制作面包摆放上去,而只要货架上还有面包,客人就可以买走,没有面包的时候就等面包师做好面包。(小本生意,就一个窗口进行交易……)

  面包师不断地重复做面包-放到货架上的动作,客人则是不断的买面包。

  很显然,由于货架位置只有K个,满了就不能再放,空了,客人就不能再买,所以面包师和客人的动作就无法无限制的重复下去,所以我们需要通过增设一个信号来通知面包师和客人能不能继续进行。

  仅仅是这样还不够,面包师做面包的时候,有客人来是无法招待的,所以我们需要让面包师和客人实现互斥。

  到目前为止,我们说的都是只有一个面包师和一个客人的的情况,但一般都是存在多个面包师以及多个客人的,那么这样一来面包师之间要实现互斥,客人之间也要实现互斥关系:

  其实生产者-消费者问题使PV操作中的一个经典问题,这里所说的只是问题的一个小小的变种。

  话说前几天在楼下的一家小店买卤肉卷,我付钱给老板和老板递卤肉卷给我,这都在一个小窗口完成的。

  而且去的时候前边还有俩人在等,我倒也没排队,直接对老板说来份卤肉卷,微信转,然后也等起来了。(说没有这种经历的人,请开始你的表演)

  这小店儿里就一个做饭的地方,两个店员就只有一个人能使用灶台(生产者互斥啦)。客人也都是讲究个先来后到,前面的人点完才能是后面的人(消费者互斥啦)。至于说货架……小本生意,点餐才做嘛(货架可放0个卤肉卷)。

  设有一组共享数据和两组并发进程,一组数据只对此组数据执行读操作,另一组则对此组数据执行写操作。

  要求:多个读者可以同时进行读操作,多个写着不能进行写操作,读者存在则不能写。

  从这两点要求上,我们可以看出,算法设计出来之后一定是读者优先,写者容易饥饿。

  稍加思考后,我们便可以发现,X提供的原料刚好使C可以吸烟,Y提供的原料刚好可以使A可以吸烟,Z提供的原料刚好使得B可以吸烟,如果按照正常的思路将原料抽象成独立的信号量,然后交由吸烟者去申请,那么就极易出现死锁(不光吸烟者无法吸烟,生成者还不能生产,吸烟者说不定就能戒烟了,但生产者就破产了)。

  一个一个的申请资源显然不行,那么我们同时申请两个,甚至所有需要的资源呢?显然可以看出,在这个问题上,这种想法是可行的。

  从前文中可以看出,PV操作比较灵活,普通的PV操作不行,给加强一下继续用,但是如果在某一步忘记了PV操作中的一个,就会造成死锁问题。

  但是总的来说,一般的同步问题还是可以解决的,就是这种机制比较低级。所以就有人提出比较高级的条件临界区了,语法格式如下:

  进入条件临界区的进程需要同时满足互斥和expression为真两个条件,不满足时则进程等待,致使在条件临界区的入口形成一个等待队列。究其本质,也属于一种忙式等待。

  PV操作不光是低级,还是分散式的同步机制,也就是说对于共享变量及信号量变量的操作分散于各个进程当中,导致程序的可读性差,局部性差,不利于程序的修改和维护(操作被分散了,就得通读整个程序,才能检测PV操作的正确性),换句话说,正确性难以保证。

  于是有人不甘寂寞,由此提出了管程概念——将共享变量以及对于共享变量所能执行的操作集中在一个模块中(听起来是不是和高级语言的模块化编程概念很类似?)。

  3.信息掩藏,管程中的函数实现了某些功能,但具体实现对外部不可见,共享变量在管程外部不可见,类似封装的思想。

  管程也分几种,但分类则是由于唤醒等待操作的处理方式不同而有了不同,假定某一进程P唤醒Q,此时:

  1. P等待Q继续,直到Q退出或等待,这个方式的逻辑性强,效率较低,是Hoare管程所采用的。

  2. Q等待P继续,知道P等待或退出,这个方式效率高,但逻辑性差,Java管程使用的此种方式。

  3. 规定唤醒操作为管程中的最后一个可执行操作,实现起来比较简单,Hansen管程采用。

  在管程内部,由于执行唤醒操作,可能会出现多个等待进程,紧急等待队列即用于管理这些进程。前提是进程已经进入管程。

  条件型变量:PCB_queue *c,其指向NULL或者指向一个PCB队列头部。

  wait(c); 如果紧急等待队列非空,则唤醒第一个等待者,否则释放管程的控制权。执行wait(c)操作的进程的PCB进入c链的尾部。

  signal(c); 如果c链为空,则执行signal(c);操作的进程继续,否则唤醒第一个等待者。执行signal(c);操作的进程的PCB放入紧急等待队列的尾部。

  ADL语言不太容易描述管程的问题,所以改用C++或是伪代码等其他方式描述。

  这里可以看到,当有写者时,读者便不可以进入,必须等待写者完成操作。这个算法是偏向于写者的——即写者优先。

  管程虽然比较高级,但是却和PV操作是等价的,可以用管程构造PV操作,也可以用PV操作构造管程。

  管程比PV操作要高级一些,但是和PV操作等价,只适合与单处理器系统及具有公共内存的多处理器系统。

  在分布式系统中,管程和PV操作是失败的,这是因为其二者均是以被动成分(被进程所操作的对象)为核心的,而被动成分在分布式系统中的存储难以被克服。

  适合分布式系统的同步机制有通信顺序进程,会合,分布式进程,远程过程调用等,这里由于篇幅则只介绍会合。

  当一个任务调用另一个任务的入口,而且被调用者已经准备好接收这个调用时,便发生会合。

  任务:相当于通常所说的进程(主动成分)。一个任务有多个入口,一个入口对应一段程序,一个任务可以调用另一个任务的入口。

  进程的同步主要就是解决对于一些共享型的变量操作问题,既要能使其他进程知道共享变量的改变,还要保证不能有多个进程对同一个共享变量操作,如此而已。

  一、临界区      互相协作的进程之间有共享的数据,于是这里就有一个并发情况下,如何确保有序操作这些数据、维护一致性的问题,即进程同步。为了解决合作进程之间的竞争条件,引入临界区问题模型。临界区是包...博文来自:一路前行

  多进程的系统中避免不了进程间的相互关系。本讲将介绍进程间的两种主要关系——同步与互斥,然后着重讲解解决进程同步的几种机制。      进程互斥是进程之间发生的一种间接性作用,一般是程序不希望的。通常的...博文来自:一缕阳光的博客

  操作系统的共享进程间的同步问题关乎到数据的一致性以及操作系统的可实践性,是十分重要的概念。本篇博客将从宏观上梳理操作系统进程同步的解决方案,同时引出当前广泛使用的一种有效措施。进程同步机制基础概念为何...博文来自:博观而约取,深研而广求

  进程同步的四种方法1、临界区(CriticalSection):通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。优点:保证在某一时刻只有一个线程能访问数据的简便办法缺点:虽然临...博文来自:wuhuagu_wuhuaguo的博客

  有时候父进程要求子进程的运算结果进行下一步的运算,或者子进程的功能是为父进程提供下一步执行的先决条件,此时父进程就必须在某个位置停下来,等待子进程运行结束,而如果父进程不等待且直接执行下去,就会出现极...博文来自:華仔的博客

  在前文《Linux–进程控制》博客中,我曾提到过父子进程之间的同步有两种方法:分别是基于管道和信号实现。为什么需要进程的同步,当我们创建一个新进程时,为了保证父子进程的运行按照我们预期的时序进行,所以...博文来自:rikeyone的博客

  问题描述桌子上有一只盘子,每次只能向其中放入一个水果。爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,儿子专等吃盘子中的橘子,女儿专等吃盘子中的苹果。只有盘子为空时,爸爸或妈妈就可向盘子中放一个水果;仅当...博文来自:weixin_34204057的博客

  多进程的系统中避免不了进程间的相互关系。本讲将介绍进程间的两种主要关系——同步与互斥,然后着重讲解解决进程同步的几种机制。     进程互斥是进程之间发生的一种间接性作用,一般是程序不希望的。通常的情...博文来自:wintree的专栏

  进程间同步是指进程的运行有先后顺序,如A进程等待B进程执行完某个动作A进程才能继续往下运行。进程间通信的方法都可以用来同步,只是操作是否方便的一个问题。复习了UNIX高级编程,觉得POSIX的信号量是...博文来自:u013401853的专栏

  北邮操作系统第三次实验作业,进程同步。。C语言编写。。。windows环境下运行。。欢迎大家下载。。。↖(^ω^)↗。。附带实验报告哦。。亲

  1.SharedPreferences不支持进程同步一个进程的情况,经常采用SharePreference来做,但是SharePreference不支持多进程,它基于单个文件的,默认是没有考虑同步互斥...

  11-09阅读数 1736在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。所谓进程同步(线程同步同理),主要是解决临界资源互斥访问的问题。如多个进程访问同一片共享内存,这片共享内存必须互斥使用。一.进...

  08-21阅读数 47331.信号量: 1)信号量的定义:每个信号量至少须记录两个信息:信号量的值和等待该信号量的进程队列。它的类型定义如下:(用类PASCAL语言表述)    semaphore=record        ...

  实验代码(c语言)05-17数据结构: 每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程类型标号、进程系统号、进程状态(本程序未用)、进程产品(字符)、进程链指针等等。 系统开辟了一个缓冲区,大小由buffersize指定。 ...下载

  操作系统实验报告四 进程同步实验报告。加深对并发协作进程同步与互斥概念的理解,观察和体验并发进程同步与互斥操作的效果,分析与研究经典进程同步与互斥问题的实际解决方案。了解Linux系统中IPC进程同步工具的用法,练习并发协作进程的同步与互...

  1.实验目的利用信号量和PV操作实现进程的同步。  2.实验软硬件环境安装WindowsXP的计算机 VirtualBox软件,以及在其上安装的Ubuntu虚拟机3.实验内容    生产者进程生产产品...

  同步互斥概念互斥:  互斥就是指某一资源同时只能允许一个访问者对其进行访问,具有唯一性和排他性,但是互斥无法限制访问者对资源的访问顺序,即访问是无序的。  对于线程来说,互斥就是说两个线程之间不可以同...博文来自:adorable_的博客

  线程同步机制:临界区(CriticalSection)、互斥量(Mutex)、事件(Event)、信号量(Semaphore)四种方式1、临界区:又称阻塞,通过对多线程的串行化来访问公共资源或一段代码...博文来自:

  本文分别介绍三个经典进程的同步问题,即“生产者-消费者问题”、“哲学家进餐问题”以及“读者-写者问题”。...博文来自:li2008kui的专栏

  在前面的一篇文章(《进程同步之Peterson算法》)中,我们简单介绍了解决同步互斥的一种方法。现在我们介绍在多处理器情况下,进程同步的解决办法。在多处理器系统下,我们不能像单处理器那样禁止中断来确保...博文来自:

  一、信号量机制1、整型信号量(先判断后减值)1)信号量定义为一个整型量;2)根据初始情况赋相应的值;3)仅能通过两个原子操作来访问。整型信号量符合“有限等待”原则signal释放资源后,当CPU被分配...博文来自:

  阅读数 2110进程同步和通信进程同步在OS中引入进程后,一方面使系统的吞吐量和资源的利用率得到提升,另一方面也使得系统变得复杂,如果没有合理的方式对进程进行妥善的管理,必然会引起进程对系统资源的无序竞争,使系统变得...

  概念:1.临界资源(criticalresource):系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源(或互斥资源)。2.临界区(互斥区)(criticalsection(region)...博文来自:

  进程同步互相协作的进程之间有共享的数据,于是这里就有一个并发情况下,如何确保有序操作这些数据、维护一致性的问题,即进程同步。从底层到高级应用,同步机制依次有临界区、信号量、管程、原子事务。多个进程并发...博文来自:

  1、设公共汽车上,司机和售票员的活动分别是: 司机的活动:启动车辆;             正常行车;             到站停车; 售票员的活动: 关车门;             售票; ...博文来自:

  帐号相关流程注册范围n企业n政府n媒体n其他组织换句话讲就是不让个人开发者注册。 :)填写企业信息不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的。填写公司机构信息,对公账...博文来自:小雨同学的技术博客

  jquery/js实现一个网页同时调用多个倒计时(最新的)nn最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!nnnn//jsn...博文来自:Websites

  command窗口是命令窗口,即为sqplus窗口,有命令提示符,识别sqlplus命令,基本的命令都可以执行nsql仅可执行DDL、select、DML等...博文来自:Ape55的博客

  对象的创建和销毁在一定程度上会消耗系统的资源,虽然jvm的性能在近几年已经得到了很大的提高,对于多数对象来说,没有必要利用对象池技术来进行对象的创建和管理。但是对于有些对象来说,其创建的代价还是比较昂...博文来自:赶路人儿

  扫二维码关注,获取更多技术分享nnn 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...博文来自:Marswill

  记得很早以前公司项目中添加过移动支付这一块, 包括微信,支付宝,银联等第三方的整合。 但是后来懒于总结就没留下什么, 最近公司项目打算添加,所以打算简单总结一下,记上一笔以备将来使用。 毕竟第三方的支...博文来自:samuelnotes的专栏

  本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇...博文来自:Lynn_Blog

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗!nnDocker的三大核心概念:镜像、容器、仓库n镜像:类似虚拟机的镜像、用俗话说就是安装文件。n容器:类似一个轻量...博文来自:我走小路的博客

http://4kci.com/tongbutongxinliang/398.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有