计算机操作系统(第四版) 第二章 进程的描述与控制(前四节)

1 引言

    今天整理的内容是计算机操作系统(第四版)第二章前四节的内容。分别是前趋图和程序执行、进程的描述、进程控制、进程同步。开始!

2 前趋图和程序执行

2.1 前趋图

    用于描述程序执行先后顺序。能更好地描述程序的顺序和并发执行情况。

    前趋图(Precedence Graph),是指一个有向无循环图,可记为DAG(Directed Acyclic Graph) 。


2.2 程序顺序执行

1.程序的顺序执行

    通常,一个应用程序由若干个程序段组成,每一个程序段完成特定的功能,它们在执行时,都需要按照某种先后次序顺序执行,仅当前一程序段执行完后,才运行后一程序段。

2.程序顺序执行时的特征

(1)顺序性

每一操作必须在下一个操作开始之前结束

(2)封闭性

    指程序在封闭的环境下运行,即程序运行时独占全机资源,资源的状态(除初始状态外)只有本程序才能改变它,程序一旦开始执行,其执行结果不受外界因素影响

(3)可再现性

    指只要程序执行时的环境和初始条件相同,当程序重复执行时,不论它是从头到尾不停顿地执行,还是“停停走走”地执行,都可获得相同的结果。

2.3 程序的并发执行

1.程序的并发执行

个人理解:多个程序可以并发执行,彼此之间互不干扰。

2.程序并发执行时的特征

(1)间断性(2) 失去封闭性(3) 不可再现性

3 进程的描述

3.1 进程的定义和特征

1.进程的定义

(1) 进程是程序的一次执行。

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

(3) 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。

2.进程的特征

(1) 动态性。进程有生命周期,而程序没有。

(2) 并发性。多个进程可以同时运行。

(3) 独立性。进程独立获取资源。

(4) 异步性。多个进程是独立的,按不可预知的速度运行。

3.2 进程的基本状态及转换

1.进程的三种基本状态

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

(2)执行态:这是指进程已获得CPU,其程序正在执行的状态。

(3)阻塞态(等待状态或封锁状态):这是指正在执行的进程由于发生某时间无法继续执行时的状态,亦即进程的执行受到阻塞。

2.三种基本状态的转换


3.创建状态和终止状态

(1)创建状态

    如果进程的资源尚得不到满足,创建工作尚未完成,进程不能被调度,于是把此时进程所处的状态称为创建状态。

(2)终止状态

    进入终止态的进程以后不能再执行,但在操作系统中依然保留一个记录,其中保存状态码和一些计时统计数据,供其他进程收集。

3.3 挂起操作和进程状态的转换

1.挂起操作的引入

(1) 终端用户的需要。(2) 父进程请求。(3) 负荷调节的需要。(4) 操作系统的需要。

2.引入挂起原语操作后三个进程状态的转换

(1) 活动就绪→静止就绪。(2) 活动阻塞→静止阻塞。(3) 静止就绪→活动就绪。(4) 静止阻塞→活动阻塞。

3.引入挂起操作后五个进程状态的转换

增加考虑下面的几种情况:

(1)  NULL→创建

(2) 创建→活动就绪 

(3) 创建→静止就绪

(4) 执行→终止


3.4 进程管理中的数据结构

1.操作系统中用于管理控制的数据结构

一般分为以下四类:内存表、设备表、文件表和用于进程管理的进程表。

2. 进程控制块PCB的作用

(1)为了描述和控制进程的运行,系统为每个进程定义了一个数据结构——进程控制块PCB(Process Control Block),它是进程实体的一部分,是操作系统中最重要的记录型数据结构。PCB中记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的全部信息。进程控制块的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。

(2)OS是根据PCB来对并发执行的进程进行控制和管理的。

    系统是根据进程的PCB而不是任何别的什么而感知到该进程的存在的。所以说,PCB是进程存在的惟一标志。

(3)PCB可以被操作系统中的多个模块读或者修改

(4)因为PCB经常被系统访问,尤其是被运行频率很高的进程及分派程序访问,故PCB常驻内存。

注:(1)-(4)是上课的笔记,并不是书上的内容,以下是书上的内容。

 (5) 作为独立运行基本单位的标志。

 (6) 能实现间断性运行方式。 PCB中能保存进行运行的上下文。

 (7) 提供进程管理所需要的信息。比如进程用到的资源清单。

 (8) 提供进程调度所需要的信息。

 (9) 实现与其它进程的同步与通信。

3.进程控制块中的信息

(1)进程标识信息 (2)处理机状态信息保护区 (3)进程调度信息 (4)进程控制信息

4.进程控制块的组织方式

(1) 线性方式,即将系统中所有的PCB都组织在一张线性表中,将该表的首址存放在内存的一个专用区域中。该方式实现简单、开销小,但每次查找时都需要扫描整张表,因此适合进程数目不多的系统。

(2) 链接方式,即把具有相同状态进程的PCB分别通过PCB中的链接字链接成一个队列。

(3) 索引方式,即系统根据所有进程状态的不同,建立几张索引表。

4 进程控制

    进程控制是进程管理中最基本的功能,主要包括创建新进程、终止已完成的进程、将因发生异常情况而无法继续运行的进程置于阻塞状态、负责进程运行中的状态转换等功能。进程控制一般是由OS的内核中的原语来实现的。

4.1 操作系统内

      目的:为了防止OS本身及关键数据(如PCB)遭受到应用程序有意无意的破坏,将处理机的执行状态分为系统态和用户态:1. 系统态:具有较高的特权,能执行一切指令,能访问所有寄存器和存储区,传统的OS都在系统态运行。2. 用户态:具有较低的特权,仅能执行规定的指令,访问规定的寄存器和存储区。一般情况下,应用程序只能运行在用户态,不能去执行OS指令及访问OS区域。

1. 支撑功能

(1) 中断处理。(2) 时钟管理。(3) 原语操作。

 2. 资源管理功能 (1) 进程管理。(2) 存储器管理。(3) 设备管理。

4.2 进程的创建

1. 进程的层次结构

    在OS中,允许一个进程创建另一个进程,通常把创建进程的进程称为父进程,而把被创建的进程称为子进程。子进程可继续创建更多的孙进程,由此便形成了一个进程的层次结构。    

2. 进程图

    为了形象地描述一个进程的家族关系而引入了进程图(Process Graph)。所谓进程图就是用于描述进程间关系的一棵有向树。


3. 引起创建进程的事件

(1)用户登录 (2)作业调度 (3)提供服务 (4)应用请求

4.进程的创建

(1) 申请空白PCB,为新进程申请获得唯一的数字标识符,并从PCB集合中索取一个空白PCB。

(2) 为新进程分配其运行所需的资源,包括各种物理和逻辑资源,如内存、文件、I/O设备和CPU时间等。

(3) 初始化进程控制块(PCB)。

(4) 如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列。

4.3 进程的终止

1.引起进程终止的事件

(1)正常结束 (2)异常结束 (3)外界干预

2.进程的终止过程

4.4 进程的阻塞与唤醒

1. 引起进程阻塞和唤醒的事件

2. 进程阻塞过程

使用阻塞原语block

3. 进程唤醒过程

使用唤醒原语wakeup

4.5 进程的挂起与激活

1.进程的挂起

使用suspended原语

2.进程的激活过程

使用激活原语active

5 进程同步

5.1 进程同步的基本概念

    同步:并发进程在执行次序上的协调,使并发诸进程能按照一定的规则共享资源和相互合作,使程序执行有可再现性。

1. 两种形式的制约关系

(1)间接相互制约关系(资源共享关系) 需要互斥的访问临界资源

(2) 直接相互制约关系(相互合作的关系)

2.临界资源

一次仅允许一个进程访问的资源。

 引起不可再现性是因为临界资源没有互斥访问。

3.临界区

人们把在每个进程中访问临界资源的那段代码称为临界区。

4.同步机制应遵循的原则

(1) 空闲让进。(2) 忙则等待。(3) 有限等待。应保证为有限等待,不会产生死等。(4) 让权等待。不能进入临界区的执行进程应放弃CPU执行权。

5.2 硬件同步机制

1. 关中断 2. 利用Test-and-Set指令实现互斥 3.利用Swap指令实现进程互斥。

5.3 信号量机制(重点)

1.整型信号量

S:资源的数目

S--:资源的数目减一

wait(P)操作:执行P操作,S减一,当S<=0时,执行P操作的进程需要睡眠,因为没有资源。

signal(V)操作:执行V操作,S加一,当S<=0时(表示还有进程在等待),唤醒一个等待的进程。

2.记录型信号量

(1)名称来源

由于它采用了记录型的数据结构而得名

(2)value:资源数目的整型变量

(3)list:进程链表指针,用于链接所有等待该类资源的进程。

wait(semphore *S)

{

    S->value--;//使系统中可供分配的该类资源数目减1,

     if (S->value <0) //说明该类资源已经分配完毕

     block (S->list);//自我阻塞,将该进程进入到阻塞队列

}

signal (semphore *S)

{

    S->value++;//进程释放一个资源

     if (S->value <=0) //链表里有进程阻塞在该资源上

    wakeup(S->list);//唤醒链表里面一个阻塞的进程

}

3.  AND型信号量

    思想:将进程在整个运行过程中需要的所有资源,一次性全部地分配给进程,待进程使用完后再一起释放。

4. 信号量集

    在前面所述的记录型信号量机制中,wait(S)或signal(S)操作仅能对信号量施以加1或减1操作,意味着每次只能对某类临界资源进行一个单位的申请或释放。当一次需要N个单位时,便要进行N次wait(S)操作,这显然是低效的,甚至会增加死锁的概率。此外,在有些情况下,为确保系统的安全性,当所申请的资源数量低于某一下限值时,还必须进行管制,不予以分配。因此,当进程申请某类临界资源时,在每次分配之前,都必须测试资源的数量,判断是否大于可分配的下限值,决定是否予以分配。

5.4 信号量的应用

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

2. 利用信号量实现前趋关系

5.5 管程机制

6 结束语

    拜拜,我去看书啦!

分享和帮助是人生一大乐事,希望可以帮助您。本人才疏学浅,如果有不当之处,还请批评指正。同时欢迎大家评论、点赞及转发!

猜你喜欢

转载自blog.csdn.net/chen_yongbo/article/details/79836441