操作系统中的进程间相互作用
在一个计算机系统中存在着多个进程,这些进程之间可能有逻辑上的关系,也可能没有逻辑上的关系。进程之间无论是否存在逻辑上的关系,由于它们都要共享或竞争一个计算机系统中的资源,所以不可避免地会互相发生作用。本节专门研究进程间的相互作用。
一、相关进程和无关进程
在一个多道程序系统中同时运行的并发进程通常有多个。在逻辑上具有某种联系的进程称为相关进程,在逻辑上没有任何联系的进程称为无关进程。并发进程相互之间可能是无关的,也可能是相关的。
如果一个进程的执行不影响其他进程的执行,且与其他进程的进展情况无关,即它们是各自独立的,则说这些并发进程的相互之间是无关的。显然,无关的并发进程一定没有共享的变量,它们分别在各自的数据集合上操作。
例如,为两个不同的源程序进行编译的两个进程,它们可以是并发执行但它们之间却是无关的。因为这两个进程分别在不同的数据集合上,为不同的源程序进行编译。虽然这两个进程可交叉地占用处理器为各自的源程序进行编译,但是,任何一个进程都不依赖另一 个进程。甚至当一个进程发现被编译的源程序有错误时,也不会影响另一个进程继续对自己的源程序进行编译,它们是各自独立的。
如果一个进程的执行依赖其他进程的进展情况,或者说,一个进程的执行可能影响其他 进程的执行结果,则说这些并发进程是相关的。
例如,有三个进程,它们分别是读数据进程、处理数据进程和打印结果进程。其中读数据进程每次启动磁盘读人一批数据并把读到的数据存储到缓冲区中;处理数据进程对存储在 缓冲区中的数据进行加工处理;打印结果进程把加工处理后的结果打印输出。这三个进程中 的每一个进程的执行都依赖另一个进程的进展情况,即只有当读数据进程把一批数据读完并 存入缓冲区后,处理数据进程才能对它进行加工处理;而打印结果进程要等数据加工处理好 后才能进行;也只有当缓冲区中的数据被打印结果进程取走后,读数据进程才能把读到的第 二批数据再存入缓冲区;如此循环,直至所有的数据都读入、处理过并打印输出。可见这三 个进程相互依赖、相互合作,它们是一组相关进程,共享着缓冲区中的数据资源。
二、与时间有关的错误
一个进程由于自身或外界的原因而可能被中断,且断点是不固定的。至于一个进程被中断后,哪个进程可以先运行,而被中断的进程在什么时候再去占用处理器等问题,则与进程调度策略有关。
进程执行的速度是不能由进程自身控制的。对于相关进程来说,可能有若干并发进程同 时使用共享资源,即一个进程一次使用未结束,另一进程也开始使用,形成交替使用共享资源。
例如,两个并发程序A和B共享一个公共变量n,程序A每执行一次循环都要作n= n + 1操作,程序B则在每一次循环中打印出n的值并将n重新置0。程序描述如下。
程序A:
while(true){
n = n+1;
};
程序B:
while(true){
print(n);
n = 0;
};
由于程序A和B的执行都以各自独立的速度向前推进,它们的语句在时间上可任意穿插或交叉执行,故程序A的n=n + 1操作可能在程序B的print(n)之后,而在n=0操作之前,也 可能在它们之后或它们之间(即n = n + l出现在print (n)之后,而在n=0之前),设在开始某个循环之前n的值为5,则对于上面三种情形,执行完一个循环后,打印机印出的值分 别为6, 5和5,而执行后的n值分别为0, 1,0。相同的程序在可能的三种情况下,分别产生了三组不同的结果,显然,这不是我们所希望的。产生了这种情形的根本原因在于:在并 发程序中共享了公共变量,使得程序的计算结果与并发程序执行的速度有关。这种错误的结 果又往往是与时间有关的(如上例中的三种情形,其结果时对时错,随执行速度的不同而 异),所以,把它称为“与时间有关的错误”。
操作系统中的进程间相互作用相关推荐
- 操作系统中的进程与线程
简介 在传统的操作系统中,进程拥有独立的内存地址空间和一个用于控制的线程.但是,现在的情况更多的情况下要求在同一地址空间下拥有多个线程并发执行.因此线程被引入操作系统. 为什么需要线程? 如果非要说是 ...
- 操作系统中的进程与线程和java中的线程
简介 在传统的操作系统中,进程拥有独立的内存地址空间和一个用于控制的线程.但是,现在的情况更多的情况下要求在同一地址空间下拥有多个线程并发执行.因此线程被引入操作系统. 为什么需要线程? 如果非要说是 ...
- 操作系统中的进程控制块又起什么作用呢?
为了便于系统控制和描述进程的活动过程,在操作系统核心中定义了一个专门的数据结构,称为进程控制块( Process Control block,PCB). 操作系统利用PCB来描述进程的基本情况以及进程 ...
- 2022-2-21 操作系统八股之七 —— 进程间的通信方式有哪些?
进程 ( InterProcess Communication )间通信是指在不同进程间传播或者交换信息.进程间通信的方式有:管道(有名管道和匿名管道).消息队列.信号量.共享内存.Socket.St ...
- 操作系统中的进程是如何 “调度” 的?
一.处理机调度的概念和层次 1.1 调度的基本概念 当有一堆任务要处理,但由于资源有限,这些事情没法同时处理.这就需要确定某种规则来决定处理这些任务的顺序,这就是"调度"研究的问题 ...
- 操作系统中的进程管理
目录 什么是进程? 进程控制块抽象(PCB) 虚拟地址空间 什么是进程? 进程是操作系统对一个正在运行的程序的一种抽象,进程可以看作是程序的一次运行过程:同时,在操作系统内部,进程是操作系统进行资源分 ...
- 操作系统中,进程与线程怎么设计的?
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 阮一峰 来源 | ruanyifeng.com/blog/2013/04/proc ...
- 多图 | 操作系统中,进程与线程怎么设计的?
点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 来源:http://rrd.me/eYm9B 进程(pro ...
- 同一主机的多个子进程使用同一个套接字_在操作系统中进程是如何通信的
这是我在毕业时校招阿里系公司时,终面的面试官问我印象最深的一道题,别问,问就是挂了.要是过了早就忘了 首先了解进程是什么 狭义定义就是,进程是一段程序进行的过程. 广义定义:进程是一个具有一定独立功能 ...
最新文章
- github上传代码
- mysql 数据库dbhelp_C# VS连接数据库DBhelp
- 95-30-010-Broker- Broker上线下线
- 使用markdown编辑器(自用,没内容。。)
- endnote无法同步原因_endnote不能同步(endnote retrieving references)的解决方法
- 字符模式下构建、使用KVM虚拟化平台
- 收下这份说明书,原来迈进智能计算的大门如此简单
- mysql 表名规范_MYSQL数据库命名及设计规范
- matlab for 循环中怎么做到只取其中一个数_公益心 码客行(8)—— 循环语句
- 富友支付富掌柜智能收银系统是怎样的一套系统
- 分不清ERP、SAP、MES?我来帮你搞定
- python谐音梗_谐 音 梗 生 成 器
- mac端本地项目上传到码云
- 我用Python的Matplotlib库绘制25个超好看图表
- 求最大公约数与最小公倍数算法——Java
- 牛客java选择题每日打卡Day12
- PMP学习笔记 第7章 项目成本管理
- 配置IKAnalyzer扩展词库
- 移动硬盘如何分区?分区软件推荐:
- appinventor飞机大战案例_APPInventor实例及讲解