零基础学习PHP编程——基本概念详解之进程

基本概念详解之五——进程

[转载请注明]

欢迎交流QQ群: 640765823 

引言

进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。

从进程的角度描述操作系统的运行过程

进程是操作系统执行任务的核心,操作系统以进程为基本单位来分配系统资源,系统的管理架构也是基于进程层面的

第一个被创造出来的进程是0号进程,这个进程在操作系统层面是不可见的,但它是存在着,0号进程完成了操作系统的功能加载与初期设定,然后它创造了1号进程(init)

1号进程就是操作系统的管理员,1号进程是用来管理整个操作系统的,在Linux中使用pstree查看进程树可知,1号进程位于树根。系统的很多管理程序都以进程身份被1号进程创造出来,它还创造了与用户沟通的桥梁——shell。用户可以跟操作系统进行交流,可以编写程序,可以执行任务等。

进程的定义

狭义定义: 进程是程序执行时的一个实例

广义定义: 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

进程的本质

第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。

第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。

进程的特点

1. 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的

2. 并发性:任何进程都可以同其他进程一起并发执行

3. 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位,各个进程都运行在独立的虚拟地址空间,因此,即使一个进程发生异常,它也不会影响到系统中的其他进程。

4. 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进

5. 结构特征:进程由程序、数据和进程控制块三部分组成

进程的内存空间

进程的内存空间包含3个段,分别为数据段、代码段(文本区域)和堆栈段

1. 数据段存放的是全局变量、常数以及动态数据分配的数据空间

2. 代码段存放的是程序代码的数据

3. 堆栈段存放的是子程序的返回地址、子程序的参数以及程序的局部变量

进程的运行状态——三态模型

一般来说,进程有三个状态,即就绪状态,运行状态,阻塞状态

运行态:进程占用CPU,并在CPU上运行
就绪态:进程已经具备运行条件,但是CPU还没有分配过来
阻塞态:进程因等待某件事发生而暂时不能运行


理论上上述三种状态之间转换分为六种情况:

运行——>就绪:主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的;在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态。

就绪——>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU

运行——>阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如发生了I/O请求

阻塞——>就绪:进程所等待的事件已经发生,就进入就绪队列

      以下两种状态是不可能发生的:

阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取

就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态。

 

进程的运行状态——五态模型

在一个实际的系统里进程的状态及其转换比上节叙述的复杂一些,例如,引入专门的初始态(new)和终止态(exit ),这样进程有五个状态,即就初始状态,就绪状态,运行状态,阻塞状态,终止状态

为什么需要初始态和终止态

引入初始态和终止态对于进程管理来说是非常有用的。初始态对应于进程刚刚被创建的状态,创建1个进程要通过两个步骤,首先,是为一个新进程创建必要的管理信息;然后,让该进程进入就绪态。此时进程将处于初始态,它并没有被提交执行,而是在等待操作系统完成创建进程的必要操作。必须指出的是,操作系统有时将根据系统性能或主存容量的限制推迟初始态进程的提交。

类似地,进程的终止也要通过两个步骤,首先,是等待操作系统进行善后;然后,退出主存。当一个进程到达了自然结束点,或是出现了无法克服的错误,或是被操作系统所终结,或是被其他有终止权的进程所终结,它将进入终止态。进入终止态的进程以后不再执行,但依然保留在操作系统中等待善后。一旦其他进程完成了对终止态进程的信息抽取之后,操作系统将删除该进程。

进程的运行状态——其它状态

在一些系统中,又增加了一些新状态,如挂起状态,可运行状态,深度睡眠状态,浅度睡眠状态,暂停状态,僵死状态

可运行状态:运行状态和就绪状态的合并,表示进程正在运行或准备运行,Linux 中使用TASK_RUNNING 宏表示可运行状态。

浅度睡眠状态:进程正在睡眠(被阻塞),等待资源的到来是唤醒,也可以通过其他进程信号或时钟中断唤醒,进入运行队列。Linux 中使用TASK_INTERRUPTIBLE 宏表示此状态。

深度睡眠状态:其和浅度睡眠基本类似,但不可被其他进程信号或时钟中断唤醒。Linux 中使用TASK_UNINTERRUPTIBLE 宏表示此状态。

暂停状态:进程暂停执行接受某种处理。Linux 使用TASK_STOPPED 宏表示此状态。

僵死状态:进程已经结束但未释放进程控制块(PCB),Linux 使用TASK_ZOMBIE 宏表示此状态。

挂起状态:在执行状态的进程通过挂起即可进入就绪状态,如图所示,就绪状态和阻塞状态都分为活动态和静止态。由活动态向静止态转换就是通过挂起实现的。

引入挂起状态的原因

1. 终端用户的请求。当终端用户在自己的程序运行期间发现有可疑问题时,希望暂时使自己的程序静止下来。亦即,使正在执行的进程暂停执行;若此时用户进程正处于就绪状态而未执行,则该进程暂不接受调度,以便用户研究其执行情况或对程序进行修改。我们把这种静止状态称为挂起状态。

2. 父进程请求。有时父进程希望挂起自己的某个子进程,以便考查和修改该子进程,或者协调各子进程间的活动。

3. 负荷调节的需要。当实时系统中的工作负荷较重,已可能影响到对实时任务的控制时,可由系统把一些不重要的进程挂起,以保证系统能正常运行。

4. 操作系统的需要。操作系统有时希望挂起某些进程,以便检查运行中的资源使用情况或进行记账。

具有挂起状态的进程状态转换图如下:

进程和程序的区别

1. 动静态性质: 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念;而进程是程序在处理机上,通过程序的指令来控制产生的一次执行过程,它是一个动态的概念

2. 时效性质: 程序可以作为一种软件资料长期存在,而进程是有一定生命期的,程序是永久的,进程是暂时的

3. 关联性质: 同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程,也就是说同一程序可以对应多个进程,进程通过程序的指令集合来控制生成,一个程序可以只有一个进程,也可以包含多个进程

附录: 进程和线程相关脑图

 

参考

进程和线程的概念、区别和联系

进程的几种状态

王涵的博客    思维导图有道云下载   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值