操作系统原理——第二章 进程管理

为什么会有进程?

        程序的概念不够用了,所以出现了进程的概念。我们需要一个能够描述执行过程中的程序的概念,所以进程应运而生

##  进程是程序的一次执行(是执行中的程序)##

程序执行方式:

        顺序执行---单道批处理系统

        并发执行---多批道处理系统

        应用级并发---若干应用程序的并发执行

        系统级并发---操作系统自身软件的并发执行

前趋图:

        前趋图是一个有向无循环图,记为DAG,用于描述进程之间执行的前后关系

        图中的每个节点可以用于表示一条语句、一个程序段;结点间的有向边表示在两个结点之间存在的前趋关系

        在前趋图中,把没有前趋的结点叫做初始结点,把没有后继的结点称为终止结点

程序的顺序执行及其特征:

        若一个程序有若干程序段组成,而这些操作必须按照某种先后次序执行,这类执行过程就是程序的顺序执行

        特征:顺序性;封闭性;可再现性

程序的并发执行及其特征

        程序的并发执行

        特征:间断性;失去封闭性;不可再现性

进程的描述:

        在多道程序环境下,允许多个程序并发执行;正是程序并发执行时的特征,才导致操作系统引入进程的概念

进程的典型定义:

        进程是程序的一次执行

        进程是一个程序及其数据在处理机上顺序执行时所发生的活动

        进程是程序在一个数据集合上运行的过程,他是系统进行资源分配和调度的一个独立单位

进程的定义:

        为了使程序(含数据)能够独立运行,应为之配置一个专门的数据结构即进程控制块(PCB)

        由程序段、相关的数据段和PCB三部分构成了进程实体

        创建进程,实质上是创建进程实体中的PCB;撤销进程,实质上是撤销进程的PCB

## 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位 ##

进程的特征:

        动态性:

                进程的实质是进程实体的一次执行过程,因此,动态性是进程的最基本的特征。

                动态性的表现:它由创建而产生,由调度而执行,由撤销而消亡

                程序是一组有序指令的集合,其本身并不具有运动的含义,因为是静态的

        并发性:

                多个进程实体同存于内存中,且能在一段时间内同时运行

        独立性:

                进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位

        异步性:

                进程按各自独立的不可预知的速度向前推进,或说进程实体按异步方式运行

进程的三种基本状态:

        就绪状态:当进程已经分配到除CPU以外的所有必要资源后,只要在获得CPU,便可立即执行

        执行状态:进程已经获得CPU,其程序正在执行

        阻塞状态:正在执行的进程由于发生某事件而暂时无法继续执行时,便放弃处理机而处于暂停状态,把这种暂停状态称为阻塞状态,有时也称为等待状态

进程的五种状态:

        进程的三种基本状态:就绪状态,执行状态,阻塞状态

        创建状态:当一个进程各个建立,还未将其放入就绪队列时的状态

        中止状态:当一个进程已经正常结束或异常结束,操作系统已将其从系统队列中移除,但未撤销时的状态

               

挂起状态:

        当出现了引起进程挂起的事件时,用户请求将自己挂起,或者父进程请求挂起自己的子进程,这时使用“挂起原语” 若活动处于就绪状态就改变为禁止就绪;若活动处于活动阻塞状态就改为静止阻塞

        当发生激活事件后,系统利用“激活原语”将指定进程激活。激活原语将进程从外村调入内存,然后检查进程状态

造成挂起状态的原因:

        终端用户请求

        父进程请求

        负荷调节的需要。当实时系统中的工作负荷较重,把一些不重要的进程挂起,以保证系统正常运行

        操作系统的需要。操作系统有时希望挂起某些进程,以便检查运行中的资源使用情况或进行记账

被挂起进程的特征:

        不能立即执行

        可能时等待某件事件发生,若是,则阻塞条件独立于挂起条件,即使阻塞事件发生,该进程也不能执行

        使之挂起的进程为:自身、其父进程、OS

        只有挂起它的进程才能使之由挂起状态转换为其他状态

可执行程序和进程的区别:

        程序是永存的;进程是暂时的,是程序在数据集上的一次执行,有创建有撤销,存在时暂时的;

        程序是静态的观念,进程是动态的观念

        进程具有并发性,而程序没有

        进程是竞争计算机资源的基本单位,程序不是

        进程和程序不是一一对应的---一个程序可以对应多个进程,即多个进程可以执行同一程序;一个进程页可以执行一个或多个程序

##  操作系统维护的基本信息可以分为四类:存储器、设备、文件、进程  ##

## 进程是操作系统中最基本、最重要的概念,多道程序出现后为了刻画程序执行的动态情况,描述运行程序的活动规律而引入进程

进程最少必须摆阔一个或一组被执行的程序,以及与这些程序相关联的局部变量、全局变量和任何已定义的常量的数据单元

属于一个进程的程序、数据、栈和属性的集合称为进程映像 ##

进程控制块的作用:

        进程控制块的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位——进程

        在进程的整个生命周期中,操作系统总是通过PCB对进程进行控制的

        所以PCB是进程存在的唯一标志

##  进程控制块--常驻内存 ##

##  OS是根据PCB来对并发执行的进程进行控制和管理的  ##

进程控制块中的信息:

        进程标识符信息:

                内部标识符:为每一个进程赋予一个唯一的数字标识符,通常是进程的序号。设置内部标识符主要是为了方便操作系统使用

                外部标识符:它由创建者提供,通常是由字母、数字组成,往往是由用户(进程)在访问该进程时使用

        处理器状态信息

                通用寄存器,又称为用户可视寄存器

                指令计数器(PC),其中存放了要访问的下一条指令的地址

                程序状态字(PSW):其中含有状态信息,如条件码、执行方式、中断屏蔽标志....

                用户栈指针(SP):用于存放系统调用参数及调用地址。栈指针指向该栈的栈顶

        进程调度信息

                进程状态

                 进程优先级

                进程调度所需的其他信息

                事件,即阻塞原因    

        进程控制信息

                程序和数据的地址

                程序同步和通信机制

                资源清单

                链接指针

进程控制块的组织方式

        线性方式:系统中所有的PCB都组织在一张线性表中

        链接方式:把具有同一状态的PCB,其中的链接指针链接成一个队列

        索引方式:相同状态的进程PCB组织在一张表格中,系统根据所有进程的状态建立几张索引表,系统分别记载各PCB表格的起始地址

##  比较链接与索引两种方式的特点,链接方式是插入和删除操作很方便,查找速度慢;索引方式查找速度快,但因为索引表是线性的,因此插入和删除操作麻烦。

因为进程的主要操作就是插入和删除,因此,链接方式使用更多一些  ##

##  进程控制:创建一个新的进程,终止进程;进程运行中的状态转换;

进程控制一般是由OS内核中的一组原语来实现  ##

原语:

        操作系统内核或微核提供核外调用的过程或函数称为原语

        原语是由若干条指令构成,用于完成特定功能的一段程序

        原语在执行过程不允许被中断

原子操作:

        执行中不能被其他进程(线程)打断的操作就叫原子操作

        当该次操作不能完成的时候,必须回到操作之前的状态,原子操作不可拆分

操作系统的内核:

        内核是计算机硬件的第一层扩充软件,为系统对进程控制、存储器管理等提供有效的机制。

        内核常驻内存,紧靠硬件,运行效率比较高

        为了防止OS及关键数据如PCB等受到用户程序有意或无意的破坏,通常将处理机的执行状态划分为两种:系统态和用户态

##  系统态:也叫做“核心态”或“管态”,OS运行的状态,能执行一切指令,访问所有的寄存器和存储器。  ##

##  用户态:用户程序执行的状态,只能执行规定的指令,访问规定的寄存器和存储区  ##

CPU 有两种工作模式

        特权模式&用户模式

        只有操作系统能够工作在特权模式上,这个模式可以直接访问硬件,执行特权指令

        用户程序都工作在用户模式,在这种模式工作的CPU只能执行基本的指令,当用户程序想干些关键的操作时,他会向操作系统请求,由操作系统帮他完成,即“系统服务”

##  进程划分为两大类:系统进程——只运行在内核模式,执行操作系统代码;另一类是用户进程  ##

内核的一般功能

        支撑功能:中断处理、时钟管理、原语操作

        资源管理功能:进程管理、存储器管理、设备管理

引起创建进程的事件

        用户登录

        作业调度

        提供服务(例如:I/O请求)

        应用请求(基于应用进程的需求,由他自己创建一个新的进程,以便新进程以并发运行方式完成特定任务

调用进程创建原语的步骤

        1.申请空白PCB

        2.为新进程分配资源

        3.初始化进程控制块:

                a.初始化标识信息

                b.初始化处理机状态信息。

                c.初始化处理机控制信息

        4.将新进程插入就绪队列

引起进程终止的事件

        正常结束

        异常结束:越界错误、保护错误、非法指令、特权指令错误、运行超时、等待超时、算术运算错误、I/O故障

        外界干预:操作员或系统干预;父进程请求终止该进程;父进程终止时,OS也将他的所有子孙进程终止

进程终止过程

        1.根据被终止的进程的PID找到他的PCB,从中读出该进程的状态

        2.若被终止进程正处于执行状态,应该立即终止该进程的执行,重新进行调度

        3.若该进程还有子孙进程,将立即终止其所有的子孙进程

        4.将被终止进程的所有资源,归还给父进程,或者系统

        5.将被终止进程的PCB从所在队列中移除

引起进程阻塞的原因

        1.请求系统服务

        2.启动某种操作

        3.新数据尚未到达

        4.无新工作可做

进程的阻塞过程

        1.正在执行的进程,当发现上述某事件的时候,由于无法继续执行,于是进程便通过调用阻塞原语把自己阻塞

        2.把进程控制块中的现行状态由“执行”改为阻塞,并蒋PCB插入阻塞队列

        3.转调度程序进行重新调度,将处理机分配给另一个就绪进程,并进行切换

进程的唤醒过程

        1.当被进程所期待的事件出现时,则由有关进程调用唤醒原语,将等待该事件的进程唤醒

        2.唤醒原语的执行过程:把被阻塞的进程从等待该事件的阻塞队列移除;将其PCB中的现行状态改变;将PCB插入就绪队列中等待调度

进程的挂起

----当出现引起进程挂起的事件时,系统利用挂起原语将指定进程或者处于阻塞状态的进程挂起(挂起时主动行为)

挂起原语的执行过程

        1.检查将要被挂起的进程的状态

        2.若状态为“执行”:则改为静止就绪,设置CPU调度标志为“真”

        3.若状态为“活动就绪”:则改为“静止就绪”

        4.若状态为“活动阻塞”:则改为“静止阻塞”

        5.将被挂起的进程PCB复制到指定区域

        6.若处于运行状态,则转向调度程序重新调度

挂起与阻塞

        不同点

                1.对系统的占用不同:阻塞仍在内存;挂起处于外存

                2.发生时机不同:阻塞一般是因为等待资源;挂起一般时用户与系统需要

                3.恢复时机不同:阻塞在资源满足时进入就绪;挂起在时机合适时重新激活

        共同点

                1.进程都暂停

                2.进程都释放CPU,即两个过程都涉及上下文切换

进程的激活

        1.当发生激活进程的事件时,系统将利用激活原语将指定进程激活

        2.激活分类:静止就绪——活动就绪;精致阻塞——活动阻塞

        3.检查是否要进行重新调度

##    一个进程只能解挂自己的子孙进程,而不能解挂其他进程    ##

##    创建、终止(自己)、挂起(自己)、激活、阻塞、唤醒都可能会产生新的调度    ##

##    进程可以自己阻塞,自己挂起    ##

进程的同步

        每一个进程具有顺序性,但是在多道程序设计系统中,多个进程要竞争,轮流占用处理器

进程的并发

        在一个进程的工作没有完成之前,另一个进程就可以开始工作,这些进程称为可以共同执行的或具有并发性的,且把这些可以同时执行的进程叫做并发进程

        无关:一个进程的执行不影响另一进程的执行结果,也不依赖另一个进程的进展情况,各自独立

        有交互:一个进程的执行依赖其他进程的进展或者意向其他进程的结果

并发进程之间的关系

        进程互斥:多个进程不能同时使用同一资源,某个进程使用该资源,其他进程必须等待

        进程同步:多个进程的调用存在时序关系;某些进程的执行必须先于另一些进程

        进程通信:多个进程间传递消息

临界区使用原则(互斥条件)

        空闲让进:如果临界区空闲,则只要有进程申请就可以立即进入

        忙则等待:每次只允许有一个进程在临界区

        有限等待:进程只能在临界区逗留有限的时间

        让权等待:当进程不能进入自己的临界区时,要立即释放处理机,以免进程处于忙等

信号量实现同步的基本原理

        两个或者多进程可以通过传递信号进行合作,可以迫使进程在某个位置暂停执行,直到他收到一个可以“向前推进”的信号;相应的,将实现信号灯作用的变量称为信号量

信号量的分类

        互斥信号量:用于申请获释放资源的使用权,常初始化为1

        资源信号量:用于申请或归还资源,可以初始化为大于1的正整数,标识某资源的个数

按照信号量机制的发展分为

        整形信号量:定义为一个政协量,用来表示空闲资源的数目,仅能通过wait(s)和signal(s)来访问(上述原语必须成对的使用,保持次序正确)

        记录型信号量:记录型信号量是一种不存在“忙等”现象的进程同步机制

        AND型信号量:基本思想是将进程在整个运行过程中所需要的所有资源,一次性的分配给进程,待进程使用完后再一起释放只要有一个资源不能分配给进程,其余所有可能为他分配的资源都不能分配给他;要么全给,要么全不给(可以称为同时wait操作)

        信号量集:可以分配多个单位的资源,即+n或-n

wait(s)

        用于申请资源或使用权,进程执行wait原语时,可能会阻塞自己(P操作)

signal(s)

        用于释放资源或归还资源使用权,进程执行signal原语时,有责任唤醒一个阻塞进程(V操作)

信号量的物理意义

        s.value>0:表示还可以执行wait(s)而不会阻塞的进程数(可用资源数);执行一次wait就意味着分配一个单位的资源

        s.value<=0:表示已无资源可用,用词请求该资源的进程会被阻塞;执行一次signal就意味着释放一个单位的资源

        s.value的取值范围:

                仅有两个并发进程共享临界资源时,取值为:-1、0、1

                实现n个进程的互斥时,取值为1~-(n-1)

信号量的应用

        1.利用信号量实现进程互斥

        2.利用信号量来描述前趋合作关系(前趋关系—并发执行的P1和P2,分别由代码C1和C2,要求C1在C2开始前完成;为每个前趋关系设置一个互斥信号量S12,其初始值为0)

       

硬件同步机制

        利用计算机硬件指令解决临界区问题

                对临界区管理将标识看作一个锁,锁开-进入、锁关-等待

                初始打开,每个进入临界区的进程必须对锁进行测试

                测试和关锁操作必须连续(即二者是一个原子操作)

        1.关中断

                a、中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理实践,使得CPU暂时中断当前正在执行的程序转而去执行相应的事件处理程序,待处理完后有返回原本的中断继续执行或调度新的进程执行的过程

                b、开中断是指系统可以连续运行时中断,去运行中断服务函数

                c、关中断就是指关闭系统中断,系统不想要其他的中断,不允许系统打断连续的运行

                优点:实现互斥的最简单方式之一

                缺点:滥用中断会导致严重后果;关中断时间过长会影响系统效率;不适用于多CPU系统

        2.利用Test-and-Set指令实现互斥

        3.利用Swap指令实现进程互斥

管程

       管程也是一种进程同步的机制

生产者/消费者问题

哲学家就餐问题

读者/写者问题

进程通信的方法

        低级通信:进程之间的互斥同步,由于其所交换的信息量少,所以叫低级通信

        高级通信:是指用户可直接利用操作系统所提供的一组通信命令高效的传送大量数据的一种通信方式

低级通信-信号量机制

        信号量机制作为同步工具卓有成效,但作为通信工具不够理想

        原因有:效率低下;通信对用户不透明

常用的高级进程通信机制

        共享存储器系统:在内存中分配一片空间作为共享存储区

        管道通信:写者向管道文件中写入数据;读者从该文件中读取数据

        消息传递系统:以消息为单位在进程间进行数据交换

                直接通信方式

                间接通信方式

        客户机--服务器系统

共享存储器系统

        基于共享数据结构的通信方式

                诸进程共用某些数据结构,借以实现诸进程间的信息交换

                例如在生产者-消费者问题中,就是用有界缓冲区这种数据结构来实现通信的。这种通信方式是低效的,只是用于传递少量的数据

        基于共享存储区的通信方式

                进程在通信前像操作系统申请共享存储区中的一个分区

                然后,申请进程把获得的共享存储分区连接到本进程上,此后便可像读/写普通存储器一样的读/写共享存储分区

                该方式下,通信进程之间的同步于互斥访问共享存储区由进程负责

管道通信

        所谓管道,是指用于连接一个读进程和一个写进程以实现题目之间通信的一个共享文件,又名pipe文件

        向管道提供输入的发送进程,以字符流形式将大量数据送入管道

        接受管道输出的接收进程,则从管道中接收数据。由于发送进程和接受进程是利用管道进行通信的,故又称为管道通信

        这种方式首创于UNIX系统,由于它能有效的传送大量数据,因而又被引入到许多其他操作系统中

##  管道机制必须提供以下三个方面的协调能力  ##

## 互斥:即当一个进程正在对pipe执行读/写操作时,其他进程必须等待  ##

##  同步:指当输入进程把一定数量的数据写入pipe,便于睡眠等待,直到输出进程取走数据后,再把他唤醒。当读进程读空pipe时,也应该睡眠等待,直至写进程将数据写入管道后

##  确定对方是否存在,只有对方存在才能够通信  ##

消息传递系统

        应用最广泛的进程通信机制,进程间数据交换以格式化的信息为单位, 程序员用原语完成,细节被隐藏,简化了编程复杂性,可以满足多处理机os、分布式os、计算机网络的通信要求

        实现方法:

                直接通信

                        这是指发送进程利用OS所提供的发送命令,直接把消息发送给目标进程。

通常,系统提供下述两种类型的通信命令(原语):对称寻址方式;非对称寻址方式

                间接通信

                        实例:信箱(私用、公用、共享)——进程可利用信箱创建原语来建立一个新信箱。创建者进程应给出信箱名字、信箱属性(公用、私用或共享);对于共享信箱,还应给出共享者的名字。当进程不再需要读信箱时,可用信箱撤消原语将之撤消。当进程之间要利用信箱进行通信时,必须使用共享信箱,并利用系统提供的下述通信原语进行通信。
Send(mailbox, message); 将一个消息发送到指定信箱;
Receive(mailbox, message); 从指定信箱中接收一个消息;

                        信箱通信的四种关系:一对一、多对一、一对多、多对多

线程:

        进程的概念体现了:资源所有权、调度/执行者两大特点,一般来说调度与分派的部分称为线程或是轻型进程

        进程 = 资源 + 指令执行

        线程: 保留了并发的优点,避免了进程的高代价

线程与进程的比较

        线程具有许多传统进程所具有的特征,所以又称为轻型进程(Light-Weight Process) ,相应地把传统进程称为重型进程(Heavy-Weight Process),传统进程相当于只有一个线程的任务

        在引入了线程的操作系统中,通常一个进程都拥有若干个线程,至少也有一个线程。

        线程只拥有少量在运行中必不可少的资源

        进程占用资源多,线程占用资源少,使用灵活

        线程不能脱离进程而存在,线程的层次关系,执行顺序并不明显,会增加程序的复杂度

        线程作为调度和分派的基本单位,而进程作为资源拥有的基本单位。

        在同一进程中,线程的切换不会引起进程的切换

        不仅进程之间可以并发执行,而且在一个进程中的多个线程之间亦可并发执行

        一般而言,线程自己不拥有系统资源(也有一点必不可少的资源),但它可以访问其隶属进程的资源

        同一进程中的不同线程共享进程的内存空间和资源

        同一进程中的不同线程的独立性低于不同进程

        线程的切换只需要保存和设置少量的寄存器内容,不涉及存储器管理方面的操作。

        一个进程分为多个线程分配到多个处理机上并行执行,可加速进程的完成。

线程属性

        轻型实体、独立调度和分派的基本单位、可并发执行、共享进程资源

线程状态

        执行:表示线程正获得CPU而运行

        就绪:表示线程已具备了各种运行条件,一旦获得CPU便可执行

        阻塞:表示线程在运行中因某事件而受阻,处于暂停执行的状态

        

线程的组成

        每一个线程都有一个TCB结构,即线程控制块,用于保存自己的私有信息,主要由:唯一的线程标识符、一组寄存器、线程运行状态、优先级、线程专有存储器、信号屏蔽、两个栈指针

线程与进程操作的比较

线程的创建

        在多线程os环境下,应用程序启动时,通常只有一个初始化线程在执行;需要利用线程创建函数;线程创建函数执行完后,返回一个线程标识符

线程终止

        线程完成工作后自己退出;线程在运行中出现错误或因为某原因被其他线程强行终止

线程间的同步和通信

        互斥锁

                比较简单的、用于实现进程间对资源互斥访问的机制;因为时间空间开销低,所以适用于高频度使用的关键共享数据和程序段;互斥锁有两种状态(开锁、关锁)

        条件变量

                每一个条件变量通常与一个互斥锁一起使用;纯互斥锁用于短期锁定,主要用于保证对临界区的互斥进入,但是条件变量则用于线程的长期等待,直至所等待的资源成为可用的

        信号量机制

                私用信号量:实现同一进程中各线程之间的同步,属于特定的进程所有,os不知道私有信号量的存在

              公用信号量:为实现不同进程间或不同进程中各线程之间的同步;有一个公开的名字供所有进程使用;os为它分配空间;os会帮助回收;是一种比较安全的同步机制 

线程的实现方式

        用户级线程

                仅存在用户空间;这种线程的创建、撤销、线程之间的同步与通信等功能都无需内核来实现;这种线程时与内核无关的;由应用程序完成所有线程的管理;内核不知道线程的存在;线程切换不需要核心态特权;调度算法可以是进程专用的

                优点:切换不调用内核;调度是应用程序特定的可以选择最好的算法;可以运行在任何操作系统上

                缺点:执行一个系统调用时,该线程及其所属进程内的所有线程都会被阻塞;多线程应用不能利用多处理机进行多重处理

        内核支持线程

                无论是用户进程中的线程,还是系统进程中的线程,他们的创建、撤消和切换等,是依靠内核实现的。在内核空间中为每一个内核支持线程设置了一个线程控制块TCB, 内核是根据该控制块而感知某线程的存在的,并对其加以控制。

                所有线程管理由内核管理;无线程库,但是内核提供API;线程的创建、撤销是依靠内核实现的;线程之间的切换需要内核支持;以线程为基础进行调度;内核时根据每个线程的控制块来控制线程的

                优点:可以同时调度同一进程的不同线程;进程中的一个线程被阻塞可以运行其他线程;线程切换快,开销小;提高系统执行速度合并效率

                缺点:模式切换的开销较大,用户进程的线程在用户态运行,而线程调度和管理是在内核实现的

        组合方式(用户级+内核支持)      

三个实现方案的对比

采用线程的优点

        创建事件远远小于创建进程

        终止线程所花费的事件更少

        线程之间的切换花费时间少

        提高了通信效率,对于同一进程的不同线程无需调用内核就可以相互通信

线程总结

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值