关于进程的一小点总结

关于进程,有同样的三个问题需要考虑,我是谁,我从哪来,将要去向何方。总的来说就是进程是什么,为什么会有这么一个概念的诞生,它的出现是为了解决什么问题,以及进程的改进。

首先我是谁,进程是计算机分配资源和能独立运行的最小单位,形象点说,一个程序,执行一次是一个进程,执行两次是两个进程。由此说来,进程具有什么样的特点?

(1)独立性,主要是指进程是被独立分配资源,独立运行,独立进行调度的基本单位。

(2)动态性,进程是计算机执行程序产生的,指代的是程序的执行过程;此外进程是会消亡的,由此也可看出它是动态的。静态性的例子就是程序代码,它可以永久存储在某一介质当中。

(3)结构性,(一般说到结构性,我一般认为的结构性是指组成,但实际上这么说来,什么东西没有组成,不瞎说了),书上指的是,一个进程实体,也就是通常意义上的进程,包括程序块,数据块,和PCB(process control block,程序控制块),程序快就是指的执行的代码,数据块就是程序所用到的数据,会在内存单独开辟一个区域,存放数据,而重要的来了,PCB,程序控制块,这基本就是进程的大脑啊,进程能并发执行,基本靠PCB。实际上的创建进程是指创建PCB。

(4)并发性,实际上这就是进程这个概念诞生的意义了。

(5)异步性,并发跟异步是有关联的,由于并发才有异步,并发导致多个进程同时执行,这导致进程的执行先后无法估计。

进程的几个重要方面:

(1)进程的六个状态:创建,就绪,执行,堵塞,终止,挂起。

进程的五个状态的转换是受到控制的。

#1. 首先创建态,什么情况下会创建进程

        1.提供服务,这是最容易想到的,当你想要执行某个程序的时候,这时候就创建了一个进程。

        2.用户登陆,当计算机是多用户的时候,每当有一个用户登陆,操作系统便会为该用户创建一个进程,接着该用户所进行的所有操作都会建立在这个进程上,继而产生父进程和子进程的概念。

        3.作业调度。

        4.应用请求,由应用在有需要的时候自动创建。这也是父进程和子进程。

进程创建的具体过程:原子操作creat():

(1)上面讲过,实际上创建进程就是创建进程实体中的PCB,PCB块是内存中一段特殊的存储块,一个操作系统会限制最多有多少个进程同时执行,一个进程对应一个PCB,也就是说允许最多多少个进程同时执行,就是存储快中有多少个PCB,这一段内存区域是固定的,PCB的数目也是固定的,但这时候的PCB是空白的,如果要创建进程,首先第一步就是要申请一个空白的PCB

(2)申请了PCB以后,首先是要为PCB进行初始化。PCB能装的信息一般有:

        1.标识进程的东西,叫进程标识符,也叫进程的PID。

        2.处理机状态,即进程切换的时候得保留该进程进行到什么情况了,cpu中各种通用寄存器,psw,pc等的信息。以至于下一次切换不至于进程又从头开始执行。

        3.进程调度信息,涉及到进程调度,就是将进程从就绪态换成执行态的顺序。进程调度信息大致就是cpu调度的依据,比如说cpu会根据谁等的越久就越先执行谁,那么PCB里存的就应该是这个进程等待的时间,又比如说根据进程优先级,那么这里面存的就肯定是进程的优先级。

         4.进程控制信息,(1)程序和数据的地址,等下一次调度进程的时候可以尽快找到程序和数据。(2)资源清单,即系统分配资源的时候应该分配什么资源给这个进程,记录下已分配和待分配。(3)进程同步和通信机制。(4)链接指针,各个PCB中所属状态不一样,这时候每个状态的所有PCB都将形成一个状态队列,就绪态的所有PCB都会通过指针链接形成一个就绪队列,PCB的安排方式也有两种,一种就是指针连接,一种是通过建立索引表。(老实说,这些东西真难记)

        话讲远了,那么PCB的初始化,就是(1)初始化进程标识符,包括系统分配的标识符和父进程的标识符(2)初始化处理机状态信息,让PC指向将要执行的程序入口。(3)初始化处理机状态控制信息,即设置优先级,并且将进程状态由创建变成就绪。

(3)为进程分配资源,为进程的程序和数据分配内存空间。

(4)将进程链接入就绪队列

当程序变成就绪态,就意味着,进程只需要再得到cpu就可以直接开始执行,所有的准备工作都已经做好。得到cpu的过程称为进程调度。

#2. 进程的阻塞block()与唤醒wakeup():

        进程能变成阻塞态,只能是由执行态变成阻塞态。而变成阻塞态一般是在执行状态需要等待某种东西的时候,不是一直利用cpu查询,而是将自己变成阻塞状态,等待那个需要的东西来唤醒它。

        等待的东西一般有:

        (1)等待操作系统提供服务,例如进程请求使用打印机资源,而该资源正在被占用,这时候就需要等。那么能唤醒该进程的就是其他设备释放打印机的时候,顺便将该进程唤醒。

        (2)等待某种操作启动,例如进程在请求了I/O设备以后,只有等I/O设备完成某种I/O操作的时候,才能执行,那么这时候也需要变成阻塞态。唤醒的一般是中断服务程序或中断进程。(I/O设备与I/O操作)

        中断服务程序一般是在使用程序中断传送方式里发生的,程序中断传送方式是一种在内存与外设间信息传送的一种方式。即在当cpu在执行正常的工作时,突然外设提出传送信息的请求,这时候cpu会保存断点(保存各种寄存器的信息),并且执行外设的任务,这个任务实际上就是一段中断服务程序。执行完这段程序以后,cpu就可根据断点继续执行之前的工作。这种方法的好处就在于cpu不需要时时刻刻盯着外设,看它需不需要CPU的服务,而是在有请求的时候才执行,提高了cpu的效率。

        (3)等待数据的到来,当一个进程需要来自另一个进程的数据,就会将自己变成阻塞态,等待数据的到来。

        (4)最后一个针对系统进程,当系统进程没有东西可做了,就会将自己变成阻塞态,等待新工作的到来。

具体进程变成阻塞态的过程(block())(进程阻塞是进程的一种自动行为):

(1)停止正在进行的进程,将进程状态变成阻塞态,并且将进程插入具有以上相同事件的阻塞队列中。

(2)转调度程序,重新调度另一个就绪进程。

将进程从阻塞态变成唤醒态(wakeup()):

(1)当相应事件出现时,由相应进程唤醒。

(2)将进程的阻塞态改成就绪态,并且从阻塞队列中移出,插入就绪队列中。





猜你喜欢

转载自blog.csdn.net/yolan6824/article/details/79795897