计算机操作系统进程(线程)的同步与通信
发布时间:2009/1/17 0:00:00 访问次数:1016
系统以并发方式运行的各个进程,不可避免地要共同使用一些共享资源以及相互之间的通信。因此,对于一个完善的多进程操作系统来说,系统必须具有完各的同步和通信机制。
为了实现各进程之间的合作和无冲突的运行,在各进程之间必须建立一些制约关系,其中 一种制约关系叫做直接制约关系,另一种制约关系则叫做间接制约关系。
直接制约关系源于进程之间的合作。例如,有进程a和进程b两个进程,它们需要通过访问同一个数据缓冲区合作完成一项工作,进程a负责向缓冲区写入数据,进程b负责从缓 冲区读取该数据。显然,当进程a还未向缓冲区写入数据时(缓冲区为空时),进程b因不能从缓冲区得到有效数据而应处于等待状态;只有等进程a向缓冲区写入了数据后,才应通知 进程b去取数据。相反,当缓冲区的数据还未被进程b读取时(缓冲区为满时),进程a就不 能向缓冲区写入新的数据而应处于等待状态;只有等进程b自缓冲区读取数据后,才应通知 进程a去写入数据。显然,如果这两个进程不能如此协调工作,则势必造成严重的后果。
间接制约关系源于对资源的共享。例如,进程a和进程b共享一台打印机,如果系统已经把打印机分配给了进程a,则进程b因不能获得打印机的使用杈而应处于等待状态;只有当进程a把打印机释放后,系统才能唤醒进程b使其获得打印机的使用权。如果这两个进程不这样做,那么也会造成极大的混乱。
由上可知,在多进程合作工作的过程中,操作系统应解决两个问题:一是各进程间应该具有一种互斥关系,即对于某个共享资源,如果一个进程正在使用,则其他进程只能等待,等到该进程释放该资源后,等待的进程之l才能使用它;二是相关的进程在执行上要有先后的次序,一个进程要等其伙伴发来通知,或建立了某个条件后才能继续执行,否则只能等待。
进程之间这种制约性的合作运行机制叫做进程间的同步。系统中进程的同步是依靠进程与进程之间互相发送消息来保证的。
进程间的同步依赖于进程间的通信。在操作系统中,是使用信号量、邮箱(消息邮箱)和消息队列这些被称做事件的中间环节来实现进程之间的通信的。
图是两个进程通过事件进行通信的示意图。进程1是发信方,进程2是收信 方。作为发信方,进程1的责任是把信息发送到事件上,这项操作叫做发送事件;而作为收信 方,进程2的责任是通过读事件操作对事件进行查询,如果有信息则读取信息,如果没有则等 待。读事件操作叫做请求事件。
图 两个进程在使用事件进行通信的示意图
用于同步和通信的事件,不同的操作系统有所不同。不过,常用的事件有信号量、消息邮 箱、消息队列等。
欢迎转载,信息来自维库电子市场网(www.dzsc.com)
系统以并发方式运行的各个进程,不可避免地要共同使用一些共享资源以及相互之间的通信。因此,对于一个完善的多进程操作系统来说,系统必须具有完各的同步和通信机制。
为了实现各进程之间的合作和无冲突的运行,在各进程之间必须建立一些制约关系,其中 一种制约关系叫做直接制约关系,另一种制约关系则叫做间接制约关系。
直接制约关系源于进程之间的合作。例如,有进程a和进程b两个进程,它们需要通过访问同一个数据缓冲区合作完成一项工作,进程a负责向缓冲区写入数据,进程b负责从缓 冲区读取该数据。显然,当进程a还未向缓冲区写入数据时(缓冲区为空时),进程b因不能从缓冲区得到有效数据而应处于等待状态;只有等进程a向缓冲区写入了数据后,才应通知 进程b去取数据。相反,当缓冲区的数据还未被进程b读取时(缓冲区为满时),进程a就不 能向缓冲区写入新的数据而应处于等待状态;只有等进程b自缓冲区读取数据后,才应通知 进程a去写入数据。显然,如果这两个进程不能如此协调工作,则势必造成严重的后果。
间接制约关系源于对资源的共享。例如,进程a和进程b共享一台打印机,如果系统已经把打印机分配给了进程a,则进程b因不能获得打印机的使用杈而应处于等待状态;只有当进程a把打印机释放后,系统才能唤醒进程b使其获得打印机的使用权。如果这两个进程不这样做,那么也会造成极大的混乱。
由上可知,在多进程合作工作的过程中,操作系统应解决两个问题:一是各进程间应该具有一种互斥关系,即对于某个共享资源,如果一个进程正在使用,则其他进程只能等待,等到该进程释放该资源后,等待的进程之l才能使用它;二是相关的进程在执行上要有先后的次序,一个进程要等其伙伴发来通知,或建立了某个条件后才能继续执行,否则只能等待。
进程之间这种制约性的合作运行机制叫做进程间的同步。系统中进程的同步是依靠进程与进程之间互相发送消息来保证的。
进程间的同步依赖于进程间的通信。在操作系统中,是使用信号量、邮箱(消息邮箱)和消息队列这些被称做事件的中间环节来实现进程之间的通信的。
图是两个进程通过事件进行通信的示意图。进程1是发信方,进程2是收信 方。作为发信方,进程1的责任是把信息发送到事件上,这项操作叫做发送事件;而作为收信 方,进程2的责任是通过读事件操作对事件进行查询,如果有信息则读取信息,如果没有则等 待。读事件操作叫做请求事件。
图 两个进程在使用事件进行通信的示意图
用于同步和通信的事件,不同的操作系统有所不同。不过,常用的事件有信号量、消息邮 箱、消息队列等。
欢迎转载,信息来自维库电子市场网(www.dzsc.com)
上一篇:计算机操作系统的设备无关性
上一篇:虚拟存储器的概念