文章目录
前趋图和程序执行
1.程序顺序执行时的特征
- 顺序性:处理机的操作严格按照程序所规定的顺序执行
- 封闭性:程序一旦开始执行,其执行结果不受外界因素影响
- 可再生性:程序执行的结果与它的执行速度无关(即与时间无关),而只与初始条件有关。
2.前驱图
- 前驱图是一个有向的无循环图。
3.程序并发执行的特征
- 间断性:相互制约将导致并发程序具有“执行—暂停—执行”这种间断性的活动规律。
- 失去封闭性:程序在并发执行时,系统的资源状态由多道程序来改变,程序运行失去封闭性。程序的运行受到其他程序的影响。
- 不可再现性:程序在并发执行时,多次运行初始化条件相同的同一程序会得出不同的运行结果。
进程的描述
1.进程的定义
进程:程序关于某个数据集合的一次执行过程。
2.进程的特征
- 结构特征
进程控制块(PCB)+程序+数据=进程实体
- 动态性——最基本特征
进程:进程实体的一次执行过程,有生命周期
程序:程序是一组有序指令的集合,是静态的概念 - 并发性
- 独立性
- 异步性
进程按各自独立的、不可预知的速度向前推进
3.基础的三种基本状态
- 就绪状态(Ready):进程已获取除CPU之外的所有必须的资源,一旦得到CPU控制权,立即可以运行。
- 运行状态(Running):进程已获得运行所必需的资源,它正在处理机上执行
- 阻塞状态(Blocked):正在执行的进程由于发生某种事件而暂时无法执行时,便放弃处理机而暂处于暂停状态,称该进程处于阻塞状态或等待状态。
4.挂起状态
1)引起挂起状态的原因:
- 终端用户的请求
- 父进程请求
- 负荷调节的需要
- 操作系统的需要
2)进程状态的转换
- 活动就绪→静止就绪
- 活动阻塞→静止阻塞
- 静止就绪→活动就绪
- 静止阻塞→活动阻塞
5.进程控制块
-
进程控制块的作用
存放进程管理和控制的数据结构称为进程控制块。它是进程管理和控制的最重要的数据结构,在创建时,创建PCB,并伴随进程运行的全过程,直到进程撤销而撤销。
PCB就像我们的户口
PCB时进程存在的唯一标志 -
进程控制块中的信息
进程标识符
每个进程都必须有一个唯一的标识符
1)内部标识符
2)外部标识符处理机状态
主要由处理机的各种寄存器中的内容组成。处理机运行时的信息存放在寄存器中,当被中断时这些信息要存放在PCB中。
进程调度信息
进程状态
进程优先级
进程调度所需的其他信息
事件进程控制信息
程序和数据的地址
进程通信和同步机制
资源清单
链接指针 -
进程控制块的组织方式
链接方式
把具有统一状态的PCB用其中的链接字链接成一个队列。
1)就绪队列
2)若干个阻塞队列索引方式
系统根据所有进程的状态建立几张索引表,把各表的内存首地址记录在内存的专用单元中
进程控制
进程控制是系统中的全部进程实施有效的管理,包括进程创建、终止、进程阻塞和唤醒。
1.进程的创建
-
进程图:描述进程的家族关系的有向树
-
引起进程创建的事件
1)用户登录
2)作业调度
3)提供服务
4)应用请求提示:原语是由若干个指令组成,能够完成一定功能的程序段。
-
进程的创建:操作系统发现要求创建新进程的事件后,调用进程创建原语Creat()创建新进程,步骤如下:
1)申请空白PCB
2)为新进程分配资源
3)初始化进程控制块
4)将新进程插入就绪队列
2.进程的终止
- 引起进程终止的事件
1)正常结束
2)异常结束:越界错误、非法指令、运行超时等
3)外界干预:操作员或操作系统干预、父进程请求、父进程终止 - 进程的终止过程
1)找出被终止进程的PCB
2)若进程状态为运行态,立即终止该进程的执行,置CPU调度标志为真
3)若该进程还有子孙进程,终止其子孙进程并回收其资源
4)回收被终止进程所拥有的全部资源
5)回收终止进程的PCB
3.进程的阻塞与唤醒
-
引起进程阻塞和唤醒的事件
1)请求系统服务
2)启动某种操作
3)新数据尚未到达
4)无心工作可做 -
进程阻塞过程
1)调用阻塞原语阻塞自己
2)将PCB 中的状态改为阻塞,并加入阻塞队列
3)转进程调度 -
进程唤醒过程
阻塞进程等待的事件发生,有关进程调用唤醒原语wakeup()唤醒等待该事件的进程
1)把阻塞进程从等待该事件的阻塞队列中移出
2)置进程状态为就绪态,将PCB插入到就绪队列中
4.进程的挂起与激活
- 进程的挂起
当出现引起进程挂起的事件时,系统利用挂起原语suspend()将指定进程或处于阻塞的进程挂起。
进程挂起的过程:检查被挂起进程的状态
1)若处于活动就绪,则改为静止就绪
2)若处于活动阻塞,则改为静止阻塞
3)若挂起的进程正在执行,则重新进行进程调度
- 进程的激活
当发生激活进程的事件时,系统利用激活原语active()将指定进程激活
进程激活过程
1)激活原语先将进程从外存调入内存
2)检查该进程的状态
若为静止就绪,则改为活动就绪
若为静止阻塞,则改为活动阻塞
进程同步
1.进程同步的基本概念
-
进程间两种形式的制约关系
1)间接相互制约关系——源于资源共享
2)直接相互制约关系——源于进程合作 -
临界资源
临界资源(Critical Resource):把一段时间内只允许一个进程访问的资源称为临界资源或独占资源
临界区(Critical Section):每个进程中访问临界资源的那段代码称为临界区 -
同步机制应遵循的规则
空闲让进
忙则等待
有限等待
让权等待
2.信号量机制
信号量就是OS提供的管理公有资源的有效手段
信号量代表可用资源实体的数量
-
整形信号量
定义:把整形信号量定义为一个用于表示资源数目的整形量S,除初始化外,仅能通过两个标准的原子操作wait(S),signal(S)来访问
-
记录型信号量(重点)
引入整形变量value(代表资源数目)、进程链表L(链接所有等待进程)
-
AND型信号量
两个进程A和B,共享数据D和E,为其分别设置互斥信号量Dmutex和Emutext,初始值均为1
AND同步机制的基本思想:将进程在整个运行过程中需要的所有资源,一次性全部分配给进程,待进程使用完再一起释放。只要有一个资源未分配给进程,其他所有可能为之分配的资源,也不分配给它。即对临界资源的分配采用原子操作。称为同时wait()操作即Swait()。
-
信号量集
记录型信号量机制:
1)每次只能获得或释放一个单位的资源,低效
2)每次分配前必须测试资源数量,看其是否大于其下界值对AND信号量机制加以扩充
一般信号量集的几种特殊情况:
1)Swait(S,d,d),只有一个信号量S,允许每次申请d个资源,若现有资源数少于d,不予分配
2)Swait(S,1,1),蜕化为一般的记录型信号量(S>1时)或互斥信号量(S=1时)
3)Swait(S,1,0),当S>=1时,允许多个进程进入某特定区,当S变成0后,阻止任何进程进入特定区,相当于可控开关。
3.信号量的应用
-
利用信号量实现进程互斥
为使多个进程互斥的访问某临界资源,须为该资源设置一互斥信号量mutex,并设其初始值为1,然后将个进程访问资源的临界区CSwait(mutex)和signal(mutext)之间即可。
-
利用信号量实现前驱关系
设有两个并发执行的进程P1和P2,P1中有语句S1,P2中有语句S2,希望再S1执行后再执行S2。
使进程P1和P2共享一个公用信号量S,并赋予其初值为0。
代码实现
-
利用记录型信号量实现同步
P1,P2两进程因合作完成一项任务而共用一个变量x。
进程P2将处理结果送入x;进程P1将x的 结果打印
经典进程的同步问题
1.生产者—消费者问题
1.利用记录型信号量解决生产者—消费者问题
可利用互斥信号量mutex实现进程对缓冲池的互斥使用;
利用信号量empty和full分别表示缓冲池中空缓冲池和满缓冲池的数量。
2.利用AND信号量解决生产者—消费者问题
2.哲学家进餐问题
1.至多只允许有四位哲学家同时拿他左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用完时释放出他用过的两只筷子,从而使更多的哲学家能够进餐。
2.仅当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐。
利用AND信号量机制解决,在哲学家进餐问题中,要求每个哲学家先获得两个临界资源后方能进餐。本质上是AND同步问题。
3.规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子,而偶数号哲学家则相反
3.读者—写者问题
1.利用记录信号量
互斥信号量wmutex: 实现Reader与Writer进程间在读或写时的互斥,整型变量Readcount: 表示正在读的进程数目;
由于只要有一个Reader进程在读,便不允许Writer进程写。所以,仅当Readcount=0,即无Reader进程在读时,Reader才需要执行Wait(wmutex)操作。若Wait(wmutex)操作成功,Reader进程便可去读,相应地,做Readcount+1操作。
同理,仅当Reader进程在执行了Readcount减1操作后其值为0时,才需执行signal(wmutex)操作,以便让Write进程写
互斥信号量rmutex: Reader进程间互斥访问Readcount
2.利用信号量集机制
进程通信
进程通信:指进程之间的信息交换
- 低级通信:进程间仅交换一些状态和少量数据。如进程之间的互斥和同步。
信号量机制作为通信工具的缺点 :
1)效率低
2)通信对用户不透明 - 高级通信:进程间可交换大量数据。用户可直接利用操作系统提供的一组通信命令,高效地传送大量数据的一种通信方式。
操作系统隐藏了进程通信的细节,对用户透明,减少了通信程序编制上的复杂性。
1.进程通信的类型
1)共享存储器系统
2)消息传递系统
3)管道通信系统
4.客户机—服务器系统
2.消息传递通信的实现方法
进程间通信时,源进程可以直接或间接地将信息传送给目标进程,由此可将进程通信分为直接通信和间接通信。
- 直接通信方式:发送进程利用OS提供的发送命令,直接把消息发送给目标进程。发送进程和接收进程都以显式方式提供对方的标识符。
2.间接通信方式—通过信箱通信
信箱用来暂存发送进程发送给目标进程的消息,接收进程则从信箱中取出发送给自己的消息。
消息在信箱中可安全保存,只允许核准的目标用户随时读取利用信箱通信方式,既可实时通信,又可非实时通信。
3.消息传递系统实现中的若干问题
4.消息缓冲队列通信机制
线程的基本概念
1.线程的引入
-
进程的两个基本属性
1)进程是一个可以拥有资源的独立单位
2)进程是一个可以独立调度和分配的基本单位
由此,是进程成为了能独立运行的基本单位,构成了进程并发执行的基础 -
程序并发执行所需付出的时空开销
进程拥有资源是进程的创建、撤销和调度付出较大的时空开销。这就限制了系统中所设置进程的数目, 而且进程切换也不宜过于频繁,从而限制了并发程度的进一步提高。
因此,将进程的两个属性有系统分开处理,用线程作为独立调度和分配的基本单位 -
线程—作为调度和分配的基本单元
1)轻型实体
2)独立调度和分派的基本单元
3)可并发执行
4)共享进程资源
2.线程与进程的比较
- 线程具有许多传统进程所具有的特征,所以称之为轻型进程。可通过以下几个方面对进程和线程进行比较
1)调度的基本单位
2)并发性
3)拥有资源
4)独立性
5)系统开销
6)支持多处理机系统
3.线程的状态和线程控制块
-
线程运行的三个状态
1)执行状态
2)就绪状态
3)阻塞状态 -
多线程控制块TCB
线程控制块TCB,用于记录所有用于控制和管理线程的信息
-
多线程OS中的进程属性
1)进程是一个可拥有资源的基本单位
2)多个线程可并发执行
3)进程已不是可执行的实体