请选择 进入手机版 | 继续访问电脑版
快捷导航
0 105

“进程概述”笔记

alsk0017 于 2018-3-16 17:18 发表在 [技术分享] [复制链接]
本帖最后由 alsk0017 于 2018-3-27 17:47 编辑

进程的描述
进程的概念是20世纪60年代初首先由麻省理工学院的MULTICS系统和IBM公司的CTSS/360系统引入的。进程是一共具有独立功能的程序关于某个数据集合的一次运行活动。
它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计算器的值和处理寄存器的内容来表示。进程的概念主要有以下两点。
(1)进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域、数据区域和堆栈。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。
(2)进程是一个“执行中的程序”。程序是一个没有生命的实体,只要处理器赋予程序生命时,它才能成为一个活动的实体,称为进程。
进程是由进程控制块、程序段、数据段3部分组成的。一个进程可以包含若干线程,线程可以帮助应用程序同时做几件事,在程序被运行后,系统首先要做的就是为该系统进程建立一个默认线程,然后程序可以根据需要自行添加或删除相关的线程。在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位,也称为活动、路径或任务,它有两方面性质:活动性、并发性。运行的进程可以划分为运行、阻塞、就绪3种状态,并随一定条件而相互转化:就绪-运行,运行-阻塞,阻塞-就绪。
进程控制块
Linux的进程控制块一个由结构task_struct所定义的数据结构,task_struct存
/include/ linux/sched.h 中,其中包括管理进程所需的各种信息。Linux系统的所有进程控制块组织成结构数组形式。PCB组成一个环形结构,系统中实际存在的进程数由其定义的全局变量nr_task来动态记录。结构数组:struct task_struct *task[NR_TASK]={&init_task}来记录指向各PCB的指针,该指针数组定义于/kernel/sched.c中。
在创建一个新进程时,系统在内存中申请一个空的task_struct区,即空闲PCB块,并填入所需信息。同时将指向该结构的指针填入到task[]数组中。当前处于运行状态进程的PCB用指针数组current_set[]来指出。这是因为Linux支持多处理机系统,系统内可能存在多个同时运行的进程,故current_set定义成指针数组。
Linux系统的PCB包括很多参数,每个PCB约占1KB多的内存空间。用于表示PCB的结构task_struct简要描述如下:
struct task_struct{
...
unsigned short uid;
int pid;
int processor;
...
volatile long state;
long prority;
unsighed long rt_prority;
long counter;
unsigned long flags;
unsigned long policy;
...
Struct task_struct *next_task, *prev_task;
Struct task_struct *next_run,*prev_run;
Struct task_struct *p_opptr,*p_pptr,*p_cptr,*pysptr,*p_ptr;
...
};
下面对部分数据成员进行说明:
(1)unsigned short pid 为用户标识
(2)int pid 为进程标识
(3)int processor标识用户正在使用的CPU,以支持对称多处理机方式;
(4)volatile long state 标识进程的状态,可为下列六种状态之一:
可运行状态(TASK-RUNING);
可中断阻塞状态(TASK-UBERRUPTIBLE)
不可中断阻塞状态(TASK-UNINTERRUPTIBLE)
僵死状态(TASK-ZOMBLE)
暂停态(TASK_STOPPED)
交换态(TASK_SWAPPING)
(5)long prority表示进程的优先级
(6)unsigned long rt_prority 表示实时进程的优先级,对于普通进程无效
(7)long counter 为进程动态优先级计数器,用于进程轮转调度算法
(8)unsigned long policy 表示进程调度策略,其值为下列三种情况之一:
SCHED_OTHER(值为0)对应普通进程优先级轮转法(round robin)
SCHED_FIFO(值为1)对应实时进程先来先服务算法;
SCHED_RR(值为2)对应实时进程优先级轮转法
(9)struct task_struct *next_task,*prev_task为进程PCB双向链表的前后项指针
(10)struct task_struct *next_run,*prev_run为就绪队列双向链表的前后项指针
(11)struct task_struct *p_opptr,*p_pptr,*p_cptr,*p_ysptr,*p_ptr指明进程家族间的关系,分别为指向祖父进程、父进程、子进程以及新老进程的指针。

程序段、数据段
进程的程序部分描述进程所要完成的功能。数据结构集是程序在执行时必不可少的工作区和操作对象。两者一般存放在外存中,直到该进程执行时在调入内存。

进程状态及其转换
一个进程至少有五个状态:初始状态、执行状态、等待状态、就绪状态和终止状态。
一个进程在并发执行中,由于资源共享和竞争,有时处于执行状态;有时,进程则因等待某件事件的发生而处于等待状态;另外,当一个处于等待状态的进程因等待事件发生唤醒后,又因不可能立即得到处理机而进入就绪状态,处于就绪状态的进程已经得到除CPU之外的其他资源,只要由调度得到处理机,便可立即执行;进程刚被创建时,由于其他进程正占有处理机而得不到执行,只能处于初始状态;进程在执行结束以后,将退出执行而被终止,这时进程处于终止状态
①就绪(Ready)状态
当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行,进程这时的状态就称为就绪状态。在一个系统中处于就绪状态的进程可能有多个,通常将他们排成一个队列,称为就绪队列。
②执行状态
进程已获得CPU,其程序正在执行。在单处理机系统中,只有一个进程处于执行状态;在多处理机系统中,则有多个进程处于执行状态。
③阻塞状态
正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。
一个进程在运行期间,不断地从一种状态转换到另一种状态,它可以多次处于就绪状态和执行状态,也可以多次处于阻塞状态。
①就绪→执行处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成执行状态。
②执行→就绪处于执行状态的进程在其执行过程中,因分配给它的一个时间片已用完而不得不让出处理机,于是进程从执行状态转变成就绪状态。
③执行→阻塞正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。
④阻塞→就绪处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Connecting & Messaging from Any.

共 0 个关于本帖的回复 最后回复于 2018-3-16 17:18

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

推荐板块

精彩推荐

热门排行

明星用户

手机版|小黑屋|AnyMSG ( ©AnyMSG 2009 - 2017 · ICP备16009991号 )

GMT+8, 2019-2-20 03:34