操作系统第二篇【进程管理】
进程的概述
首先,我们要明白一点:程序不能独立运行,作为资源分配和独立运行的单位是进程。操作系统所具有的四大特征也都是基于进程而形成的。
学习进程的前提:
前面也讲了操作系统的发展历史,我们知道未配置操作系统和单批到处理系统的程序是按照顺序执行的。只有前边的程序执行完了,后边的程序才能执行。因此,CPU的利用率是非常低下的。、
为了能更好地描述程序的顺序和并发执行情况,我们先介绍用于描述程序执行先后顺序的前趋图。
所谓前趋图(Precedence Graph),是指一个有向无循环图,可记为DAG(Directed Acyclic Graph),它用于描述进程之间执行的先后顺序。
根据前趋图,我们就可以发现程序有以下的三个特性:
① 顺序性:指处理机严格地按照程序所规定的顺序执行,即每一操作必须在下一个操作开始之前结束;
② 封闭性:指程序在封闭的环境下运行,即程序运行时独占全机资源,资源的状态(除初始状态外)只有本程序才能改变它,程序一旦开始执行,其执行结果不受外界因素影响;
③ 可再现性:指只要程序执行时的环境和初始条件相同,当程序重复执行时,不论它是从头到尾不停顿地执行,还是“停停走走”地执行,都可获得相同的结果。
但是,当程序中引入了并发这么一个概念的时候,会给程序带来新的特征:
(1) 间断性。
(2) 失去封闭性。
(3) 不可再现性。
为什么要引入进程:
在多道程序环境下,程序的执行属于并发执行,此时它们将失去其封闭性,并具有间断性,以及其运行结果不可再现性的特征。由此,决定了通常的程序是不能参与并发执行的,否则,程序的运行也就失去了意义。为了能使程序并发执行,并且可以对并发执行的程序加以描述和控制,人们引入了“进程”的概念。
小总结:引入进程就是为了能够让程序能够并发执行!
进程的定义:
(1) 进程是程序的一次执行。
(2) 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
(3) 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
进程的特征:
除了进程具有程序所没有的PCB结构外,还具有下面一些特征:
(1) 动态性。
(2) 并发性。
(3) 独立性。
(4) 异步性。
进程的基本状态和装换
一般而言,每一个进程至少应处于以下三种基本状态之一:
**(1) 就绪(Ready)状态。(2) 执行(Running)状态。(3) 阻塞(Block)状态。 **
进程控制
进程控制是指系统使用一些具有特定功能的程序段来创建、撤消进程以及完成进程各状态间的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的。
进程的控制是通过原语实现的。用于进程控制的原语有:创建原语、撤消原语、阻塞原语、唤醒原语、挂起原语和激活原语等。
一般,把系统态下执行的某些具有特定功能的程序段称为原语。
原语可分为机器指令级原语和功能级原语。
前者是一条语句,后者是一段代码。
机器指令级原语的特点是执行期间不允许中断,它是一个不可分割的基本单位。
功能级原语的特点是作为原语的程序段不允许并发执行。
1)活动就绪Readya→静止就绪Readys:Suspend原语
2)活动阻塞Blockeda →静止阻塞Blockeds:Suspend原语
3)静止就绪Readys→活动就绪Readya:Active原语
4)静止阻塞Blockeds→活动阻塞Blockeda:Active原语
引起挂起状态的原因:
1)终端用户的请求。
2)父进程的请求。
3)负荷调节的需要。
4)操作系统的需要。
5)对换的需要。
进程与进程之间的关系
在进程有关系的时候有两种关系
互斥(间接制约)
同步(直接制约)
信号量机制
信号量机制进程同步的一个工具,使用它能够合理地分配CPU资源,管理进程
一般地,我们对资源分配的时候,我们有以下的原则:
同步时将信号量设置为0
互斥时将信号量设置为1
有几个进程设置几个信号量
当等于0的时候,表示资源与进程数平衡
当大于0的时候,表示资源多,临界资源有余
当小于0的时候,表示资源少。
记录型信号量机制
wait()(P操作)
申请资源,减少
signal()(V操作)
释放资源,增加
信号量的应用
利用信号量实现进程互斥
为使多个进程能互斥地访问某临界资源,只需为该资源设置一互斥信号量mutex,并设其初始值为1,然后将各进程访问该资源的临界区CS置于wait(mutex)和signal(mutex)操作之间即可。
利用信号量实现前趋关系
还可利用信号量来描述程序或语句之间的前趋关系。设有两个并发执行的进程P1和P2。P1中有语句S1;P2中有语句S2。我们希望在S1执行后再执行S2。为实现这种前趋关系,只需使进程P1和P2共享一个公用信号量S,并赋予其初值为0,将signal(S)操作放在语句S1后面,而在S2语句前面插入wait(S)操作,即
在进程P1中,用S1;signal(S);
在进程P2中,用wait(S);S2;
进程通信
进程通信,是指进程之间的信息交换,其所交换的信息量大小不一。
信号量机制在通信方面的缺点:1) 效率低;2) 通信对用户不透明。
高级进程通信是指用户可直接利用操作系统所提供的一组通信命令,高效地传送大量数据的一种通信方式。(往往我们都是使用高级进程通信的)
进程的通信类型
在进程通信的时候还有几种类型可分:
共享存储器系统
在共享存储器系统中,相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。
消息传递系统
消息传递机制是使用最广泛的一种进程间通信的机制(这种用的多)
操作系统隐藏了通信的细节,简化了通信程序的编制。
管道通信
管道是指用于连接一个读进程和一个写进程以实现他们之间通信的一个共享文件,又名pipe文件。
消息传递系统的实现方法又可以分几种:
直接通信方式
1) 发送原语:Send(Receiver,message);发送一个消息给接收进程
2) 接收原语:Receive(Sender,message);接收Sender发来的消息
间接通信方式
通过信箱:指进程之间的通信,需要通过作为共享数据结构的实体。
在间接通信的方式中,信箱作为的是一个实体
私用信箱
公有信箱
共享信箱
对于信箱而言也有几种关系:
一对一关系
多对一关系
一对多关系
多对多关系
如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y。为了大家方便,刚新建了一下qq群:742919422,大家也可以去交流交流。谢谢支持了!希望能多介绍给其他有需要的朋友
文章的目录导航:
https://zhongfucheng.bitcron.com/post/shou-ji/wen-zhang-dao-hang