文章目录
2.1 前驱图和程序执行
在单道批处理系统和早期未配置OS的计算机系统中,程序的执行方式是顺序执行,即在内存中仅装入一道程序,由它独占系统的所有资源;在多道程序系统中,由于内存中可以同时装入多个程序,它们可以共享系统资源、并发执行,这显然可以克服上述缺点
2.1.1 前驱图
所谓前趋图(precedence graph),是指一个有向无环图(directed acyclic graph,DAG),它用于描述进程之间执行的先后顺序。图中的每个节点均可用于表示一个进程或一段程序,甚至是一条语句,节点间的有向边则表示两个节点之间所存在的偏序(partial order)或前趋关系(precedence relation)
- 有向无循环图,用于描述进程之间执行的先后顺序
- 结点表示进程或程序段,有向边表示前趋关系
2.1.2 程序顺序执行
1、程序顺序执行的特征
2.1.3 程序并发执行
1、程序并发执行的定义
一组在逻辑上互相独立的程序或程序段在执行过程中,其执行时间在客观上互相重叠,即一个程序段的执行尚未结束,另一个程序段的执行已经开始执行;或一个程序未执行完,将开始执行另一个程序。
- 间断(异步)性:“走走停停”,一个程序可能走到中途停下来,失去原有的时序关系;
- 失去封闭性:共享资源,受其他程序的控制逻辑的影响。如:一个程序写到存储器中的数据可能被另一个程序修改,失去原有的不变特征。
- 失去可再现性:失去封闭性 ->失去可再现性;外界环境在程序的两次执行期间发生变化,失去原有的可重复特征。并发程序执行的结果与其执行的相对速度有关,是不确定的。
2.2 进程的描述
2.2.2 进程的定义与特征
1、进程的引入
为了使多道程序能够并发执行,且为了能对并发执行程序加以描述和控制,以提高资源利用率和系统效率。
2、进程的定义
- 进程是具有独立功能的程序关于某个数据集合在计算机系统中的一次执行过程。
- 系统进行资源分配和调度的、一个可并发执行的独立单位。
- 进程是程序的一个实例,是程序的一次执行
进程和程序的比较
- 程序是静态的,在外存中,进程是动态的,在内存中
- 程序可长期保存;而进程是有生命周期的。
- 程序是指令的有序集合;而进程则是由程序、数据和进程控制块三部分组成。
- 进程和程序之间不是一一对应的:一个进程可以执行一个或多个程序,一个程序可以同时被多个进程执行。
- 进程是一个独立运行的单位,也是系统进行资源分配和调度的独立单位,能与其他进程并发执行;而程序不能并发执行。
3、进程的特征
- 结构特征:由程序段、数据段及进程控制块(PCB)三部分构成,总称“进程映像”。
- 动态性:进程的实质是程序的一次执行过程,因而是动态的;进程具有生命周期。
- 并发性:多个进程可以并发地执行。
- 独立性:独立运行,独立获得资源。
- 异步性:间断性。
4、进程模型
2.2.2 进程的基本状态与转换
1、进程的三种基本状态
一个进程从创建、运行至消亡的整个生命周期,可以用一组状态加以刻画。
一般来说,进程在执行过程中至少经历三种不同的进程状态:
- 运行态(running):占有处理机正在运行。
- 就绪态(ready):具备运行条件,等待系统分配处理机以便运行。
- 阻塞态(blocked):不具备运行条件,正在等待某个事件的发生。
2、进程三种基本状态之间的转换
3、创建状态和终止状态
创建状态:
1. 为一个新进程创建PCB,并填写必要的管理信息;
2. 分配必要的资源,再把该进程转入就绪状态并插入就绪队列
终止状态:
1. 等待操作系统进行善后处理;
2. 将其PCB清零,并将PCB空间返回系统。
2.2.3 挂起操作和进程状态的转换
当该操作作用于某个进程时,该进程将被挂起,这意味这此时进程处于静止状态。
2.2.4 进程管理中的数据结构
1、OS中用于管理资源和控制进程的数据结构
OS管理的这些控制表一般可以分为以下四类:内存表、设备表、文件表和用于进程管理的进程表,进程表又称为PCB。
2、PCB的作用
(1)作为独立运行基本单位的标志。
当一个程序(含数据)配置了PCB后,就表示它已是一个能在多道程序环境下独立运行的、合法的基本单位了,即具有了取得OS服务的权利。因此,当系统创建一个新进程的同时,就会为它建立一个PCB。进程结束时系统又会回收其PCB,进程也随之消亡。系统是通过PCB来感知进程的存在的。也就是说,PCB已成为进程存在于系统中的唯一标志。
(2)实现间断性运行方式。
在多道程序环境下,程序是采用“停停走走”这种间断性的方式运行的。当进程因阻塞而暂停运行时,它必须保留自己运行时的CPU现场信息,因为其再次被调度运行时,还需要恢复CPU现场信息。在有了PCB后,系统就可以将CPU现场信息保存在被中断进程的PCB中,供该进程再次被调度运行而须恢复CPU现场信息时使用。
(3)提供进程管理所需要的信息。
当调度程序调度到某进程时,只能根据该进程PCB中记录的程序和数据在内存或外存起始地址(又称为“始址”或“基址”)中找到相应的程序和数据;在进程运行过程中,当进程需要访问文件系统中的文件或I/O设备时,也都需要借助PCB中的信息。另外,还可根据PCB中的资源清单了解到该进程所需的全部资源等信息。由此可见,在进程的整个生命期中,OS总是根据PCB来实施对进程的控制和管理的。
(4)提供进程调度所需要的信息。
只有处于就绪状态的进程才能被调度运行,而在PCB中就提供了进程所处状态等信息。如果进程处于就绪状态,系统便会把它插入进程就绪队列中,等待调度程序的调度;另外,在进行进程调度时,往往还需要了解进程的其他信息,如在优先级调度算法中,就需要知道进程的优先级;在有些较为公平的调度算法中,还需要知道进程的等待时间和已执行时间等。
(5)实现与其他进程的同步与通信。
进程同步机制是用于实现各进程的协调运行的,在采用信号量机制时,它要求在每个进程中都要设置相应的用于同步的信号量。在PCB中还具有用于实现进程通信的区域或通信队列指针等。
3、PCB中的信息
(1)进程标识符。(PCB作用一)
进程标识符用于唯一地标志一个进程。一个进程通常有两种标识符。
- ① 外部标识符。为了方便用户(进程)对进程的访问
- ② 内部标识符。为了方便系统对进程的使用
(2)处理机状态。(PCB作用二)
处理机状态信息,也称为处理机的上下文,主要是由处理机的各种寄存器中的内容组成的。
- ①通用寄存器,可被用户程序访问,用于暂存信息
- ②指令计数器,其中存放了要访问的下一条指令的地址;
- ③程序状态字寄存器,其中含有状态信息,如条件码、执行方式、中断屏蔽标志等;
- ④用户栈指针寄存器,指每个用户进程都有一个或若干个与之相关的系统栈,用于存放进程和系统的调用参数及调用地址。
(3)进程调度信息。(PCB作用四)
OS在进行进程调度时,必须了解进程的状态以及有关进程调度的信息,这些信息包括:
- ①进程状态,指明进程的当前状态,作为进程调度和对换时的依据;
- ②进程优先级,描述进程使用处理机的优先级别(用一个整数表示),优先级高的进程应优先获得处理机;
- ③进程调度所需要的其他信息,如进程已等待CPU的时间总和、进程已执行时间总和等,它们与所采用的进程调度算法有关;
- ④事件,指进程由执行状态转换为阻塞状态所等待发生的事件,即阻塞原因。
(4)进程控制信息。(PCB作用三)
进程控制信息是指用于进程控制所必需的信息,包括:
- ①程序和数据的地址,即进程中程序和数据的内存或外存起始地址,便于再调度到该进程执行时,能从PCB中快速找到其程序和数据;
- ②进程同步和通信机制,这是实现进程同步和进程通信时所必需的机制,如消息队列指针、信号量等,它们可能会全部或部分放在PCB中;
- ③资源清单,在该清单中列出了进程在运行期间所需的全部资源(除CPU外);
- ④链接指针,它给出了本进程所在队列中的下一个进程的PCB的始址。
4、PCB的组成方式
(1)线性方式。将系统中所有的PCB都组织在一张线性表中,将该表的起始地址存放在内存的一个专用区域中。该方式实现简单且开销小,但每次查找时都需要扫描整张表,因此适合进程数目不多的系统。
(2)链接方式。通过PCB中的链接字,将具有相同状态的进程的PCB分别链接成一个队列。这样即可形成就绪队列、若干个阻塞队列和空闲队列等。对就绪队列而言,其往往会按进程的优先级将PCB从高到低进行排列,即将优先级高的进程的PCB排在队列的前面。
(3)索引方式。系统根据所有进程状态的不同,建立几张索引表,如就绪索引表、阻塞索
引表等,并把各索引表在内存中的起始地址记录在内存的一些专用单元中。在每个索引表的表目中,记录具有相应状态的某个PCB在PCB表中的地址。
2.3 进程控制
进程控制是进程管理中最基本的功能,其负责创建新进程、终止已完成的进程、将因发生异常情况而无法继续运行的进程置于阻塞状态、转换运行中进程的状态等,进程控制就是要实现进程状态转换
进程控制一般是由OS内核中的原语(原子性操作,一旦开始不能停止)实现的。
2.3.1 进程的创建
1、进程的层次结构:(OS有,Windows没有)
在OS中,允许一个进程创建另一个进程,通常把创建进程的进程称为父进程(parent process),而把被创建的进程称为子进程(progeny process)。子进程可以继续创建其自己的子进程(即父进程的孙进程),由此便形成了进程的层次结构。子进程可以继承父进程所拥有的资源,继承父进程所打开的文件和分配到的缓冲区等。当子进程被撤销时,应将其从父进程那里获得的资源归还给父进程。此外,在撤销父进程时,也必须同时撤销其所有的子进程。为了标志进程间的家族关系,在PCB中设置了家族关系表项,以标明自己的父进程及所有的子进程。进程不能拒绝其子进程的继承权。值得注意的是,在Windows系统中不存在任何进程层次结构的概念,所有的进程都具有相
同的地位。在一个进程创建了另外一个进程后,创建进程获得一个句柄,其作用相当于一个令
牌,可以用来控制被创建的进程。但是这个句柄是可以进行传递的,也就是说,获得了句柄的
进程拥有控制被创建进程的权力,因此,进程之间的关系不再是层次关系了,而是获得句柄与
否、控制与被控制的简单关系。
2、引起进程创建的事件
①用户登录:在分时系统中,若登录成功,则系统将会为该用户创建一个进程,并把它插入就绪队列中。
②作业调度:在多道批处理系统中,当作业调度程序按一定的算法调度到某个(或某些)作业时,便会将它(们)装入内存、为它(们)创建进程,并把它(们)插入就绪队列中。
③提供服务:当运行中的用户程序提出某种请求后,系统将专门创建一个进程来为用户提供其所需要的服务,例如,用户进程要求打印文件,系统将为它创建一个打印进程,这样,不仅可使打印进程与该用户进程并发执行,还便于计算出完成打印任务所须花费的时间。
④应用请求:在上述3种情况下,都是由系统内核为用户创建一个新进程;而针对“应用请求”这类事件,则需要由用户进程自己创建新进程,以使新进程以同创建进程并发执行的方式完成特定任务。例如,某用户进程需要不断地先从键盘终端读入数据,再对读入的数据进行相应的处理,最后将处理结果以表格的形式显示在屏幕上。该用户进程为使这几个操作能并发执行以加速完成任务,可以分别建立键盘输入进程、数据处理进程以及表格输出进程。
3、进程的创建
(1)申请空白PCB:为新进程申请一个唯一的数字标识符,并从PCB集合中索取一个空白PCB。
(2)为新进程分配其运行所需的资源
(3)初始化PCB:PCB的初始化工作包括:①初始化标志信息,将系统分配的标识符和父
进程标识符填入新PCB中;②初始化处理机状态信息,使程序计数器指向程序的入口地址,使栈指针指向栈顶;③初始化处理机控制信息,将进程的状态设置为就绪状态或静止就绪状态,此外,通常还须将其设置为最低优先级,除非用户以显式方式提出高优先级要求。
(4)如果进程就绪队列能够接纳新进程,就将新进程插入就绪队列。
2.3.2 进程的终止
1、引起进程终止的事件
(1)正常结束
(2)异常结束
- 越界错
- 保护错
- 指令错
- 特权指令错
- 运行超时
- 等待超时
- 算术运算错
- I/O错
(3)外界干预
- 操作员或OS干预
- 父进程请求
- 父进程终止
2、进程的终止过程
- ①PCB集合中检索出该进程的PCB:并从该进程的PCB中读出该进程的状态
- ②若被终止进程正处于执行状态,立即剥夺CPU
- ③终止其所有子孙进程:以防止它们成为不可控的进程;
- ④将被终止的进程所拥有的全部资源,或归还给其父进程,或归还给系统;
- ⑤将被终止进程的PCB从所在队列(或链表)中移出:等待其他程序来搜集信息
2.3.3 进程的阻塞与唤醒
1、引起进程阻塞与唤醒的事件
- 向系统请求共享资源失败
- 等待某种操作的完成
- 新数据尚未到达
- 等待新任务的到达
2.3.4 进程的挂起与激活
1、进程的挂起
活动阻塞状态——静止阻塞状态
2、进程的激活
静止就绪——活动就绪
静止阻塞——活动阻塞
2.4 进程通信
基本概念
- 并发进程之间的交互必须满足两个基本要求:同步和通信。
- 进程同步是一种进程通信,通过修改信号量,进程之间可建立起联系,相互协调运行和协同工作。
- 进程协同工作时,需要互相交换信息,有些情况下进程间交换少量信息,有些情况下进程间交换大批数据。
- 进程之间互相交换信息的工作称为进程通信IPC(Inter-Process Communication)
2.4.1 进程通信的类型
1、共享存储器系统
(1)基于共享数据结构的通信方式
(2)基于共享存储区的通信方式
2、管道通信系统
管道机制的能力:互斥、同步、确定对方是否存在
3、消息传递系统
直接通信方式、间接通信方式
4、客户机——服务器系统
(1)套接字 :基于文件型、基于网络型
(2)远程过程调用和远程方法调用(如果涉及的软件采用面向对象编程,那么远程过程调用亦可称为远程方法调用)
2.4.2 消息传递通信的实现方式
1、直接通信(直接消息传递系统)
2、间接通信(信箱通信)
2.5 线程的概念
2.5.1 线程的引入
引入线程是为了解决内部(进程)矛盾,引入了线程之后,CPU的服务对象就不再是进程,而是进程当中的线程,每一个进程当中可能会包含多个线程,然后CPU会用一定的算法轮流地为这些线程进行服务。
1、进程的两个基本属性
- 进程是一个可拥有资源的独立单位
- 进程同时是一个可独立调度和分派的基本单位
2、提出线程的目的
- 程序并发执行所须付出的时空开销
- 使OS具有更好的并发性
- 适用于SMP结构的计算机系统
3、线程——作为调度和分派的基本单位
进程——拥有资源的基本单位
2.5.2 线程与进程的比较
1、调度的基本单位
- 在传统的OS中,拥有资源、独立调度和分派的基本单位都是进程;
- 在引入线程的OS中,线程作为调度和分派的基本单位,进程作为资源拥有的基本单位;
- 在同一进程中,线程的切换不会引起进程切换,在由一个进程中的线程切换到另一个进程中的线程时,将会引起进程切换。
2、并发性
在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间,也可并发执行。
3、拥有资源
- 进程是系统中拥有资源的一个基本单位,它可以拥有资源。
- 线程本身不拥有系统资源,仅有一点保证独立运行的资源。
- 允许多个线程共享其隶属进程所拥有的资源。
4、独立性
在同一进程中的不同进程之间的独立性,要比不同进程之间的独立性低得多。
5、系统开销
- 在创建或撤消进程时,OS所付出的开销将显著大于创建或撤消线程时的开销。
- 线程切换的代价远低于进程切换的代价。
- 同一进程中的多个线程之间的同步和通信也比进程的简单。
6、支持多处理机系统
2.5.3 线程状态和线程控制块
1、线程执行的三个状态
执行状态、就绪状态、阻塞状态
2、线程控制块
每个线程的TCB包括线程标识符、一组寄存器、线程运行状态、优先级、线程专有存储区、信号屏蔽、堆栈指针
3、多线程OS中的进程属性
(1)进程是一个可拥有资源的基本单位
(2)多个线程可并发执行
(3)进程已不是可执行的实体
2.6 线程的实现
2.6.1 线程的实现方式
1、内核支持线程KST
2、用户级线程ULT
3、两种线程的组合方式
(1)多对一模型
(2)一对一模型
(3)多对多模型
2.6.2 线程的具体实现
1、KST的实现
优点:
- 在多处理机系统中,内核可同时调度同一进程的多个线程
- 线程的切换比较快,开销小。
- 内核本身可采用多线程技术,提高执行速度和效率。
- 如一个线程阻塞了,内核可调度其他线程(同一或其他进程)。
缺点:对用户线程切换,开销较大
2、ULT的实现
优点:
- 线程切换不需要转换到内核空间。
- 调度算法可以是进程专用的。
- 线程的实现与OS平台无关。
缺点:
- 系统调用的阻塞问题。
- 多线程应用不能利用多处理机进行多重处理的优点。