精华内容
下载资源
问答
  • 【判断题】虚拟存储空间不是一个实际存在的存储空间,是操作系统对逻辑内存的扩充 【单选题】在操作系统中,有一组进程,进程之间具有直接相互制约性。这组并发进程之间()。 【单选题】下列关于进程的叙述中,正确的是...

    【单选题】某一缓冲溶液的pH为7.4,不小心在其中加入少量水分,那么它的pH值将( )

    【单选题】在0.1mol·L -1 的NH 3 ·H 2 O溶液中,加入一些NH 4 Cl固体,则( )

    【单选题】欲配制pH=9.00的缓冲溶液,最好选用下列缓冲系中的( )

    【单选题】当线程被创建后,其所处的状态是( )

    【单选题】一次I/O操作的结束,有可能导致( )。

    【单选题】一作业8:00到达系统,估计运行时间为1小时,若10:00开始执行该作业,其响应比是( )

    【判断题】在磁盘上的顺序文件中插入新的记录时,必须复制整个文件。

    【单选题】下列各组溶液中,能以一定体积比组成缓冲溶液的是( )

    【判断题】页式存储管理中,一个作业可以占用不连续的内存空间,而段式存储管理中,一个作业则是占用连续的内存空间。

    【单选题】URL类的构造方法将决定作为参数的字符串是否是合法的统一资源定位器。如果合法,则初始化包含统一资源定位器的URL对象,否则将产生( )异常。

    【判断题】作业调度与进程调度相互配合才能实现多道作业的并发执行。

    【判断题】利用对换技术扩充内存时,设计时必须考虑的问题是:如何减少信息交换量,降低交换所用的时间。

    【填空题】使0.1 mol·L -1 HCN稀释100倍,则其离解度约为原来的____ B 2倍 C 10倍 D 100倍

    【单选题】在Windows NT中( )可以处于就绪状态。

    【单选题】下列有关缓冲溶液的叙述中,错误的是 ( )

    【单选题】已知C H3 PO4 =C NaOH =0.1mol·L -1 ,由H 3 PO 4 与NaOH配制pH=2.16的缓冲溶液,则其体积比为(已知H 3 PO 4 的pKa 1 =2.16,pKa 2 =7.21,pKa 3 =12.32)

    【单选题】下列组合中,缓冲容量最大的是( )

    【单选题】使用套接字编程时,为了接收对方发来的数据,则需要使用哪个方法( )

    【单选题】为了得到当前正在运行的线程,可使用下列哪个方法?()

    【判断题】中国新闻媒介经历了相应的两个阶段

    【单选题】设两个进程共用一个临界资源的互斥信号量mutex,当mutex=-1时表示()。

    【单选题】当使用客户端套接字Socket创建对象时,需要指定( )

    【单选题】下列溶液的浓度均为0.1mol·L -1 ,其pH值小于7的是( )

    【判断题】磁带设备只适合于连续存放和顺序存取,而磁盘设备既适合于连续存放,也适合于串联存放和索引存放。磁盘设备上的文件既可以是顺序存取的,也可以是直接存取或按键存取的。

    【单选题】c(HA)=0.10 mol·L -1 的溶液的pH=3.00 ,则HA的pK a 等于( )

    【单选题】下列各对溶液中,等体积混合后,为缓冲溶液的是( )

    【单选题】当一进程因在记录型信号量S上执行V(S)操作而导致唤醒另一进程后,S的值为()。

    【单选题】向HAc溶液中加入少量下列物质, 能使HAc的离解度和溶液的pH都增大的是( )

    【单选题】影响离子强度大小因素有( )

    【单选题】在纯水中,加入一些碱,其溶液的 ( )

    【单选题】在操作系统中,可以并行工作的基本单位是( )。

    【判断题】虚拟存储空间不是一个实际存在的存储空间,是操作系统对逻辑内存的扩充

    【单选题】在操作系统中,有一组进程,进程之间具有直接相互制约性。这组并发进程之间()。

    【单选题】下列关于进程的叙述中,正确的是( )。

    【单选题】0.9 mol·L -1 HAc溶液中H + 浓度是0.1 mol·L -1 HAc溶液中H + 浓度的( )

    【判断题】文件的具体实现是操作系统考虑的范畴,因而用户不必关心。

    【单选题】Java程序中,使用TCP/IP协议套接字编写服务端程序的套接字类是( )

    【判断题】采用数型目录结构的文件系统中,各用户的文件名必须互不相同。

    【单选题】资源静态分配法可以预防死锁的发生,因为使死锁四个条件中的()不成立。

    【单选题】InetAddress类的getLocalHost方法返回一个( )对象,它包含了运行该程序的计算机主机名等信息。

    【判断题】可顺序存取的文件不一定能随机存取;但可随机存取的文件都可以顺序存取。

    【单选题】一个进程释放一种资源将有可能导致一个或几个进程( )。

    【单选题】在下列选项中,属于预防死锁的方法是( )。

    【单选题】当线程调用start()后,其所处状态为()

    【单选题】Thread.sleep()方法调用后,当等待时间未到,该线程所处状态为( )

    【单选题】Thread类中能运行线程体的方法是( )

    【单选题】由H 3 PO 4 与NaOH可配制的缓冲对为( )

    【判断题】文件系统的主要功能是“按名存取”,所以从磁盘读取数据的工作是由文件系统来完成的。

    【判断题】交互式作业不存在作业调度问题。

    【单选题】下列溶液中pH最小的是( )

    展开全文
  • 并发进程之间制约关系

    千次阅读 2013-09-13 23:14:36
    并发进程之间的竞争关系为进程互斥,并发进程之间的协作关系体现为进程同步。 进程同步:指两个以上进程基于某个条件来协调他们的活动。 同步可以分为:1对称同步:事件间相互制约  2.非对称同步 进程互斥:指...

    在多道程序系统环境中,由于资源共享与进程合作,使得并发执行的进程之间可能产生相互制约关系,这些制约关系可分为两类:竞争与协作。并发进程之间的竞争关系为进程互斥,并发进程之间的协作关系体现为进程同步。

    进程同步:指两个以上进程基于某个条件来协调他们的活动。

    同步可以分为:1对称同步:事件间相互制约

                             2.非对称同步

    进程互斥:指若干进程都要使用同一资源时,任何时刻最多允许一个进程使用,其他要使用该资源的进程必须等待,直到占有资源的进程释放该资源。

    展开全文
  • 进程之间的约束关系:程序并发执行的相互制约
  • 操作系统中的进程间相互作用

    千次阅读 2020-01-17 09:37:05
    本节专门研究进程相互作用。 一、相关进程和无关进程 在一个多道程序系统中同时运行的并发进程通常有多个。在逻辑上具有某种联系的进程称为相关进程,在逻辑上没有任何联系的进程称为无关进程。并发进程相...

    在一个计算机系统中存在着多个进程,这些进程之间可能有逻辑上的关系,也可能没有逻辑上的关系。进程之间无论是否存在逻辑上的关系,由于它们都要共享或竞争一个计算机系统中的资源,所以不可避免地会互相发生作用。本节专门研究进程间的相互作用。

    一、相关进程和无关进程

    在一个多道程序系统中同时运行的并发进程通常有多个。在逻辑上具有某种联系的进程称为相关进程在逻辑上没有任何联系的进程称为无关进程。并发进程相互之间可能是无关的,也可能是相关的。

    如果一个进程的执行不影响其他进程的执行,且与其他进程的进展情况无关,即它们是各自独立的,则说这些并发进程的相互之间是无关的。显然,无关的并发进程一定没有共享的变量,它们分别在各自的数据集合上操作

    例如,为两个不同的源程序进行编译的两个进程,它们可以是并发执行但它们之间却是无关的。因为这两个进程分别在不同的数据集合上,为不同的源程序进行编译。虽然这两个进程可交叉地占用处理器为各自的源程序进行编译,但是,任何一个进程都不依赖另一 个进程。甚至当一个进程发现被编译的源程序有错误时,也不会影响另一个进程继续对自己的源程序进行编译,它们是各自独立的。

    如果一个进程的执行依赖其他进程的进展情况,或者说,一个进程的执行可能影响其他 进程的执行结果,则说这些并发进程是相关的

    例如,有三个进程,它们分别是读数据进程、处理数据进程和打印结果进程。其中读数据进程每次启动磁盘读人一批数据并把读到的数据存储到缓冲区中;处理数据进程对存储在 缓冲区中的数据进行加工处理;打印结果进程把加工处理后的结果打印输出。这三个进程中 的每一个进程的执行都依赖另一个进程的进展情况,即只有当读数据进程把一批数据读完并 存入缓冲区后,处理数据进程才能对它进行加工处理;而打印结果进程要等数据加工处理好 后才能进行;也只有当缓冲区中的数据被打印结果进程取走后,读数据进程才能把读到的第 二批数据再存入缓冲区;如此循环,直至所有的数据都读入、处理过并打印输出。可见这三 个进程相互依赖、相互合作,它们是一组相关进程,共享着缓冲区中的数据资源。

    二、与时间有关的错误

    一个进程由于自身或外界的原因而可能被中断,且断点是不固定的。至于一个进程被中断后,哪个进程可以先运行,而被中断的进程在什么时候再去占用处理器等问题,则与进程调度策略有关。

    进程执行的速度是不能由进程自身控制的。对于相关进程来说,可能有若干并发进程同 时使用共享资源,即一个进程一次使用未结束,另一进程也开始使用,形成交替使用共享资源。

    例如,两个并发程序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。相同的程序在可能的三种情况下,分别产生了三组不同的结果,显然,这不是我们所希望的。产生了这种情形的根本原因在于:在并 发程序中共享了公共变量,使得程序的计算结果与并发程序执行的速度有关。这种错误的结 果又往往是与时间有关的(如上例中的三种情形,其结果时对时错,随执行速度的不同而 异),所以,把它称为“与时间有关的错误”

    展开全文
  • 程序一旦运行就是进程,或者更专业化来说:进程是指程序执行时的一个实例。进程是资源分配的最小单位。 什么是线程 一个线程是进程的一个顺序执行流。同类的多个线程共享一块内存空间和一组系统资源,线程本身有一...

    请详述操作系统中的线程的基本概念、以及线程的基本状态

    什么是进程

    进程是指在系统中正在运行的一个应用程序;程序一旦运行就是进程,或者更专业化来说:进程是指程序执行时的一个实例。进程是资源分配的最小单位。

    什么是线程

    一个线程是进程的一个顺序执行流。同类的多个线程共享一块内存空间和一组系统资源,线程本身有一个供程序执行时的堆栈。线程在切换时负荷小,因此,线程也被称为轻负荷进程。一个进程中可以包含多个线程。线程是程序执行的最小单位。

    进程与线程的区别

    1 进程拥有独立的堆栈空间和数据段,奢侈,系统开销大,是资源分配的最小单位,不同进程的地址空间在逻辑上时相互独立的。

    2 线程有独立的堆栈空间,但是共享数据段,代码段,进程用户ID,文件描述符,切换速度快,效率高,是程序执行的最小单元,处理器调度的基本单元,线程有四种状态:运行、就绪、挂起和结束。线程是轻量级的进程

    3 一个进程至少有一个线程。线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

    4 线程在执行过程中与进程的区别在于每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

    5 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用来实现进程的调度和管理以及资源分配。

    6 体现在通信机制上面,正因为进程之间互不干扰,相互独立,进程的通信机制相对很复杂,譬如管道,信号,消息队列,共享内存,套接字等通信机制,而线程由于共享数据段所以通信机制很方便

    并发原理

    并发当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。这种方式我们称之为并发(Concurrent)。

    并行:当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。

    区别:并发和并行是即相似又有区别的两个概念,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。倘若在计算机系统中有多个处理机,则这些可以并发执行的程序便可被分配到多个处理机上,实现并行执行,即利用每个处理机来处理一个可并发执行的程序,这样,多个程序便可以同时执行。

    线程状态

    1.新建

    用new语句创建的线程对象处于新建状态,此时它和其他java对象一样,仅被分配了内存。

    2.等待

    当线程在new之后,并且在调用start方法前,线程处于等待状态。

    3.就绪

    当一个线程对象创建后,其他线程调用它的start()方法,该线程就进入就绪状态。处于这个状态的线程位于Java虚拟机的可运行池中,等待cpu的使用权。

    4.运行状态

    处于这个状态的线程占用CPU,执行程序代码。在并发运行环境中,如果计算机只有一个CPU,那么任何时刻只会有一个线程处于这个状态。

    只有处于就绪状态的线程才有机会转到运行状态。

    5.阻塞状态

    阻塞状态是指线程因为某些原因放弃CPU,暂时停止运行。当线程处于阻塞状态时,Java虚拟机不会给线程分配CPU,直到线程重新进入就绪状态,它才会有机会获得运行状态。

    阻塞状态分为三种:

    1、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。

    2、同步阻塞:运行的线程在获取对象同步锁时,若该同步锁被别的线程占用,则JVM会把线程放入锁池中。

    3、其他阻塞:运行的线程执行Sleep()方法,或者发出I/O请求时,JVM会把线程设为阻塞状态。当Sleep()状态超时、或者I/O处理完毕时,线程重新转入就绪状态。

    6.死亡状态

    当线程执行完run()方法中的代码,或者遇到了未捕获的异常,就会退出run()方法,此时就进入死亡状态,该线程结束生命周期。

    进程的交互

    根据进程之间互相之间知道对方存在的程度,对进程间的交互方式进行分类。

    • 进程之间互相不知道对方的存在:这是一些独立的进程,他们不会一起工作。尽管这些进程之间不会一起工作,但操作系统需要直到他们之间对资源的竞争情况。
    • 进程间接知道对方的存在:这些进程不需要知道互相的进程id,但他们共享某些资源,如:i/o缓冲区。这类进程在共享同一个对象时会表现出合作行为。
    • 进程直接知道对方的存在:这些进程可直接通过进程id进行通信,以合作完成某些活动。

    进程间的 资源竞争 
    当并发进程竞争使用同一资源时,之间会发生冲突。我们把这些情况描述为:两个或更多进程在它们的执行过程中需要访问一个资源,每个进程并不知道其他进程的存在,且每个进程也不受其他进程的影响。 
    竞争进程之间没有任何信息交换,但一个进程的执行可能会影响到竞争进程的行为。特别是当两个进程都期望访问同一个资源时,如果操作系统把这个资源分配给一个进程,那么另一个进程就必须等待,一种极端情况是:被阻塞的进程永远不能访问这个资源,因此该进程永远不能成功运行结束。

    竞争进程面临三个控制问题:

    • 互斥:假设两个或更多进程需要访问一个不可共享的资源,如打印机。
    • 临界资源:在执行过程中,每个进程都会给该i/o设备发命令,接受状态信息,发送数据和接收数据。这类资源称为临界资源。
    • 临界区:使用临界资源的那部分程序称为程序的临界区。

    进程间通过共享合作 
    进程间在互相并不确切知道对方的情况下进行交互。例如:多个进程可能访问一个共享变量,进程可能使用并修改共享变量而不涉及其他进程,但却知道其他进程也可能访问同一个数据。因此这些进程必须合作,以确保它们共享的数据得到正确管理。控制机制必须确保共享数据的完整性。

    进程间通过通信合作(进程间的通信) 
    当今从通过通信进行合作时,各个进程都与其他进程进行连接。通信提供同步和协调各种活动的方法。

    进程同步

    多道程序系统中进程是并发执行的,这些进程之间存在着不同的制约关系,为了协调进程之间的相互制约关系,就需要实现进程的同步。互斥是同步的一种特殊情况。

    同步:一个进程到达了某些点后,除非另一个进程已完成了某些操作,否则就不得不停下来等待这些结束,这就是进程的同步。

    同步机制遵循规则:

    1. 空闲让进:当无进程处于临界区时,表明临界资源处于空闲状态 ,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效的利用临界资源。
    2. 忙则等待:当已有进程进入临界区时,表明临界资源正在被访问,因而其他试图进入临界区的进程必须等待,以保证对临界资源的互斥和访问。
    3. 有限等待:对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入“死等”状态。
    4. 让权等待:当今从不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态。

     

    进程的基本状态:

    就绪状态:进程已获得除CPU外的所有必要资源,只等待CPU时的状态。一个系统会将多个处于就绪状态的进程排成一个就绪队列。

     执行状态:进程已获CPU,正在执行。单处理机系统中,处于执行状态的进程只一个;多处理机系统中,有多个处于执行状态的进程。

    阻塞状态:正在执行的进程由于某种原因而暂时无法继续执行,便放弃处理机而处于暂停状态,即进程执行受阻。(这种状态又称等待状态或封锁状态),通常导致进程阻塞的典型事件有:请求I/O,申请缓冲空间等。一般,将处于阻塞状态的进程排成一个队列,有的系统还根据阻塞原因不同把这些阻塞集成排成多个队列。

    创建状态:此时,进程已经拥有了字节的PCB,但该进程所必需的资源或其它信息(如主存资源)尚未分配,进程自身还未进入主存,即创建工作尚未完成,进程还不能够被调度运行。(创建进程的两个步骤: 为一个新进程创建PCB,并填写必要管理信息;把该进程转入就绪状态并插入就绪队列。)

    终止状态:进程的终止首先要等待操作系统进行善后处理,然后将其PCB清零,并将PCB空间返还系统。(当一个进程到达自然结束点或出现了无法克服的错误,或是被操作系统或其它有终止权的进程所终结,它将进入终止状态。进入终止状态的进程不能再执行,但在操作系统中依然保留一个记录,其中保存状态码和一些计时统计数据,供其它进程收集。一旦其它进程完成了对终止状态进程的信息提取之后,操作系统将删除该进程。

    进程与线程的选择取决以下几点:

    1、需要频繁创建销毁的优先使用线程;因为对进程来说创建和销毁一个进程代价是很大的。

    2、线程的切换速度快,所以在需要大量计算,切换频繁时用线程,还有耗时的操作使用线程可提高应用程序的响应

    3、因为对CPU系统的效率使用上线程更占优,所以可能要发展到多机分布的用进程,多核分布用线程;

    4、并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求;

    5、需要更稳定安全时,适合选择进程;需要速度时,选择线程更好。

    线程池的工作原理

    线程池可以看做是线程的集合。在没有任务时线程处于空闲状态,当请求到来:线程池给这个请求分配一个空闲的线程,任务完成后回到线程池中等待下次任务(而不是销毁)。这样就实现了线程的重用

    使用线程池的好处

    1、降低资源消耗:可以重复利用已创建的线程降低线程创建和销毁造成的消耗。

    2、提高响应速度:当任务到达时,任务可以不需要等到线程创建就能立即执行。

    3、提高线程的可管理性:线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。

    首先我们看下当一个新的任务提交到线程池之后,线程池是如何处理的

    1、线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则执行第二步。

    2、线程池判断工作队列是否已经满。如果工作队列没有满,则将新提交的任务存储在这个工作队列里进行等待。如果工作队列满了,则执行第三步。

    3、线程池判断线程池的线程是否都处于工作状态。如果没有,则创建一个新的工作线程来执行任务。如果已经满了,则交给饱和策略来处理这个任务。


    • Linux下进程通信的八种方法

    管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),

    共享内存(shared memory),信号量(semaphore),信号(signal),套接字(Socket)
       

    管道(pipe):

    也称为匿名管道;没有名字;只支持单向数据流;管道的缓冲区是有限的;管道所传送的是无格式字节流;

    • 管道的实质是一个内核缓冲区,进程以先进先出的方式从缓冲区存取数据,管道一端的进程顺序的将数据写入缓冲区,另一端的进程则顺序的读出数据。
    • 该缓冲区可以看做是一个循环队列,读和写的位置都是自动增长的,不能随意改变,一个数据只能被读一次,读出来以后在缓冲区就不复存在了。
    • 当缓冲区读空或者写满时,有一定的规则控制相应的读进程或者写进程进入等待队列,当空的缓冲区有新数据写入或者满的缓冲区有数据读出来时,就唤醒等待队列中的进程继续读写。

     

    • 管道允许一个进程和另一个与它有共同祖先的进程之间进行通信;
    • 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道。
    • 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。
    • 数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据
    • 管道所传送的是无格式字节流,这就要求管道的读出方和写入方必须事先约定好数据的格式,比如多少字节算作一个消息(或命令、或记录)等等;

       

    命名管道(FIFO):

    类似于管道,但是它可以用于任何两个进程之间的通信,命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建;

    • 以有名管道的文件形式存在于文件系统中,这样,即使与有名管道的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过有名管道相互通信,因此,通过有名管道不相关的进程也能交换数据。
    • 有名管道严格遵循先进先出(first in first out),对匿名管道及有名管道的读总是从开始处返回数据,对它们的写则把数据添加到末尾。它们不支持诸如lseek()等文件定位操作。有名管道的名字存在于文件系统中,内容存放在内存中。
    匿名管道和有名管道总结:
    (1)管道是特殊类型的文件,在满足先入先出的原则条件下可以进行读写,但不能进行定位读写。
    (2)匿名管道是单向的,只能在有亲缘关系的进程间通信;有名管道以磁盘文件的方式存在,可以实现本机任意两个进程通信。
    (3)无名管道阻塞问题:无名管道无需显示打开,创建时直接返回文件描述符,在读写时需要确定对方的存在,否则将退出。如果当前进程向无名管道的一端写数据,必须确定另一端有某一进程。如果写入无名管道的数据超过其最大值,写操作将阻塞,如果管道中没有数据,读操作将阻塞,如果管道发现另一端断开,将自动退出。
    (4)有名管道阻塞问题:有名管道在打开时需要确实对方的存在,否则将阻塞。即以读方式打开某管道,在此之前必须一个进程以写方式打开管道,否则阻塞。此外,可以以读写(O_RDWR)模式打开有名管道,即当前进程读,当前进程写,不会阻塞。
    
    

       

    (3) 信号(signal):信号是比较复杂的通信方式,用于通知接收进程有某种事情发生,除了用于进程间通信外,进程还可以发送信号给进程本身;

    • 信号是Linux系统中用于进程间互相通信或者操作的一种机制,信号可以在任何时候发给某一进程,而无需知道该进程的状态。
    • 如果该进程当前并未处于执行状态,则该信号就由内核保存起来,直到该进程回复执行并传递给它为止。
    • 如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消是才被传递给进程。

    信号来源
    信号是软件层次上对中断机制的一种模拟,是一种异步通信方式,,信号可以在用户空间进程和内核之间直接交互,内核可以利用信号来通知用户空间的进程发生了哪些系统事件,信号事件主要有两个来源:

    • 硬件来源:用户按键输入Ctrl+C退出、硬件异常如无效的存储访问等。
    • 软件终止:终止进程信号、其他进程调用kill函数、软件异常产生信号。

    信号生命周期和处理流程:信号产生——信号注册——信号注销——信号处理
    (1)信号被某个进程产生,并设置此信号传递的对象(一般为对应进程的pid),然后传递给操作系统;
    (2)操作系统根据接收进程的设置(是否阻塞)而选择性的发送给接收者,如果接收者阻塞该信号(且该信号是可以阻塞的),操作系统将暂时保留该信号,而不传递,直到该进程解除了对此信号的阻塞(如果对应进程已经退出,则丢弃此信号),如果对应进程没有阻塞,操作系统将传递此信号。
    (3)目的进程接收到此信号后,将根据当前进程对此信号设置的预处理方式,暂时终止当前代码的执行,保护上下文(主要包括临时寄存器数据,当前程序位置以及当前CPU的状态)、转而执行中断服务程序,执行完成后在回复到中断的位置。当然,对于抢占式内核,在中断返回时还将引发新的调度。

    (4) 内存映射(mapped memory):内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它;
       

    消息队列(message queue):

    消息队列是消息的连接表,包括POSIX消息对和System V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能成该无格式字节流以及缓冲区大小受限等缺点;

    • 消息队列是存放在内核中的消息链表,每个消息队列由消息队列标识符表示。
    • 与管道(无名管道:只存在于内存中的文件;命名管道:存在于实际的磁盘介质或者文件系统)不同的是消息队列存放在内核中,只有在内核重启(即,操作系统重启)或者显示地删除一个消息队列时,该消息队列才会被真正的删除。
    • 另外与管道不同的是,消息队列在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。

    消息队列特点总结:
    (1)消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识.
    (2)消息队列允许一个或多个进程向它写入与读取消息.
    (3)管道和消息队列的通信数据都是先进先出的原则。
    (4)消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取.比FIFO更有优势。
    (5)消息队列克服了信号承载信息量少,管道只能承载无格式字 节流以及缓冲区大小受限等缺。
    (6)目前主要有两种类型的消息队列:POSIX消息队列以及System V消息队列,系统V消息队列目前被大量使用。系统V消息队列是随内核持续的,只有在内核重起或者人工删除时,该消息队列才会被删除。

     

    信号量(semaphore):

    信号量主要作为进程间以及同进程不同线程之间的同步手段;

    信号量是一个计数器,用于多进程对共享数据的访问,信号量的意图在于进程间同步。
    为了获得共享资源,进程需要执行下列操作:
    (1)创建一个信号量:这要求调用者指定初始值,对于二值信号量来说,它通常是1,也可是0。
    (2)等待一个信号量:该操作会测试这个信号量的值,如果小于0,就阻塞。也称为P操作。
    (3)挂出一个信号量:该操作将信号量的值加1,也称为V操作。

    信号量与互斥量之间的区别:
    (1)互斥量用于线程的互斥,信号量用于线程的同步。这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。
    互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
    同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。
    在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源
    (2)互斥量值只能为0/1,信号量值可以为非负整数。
    也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量是,也可以完成一个资源的互斥访问。
    (3)互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到.

     

    共享内存 (shared memory):

    它使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。这是针对其他通信机制运行效率较低而设计的。它往往与其他通信机制,如信号量结合使用,以达到进程间的同步及互斥;

    • 使得多个进程可以可以直接读写同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。
    • 为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间。进程就可以直接读写这一块内存而不需要进行数据的拷贝,从而大大提高效率。
    • 由于多个进程共享一段内存,因此需要依靠某种同步机制(如信号量)来达到进程间的同步及互斥。

       

    套接字(Socket):

    套接字是一种通信机制,凭借这种机制,客户/服务器(即要进行通信的进程)系统的开发工作既可以在本地单机上进行,也可以跨网络进行。也就是说它可以让不在同一台计算机但通过网络连接计算机上的进程进行通信。

    套接字特性
    套接字的特性由3个属性确定,它们分别是:域、端口号、协议类型。
    (1)套接字的域
    它指定套接字通信中使用的网络介质,最常见的套接字域有两种:
    一是AF_INET,它指的是Internet网络。当客户使用套接字进行跨网络的连接时,它就需要用到服务器计算机的IP地址和端口来指定一台联网机器上的某个特定服务,所以在使用socket作为通信的终点,服务器应用程序必须在开始通信之前绑定一个端口,服务器在指定的端口等待客户的连接。
    另一个域AF_UNIX,表示UNIX文件系统,它就是文件输入/输出,而它的地址就是文件名。
    (2)套接字的端口号
    每一个基于TCP/IP网络通讯的程序(进程)都被赋予了唯一的端口和端口号,端口是一个信息缓冲区,用于保留Socket中的输入/输出信息,端口号是一个16位无符号整数,范围是0-65535,以区别主机上的每一个程序(端口号就像房屋中的房间号),低于256的端口号保留给标准应用程序,比如pop3的端口号就是110,每一个套接字都组合进了IP地址、端口,这样形成的整体就可以区别每一个套接字。
    (3)套接字协议类型
    因特网提供三种通信机制,
    一是流套接字,流套接字在域中通过TCP/IP连接实现,同时也是AF_UNIX中常用的套接字类型。流套接字提供的是一个有序、可靠、双向字节流的连接,因此发送的数据可以确保不会丢失、重复或乱序到达,而且它还有一定的出错后重新发送的机制。
    二个是数据报套接字,它不需要建立连接和维持一个连接,它们在域中通常是通过UDP/IP协议实现的。它对可以发送的数据的长度有限制,数据报作为一个单独的网络消息被传输,它可能会丢失、复制或错乱到达,UDP不是一个可靠的协议,但是它的速度比较高,因为它并一需要总是要建立和维持一个连接。
    三是原始套接字,原始套接字允许对较低层次的协议直接访问,比如IP、 ICMP协议,它常用于检验新的协议实现,或者访问现有服务中配置的新设备,因为RAW SOCKET可以自如地控制Windows下的多种协议,能够对网络底层的传输机制进行控制,所以可以应用原始套接字来操纵网络层和传输层应用。比如,我们可以通过RAW SOCKET来接收发向本机的ICMP、IGMP协议包,或者接收TCP/IP栈不能够处理的IP包,也可以用来发送一些自定包头或自定协议的IP包。网络监听技术很大程度上依赖于SOCKET_RAW。

    原始套接字与标准套接字的区别在于:
    原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。

    套接字通信的建立

                                Socket通信基本流程

     

    ** 服务器端**
    (1)首先服务器应用程序用系统调用socket来创建一个套接字,它是系统分配给该服务器进程的类似文件描述符的资源,它不能与其他的进程共享。
    (2)然后,服务器进程会给套接字起个名字,我们使用系统调用bind来给套接字命名。然后服务器进程就开始等待客户连接到这个套接字。
    (3)接下来,系统调用listen来创建一个队列并将其用于存放来自客户的进入连接。
    (4)最后,服务器通过系统调用accept来接受客户的连接。它会创建一个与原有的命名套接不同的新套接字,这个套接字只用于与这个特定客户端进行通信,而命名套接字(即原先的套接字)则被保留下来继续处理来自其他客户的连接(建立客户端和服务端的用于通信的流,进行通信)。

    客户端
    (1)客户应用程序首先调用socket来创建一个未命名的套接字,然后将服务器的命名套接字作为一个地址来调用connect与服务器建立连接。
    (2)一旦连接建立,我们就可以像使用底层的文件描述符那样用套接字来实现双向数据的通信(通过流进行数据传输)。


    进程间同步的四种方式

     

    展开全文
  • 两种相互作用 同步 多个相关进程在执行次序上的协调。 制约关系:直接制约。...解决并发进程的问题 一.加锁法——自旋锁 思路:  设置一个共享变量W (锁) ,初值为0。当一个进程想进入其临界区(进程中涉及..
  • 第三章 并发进程 1.顺序程序设计的特点: 程序执行的顺序性:一个程序在处理器上的执行是严格按序的,即每个操作必须在下一个操作开始之前结束。 程序环境的封闭性:运行程序独占全部资源,除初始状态外,其所处的...
  • 操作系统之进程—并发进程(一)

    千次阅读 多人点赞 2018-11-03 21:55:22
    1.顺序程序设计 传统的程序设计方法是顺序程序设计,即把一个程序设计成一个顺序执行的程序模块,不同程序也是按序执行的。顺序分成内部顺序和外部顺序 内部的顺序性 : 程序在处理器上执行时严格有序的,...2.并发...
  • 操作系统进程管理相关习题

    千次阅读 2021-01-12 21:01:17
    从静态角度上看,进程是有 A 、 B 、 C 三部分组成,其中 C 是进程存在的唯一标志。当几个进程共享 A 时, A 应当是可重入代码。 A,B,C:(1)JCB; (2)PCB; (3)DCB; (4)FCB; (5)程序段; (6)数据段; (7)I/O缓冲...
  • OS Review3 并发进程

    2020-07-03 15:41:58
    并发进程 顺序程序设计 顺序性不但指一个程序模块内部,也指两个程序模块之间 内部顺序性 一个程序在处理器上的执行是严格按序的,只有前一个操作结束后,才能开始后继操作 外部顺序性 一个计算任务需要若干不同...
  • 理解并发进程

    2019-04-17 21:01:00
    一、说说你对顺序程序设计与并发程序设计的理解。 顺序程序设计: 把程序设计成顺序执行的指令序列,不同程序也按照先后顺序执行。程序顺序执行与其速度无关,即程序的最终输出仅与初始输入数据有关,而与时间无关...
  • 特征:只有不存在前趋关系的程序之间才有可能并发执行,否则无法并发执行。 例:输入程序、计算程序和打印程序之间,存在着Ii->Ci->Pi的前趋关系。对一批作业进行处理,输入程序I1在输入第一次数据后,由计算...
  • 1. 几个概念1.1 并发在...1.2 互斥并发进程之间制约关系有两种,即互斥和同步。多个并发进程之间,因竞争使用临界资源而互相排斥执行的间接制约关系,叫作互斥。例1:例2:共享变量设两个进程P1,P2,它们共享同一
  • 发控制和死锁 进程通信 进程的状态是基于一定的原因和条件而变 化的,而这些原因和条件又常常是由于进 程之间相互制约关系引起的系统中诸 进程之所以有这种关系,是由两方面原因 引起的: 1)各并发进程对资源的共享 ...
  • 1.并发进程 1.1顺序进程与并发进程
  • 进程的同步和互斥

    2021-06-05 20:52:11
      我们把异步环境下的一组并发进程因直接制约而互相发送消息、进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程的同步。具有同步关系的一组并发进程称为合作进程,合作进程互相发送的信号...
  • 并发进程竞争使用同一个资源时,它们之间就会发生冲突。为了避免冲突,当一个进程获得资源时,另一个进程必须等待。这种情况需要通过互斥机制来解决。 - 进程通过共享的合作(间接作用) 一个进程等待另一个进程...
  • 并发程序的制约

    2012-09-14 11:04:13
    背景:在敲学生信息管理系统的时候出现了这么几个关键字,keyset ,optimistic ,这是什么意思呢?对此稍作总结了一下
  • 进程同步机制-----为进程并发执行保驾护航

    千次阅读 多人点赞 2019-11-07 10:11:52
    本文是对进程同步机制的一个大总结(9000+字吐血总结),涵盖面非常的全,包括了进程同步的一些概念、软件同步...同样我们也知道,在OS引入了进程后,可以使系统中的多道程序可以并发的执行,进程并发执行一方面极...
  • 1-间接相互制约关系-互斥 互斥是指并发执行的多个进程由于竞争同一资源而产生的相互排斥关系。 2-直接互相制约欢喜(合作)-同步 进程之间共同完成一项任务直接发生相互作用的关系。 临界资源与临界区 临界资源...
  • 文章目录一、进程二、进程的状态三、进程间不同享全局变量 一、进程 程序: 例如xxx.py这是程序,是一个静态的。 进程: 一个程序运行起来后,代码+用到的资源称之为进程,它是操作系统分配资源的基本单元。 进程是...
  • 程序的顺序执行和并发执行 顺序执行:按照顺序进行执行。...一组在逻辑上相互独立的程序或程序段在执行过程中其执行时间在客观上相互重叠,即一个程序尚未结束、另一个程序的执行已经开始的执行方式。 链接:多
  • 一、引言 在传统的操作系统中,程序并不能独立运行,...顺序执行:通常可以把一个应用程序分成若干个程序段,在各程序段之间,必须按照某种先后次序顺序执行,仅当前一操作(程序段)执行完后,才能执行后继操作。...
  • 操作系统进程管理习题详解
  • 1 进程 并行是指多个进程在同一时刻同时执行。 并发是指在一段时间内可以同时执行多个进程。 如果只有一个单核的CPU是没办法执行并行这一操作的,但是是可以并发的。只有多核的CPU才能够执行并行。 ...
  • 换个角度来看,线程的概念类似于进程,有别于进程的地方就是多线程环境下,每个线程他们要共享地址空间,不同线程之间能够访问到共同的数据。 线程与进程十分相似,但又不同,进程是分时操作系统最早提出的一种任务...
  • 进程间相互作用 两种相互作用 同步 多个相关进程在执行次序上的协调。 制约关系:直接制约。 如图所示:一个进程在执行操作的时候,另一个进程必须等待,体现在次序上的等待和协调,并不争夺临界资源。 ...
  • 进程进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程...
  • 并发进程2.1 进程的概念2.2 操作系统为控制程序所建立的数据结构2.3 操作系统对进程的控制2.4 线程2.5 进程调度2.6 实时系统与实时任务调度2.7 并发控制2.8 互斥与同步的解决策略2.9 生产者/消费者问题2.10 读者、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,373
精华内容 2,949
关键字:

并发进程之间的相互制约