目录

  • 1 进程概念
    • 1.1 顺序执行环境
    • 1.2 并发执行环境
    • 1.3 进程的定义
  • 2 进程状态
  • 3 进程控制块PCB
    • 3.1 进程控制块PCB中的内容
    • 3.2 PCB的组织方式
  • 4 操作系统调度
  • 5 进程操作
  • 6 创建进程
  • 7 进程通信:共享存储
  • 8 进程通信:消息传递

1 进程概念

操作系统的基本特性是并发与共享,即在系统中同时存在几个相互独立的程序,他们交叉地运行,并共享资源,在这样的过程中就会出现诸多问题,比如多个程序就要进行资源的竞争,程序之间的合作和协同,程序之间的通信,要解决这些问题 , 用程序的概念已经不能描述程序在内存中运行的状态 ,必须引入新的概念进程

1.1 顺序执行环境

顺序环境计算机系统只有一个程序在运行,该程序独占系统中所有资源,其执行不受外界影响,下图是顺序执行的两个作业的执行过程图:

顺序执行的特征:

  • 顺序性:按照程序结构所指定的次序(可能有分支或循环);
  • 封闭性:独占系统的资源;
  • 可再现性:初始条件相同则结果相同。如:可通过空指令控制时间关系。

1.2 并发执行环境

并发环境一定时间内,物理机器上有两个或两个以上的程序同处于开始运行但尚未结束的状态,并且次序不是事先确定的,如下图所示:

并发执行的特征:

  • 间断(异步)性:“走走停停”,一个程序可能走到中途停下来,失去原有的时序关系;
  • 失去封闭性:共享资源,受其他程序的控制逻辑的影响。如:一个程序写到存储器中的数据可能被另一个程序修改,失去原有的不变特征;
  • 失去可再现性:失去封闭性导致失去可再现性;外界环境在程序的两次执行期间发生变化,失去原有的可重复特征。

例如:观察者/报告者,有两个循环程序A和B,它们共享一个变量N。程序A每执行一次时都要做N=N+1操作;程序B每执行一次时,都要做print(N)操作,然后再将N置成“0”,程序A和B以不同的速度运行。可能出现多报或漏报。(假定某时刻变量N的值为5)

  • 程序执行为A->BN=N+1print(N)N=0之前,N=6,N=6,N=0
  • 程序执行为B->AN=N+1print(N)N=0之后,N=5,N=0,N=1
  • 程序执行为B->A->BN=N+1print(N)N=0之间,N=5,N=6,N=0

因此多道程序设计对操作系统提出了新的要求:

  • 如何描述并发程序的执行:引入进程及其状态;
  • 如何实现并发程序运行:进程控制与调度;
  • 如何处理资源的竞争与程序间的合作:并发控制与通信;
  • 如何解决死锁:死锁策略。

1.3 进程的定义

为了描述程序在并发执行时对系统资源的共享,我们需要一个描述程序执行时动态特征的概念,这就是进程,一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程,相比程序,程序是一个静态的实体,而进程是一个动态的实体,引入多进程,提高了对硬件资源的利用率,但又带来额外的空间和时间开销,增加了操作系统的复杂性


一个进程包括如下内容:

  • 程序代码(Program code);
  • 当前活动(Current activity);
  • 相关数据(Related data):栈、堆、数据段,栈通常是一些临时数据,如函数参数,返回地址,局部变量等,堆通常是程序运行时申请的动态内存,数据段通常是全局变量。

进程和程序的区别:

  • 进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。通常进程不可在计算机之间迁移;而程序通常对应着文件、静态和可以复制;
  • 进程是暂时的,程序是永久的:进程是一个状态变化的过程,程序可长久保存;
  • 进程与程序的组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息);
  • 进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。

进程的特征:

  • 结构特征:进程实体=程序段+相关的数据段+PCB;
  • 动态性:进程的实质是进程实体的一次执行过程,因此动态性是进程的最基本的特征;
  • 并发性:多个进程实体同存在于内存中,且能在一段时间内同时运行。是最重要的特征;
  • 独立性:指进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位;
  • 异步性:进程按各自独立的、不可预知的速度向前推进。

进程描述信息:

  • 处于某种状态(运行、就绪、等待);
  • 进程控制块PCB(数据结构);
  • 进程的执行程序(一个可执行文件);
  • 进程位于某个队列(就绪、等待某事件队列);
  • 占用某些系统资(内存,打开某些文件、处理机、外设)。

2 进程状态

进程在执行时,会不断地改变其状态,进程有以下的状态:

  • 新建(new):创建进程,构造了进程标识符,创建了 管理进程所需的表格;
  • 就绪(ready):进程等待分配处理器,存在于处理机调度队列中的那些进程,它们已经准备就绪,一旦得到CPU,就立即可以运行(有多个进程处于此状态),如进程所分配的时间片用完后,会用运行状态转换为就绪状态,等待下一次分配时间片;
  • 运行(running):指令在执行,当进程由调度/分派程序分派后,得到CPU控制权,它的程序正在运行(在系统中,总只有一个进程处于此状态);
  • 等待(waiting):进程等待某些事件发生,进程正在等待某个事件的发生(如等待I/O的完成),而暂停执行即使给它CPU时间,它也无法执行;
  • 终止(terminated):进程执行完毕,终止后进程移入该状态,它不再有执行资格,表格和其它信息暂时由辅助程序保留,如为处理用户帐单而累计资源使用情况的帐务程序,当数据不再需要后,进程(和它的表格)被删除。

各个状态之间的转换关系如下图所示:

3 进程控制块PCB

上面说到进程有多种状态,但操作系统该如何知晓当前进程的状态呢,所以我们要把进程的状态保存下来,这里就引入了一种描述进程信息的数据结构-进程控制块PCB(Process Control Block):

  • PCB (Process Control Block)一个专门的数据结构,系统用它来记录进程的外部特征,描述进程的运动变化过程;
  • PCB是进程管理和控制的最重要的数据结构,在创建进程时,建立PCB,并伴随进程运行的全过程,直到进程撤消而撤消,跟随进程的生命周期
  • PCB是系统感知进程存在的唯一标志,进程与PCB是一一对应的,有一个进程就会有一个PCB,有一个PCB就会有一个进程;
  • PCB经常被系统访问,如,调度程序、资源分配程序、中断处理程序等,所以PCB应常驻内存

3.1 进程控制块PCB中的内容

进程控制块PCB保存了同进程有关的信息,一般有下面这些必要内容:

  • 进程状态(Process state):说明进程当前所处的状态;
  • 程序计数器(Program counter):指向执行程序的下个指令的地址;
  • CPU寄存器(CPU registers):当进程因某种原因不能继续占用CPU时(如:等待打印机),释放CPU,这时就要将CPU的各种状态信息保护起来,为将来再次得到处理机恢复CPU的各种状态,继续运行;
  • CPU调度信息(CPU scheduling information):包括CPU优先级,调度队列指针等;
  • 内存管理信息(Memory-management information):包括基址寄存器,界限寄存器以及页表或段表等;
  • 计账信息(Accounting information):包括CPU时间,实际使用时间,作业或进程数量等;
  • I/O状态信息(I/O status information):包括分配给进程的I/O设备列表,打开文件列表等。

3.2 PCB的组织方式

系统把 PCB 组织在一起,并放在内存的固定区域,就构成了 PCB 表,PCB 表的个数决定了系统中最多可同时存在的进程个数,称为系统的并发度,PCB表的组织方式有两种:

  • 链接方式:一般通过链表的方式;
  • 索引方式:建立索引表。

4 操作系统调度

在操作系统中多个程序并发的执行,但在单CPU机器中只有一个CPU,那么到底由哪一个程序来使用CPU呢,这就是一个调度问题,进程一般会在下面这些队列被调度:

  • 作业队列:在系统中的所有进程的集合;
  • 就绪队列:在主内存中的,就绪并等待执行的所有进程的集合;
  • 设备队列:等待某一I/O设备的进程队列。

其实上面所讲的进程状态的变化,实际上是在这些队列上不停的迁移,如下图所示:

下图是进程调度的描述图:

在操作系统的调度分为不同级别的调度:

  • 长程调度(或作业调度):选择可以进入就绪队列的进程,也可以说是从外存中选择进入内存的调度过程;
  • 短程调度(或 CPU 调度):选择可被下一个执行并分配 CPU;
  • 中程调度:为了缓和内存紧张的情况,将内存中处于阻塞状态的进程换至外存上( 挂起 ),降低多道程序的度。当这些进程重新具备运行条件时,再从外存上调入内存,如下图所示:

在操作系统中进程可以分为两类:

  • I/O型进程:花费I/O 时间多于计算,许多短CPU处理;
  • CPU 型进程:花费更多时间于计算,许多长CPU处理。

可以试想若是调度选择的大多数都是I/O型进程,少数CPU 型进程,那么各个进程会在CPU上执行短暂的时间后转到 I/O 设备上,此时 I/O 设备就非常的忙碌,而CPU就相对空闲,反之CPU型的进程过多,也会造成CPU的忙碌,而I/O设备的空闲,这显然不是高效的调度方式

当进程在运行中发生了中断,如I/O操作,那么会执行CPU的切换。如下图所示,在切换时要保存当且PCB0PCB_0PCB0​的信息,然后加入切换的PCB1PCB_1PCB1​信息,然后运行完成后再恢复PCB0PCB_0PCB0​的信息:

上述切换的过程,我们称为上下文切换,当CPU切换至另一个进程时,系统必须保存旧进程状态并为新进程调入所保留的状态,而上下文切换的时间开销较重;在切换时,系统没有做有用的工作,时间取决于硬件的支持

5 进程操作

  • 进程是有生命周期的:产生、运行、暂停、终止。对进程的这些操作叫进程控制,对进程的操作如下图所示;
  • 进程控制的职责是对系统中进程实施有效的管理,它是CPU管理的一部分(还有进程同步、通信和调度);
  • 当系统允许多进程并发执行时,为了实现共享、协调并发进程的关系,处理机管理必须对进程实行有效的管理。

6 创建进程

进程创建的时机有以下几种:

  • 作业调度:批处理系统中,作业调度程序调度到某个作业以后,就把这个作业装入内存,并分配必要的资源,创建进程,插入就绪队列;
  • 用户登录:在分时系统中,用户在终端键入登录命令后,若是合法用户,系统建立一个进程,并插入就绪队列;
  • 提供服务:用户向系统提出请求后,系统专门建立一个进程为用户服务。如打印请求;
  • 应用请求:应用进程的需要,由它自己创建一个新进程,使新进程以并发运行方式完成特定任务(输入数据并将处理结果输出到表格上)。

一个进程创建之后还可以创建进程,也就是父进程创建子进程,如此轮流创建进程下去,构成一个进程树,典型UNIX系统中的进程树如下图所示:

关于资源共享问题,有如下三种情况:

  • 父进程子进程共享所有的资源
  • 子进程共享父进程资源的子集
  • 父进程和子进程无资源共享

关于进程执行问题,有如下两种情况:

  • 父进程和子进程并发执行
  • 父进程等待,直到子进程终止

关于进程地址空间问题,有如下两种情况:

  • 子女复制双亲
  • 子女有一个程序被调入

7 进程通信:共享存储

由生产者-消费者问题讨探进程之间是如何共享存储,生产者-消费者问题是一类问题的抽象,它描述的是一类事物提供另一类事物所需的事物,比如某一个进程提供计算数据,另一个进程负责计算输出结果,不提供数据就无法进行计算输出,此时提供计算数据的进程就是生产者,负责计算输出的进程就是消费者,如下图所示,这个问题抽象出来的数据模型就是共享队列

8 进程通信:消息传递

消息传递是操作系统中的一个机制,能够使进程之间进行消息传递,若P与Q要通信,需要建立通信连接,通过send/receive交换消息,通信链路的实现分为两种,一种是物理上的通过电子线路的实现,另一种是逻辑上的实现,我们主要考虑的是逻辑上的实现连接的建立分为两种:

  • 直接通信:进程必须显式的命名,如send (P, message)向进程P发消息,receive(Q, message)从进程Q收消息,这种情况下连接自动建立,连接精确的与一对在通信的进程相关,在每一对之间就存在一个连接,连接可以无向,但通常是双向的,这种通信方式的缺点就是收模块化限制,比如某个时候进程P名字被修改,那么所有代码都需要修改;

直接通信也有一个特殊的通信方式就是非对称通信方式(asymmetric communication),也就是说发送消息的时候是显示命名的,但接收消息的时候不指明接收方

  • 间接通信:进程双方不是直接建立连接的,而是通过一个媒介,可以想象成一个信箱端口,每个信箱都有一个唯一的ID,不管是发送消息还是接收消息,都是通过这个信箱来完成的,如send(A, message)为向信箱A发送消息,receive(A, message)为从信箱A接收消息,此时仅当进程共有一个信箱时连接才能建立,连接可同多个进程相关,每一对进程可共享多个通信连接,连接可是无向或双向的,但是为了确定发送者和接受者的唯一性,间接通信允许一个连接最多同2个进程相关,并且只允许一个时刻有一个进程执行接受操作,通过允许系统任意选择接收者,发送者被通知谁是接收者,这样发送方和接收方就被唯一的确定。

相应的对信箱也有对应的操作,如创建新的信箱,通过信箱发送和接收消息,通信结束后销毁信箱等

操作系统原理第三章:进程相关推荐

  1. (操作系统原理·第三章)五个哲学家吃通心面 问题

    问题描述: 有五个哲学家围坐在一圆桌旁,桌子中央有一盘通心面,每人面前有一只空盘子,每两人之间放一把叉子.为了吃面,每个哲学家必须获得两把叉子,且每人只能直接从自己左边或右边去取叉子. 分析: 在这道 ...

  2. 操作系统原理第七章:死锁

    目录 1 死锁的基本概念 2 死锁的必要条件 3 死锁预防 3.1 抑制死锁发生的必要条件 4 死锁避免 4.1 资源分配图法 4.2 银行家算法 5 死锁的检测 5.1 每一种资源类型只有一个实例 ...

  3. 计算机操作系统原理第四章习题

    计算机操作系统原理第四章习题 1.什么是静态链接.装入时动态链接和运行时的动态链接? 2.简述分页系统和分段系统的异同点 3.什么情况下需要重定位?为什么要引入重定位? 4.在具有快表的段页式存储管理 ...

  4. 《Linux内核设计与实现》读书笔记 第三章 进程管理

    第三章进程管理 进程是Unix操作系统抽象概念中最基本的一种.我们拥有操作系统就是为了运行用户程序,因此,进程管理就是所有操作系统的心脏所在. 3.1进程 概念: 进程:处于执行期的程序.但不仅局限于 ...

  5. 计算机组原理ppt,计算机组原理第三章.ppt

    计算机组原理第三章 计算机组成原理 毛典辉 北京工商大学计算机与信息工程学院 Email: amaode@ 进一步结论: 当最高有效位产生进位而符号位无进位时,产生上溢: 当最高有效位无进位而符号位有 ...

  6. 设某微型计算机内存ram区,微机原理第三章习题.doc

    微机原理第三章习题 第四章 指令与寻址方式习题解答 1.试分别说明下列各指令中源操作数和目的操作数使用的寻址方式: (1) AND AX,0FFH (2) AND BL,[OFFH] (3) MOV ...

  7. 第三章 进程管理笔记

    第三章 进程管理笔记 20135109 高艺桐 3.1进程 1.程序本身并不是进程,进程是处于执行期的程序以及相关资源的总称. 2.执行线程,简称线程,是进程中活动的对象.每个线程都拥有一个独立的计数 ...

  8. 微型计算机原理中jge,微机原理第三章课件.ppt

    微机原理第三章课件.ppt 3.2 8086/8088指令系统 控制转移指令特点 控制转移指令特点 控制转移指令特点 控制转移指令特点 控制转移指令特点 程序举例(1) 将20000H-20007H共 ...

  9. 操作系统 精髓与设计原理 第三章部分题目

    第三章重要题目 注:书参考<操作系统--精髓与设计原理(第九版)> 复习题 3.2 哪些常见事件会触发进程的创建? (1)批处理环境中,提交一个新作业时操作系统会为该作业创建一个新进程. ...

最新文章

  1. HDU 5834 Magic boy Bi Luo with his excited tree
  2. Golang代码实现HTTPs(HTTPS证书生成和部署)
  3. kubernetes in action - Replication Controller
  4. 双机之间的串行通信设计 c语言编程,双机串行通信设计精品.doc-资源下载人人文库网...
  5. vue项目示例代码git_您应该了解的5个Git命令以及代码示例
  6. 转: Linux下单网卡多vlan多虚拟机
  7. 终于有人把tomcat讲清楚了。
  8. MySQL 面试,必须掌握的 8 个知识点
  9. Dubbo 的心跳设计,值得学习!
  10. 1069三网合一集团短信通道固定接收号
  11. 非服务器模式下运行getImageData函数出现 the operation is insecure
  12. 北航计算机专业怎么样考研好考不,计算机专业考研,北航和北邮各有什么优势...
  13. python 词表里的词不符合_收藏干货丨初中英语单词1600个词表+mp3下载
  14. java制作闪星星_three.js制作星球和星星闪烁的简单示例
  15. 这个彩蛋表明,图灵测试评估的也许不是计算机,而是人类……
  16. Cain 不能显示外接网卡问题解决
  17. 2020年—岁月静好,温暖如初
  18. mysql查询同名同姓重名人数_查全国同名同姓,怎样查重名人数查询
  19. 小马哥 - ----高仿三星n9006 主板A202型号 拆机主板图 完美开机
  20. 华为云通用计算增强型C6到底怎么样?

热门文章

  1. python学习笔记十五:日期时间处理笔记
  2. SugarCRM 主表-自定义字段
  3. Ubuntu ADSL 拨号上网时断时续问题
  4. 黑马vue---14、v-model双向绑定
  5. Python机器学习基础教程-第2章-监督学习之K近邻
  6. OO第一单元总结博客
  7. Python学习之路—2018/7/14
  8. MySQL服务器修改主机名后问题解决
  9. spring和hibernate的集成
  10. Javaweb 第1天 HTML和CSS课程