(程序的抽象,抽象成一个实体,给出描述实体的信息,实体间的交互协作、实体间的调用、OS对实体的调用,OS存储实体的信息)
(OS建立一个世界,划分不同的角色,制定规则,描述这些角色,控制这些角色,使这些角色相互配合,使世界的运转效率高)
前趋图(Precedence Graph):
指一个有向无循环图,可记为DAG(Directed Acyclic Graph),用于描述进程之间执行的先后顺序
图中的每个结点用来表示一个进程或程序段,乃至一条语句。
节点间的有向边表示两个结点之间存在的偏序或前趋关系。
进程之间的前趋关系用“->”来表示,表示为 ( P i , P j ) (P_i,P_j) (Pi,Pj)或 P i − > P j P_i -> P_j Pi−>Pj,表示 P j P_j Pj开始执行之前 P i P_i Pi必须完成,此时称 P i P_i Pi为 P j P_j Pj的直接前趋, P j P_j Pj为 P i P_i Pi的直接后继。
称没有前趋结点的结点为初始结点,没有后继结点的结点为终止结点。
每个结点具有权重,用于表示该结点所含有的程序量或程序的执行时间。
通常一个程序由若干个程序段组成,执行时,按某种先后次序顺序执行,仅当前一段程序执行完之后,后一段程序才执行。
其特征有:
顺序执行系统资源的利用率很低,故一般为并发执行。
并非所有的程序都能并发执行,只有不存在前趋关系的程序才有可能并发执行。
并发执行指,两个或多个程序在同一段时间内同时运行。
其特征为:
进程的定义
当程序并发执行时,失去封闭性且不可再现。为了使程序可以并发执行,每次执行结果可以再现,且对并发执行的程序加以描述和控制,引入“进程”的概念。
进程控制块(Process Control Block, PCB):
用以描述进程的基本情况和活动过程,进而控制和管理进程。
进程实体:
由程序段、相关的数据段、PCB 三部分构成了进程实体。
进程的定义:
进程是进程实体的运行过程,是系统资源分配和调度的一个独立单位。
一般情况下,所谓创建进程,即创建进程实体中的PCB;撤销进程,即撤销进程的PCB
进程的特征:
动态性:
进程的实质是进程实体的执行过程,具有动态性。
并发性:
多个进程实体同存于内存中,且能在同一段时间内同时运行。
独立性:
进程实体是一个能独立运行、独立获得资源、独立接受调度的基本单位
异步性:
进程按异步的方式运行,即以不可预知的速度运行,但最终的结果相同
进程的三种基本状态
进程在生命周期内具有多种状态
三种基本状态的转换
进程在运行过程中,往往发生状态的转换。
创建状态和终止状态
为了满足进程控制块对数据及操作的完整性要求以及增强管理的灵活性,引入创建状态和终止状态。
创建状态:当进程处在创建的过程中时(申请PCB->在PCB中填写信息->…),此时系统不能被调度运行,将该状态称为创建状态。即就绪之前的状态。
引入创建状态是为了保证进程的调度必须在创建工作完成之后进行,以确保对进程控制块操作的完整性。同时,也增加了管理的灵活性。OS可以根据情况推迟新进程的创建。
终止状态:
进程的终止需要两个步骤:
当进程处于这两个过程中时,称为终止状态。
进程进入终止状态后不再执行,但在操作系统中仍保留一个记录,保存状态码和一些计时统计数据,供其他进程收集。
进程被挂起,即将进程从内存调入外存, 且意味着进程处于静止状态。如果进程正在执行,则将暂停执行;如果进程处于就绪状态,则进程暂不接受调度。
与之相对的是激活操作,从外存调入内存。
挂起操作的引入
其原因有:
进程状态的转换
为了便于对计算机中的各类资源的使用和管理,将其抽象为各种数据结构,并提供一组对资源进行操作的命令。
操作系统中用于管理控制的数据结构
操作系统中,对每个资源、进程都设置了一个数据结构,一般有:内存表、设备表、文件表、用于进程管理的进程表(又称为PCB)
进程控制块PCB
PCB作为进程实体的一部分,记录操作系统所需的,用于描述进程的当前情况以及管理进程运行的全部信息。
其具体作用为:
进程控制块中的信息
进程标识符
进程标识符用于唯一地标识一个进程。一般有两种标识符:
处理机状态
处理机状态信息也称为处理机的上下文,由处理机的各种寄存器中的内容组成。
进程调度信息
进程控制信息
进程控制块的组织方式
用了有效的管理PCB,用适当的方式将PCB组织起来。
进程控制主要包括创建进程、终止进程、阻塞进程、进程状态转换。
进程控制一般由OS内核中的原语实现。
操作系统通常将与硬件联系紧密的模块、运行频率高的模块等安排在紧靠硬件的软件层次中,将它们常驻内存,这些模块即称为OS内核。
为了防止OS及其关键数据被外部程序修改,将处理机的状态分为:
系统态:能执行一切指令,访问所有寄存器和存储区。
用户态:技能执行规定的指令,访问指定的寄存器和存储区。
OS内核的功能有:
支撑功能
提供给OS中的众多模块所需的基本功能,以支撑这些模块工作。最基本的支撑功能有:
中断操作
时钟管理。配合时间片使用。
原语操作
原语(Primitive):
由若干指令组成的,用于完成一定功能的一个过程,
它是一个原子操作(Active Operation),即操作中动作要么全做,要么不做。
资源管理功能
进程的层次结构
OS中,允许一个进程创建另一个进程,将创建进程的进程称为父进程,被创建的进程称为子进程,由此形成一个层次结构。
进程图(Process Graph)
进程图中用于描述进程间关系的一棵有向树。有向边用来描述它们之间的父子关系。
引起创建进程的事件
进程创建的过程
OS使用创建原语Creat按以下步骤创建一个进程:
引起进程终止(Termination of Process)的事件
进程的终止过程
OS调用进程终止原语,按以下顺序终止进程:
引起进程阻塞或唤醒的事件
进程阻塞过程
进程通过调用阻塞原语block将自己阻塞,即阻塞是进程自身的一种主动行为。
进入block过程后,该进程还处于执行状态,所以先立即停止执行,将进程控制块中的现行状态由“执行”改为“阻塞”,并将PCB插入阻塞队列。
进程唤醒过程
当被阻塞进程所期待的事件发生时,由有关进程调用唤醒原语wakeup,将等待该事件的进程唤醒。其过程为:
进程的挂起(从内存调入到外存)
当出现了引起进程挂起的事件时,OS利用挂起原语suspend将指定进程或处于阻塞状态的进程挂起。其过程为:
进程的激活(从外存调入到内存)
当发生激活进程的事件时,OS利用激活原语active,将指定进程激活。其过程为:
引入进程后,使得系统中多道程序可以并发执行,但进程的引入同时也增加了系统的复杂性。
为了使多个进程可以在系统中有条不紊地运行,引入进程同步机制。
进程同步机制地的要任务是, 对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能按照一定的规则共享系统资源,并能很好的合作,从而使程序的执行具有可再现性。
(引入进程,为了解决程序并发执行时的不可再现性,通过进程同步机制实现)
两种形式的制约关系
各进程间可能存在两种制约关系:
间接制约关系
多进程并发执行时,有时互斥的共享系统资源,形成间接制约关系。
直接制约关系
两进程的执行依赖彼此,即它们的制约关系源于它们之间的相互合作。如:输入进程和计算进程,只有等输入进程执行完毕之后,计算进程才能执行。
临界资源
进程通过互斥的方式访问的系统资源,称为临界资源。
分为硬件临界资源和软件临界资源。
临界区(critical section)
访问临界资源的代码称为临界区。通过保证诸进程互斥的进入自己的临界区,就能保证诸进程互斥的访问临界资源。
进入区(entry section)
在临界区之前用于检测欲访问的临界资源是否正被访问的代码,称为进入区。
退出区(exit section)
临界区之后,用于将临界区正被访问的标志恢复为未被访问的标识的代码
剩余区
除临界区、进入区、退出区之外的其他部分的代码称为剩余区。
访问一个临界资源的过程为,进程依次进入进入区、临界区、退出区、剩余区。
同步机制应遵守的规则
使用软件机制保证进程同步机制具有一定难度,且有很大局限性。目前常用硬件同步机制实现。其实现方式有:
生产者-消费者问题
哲学家进餐
进程通信指进程之间的信息交换。
进程的同步,也需要在进程间交换一定的信息,属于低级进程通信。低级的原因是:1. 效率低 2. 对用户不透明
在进程间传送大量数据时,利用OS提供的高级通信工具,该工具有如下特点:
通信机制可归结为四大类
共享存储器系统(Shared-Memory System)
共享存储器系统中,相互通信的进程共享某些数据结构或共享存储区,进程之间通过这些空间进行通信。又分为:
管道通信系统
管道(pipe),指用于连接一个读进程和一个写进程以实现它们之间通信的一个文件。写进程将数据以字符流的形式传入管道,都进程从管道中读取数据,从而实现进程通信。
管道需提供的协调能力:
消息传递系统(Message passing System)
该机制不借助任务共享区或数据结构,以格式化的消息为单位,将通信的数据封装在消息中,利用操作系统提供的一组通信命令 ,在进程间进行消息传递,完成进程间的数据交换。
分为:
客户机-服务器系统(Client-Server System)
网络环境的各种应用领域中主流的通信实现机制。其实现方法分为三类:套接字、远程过程调用、远程方法调用。
引入进程是为了使多个程序能并发执行,提高资源利用率和系统吞吐量。
引入线程则使为了减少所付出的时空开销。
进程的两个基本属性
程序并发执行时所需要付出的时空开销
由于进程是资源的拥有者,在进行上述操作时,会付出较大的时空开销。
线程—作为调度和分配的基本单位
不将作为调度和分派的基本单位也作为拥有资源的单位。
调度的基本单位
线程和进程都是调度的基本单位。
并发性
进程之间可以并发,一个进程中的所有进程以及不同进程中的线程也能并发执行。
拥有资源
线程本身不拥有系统资源,只有一点必不可少的、能保证独立运行的资源。
线程处理拥有自己的少量资源外,也允许多个线程共享进程所拥有的资源。这可以表现在:同一进程的所有线程都拥有相同的地址空间。
独立性
每个进程都拥有独立的地址空间和资源,除了共享全局变量外,不允许其他进程访问。
而同一进程中的线程,共享进程的内存空间和资源。
所以,同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多。
系统开销
对进程的操作的时空开销大于线程,因进程拥有大量资源。
进程比喻成车间,线程就是车间里的工人。
线程运行的三个状态
线程控制块TCB
线程控制块用于进路所有用于管理和控制线程的信息。通常包括:
多线程OS中的进程属性