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 结束语
拜拜,我去看书啦!
分享和帮助是人生一大乐事,希望可以帮助您。本人才疏学浅,如果有不当之处,还请批评指正。同时欢迎大家评论、点赞及转发!