计算机操作系统 慕课版 第2章 进程的描述
第二章 进程的描述
2.1、进程管理
多道程序环境下,处理机管理可归结为对进程的管理,所以,处理机管理主要研究进程的调度管理。
1.主要任务:
对处理机进行分配,并对其运行进行有效的控制管理。
2.主要功能:
- 进程控制
- 进程同步
- 进程通信
- 进程调度
2.1.1、前趋图
前趋图是一个有向无环图,有向边表示结点间的偏序或前趋关系。
直接前趋 直接后继 初始结点 终止结点 重量或权值
互不依赖的结点可并发执行
2.1.2、程序的顺序执行
1、程序的顺序执行
一个较大的程序通常都由若干个程序段组成。
程序在执行时,必须按照某种先后次序逐个执行,仅当前一操作执行完后,才能执行后继操作。
2、程序顺序执行时的特征
(1)顺序性
(2)封闭性
(3)可再现性
2.1.3、程序的并发执行
1、程序的并发执行
其中互不依赖部分可以并发执行。
2、程序并发执行时的特征
1)间断性
- 并发程序之间相互制约。
- 执行——暂停执行——执行。
2)失去封闭性
- 多个程序共享全机资源。
- 执行状态受外界因素影响。
3)不可再现性
程序经过多次执行后,虽然其执行时的环境和初始条件都相同,但得到的结果却各不相同。
2.2、进程的描述
2.2.1 进程的定义和特征
1、 进程的定义
进程实体由程序段、数据段、 进程控制块(PCB)构成。进程是程序的一次执行。
引入进程实体后的定义:
进程是进程实体的运行过程,是系统进行资源分 配和调度的一个独立单位。
进程的概念: 进程是操作系统中一个最基本也是最重要的概 念,但目前没有一个非常确切的定义。
为了强调进程并发性和动态性的特点,将其定义为: 进程是程序的一次执行,该程序可以与其它 程序并发执行。
2 、 进程的特征
1 )动态性
2 )并发性
3 )独立性
4 )异步性
注:进程与程序的主要区别
- 程序是指令的集合,本身没有任何运行的含义, 是一个静态概念;而进程是程序在处理机上的一次执 行过程,是一个动态概念。
- 程序的存在是永久的;而进程是有生命期的,它 因创建而产生,因调度而执行,因缺少资源而暂停,因撤消而消亡。
- 程序仅是指令的有序集合;而进程则由程序段、 数据段、进程控制块组成。
- 进程与程序之间不是一一对应的,即同一程序可 同时运行于若干个不同的数据集合上,它将属于不同的进程;而一个进程也可以执行多个程序。
2.2.2、进程的三种基本状态
1.进程的三种基本状态及其转换
- 就绪状态
一个较大的程序通常都由若干个程序段组成
程序在执行时,必须按照某种先后次序逐个执行,仅当前一操作执行完后,才能执行后继操作。
- 执行状态
已获得CPU,正在执行的状态
- 单处理机:一个进程处于执行状态
- 多处理机:多个进程处于执行状态
- 阻塞状态
正在执行的进程由于发生某事件而暂时无法继续执行的状态
- 典型事件:请求I/O、申请缓冲空间
- 根据阻塞原因,设置多个阻塞队列
2.进程的五种基本状态
- 就绪状态
- 执行状态
- 阻塞状态
- 创建状态
- 终止状态
2.2.3、挂起操作和进程状态转换
1.引入挂起状态的原因
(1) 终端用户的请求
(2) 父进程请求
(3) 负荷调节的需要
(4) 操作系统的需要
(5) 对换的需要
2.进程状态的转换
(1) 活动就绪→静止就绪
(2) 活动阻塞→静止阻塞
(3) 静止就绪→活动就绪
(4) 静止阻塞→活动阻塞
挂起实际上是将相应状态再降低一级
2.2.4、进程管理中的数据结构
1、操作系统中用于管理控制的数据结构
2、PCB的作用和特点
PCB的作用:
- 作为独立运行基本单位的标志
- 能实现间断性的运行方式
- 提供进程管理所需要的信息
- 提供进程调度所需要的信息
- 实现与其他进程的同步与通信
3、PCB中的信息
4、PCB的组织方式
1)线性方式
2)链接方式
3)索引方式
2.3、进程控制
为了确保系统的安全性,常将处理机的执行状态分为系统态和用户态。
系统态: 又称为管态,内核态,具有较高的特权,能 执行一切指令,访问所有寄存器和存储区。OS运行在管态。
用户态:又称为目态, 具有较低特权的执行状态,仅 仅能执行规定的指令,访问指定的寄存器和存储区。一般 情况下,用户程序只能在用户态运行。
进程控制由操作系统内核实现,运行于系统态。
OS内核是计算机硬件的第一次扩充,由一些与硬件紧 密相关的模块和运行频率较高的模块构成。内核常驻内存, 受特殊保护。
2.3.1、进程的创建
1、进程的层次结构
2 、进程图
用于描述进程 家族关系的有向图;反映创建与被创建或父与子的关系。
子进程可以继承父进程的所有资源,当子进程被撤消时, 应将从父进程那里获得的资源归还给父进程。 撤消父进程时也必须同时撤消其所有的子进程。
3、引起创建进程的事件
- 由系统内核创建新进程
- 用户登录
- 作业调度
- 提供服务
- 由应用程序创建新进程
- 应用请求
4、进程的创建
(1)申请空白PCB。
(2) 为新进程分配资源。
(3) 初始化进程控制块。
(4) 将新进程插入就绪队列,如果进程就绪队列能够 接纳新进程, 便将新进程插入就绪队列。
2.3.2、进程的终止
1、引起进程终止的事件
1)正常结束
2)外界干预
① 操作员或系统干预 ② 父进程请求 ③ 父进程终止
3)异常结束
① 越界错误 ② 保护错 ③ 非法指令 ④ 特权指令错 ⑤ 运行超时 ⑥ 等待超时 ⑦ 算术运算错 ⑧ I/O故障。
2、进程的终止过程
(1) 从PCB集合中检索出该进程的PCB,读出相应 状态;
(2) 终止该进程的执行,更改调度标志;
(3) 终止其所有子孙进程;
(4) 将其全部资源,归还给其父进程或系统;
(5) 将该进程(即它的PCB)从所在队列(或链 表)中移出。
2.2.3、进程的阻塞与唤醒
1、引起进程阻塞和唤醒的事件
- 请求系统服务
- 启动某种操作
- 新数据尚未到达
- 无新工作可做
2、进程阻塞过程
(1)进程通过调用阻塞原语block把自己阻塞。 进程的阻塞是进程自身的一种主动行为。
(2)把PCB中的现行状态改为阻塞;
(3)将PCB插入阻塞队列;
(4)将处理机分配给另一就绪进程。
3、进程唤醒过程
当被阻塞进程所期待的事件出现时,则由有关进程调 用唤醒原语wakeup,将等待该事件的进程唤醒。
唤醒原语执行的过程:
(1)把该进程从阻塞队列中移出;
(2)将其PCB中的现行状态改为就绪;
(3)将该进程的PCB插入就绪队列。
2.2.4、进程的挂起与激活
1、进程的挂起
当出现了引起进程挂起的事件时,系统利用挂起原 语suspend将指定进程或处于阻塞状态的进程挂起。
挂起原语的执行过程:
活动就绪——>静止就绪
活动阻塞——>静止阻塞
执行状态——>重新调度(静止就绪)
2、进程的激活过程
系统将利用激活原语active将指定进程激活。 激活原语先将进程从外存调入内存,
检查该进程的现行状态:
静止就绪——>活动就绪
静止阻塞——>活动阻塞
2.4、进程通信
进程通信的基本概念
- 进程通信:是指进程之间交换信息。
- 低级通信:与系统内核或低层控制密切联 系的信息交换。
- 高级通信:是指用户可直接利用操作系统 所提供的一组通信命令,高效地传送大量数据 的一种通信方式。
2.4.1、进程通信的类型
1、 共享存储器系统
- 基于共享数据结构的通信方式
- 基于共享存储区的通信方式
2、 消息传递系统
- 直接通信方式
- 间接通信方式
3、 管道通信
4、 客户机-服务器系统
1、共享存储器系统通信
在该通信方式中,互相通信的进程共享某些数据结构或共享存储区,进程能通过这些空间进行通信:
1)基于共享数据结构的通信方式。在这种通信方式中,要 求诸进程公用某些数据结构,借以实现诸进程间的信息交换,如 在生产者-消费者问题中的有界缓冲区。操作系统仅提供共享存储 器,由程序员负责对公共数据结构的设置及对进程间同步的处理。 这种通信方式仅适用于传递相对较少的数据,通信效率低下,属 于低级通信。
2)基于共享存储区的通信方式。为了传输大量数据,在内 存中划出了一块共享存储区域,诸进程可通过对该共享区的读或 写交换信息,实现通信,数据的形式和位置甚至访问控制都是进 程负责,而不是OS。这种通信方式属于高级通信。需要通信的进 程在通信前,向系统申请获得共享存储区中的一个分区,并将其 附加到自己的地址空间中,便可对其中的数据进行正常读、写, 读写完成或不再需要时,将归还给共享存储器。
2、管道(Pipe)通信
所谓“管道”,是指用于连接一个读进程和一个写进程以实现 他们之间通信的一个共享文件,又名pipe文件。向管道(共享文件) 提供输入的发送进程(写进程)以字符流方式将大量数据写入,接 收管道输出的接收进程(读进程)从管道中接收数据。这种方式首 创于UNIX系统,由于可以大量传送数据,被其他OS广泛应用。
管道机制必须提供以下三方面的协调能力:
① 互斥:有进程对管道执行读写操作,其他进程应该等待。
② 同步:当写进程写入一定数量数据到管道,然后睡眠等待。 直至输出进程取走数据唤醒它。当读进程读一个空管道,则也应睡 眠,直至写进程写入数据到管道才将它唤醒。
③ 确定对方是否存在,只有存在,才能通信。
3、消息传递系统
不借助任何共享存储区或数据结构,而是以格式化的消息(messag)为单位,为通信的数据封装在消息中,并利用操作系统提供的一组通信命令(原 语),在进程间进行信息传递,完成进程间的数据交换。
1)直接通信方式:指发送进程利用OS所提供的发送原语,直接把消息发送给目标进程;
2)间接通信方式:指发送和接受进程,都通过共享中间实体(简称邮箱)的方式进行消息的发送和接受,完成进程间的通信。
4、客户-服务器系统
在网络环境的各种应用领域已成为当前主流的通信实现机制,主 要的实现方法分三类:套接字、远程过程调用和远程方法调用。
1)套接字(Socket) 套接字,源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务。套接字分为以下两类:
基于文件型:通信进程都运行在同一台机器的环境中,套接字是 基于本地文件系统支持的,一个套接字关联到一个特殊的文件,通信 双方通过这个特殊文件的读写实现通信,其原理类似于前面所讲的管 道。
基于网络型:该类型通常采用的是非对称方式通信,即发送者需要 提供接收者命名。通信双方的进程运行在不同的主机的网络环境下, 被分配了一对套接字,一个属于接收进程(或服务进程),一个属于发送进程(或客户进程)。
优势:不仅适用于同一台计算机内部的进程通信,也适用于网络 环境中不同计算机间的进程通信。
2)远程过程调用和远程方法调用
远程过程调用是一个通信协议,用于通过网络连接系统。该协议允 许一台主机系统上的进程调用另一台主机系统上的进程,通常表现为常 规的过程调用。
特别说明:如果涉及的软件采用面向对象编程,则远程过程调用也 可以称为软件方法调用。
为了使远程过程调用看起来与本地过程调用一样,也就是说远程过 程调用的思想是使得远程调用尽可能像本地调用一样。调用过程应该不知道被调用过程是在另外一台计算机上执行。 反过来也是如此, 被调用过程也不应该知道是由哪个机器的进程调用的。引入了存根的概念
(Stub):在本地客户端,每个能够独立运行的远程过程都有一个客 户存根。本地进程调用远程过程,实际是调用该过程关联的存根;与此 类似,在每个远程进程的服务器端,其所对应的实际可执行进程也存在 一个服务器存根与其关联。
2.4.2、消息传递通信的实现方式
1、直接消息传递系统
1)直接通信原语
这是指发送进程利用OS所提供的发送命令,直接把消息发送给目标进程。此时,要求发送进程和接收进程都以显 式方式提供对方的标识符。通常,系统提供下述两条通信命 令(原语):
- Send(Receiver, message); 发送一个消息给接收进程;
- Receive(Sender, message); 接收Sender发来的消息;
非对称寻址
在某些情况下,接收进程可与多个发送进 程通信,因此,它不可能事先指定发送进程。 例如,用于提供打印服务的进程,它可以接收来自任何一个进程的“打印请求”消息。 对于这样的应用,在接收进程接收消息的原 语中的源进程参数,是完成通信后的返回值, 接收原语可表示为: Receive (id, message);
2)消息的格式
在消息传递系统中所传递的消息,必须具有一定的消息格式。在单机系统环境中,由于发送进程和接收进程处于同一台机器中,有着相同的环境,故其消息格式比较简单;但在计算机网络环境下,不仅源和目标进程所处的环境不同,而且信息的传输距离很远,可能要跨越若干个完全不同的网络,致使所用的消息格式比较复杂。通常,可把一个消息分成消息头和消息正文两部分。消息头包括消息在传输时所需的控制信息,如 源进程名、目标进程名、消息长度、消息类型、消息编号及发 送的日期和时间;而消息正文则是发送进程实际上所发送的数据。
在某些OS中,消息采用比较短的定长消息格式,这便减少了对消息的处理和存储开销。这种方式可用于办公自动化系统中,为用户提供快速的便笺式通信;但这对要发送较长消息的用户是不方便的。在有的OS中,采用变长的消息格式, 即进程所发送消息的长度是可变的。系统无论在处理还是在存储变长消息时,都可能会付出更多的开销,但这方便了用 户。这两种消息格式各有其优缺点,故在很多系统(包括计算机网络)中,是同时都用的。
3)进程同步方式
在进程之间进行通信时,同样需要有进程同步机制,以使 诸进程间能协调通信。不论是发送进程,还是接收进程,在完 成消息的发送或接收后,都存在两种可能性,即进程或者继续发送(接收),或者阻塞。由此,我们可得到以下三种情况:
(1) 发送进程阻塞,接收进程阻塞。这种情况主要用于进 程之间紧密同步(tight synchronization),发送进程和接收进程 之间无缓冲时。这两个进程平时都处于阻塞状态,直到有消息 传递时。这种同步方式称为汇合(rendezrous)。
(2) 发送进程不阻塞,接收进程阻塞。这是一种应用最 广的进程同步方式。平时,发送进程不阻塞,因而它可以尽 快地把一个或多个消息发送给多个目标; 而接收进程平时则处于阻塞状态,直到发送进程发来消息时才被唤醒。例如, 在服务器上通常都设置了多个服务进程,它们分别用于提供不同的服务,如打印服务。平时,这些服务进程都处于阻塞状态,一旦有请求服务的消息到达时,系统便唤醒相应的服务进程,去完成用户所要求的服务。处理完后,若无新的服务请求,服务进程又阻塞。
(2) 发送进程不阻塞,接收进程阻塞。这是一种应用最 广的进程同步方式。平时,发送进程不阻塞,因而它可以尽 快地把一个或多个消息发送给多个目标; 而接收进程平时 则处于阻塞状态,直到发送进程发来消息时才被唤醒。例如, 在服务器上通常都设置了多个服务进程,它们分别用于提供不同的服务,如打印服务。平时,这些服务进程都处于阻塞 状态,一旦有请求服务的消息到达时,系统便唤醒相应的服 务进程,去完成用户所要求的服务。处理完后,若无新的服 务请求,服务进程又阻塞。
4)通信链路
为使在发送进程和接收进程之间能进行通信,必须在 两者之间建立一条通信链路(communication link)。有两种 方式建立通信链路。第一种方式是由发送进程在通信之前用显式的“建立连接”命令(原语)请求系统为之建立一条通信链路;在链路使用完后,也用显式方式拆除链路。这种方式主要用于计算机网络中。第二种方式是发送进程无须明确提出建立链路的请求,只须利用系统提供的发送命令(原语),系统会自动地为之建立一条链路。这种方式主要用于单机系统中。
信箱通信
间接通信方式指进程之间的通信需要通过作为共享数据结构的实体。该实体用来暂存发送进程发送给目标进程的消息;接收进程则从该实体中取出对方发送给自己的消息。通常把这种中间实体称为信箱。消息在信箱中可以安全地保存,只允许核准的目标用户随时读取。因此,利用信箱通信方式, 既可实现实时通信,又可实现非实时通信。
系统为信箱通信提供了若干条原语,分别用于信箱的创建、撤消和消息的发送、接收等。
信箱通信
发送进程申请建立一个与接收进程链接的信箱
发送进程把消息送到信箱,接收进程从信箱中取出消息,从而完成进程间信息交换
1)信箱的数据结构
信箱头:信箱名、信箱大小、已存信件数、空格子数
信箱体:由若干格子组
2)信箱通信原语
(1) 信箱的创建和撤消。进程可利用信箱创建原语来建立 一个新信箱。创建者进程应给出信箱名字、信箱属性(公用、 私用或共享);对于共享信箱,还应给出共享者的名字。当 进程不再需要读信箱时,可用信箱撤消原语将之撤消。
(2) 消息的发送和接收。当进程之间要利用信箱进行通信时,必须使用共享信箱,并利用系统提供的下述通信原语进行通信。
- Send(mailbox, message); 将一个消息发送到指定信箱;
- Receive(mailbox, message); 从指定信箱中接收一个消息;
信箱的类型
1.信箱的归属
- 公用信箱
- 私用信箱
- 共享信箱
2.发送进程 和接收进 程之间的关系
一对一:私有
一对多:广播
多对一:客户/服务器
多对多:公共信箱
2.5、线程的基本概念
2.5.1、线程的引入
引入进程是为了程序间的并发执行,以改善资源的利用率,提高系统吞吐量。
传统进程既是资源分配的基本单位,又是调度分派的基本单位,这使的系统在进程管理调度时的时空开销较大,速度较低。
引入线程将资源分配与调度分派分开,进一步提高系统的并发程度,提高系统的吞吐率和资源利用率。
2、线程的特点
线程是进程的一个实体,是比进程更小的能 被系统独立调度和分派的基本单位。
线程基本上不拥有系统资源,但可以与同一进程的其它线程共享该进程的全部资源。
同一进程的多个线程间可并发执行,它们之间可存在创建与被创建关系。
线程同进程一样,有就绪、阻塞、执行三种基本状态。
2.5.2、线程与进程的比较
在调度,并发性,拥有资源,系统开销,独立性,支持多处理机系统等几个方面的比较:
线程: 作为调度和分 派的基本单位
进程: 作为资源拥有的基本单位
2.5.3、线程的状态和线程控制块
1.线程运行状态
如同传统的进程一样,在各线程之间也存在 着共享资源和相互合作的制约关系,致使线程在 运行时也具有间断性。相应地,线程在运行时, 也具有下述三种基本状态:
① 执行状态,表示线程正获得处理机而运行;
② 就绪状态,指线程已具备了各种执行条件, 一旦获得CPU便可执行的状态;
③ 阻塞状态,指线程在执行中因某事件而受 阻,处于暂停执行时的状态。
2.线程控制块
每一个线程是一个动态对象,它表示进程中的一条控制线索,执行一系列指令操作,是一个相对独立的、 可被调度运行的基本单位。
在进程的地址空间中可以有多个线程,它们可以并发 执行,这就需要一张单独的表来记录线程控制与管理 等信息,这张表称为线程控制表。
为了管理系统中的进程和线程,不但要有进程控制块, 还要为每个线程设置一个线程控制块TCB。线程控制 块由一个线程标识符和一张线程描述表组成,线程描 述表记录了线程的属性和调度所需的数据。如线程状 态、寄存器组(用于存放现场信息)、堆栈、以及有 关调度和I/O活动的信息。
3.多线程OS中的进程属性
多线程是OS在一个进程内支持多个线程的能力。
多线程OS中的进程有以下属性:
(1) 作为系统资源分配的单位。
(2) 可包括多个线程。
(3) 进程不是一个可执行的实体。
本文来自博客园,作者:NotYourferry,转载请注明原文链接:https://www.cnblogs.com/pinghuimolu/p/15414312.html