目录
1、前趋图
前趋图用于描述进程执行先后顺序。是一个有向无环图,可记为DAG图,它用于描述进程之间执行的先后顺序。图中的每个节点表示一个进程或程序段,结点间的有向边则表示里两个节点之间存在的偏序关系或前趋关系。
2、程序的顺序执行与并发执行
通常一个程序由若干个程序段组成,每一个程序段完成特定的功能,如上前趋图所示:P1->P2->P5->P7是一个顺序执行的过程,而P2,P3,P4是并发执行的。
3、进程的定义
- 进程是程序的一次执行
- 进程是一个程序及其数据在处理及上顺序执行时所发生的活动
- 进程是具备独立功能的程序在一个数据集合上运行的过程,他撒是系统进行资源分配的一个独立单位。
一个程序可以包含多个进程。
4、进程的状态及转换
三种基本状态:
- 就绪状态(Ready)
- 执行状态(Running)
- 阻塞状态(Block)
此外还有创建状态,终止状态。
5、PCB及其组织方式
在计算机系统中。对于每个资源和每个进程都设置了一个数据结构。用于表征其实体。我们称之为资源信息表或进程信息表,其中包含了资源或进程的标识、描述、状态等信息以及一些指针。OS管理的这些数据结构一般的分为四大类:内存表、设备表、文件表和用于进程管理的进程表,通常进程管理表被称为PCB。
进程信息表PCB使一个在多道程序环境下不能独立运行的程序(含数据)成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。
PCB的组织方式:
(PCB通常是系统内存占用区中的一个连续存区)
1、线性方式
把所有PCB组织在一张线性表中,将该表的首地址存放在内存的一个专用区域中,
每次查找是需要扫描全表,适用于系统中进程数目不多的情况。
2、链接方式
把具有同一状态的 PCB,用其中 的链接字链接成一个队列,PCB存储在一个连续的存区。
3索引方式
各个索引表在内存单元中的首地址也记录在内存中的专用单元中,
用添加索引表的方式记录具有相应状态下的某个PCB在PCB表中的地址。
6、进程控制
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现 进程状态转换等功能。 简化理解:进程控制就是要实现进程状态转换。
进程控制一般通过OS中的原语实现。包括:进程创建原语、进程终止原语、进程阻塞原语、进程唤醒原语、进程切换原语。
进程创建:
进程终止:
进程阻塞与唤醒:
进程切换:
学习技巧:
进程控制会导致进程状态的转换。无论哪个进程控制原语,要做的无非三类事情:
1. 更新PCB中的信息
a. 所有的进程控制原语一定都会修改进程状态标志
b. 剥夺当前运行进程的CPU使用权必然需要保存其运行环境
c. 某进程开始运行前必然要恢复期运行环境
2. 将PCB插入合适的队列
3. 分配/回收资源
7、进程同步
进程同步机制的主要任务,是对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能按照一定的规则(或时序)共享系统资源,并能很好地相互合作,从而使进程序的执行具有可再现性。
进程同步与互斥(两种制约关系)
进程互斥:
多个程序并发执行时,由于共享系统资源,如CPU,I/O设备等,只是在这些并发执行的程序之间形成相互制约的关系。对于打印机,磁带机等临界资源,必须保证多个进程对之只能互斥的访问,由此,在这些进程间形成了源于对该类资源共享的所谓间接制约关系。
即间接制约关系来自于不同进程对临界资源的访问。
注意只有临界区的代码才访问临临界资源。
同步机制须遵循的原则:
(1)空闲让进;(2)忙则等待;(3)有限等待;(4)让权等待
使用硬件方法实现进程互斥:
为什么需要这个过程?
在进入临界区之前,需要对锁进行测试,当锁未开时,则必须等待,直至锁被打开。反之当锁被打开时,则应立即把锁锁上,阻止其他进程进入临界区。为了防止多个进程同时测试到锁打开的情况,测试和关锁操作必须是连续的,不允许分开操作。
“当锁关闭时,则必须等待,直至锁被打开。”由此也可以看出使用硬件方法实现的进程互斥不满足让权等待原则。
1.关中断
在进入锁测试之前关闭中断,直到完成锁测试并上锁之后才能打开中断。这样保证了锁测试和关锁操作一定是连续的。不适用于多CPU系统,因为中断只限制本处理器而不影响其他处理器。
2.利用Test-and-Set指令实现互斥
课本P56
3.利用Swap指令实现互斥
课本P57
进程同步:
某些应用程序,为了完成某一任务而建立了两个或多个进程。这些进程将为完成同一项任务而相互合作。进程间的直接制约关系就是源于它们之间的相互合作。
即直接制约关系来自于相互合作的进程对于执行次序的要求。
总结两种制约关系
8、信号量机制
信号量类型:
使用实现进程互斥,同步与前趋:
P操作:申请一个资源S,若资源不够就阻塞等待,并放入该资源S的等待队列
V操作:释放一个资源S,若有进程在等待队列中等待执行,则唤醒该进程
信号量实现进程互斥:
信号量实现进程同步:
信号量实现前趋关系:
信号量机制的使用_总结:
9、管程
管程机制也是实现进程同步及进程互斥的一种方法。
课本:代表共享资源的数据结构以及由对共享数据结构实施操作的一组过程 所形成的资源管理程序共同构成了一个操作系统的资源管理模块,称之为管程。管程被请求和释放资源的进程所调用。
百度百科:管程是由局部于自己的若干公共变量及其说明和所有访问这些公共变量的过程所组成的软件模块。
个人感觉百度定义比较合适,课本定义中的“所形成的资源管理程序”应该是指的管程,管程们构成了OS的资源管理模块,而不是OS的资源管理模块叫管程。
管程由四部分组成:
- 管程的名称
- 局部于管程的共享数据结构说明
- 对该数据结构进行操作的一组过程
- 对局部于管程的共享数据设置初始值的语句
实现进程互斥:
封装于管程内部的数据结构只能被管程内的过程所访问,管程内的过程也只能访问管程内的数据结构。管程每次只准许一个进程进入管程,执行管程内过程,从而实现了管程互斥。
实现进程同步:
在利用管程实现进程同步时,必须设置同步工具,如两个同步操作原语wait和signal。当某进程通过管程请求某事件P(获得临界资源或某种其他进程的结果等)而未获得满足时,管程便调用wait原语使该进程阻塞,并将其排在等待队列中,当事件P被释放时,管程再调用signal原语,唤醒等待队列中的队首元素。这个等待队列就是一个条件能量condition,每个条件变量也是一种抽象数据类型,其保存一个链表,在一个管程中可以有多个条件变量。