【操作系统原理】进程的执行
处理器的分配对象大多是进程。进程是程序的一次执行,进程的实体是由程序段、数据段和进程控制块组成,程序没有进程就无法执行。可是进程究竟是怎么执行的?
PS:下面的栗子,来源于个人对进程的理解与生活体验假设认为不合适,请见谅
一、进程的运行模式:
单道程序系统中,程序是顺序执行的。其过程就像这样,举个栗子:拿起筷子。夹起饭菜,送到嘴里。这个过程必须一步接着一步来。能够反复实现(就可以在现性),可是在这个吃饭过程中,你不能再在做作业之类的,吃饭这个动作独占你的全部资源(即封闭性)。
所以说程序顺序执行不利于提高资源利用率。
多道程序系统中,程序是并发运行的。一个计算机仅仅有一个处理器,可是作业的个数能够多于处理器,这些作业在处理器中同一时候运行,是不对的说法,在每个瞬间仅仅有一个程序在运行,在一个在运行的时候,另外一个的运行已经開始了就像这样一个过程,举个栗子:起床之后。在烧水等待的同一时候,能够去刷牙洗脸,在榨汁机运行的同一时候能够去准备早餐的食材等。
所以说程序并发运行能够极大的提高资源利用率。
对于上面的资源不好理解,能够比喻成时间,能够更好的理解。
并发程序尽管非常好,可是并非全部的程序都能够并发运行,举个栗子:你不可能一边刷牙。一边吃饭。
于是程序的并发执行是须要条件的。来一个公式:
P1:a=x+y; R(P1)={x,y} W(P1)={a}
P2 : b=z+1; R(P2)={z} W(P2)={b}
R(P1)和W(P2),W(P2)和R(P2),W(P1)和 W(P2)都不能有交集(注意。不是全部的都要符合无交集的条件)。
为啥会这样呢?
个人理解:我们可能会常常去买票看电影,可是会有一个问题,当这个座位还没人买,大家的选择界面上都能够选择,未刷新之前大家是能够选的,提交之后,有时候会发现票已经被买走。我们都能够买票。所以不是全部的都不能有交集,可是一个座位的票仅仅有那一张,同一段资源不能被同一时候占有,可是还是有其它选择,所以存在不能有交集的情况。
二、进程的运行状态
既然进程能够并发执行,那么他们是在程序执行是什么状态呢?不同的系统可能会有不同的状态,下面为大多数情况:
进程一般存在三种情况:
(1)就绪状态:我已经准备好,给我处理器,我就能够运行,这时的进程状态就是就绪状态;
(2)运行状态:我已经获得资源。而且正在工作中。这时的进程状态就是运行状态;
(3)堵塞状态:我刚刚正在工作,突然“断电”了,我被迫停止。这时的进程状态就是堵塞状态。
可是,不是说我处于一种状态就会不变,正在运行的总会做完。被迫停止的也能够又一次開始。
关于三种状态,举个栗子:
在食堂买饭,有人已经买上饭菜了坐了正在吃,有人正在排队买菜,有人买好了可是没有座位,正在等待。
三、进程的控制
进程控制主要是负责进程的创建与撤销,进程状态之间的切换以及进程之间的通信等。
当然这也是系统的基本功能,在内核中的对应程序中完毕。
可是什么是操作系统内核?
操作系统内核是指扩充计算机硬件的第一层,广泛採用层次式结构,通常将一些与硬件密切相关的模块,比方中断处理程序。设备驱动程序,存储器管理等安排在紧靠硬件的软件层。而且让他们常住在内存中,施以保护。内核在实现实现其基本功能时基本常採用原语操作。
什么是原语?
能够简单的看作是命令。
主要介绍一下进程控制语言。主要包含进程的创建与撤销、堵塞与唤醒、刮起与激活等六个原语。
(1)进程创建原语:进程通过调用进程创建原语来创建一个子进程。步骤为:申请空暇的PCB(进程控制模块),为子进程获得新的标识-->为子进程分配诸如内存空间的资源-->初始化进程控制模块-->将新进程插入到PCB的就绪队列中。创建ok。
(2)进程撤销原语:撤销原语在撤销进程时。连同该进程的子孙进程一同撤销。步骤为:依据被撤销的进程的标识符从PCB检索表中找到该进程的PCB,并获得该进程的状态-->若进程处于运行状态,马上终止其运行。而且将其逻辑值重置;若进程不是运行状态,直接将其从状态队列中删去-->递归的处理该进程的子孙进程-->撤销进程时,将全部资源归位。注销其资源描写叙述清单-->释放该进程的PCB。撤销ok,可是假设其逻辑值为真,则会转入进程调度程序。
(3)进程堵塞原语:当进程请求某个事件尚未出现时,进行步骤:终止调用者自身的运行-->该进程调用进程堵塞原语使其从运行状态变为堵塞状态-->把调用者进程的PCB插入到对应的堵塞队列-->然后转入进程调度程序。
(4)进程唤醒原语:运行的进程释放某资源之后,调用进程唤醒原语将因等待该资源而堵塞的进程唤醒成就绪状态。进行步骤:找出对应被唤醒的进程的内部标识-->把该标识从堵塞队列中移去-->重设该状态为就绪-->将该进程插入到就绪队列中去。
了解以上信息对于进程的执行就有了一些大致的理解,这是对于了解执行中出现的相互排斥和同步问题的基础。