精华内容
下载资源
问答
  • 程序顺序执行并发执行 顺序执行:按照顺序进行执行顺序性:严格按照顺序执行,前一个结束后一个才能执行 封闭性:程序运行时独占资源,只有程序本身才能改变机器各种资源的状态。 可再现性:结果与执行速度...

    程序的顺序执行和并发执行

    顺序执行:按照顺序进行执行。

    • 顺序性:严格按照顺序执行,前一个结束后一个才能执行
    • 封闭性:程序运行时独占资源,只有程序本身才能改变机器各种资源的状态。
    • 可再现性:结果与执行速度无关,只与初始条件有关。给定相同的输入,输出结果一定相同。

    顺序执行给程序员检测和纠正错误带来便利。

    并发执行:多道程序系统执行环境的变化可以引起多道程序的并发执行。一组在逻辑上相互独立的程序或程序段在执行过程中其执行时间在客观上相互重叠,即一个程序尚未结束、另一个程序的执行已经开始的执行方式。
    链接:多道程序系统的具体概念

    • 间断性:共享资源的使用使得在并发程序之间有相互制约。相互制约导致并发程序具有:执行-暂停-执行 这种间断性的活动规律。
    • 失去封闭性:多个程序共享资源,执行时必定会受到其他程序的影响。
    • 不可再现性:失去封闭性,也同时失去了不可再现性。资源的利用状况和环境有关,不能保证每次同一个输入有着相同的输出。

    进程的概念

    程序的概念:源代码是静态文本,通过编译软件对源代码进行编译之后得到程序。
    进程的定义:程序是静态的,程序每一次执行的动态过程都不一样。只用程序这一概念,只能对并发程序进行静止的、孤立的研究,不能深刻地反映它们活动的规律和状态变化。所以有了进程这一说法。程序——静态,进程——动态,进程就是程序的执行过程

    进程特性

    动态性:由创建而产生、由调度而执行、因得不到资源而暂停执行、由撤销而消亡。进程具有一定的生命周期。

    并发性:并发性是指多个进程实体同存与主存中,能在一段时间内同时运行,并发性是进程和操作系统的重要特征。引入并发执行的目的是使其程序能够和其他进程的程序并发执行,但是程序本身并不能并发执行。

    独立性:进程实体是一个独立运行的基本单位,也是系统中独立获得资源和独立调度的基本单位。进程和程序并非一一对应,一个程序在不同的数据集上就能构成不同的进程。

    异步性:进程按照各自独立的,不可预知得速度向前推进

    结构特征:进程实体是由:程序段、数据段及程序控制快三部分组成

    进程的基本状态和转换

    进程具有异步性,所以有 执行-暂停-执行 的活动规律。
    一个进程活动期间有三种基本状态:就绪状态、运行状态、等待状态。

    1)就绪状态:进程已经分配到只差CPU以外的所有必要资源。在系统中,多个进程同时处于就绪状态排成的队列叫做就绪队列。

    2)运行状态:运行状态是指进程已获得处理器,其程序正在执行。单处理器系统中只能有一个进程。

    3)等待状态:进程因发生某些事件(比如请求输入输出、申请缓存空间等)而暂停执行的状态。多个进程同时处于等待状态的队列叫等待队列,多个等待原因可以排成多个队列。

    在这里插入图片描述

    • (1)就绪→运行状态
      处于就绪状态的进程,当进程调度程序为之分配了处理器后,该进程便由就绪状态转换为运行状态。正在执行的进程也称为当前进程。
    • (2)运行→等待状态
      正在执行的进程因出现某事件而无法执行时,就释放处理器转换为等待状态。例如,进程请求访问临界资源,而该资源正被其它进程访问,则请求该资源的进程将由运行状态转变为等待状态。
    • (3)运行→就绪状态
      在分时系统中,正在执行的进程,如因时间片用完而被暂停执行,该进程便由运行状态转变为就绪状态。又如,在抢占调度方式中,一个优先权高的进程到来后,可以抢占一个正在执行的优先权低的进程的处理器,这时,该低优先权进程也将由运行状态转换为就绪状态。
    • (4)等待→就绪状态
      处于等待状态的进程在等待事件结束后就转换成就绪状态,等待处理器的分配。

    有些操作系统中增加了两种基本状态:新状态和终止状态
    在这里插入图片描述

    • 新状态指的是刚刚建立,还没有将它送入就绪队列时的状态。
    • 终止状态是指的是一个进程已经结束,但是还没有将它撤销时的状态。

    进程控制块

    每一个进程都有一个进程控制块(PCB)。进程控制块是操作系统用与记录和刻画进程状态及有关信息的数据结构,也是操作系统控制和管理的主要依据。

    作用:使一个在多道程序下不能独立运行的程序(含数据),成为一个能独立运行的基本单位、一个能与其他进程并发执行的进程。

    操作系统是根据PCB来对并发执行的进程进行控制和管理的

    在这里插入图片描述
    标识信息:每一个进程都有一个唯一的标识符。

    说明信息:说明本进程的情况。

    现场信息:当进程由于某种原因让出处理器的时候,把与处理器有关的各种现场信息保留下来,以便于后续该进程重新获得处理器之后能够把保留的现场信息重新置入处理器的想过寄存器之中继续执行。

    管理信息:对进程进行管理和调度的信息。

    进程队列

    定义:把处于相同状态的进程链接在一起,形成的队列就叫做进程队列。处于就绪状态的叫就绪队列,等待状态的叫等待队列。

    链接方式实现进程队列
    进程控制块能够标识进程的存在,并动态刻画进程的特性,所以进程队列可以用进程控制块的链接来形成。

    链接方式有:单向链接和双向链接。
    在这里插入图片描述

    • 一个进程从所在的队列中退出称为“出队”
      一个进程能被选中占用处理器时,就从就绪队列中退出成为“执行态”

    • 一个进程进入到指定的队列中称“入队”
      进程要求读磁盘上的信息而成为等待磁盘传输信息的状态,便进入等待队列。

    索引方式形成进程队列
    建立索引表,表内填有各个PCB的地址
    在这里插入图片描述

    展开全文
  • 1.fork出一个子进程,父子进程执行的先后顺序是不确定的,如果先执行进程,再执行进程,父进程中没有wait和sleep。问,是否先把父进程执行完,再执行进程?还是两个进程是一块执行的? 2.如果父进程中有sleep...

    一、
    问:
    1.fork出一个子进程,父子进程执行的先后顺序是不确定的,如果先执行父进程,再执行子进程,父进程中没有wait和sleep。问,是否先把父进程执行完,再执行子进程?还是两个进程是一块执行的?
    2.如果父进程中有sleep,父进程中的程序执行到sleep进行休眠,转而执行子进程。
    问:子进程中的程序执行完了再返回父进程中执行,还是休眠时间到了返回父进程中执行,还是其他?
    答:

    1. 进程的执行顺序是要看操作系统如何进行进程调度的,具体看调度算法。比如,如果基于时间片轮转调度算法,假设父进程先执行,本时间片内没有执行完,则会发生进程切换,即调度程序从就绪队列中取出一个进程在下一个时间片内执行,而本进程保存进程信息和状态然后插入就绪队列,等待调度程序重新调度。
    2. sleep是休眠,也就是进程阻塞,从就绪队列取出本进程,插入阻塞队列。sleep时间到,进程变为就绪状态,插入就绪队列,等待调度程序调度,也就是说,执行不执行看调度程序,阻塞一定不执行,就绪也不一定是马上执行的。

    二、 一旦启动子进程 后续的代码就并发 没有先后顺序,具体要看调度策略和进程的优先级了。

    展开全文
  • 进程编程---创建进程 头文件:#include<unistd.h> 创建一个新进程 :pid_t fork(void) 如果出错返回-1 fork 调用一次,两次返回... 新进程中返回0(子进程) (一)、举例,创建一个子进程代码...

    多进程编程---创建进程

    头文件:#include<unistd.h>

    创建一个新进程 :pid_t fork(void)   

    如果出错返回-1

    fork 调用一次,两次返回,原来的进程返回新进程的pid(父进程)

                                                新进程中返回0(子进程)

     

    (一)、举例,创建一个子进程,代码如下

    运行结果:if 和 else 都执行,其中,子进程执行 if 语句,父进程执行 else 语句

     父进程中返回进程pid,系统并没有提供一种手段来获取父进程的所有子进程,只有在创建时,才知道创建的是哪个子进程

    子进程中返回0:系统提供了getpid()获取某父进程的pid,而且进程号为0是一个系统创建的子进程pid不可能为0(之所以为0是因为fork()之后,父子进程谁先执行,由系统当前环境以及进程调度算法来决定)

    (二)、子进程执行过程

    如图所示:子进程从fork往下执行

    举例:在for循环里fork一个进程

    结果分析:i=0 时,子进程A执行 if 语句,父进程执行else语句

                      i=1 时, 此时for循环是子进程A没有影响的,因为没有读到,这时子进程A已结束,父进程再重新往下面走,读到fork时又生成了一个子进程B,子进程B执行 if 语句,父进程又执行了一次 else 语句

    (三)fork()父子进程执行顺序和结果

    并发:交替运行

    并行:同一时刻,两个或多个都在执行

    父子进程并发运行

    举例:

    下面来写一个代码演示一下父子进程并发运行的结果

    (在上一篇博客中提到过缓冲区输出条件,与上一个例子不同的是我把“\n”去掉了,让程序在结束时输出

    运行结果:可以看得出父子进程的运行顺序改变了,这取决于系统当前环境以及进程调度算法

    有些人每次的执行结果是一样的,这是因为处理器只有一个,相当于每次都只能执行一个程序

    可以通过下面的选项来设置,我这里设置的是4个处理器

    展开全文
  • 互斥是指并发执行的多个进程由于竞争同一资源而产生的相互排斥关系。 2-直接互相制约欢喜(合作)-同步 进程之间共同完成一项任务直接发生相互作用的关系。 临界资源与临界区 临界资源指打印机,磁带机,表格 。...

    1. 几个关键词

    原子操作: 是由一个或多个指令序列实现的函数或动作,其特点是不允许被打断,所有动作要么全做,要么全不做。

    临界资源: 指打印机,磁带机,表格 。一次只允许一个进程使用的共享资源(互斥方式);
    临界区: 指在每个进程中访问临界资源的程序代码(进程必须互斥的进入临界区)。
    死锁: 多个进程的每个进程都在等待其他进程完成而不能继续执行。且互不相让已占用的资源。
    活锁: 多个进程为响应其他进程种的变化而持续改变自己状态但不做有用的工作。
    互斥: 一个进程在临界区访问共享资源时,其他进程不能进入临界区。
    饥饿: 一个进程被无限期的忽略不被执行。


    并发执行的问题
    由于进程的相对执行速度不可预测,因而
      1. 全局资源的共享很危险。多个进程都对同一全局变量读写,后果时很麻烦的。
      2. 操作系统很难对资源进行最优分配。比如被占用I/O的进程被阻塞。
      3. 定位程序设计的错误很困难。因为结果的不确定性和不可再现性。


    2. 进程的交互关系

      竞争(互斥)
        --进程间不知道对方的存在;
        --个进程的结果与另一个进程无关;
        --进程的执行时间可能受影响。
      通过共享合作(同步)
        --进程间间接知道对方的存在,比如共享对象;
        --一个进程的结果可能取决于从另一进程得来的信息;
        --进程的执行时间可能会受影响。
      通过通信合作(同步)
        --进程间直接知道对方的存在,比如通信原语。
        --一个进程的结果可能取决于从另一进程得来的信息;
        --进程的执行时间可能会受影响。


    实施互斥的要求
      1. 强制互斥,一次只允许一个进程进入临界区;
      2. 非临界区进程不能干涉临界区进程;
      3. 不能发生死锁和饥饿;
      4. 任何有需要的进程可以立即进入空的临界区;
      5. 对相关进程的执行速度和处理器数量无要求;
      6. 驻留在临界区的进程要被限制时间。


    实现互斥的方法
      1. 软件办法:让并发执行的进程承担责任,不需要程序设计语言或者操作系统来支持。
      2. 硬件支持的办法:如中断禁用,专用机器指令。
      3. 操作系统和程序设计语言级别的支持。


    对临界资源的访问

    在这里插入图片描述

    同步机制

    为实现进程互斥地进入自已的临界区,所有同步机制都应遵循下述四条准则:
    1 空闲让进;
    2 忙则等待;
    3 有限等待;
    4 让权等待(进程不能进入自己的临界区时释放处理器)。

    3. 信号量

    信号量是一种数据结构。信号量的值与相应资源的使用情况有关,仅由P(wait,申请) V(signal,释放)操作(原子操作)改变。
    二元信号量是值只取0和1的信号量。
    互斥量 类似二元信号量,区别在于加锁(置0)和解锁(置1)必须为一个进程完成。


    基本原理
      多个进程通过信号进行合作,可以强迫一个进程在某个位置停止,直到它接收到一个特殊的信号。使用信号量执行semSignal(s)发送信号;使用semWait(s)接收信号;若相应的信号仍未发送,则阻塞进程直到发送完为止。


    整型信号量,记录型信号量,AND型信号量

    信号量-整型信号量

    在这里插入图片描述

    缺点:只要信号量S<=0 ,就不断的测试,不满足让权等待。


    信号量-记录型信号量

      除了需要一个用于代表资源数目的整型变量 value 外,增加一个进程链表指针 L,用于链接所有等待进程。Value表示某类资源的数目 >=0时表示系统可用的资源数量,<0时其绝对值表示已经阻塞的进程数量。如果 S.value 的初值为 1,表示只允许一个进程访问临界资源,此时的信号量转化为互斥信号量,用于进程互斥。当 S.value<0 时,表示该类资源已分配完毕,因此进程应调用 block 原语,进行自我阻塞,放弃处理机,并插入到信号量链表S.L 中。可见,该机制遵循了“让权等待”准则。此时 S.value 的绝对值表示在该信号量链表中已阻塞进程的数目。

    Wait和 Signal操作

    在这里插入图片描述


    信号量-AND型信号量

    将进程在整个运行过程需要的所有资源,一次性全部分配给进程,待进程用完后一起释放。

    在这里插入图片描述
    在这里插入图片描述


    信号量实现互斥

    在这里插入图片描述

    wait(mutex); 进入区
    critical section 临界区
    signal(mutex);退出区
    remainder seetion 剩余区


    生产者消费者问题

    制约关系
    1-不允许从空缓冲区中取;
    2-不允许往满缓冲区中放。

    定义

    在这里插入图片描述

    PV操作

    在这里插入图片描述

    在这里插入图片描述

    P操作的顺序不能颠倒,先之行对资源信号量的P操作,在执行对互斥信号量的P操作,否则可能导致死锁。


    4. 管程

    管程是一种编程语言结构,封装了变量,访问过程和初始化代码。它提供的功能和信号量相同但是更易于控制。管程由一个或多个过程,一个初始化序列和局部数组构成。有以下特点:
      1. 局部数据变量只能被管程的过程访问,任何外部过程不能访问;
      2. 一个进程通过调用管程的一个过程进入管程;
      3. 只有一个进程在管程中执行,调用管程的任何其他进程都需等待管程可用时才能进入。


    5. 消息传递

      为实施互斥,进程之间需要同步;为实现合作,进程之间需要交换信息。而通过消息传递方法实现信息交换可以在分布式系统,共享内存的多处理器系统和单处理器系统实现。


    寻址的方式
     1. 直接寻址
      Send(Receiver,message) //发送一个消息给接收进程
      Receive(Sender,message)

     2. 间接寻址
      --私用信箱
        用户进程建立,作为该进程的一部分;
        拥有者由权读消息,其他用户只能发;
        单向通信链路;
        进程结束时信箱也消失;
      --公用信箱
        操作系统创建;
        提供给系统中所有;
        核准进程既可以发也可以收;
        双向链路;
        系统运行期间始终存在;
      --共享信箱
        某进程创建,创建时提供共享进程的名字;
        信箱的拥有者和共享者都有权读发送给自己的消息。


    信箱通信时,发/收进程的关系
      1. 一对一:建立一条专用通信链路
      2. 多对一:C/S
      3. 一对多:广播
      4. 多对多:建立一种公用信箱,多个进程可以用


    6. 读者-写者问题

    存在一个多进程共享的数据区,有些进程只从中读取数据,有些进程只往其中写数据。且:
      1. 任意读进程可同时访问;
      2. 一次只有一个写进程可以写入;
      3. 如果一个写进程正在写,则禁止任何进程读。

    .
    .
    .
    .
    .
    .


    桃花仙人种桃树,又摘桃花换酒钱_

    展开全文
  • 多线程并发保证线程的顺序执行

    千次阅读 2020-01-04 17:14:25
    2.真正的业务需求,如解析XML 我们想并发执行xml下多个节点,但是我们需要解析完成后再继续下不操作,如果节点有依赖关系那我们就必须要保证一些顺序执行。 一.单纯面试来说 可实现的方式 1.join关键字 关键...
  • 1. 几个概念1.1 并发在操作系统的一个时间段,有几个程序同时处于启动运行到运行完毕之间的状态,且这几个程序都在同一个处理机上运行。并发又有伪并发和真并发:伪并发是指单核处理器的并发,真并发是指多核...
  • 程序并发执行

    千次阅读 2018-09-09 21:23:31
    程序中的指令也是按照顺序执行,一条指令正在执行时不能开始执行另一条指令。所以程序顺序执行有以下几个特点。 1.1、顺序性 处理机的操作,严格按照顺序执行,前一操作还没执行完毕,后继操作则不能继续执行。 ...
  • 程序并不能单独执行(例如需要CPU的调度、寄存器、随机存储存储器RAM等等协助工作),只有将程序加载到内存,系统为它分配资源后才能执行,这种正在执行程序叫做进程进程是系统进行资源分配调度的一个基本...
  • 一、实验目的 通过本实验学习如何创建Linux...1、进程异步并发执行 编写一个C语言程序,该程序首先初始化一个count变量为1,然后使用fork函数创建两个子进程,每个子进程对count加1后,显示“I am son, count=x”或“I
  • 操作系统:程序并发执行

    千次阅读 2018-09-09 21:22:00
    程序中的指令也是按照顺序执行,一条指令正在执行时不能开始执行另一条指令。所以程序顺序执行有以下几个特点。 1.1、顺序性 处理机的操作,严格按照顺序执行,前一操作还没执行完毕,后继操作则不能继续执行。 1.2...
  • 注意题眼:“最大程度并发进程1:对x,y进行读操作 进程2:对y,z进行读操作 进程3:对y,z进行读写操作 【同步关系】:题目并没有要求各个运算的顺序,所以没有同步关系 【互斥关系】:进程1和2只有读操作,...
  • 处理器可能会对输入代码进行乱序执行(Out-Of-Order Execution)优化,处理器会在计算之后将乱序执行的结果重组,保证该结果与顺序执行的结果是一致的,但并不保证程序中各个语句计算的先后顺序与输入代码中顺序...
  • Linux Shell实现多进程并发执行

    万次阅读 2017-08-18 10:16:58
    在bash,使用后台任务来实现任务的“多进程化”。在不加控制的模式下,不管有多少任务,全部都后台执行。也就是说,在这种情况下,有多少任务就有多少“进程”在同时执行。我们就先实现第一种情况: 实例一:正常...
  • Linux shell实现多进程并发执行

    千次阅读 2019-08-15 11:57:10
    在bash,使用后台任务来实现任务的“多进程化”。在不加控制的模式下,不管有多少任务,全部都后台执行。也就是说,在这种情况下,有多少任务就有多少“进程”在同时执行。我们就先实现第一种情况: 实例一:正常...
  • 进程和子进程到底是如何执行的?
  • 采用并发程序设计的目的练习题 2.2 进程的描述1. 进程( Process )的定义2. 进程的特征3. 进程与程序的区别练习题 4、进程的基本状态-三态模型练习题 5、五态模型6、七态模型练习题 7、进程控制块练习...
  • 进程的描述与控制 操 作 系 统 所 具 有 的 四 大 特 征 也 都 是 基 于 进 程 而 形 成 的 , ...图的每个结点可用来表示一个进程程序段,乃至一条语句,结点间的有向边则表示两个结点之间存在的偏序(Partial Orde
  • 程序进程,线程的区别和联系

    万次阅读 多人点赞 2018-08-26 22:27:18
    进程则不同,它是程序在某个数据集上的执行进程是一个动态的实体,它有自己的生命周期。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消。反映了一个程序在一定的数据集上...
  • 线程和进程、并行和并发的概念

    千次阅读 2018-05-09 00:20:53
    这个不难理解,其实进程是包含程序的,进程执行离不开程序进程中的文本区域就是代码区,也就是程序。 线程 通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。...
  • 问题起因最近要将一个文本分割成好几个topic,每个topic设计一个regressor,...文本不大,大概3000行,topic个数为8,于是我写了一个串行的程序,一个topic算完之后再算另一个topic。可是我在每个topic中用了GridSe...
  • 用于这种图可以描述多个程序进程之间的执行顺序关系。 〇 表示一个程序进程或是语句的结点。 → 表示结点间的执行顺序。 前趋关系“→”的形式化描述:→={<Pi, Pj> | Pi must complete before Pj ...
  • C++程序执行过程

    万次阅读 多人点赞 2018-01-26 00:24:52
    要理解一个程序执行过程,首先要理解什么是编译器。我们用C语言写的程序,计算机只能识别机器语言(二进制指令),计算机并不能理解。因此,必须 将C语言转换为机器语言。编译器就是用来实现这一功能的。编译器将...
  • 用于描述进程之间执行的先后顺序。 p1和p2存在着前驱关系(也可以写成p1→p2),表示在p2开始执行之前p1必须完成,此时称p1为p2的直接前驱,而称p2为p1的直接后继;并且把没有前驱的结点称为初始结点,把没有后继的...
  • python的并发执行(多线程和多进程) 前言 运行代码有的时候就像工厂生产东西,我们程序员可以看成厂长,我们会希望我这个厂里多加几条产线,或者多开几个厂,从而提高产量或者说提高效率。(写完吐槽:这个厂长真苦...
  • 一、并发与并行 并行:多个计算机核心在同时处理多个任务,这时多个任务间是并行关系 ...程序:是一个可执行的文件,是静态的占有磁盘空间,不占有计算机的运行资源 进程: 是一个动态过程的描述,占有计算机的...
  • Java 8并发教程:线程和执行程序

    千次阅读 2017-05-25 12:39:52
    欢迎来到我的Java 8并发教程的第一部分。 本指南教你用Java 8进行并发编程 ,并具有易于理解的代码示例。 这是涵盖Java并发API的一系列...在接下来的15分钟内,您将学习如何通过线程,任务和执行器服务并行执行代码
  • Shell脚本的多任务并发执行 需求 实现一个脚本能够使用ping检测网络的连通性 可以同时检测多个IP地址, 并且将检测结果输出 分析 正常情况下,Shell脚本的命令是串行执行的,当一条命令执行完才会执行接下来的...
  • 程序进程和线程的区别与联系

    千次阅读 2018-05-18 03:01:21
    借鉴了各大网站,总结出的个人... 程序(这里和前边指的是包含了线程,进程程序的抽象概念)有顺序执行顺序性,只有前一操作结束后才能执行后续操作;封闭性,程序一旦运行,其执行结果不受外界因素的影响;可...
  • goroutine语句及其执行顺序

    千次阅读 2019-01-03 13:57:30
    线程,总是在进程之内的,可以被视为进程中运行着的控制流(或者说代码执行的流程)。  一个进程至少会包含一个线程。如果一个进程只包含一个线程,那么它里面的所有代码都会被串行地执行。每个进程的第一个线程...
  • Shell脚本的多任务并发执行

    千次阅读 2019-06-16 10:55:27
    正常情况下,Shell脚本的命令是串行执行的,当一条命令执行完才会执行接下来的命令。比如下面这段代码: #!/bin/bash for i in {1..10};do echo $i done echo "END" 执行结果: 1 2 3 4 5 6 7 8 9 10 END 可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 118,844
精华内容 47,537
关键字:

并发程序进程中代码执行顺序