进程I·介绍、查看、创建与状态

目录

介绍

PCB(进程控制块)

task_struct

查看、创建进程

进程状态

小知识


介绍

进程:PCB(process control block)(内核数据结构)+ 代码和数据

进程创建:操作系统将其相关属性信息为基,创建PCB结点,放到进程双链表中,存在内存里。

以下都以linux为例

PCB(进程控制块)

linux中描述PCB的结构体叫做task_struct,task_struct是PCB的一种。

task_struct :linux内核的一种数据结构类型,它会被装载到内存(RAM)里并包含进程信息。

task_struct

主要内容:

CPU中有许多寄存器,用户无法直接使用,其对task_struct进行调度时,会将要执行的指令地址存到寄存器里,每次执行进程CPU就从寄存器中取地址。 

有一种PC指针存程序计数器。

进程在寄存器中存的内容叫该进程的上下文数据。

标识符等会在后面介绍。

查看、创建进程

程序中使用

头文件为<unistd.h>

getpid() 得到进程标识符

fork() 创建子进程 

fork() 给父进程返回子进程pid,给子进程返回0;

getppid() 得到父进程标识符

例:

 

proc目录中以文件形式存了正在运行的进程信息,在根目录下。

1.进程创建时,出了系统都有父进程,linux系统是通过父进程创建子进程来增加进程的。

2.在命令行中启动命令/程序都会成为新增进程,这些进程的父进程都是bash(外壳程序)

 

3.创建子进程,子进程的task_struct也要被初始化,以父进程为模版,并且默认子进程共享父进程的代码和数据。

进程状态

进程状态决定了进程接下来要进行的工作。

对于所有操作系统的进程状态来说,都以下图为基础

就绪状态(新建状态):进程被创建处在全局链表(task_struct的链表)中。

运行状态:进程的PCB处在调度队列中。

阻塞状态:将进程改为阻塞状态并将PCB从调度队列中放到某种设备的等待队列中,等待设备就绪。

挂起状态:当检测到内存资源严重不足时, 某些进程的代码和数据就被放到磁盘的一个swap区中,只留下PCB在内存区中。

1.就绪挂起:将未在调度的运行状态的进程挂起,等需要调度再拿回来调度。

2.阻塞挂起:将处于阻塞状态的进程挂起。

注:挂起的进程可以激活到原状态。

进程需要竞争的资源:

1.CPU资源

2.外设资源(输入输出等)

进程又分为:计算密集型:算法数据结构等(主要用CPU资源)、IO密集型(外设资源)

因为资源有限,所以在部分进程享有资源的同时,部分进程就不能享有。

在linux系统中

有如下状态:

S:浅度休眠(阻塞状态):可以响应外部时间,操作系统可以干掉。

D:深度休眠(磁盘休眠):不对外部时间响应,操作系统不能干掉,重启也没用,只能拔电源。    一般出现较长时间D状态,说明磁盘快挂掉了,系统也快挂了。     

注:IO时一般有短暂D状态。

T:暂停状态:如果进程访问非法,操作系统将会将其暂停。暂停后变为后台进程

t:追踪状态:gdb调试时会创建新的子进程,让子进程运行代码到断点,因为断点停下来就是追踪状态。

Z:僵尸状态:进程结束时先处于一种僵尸状态,代码和数据释放掉,PCB暂时保留,记录进程退出信息(方便父进程读取,获得进程执行结果)。

1.如果父进程不处理,僵尸进程会一直存在。

2.如果父进程先退出,子进程会被1号进程(系统)托管,叫孤儿进程(成为后台程序,需要用kill命令处理)

X:结束状态:僵尸进程被父进程处理后,就由Z变X,操作系统瞬间回收。

1.进程状态带+号表示前台进程,前台进程可以用ctrl+c终止,后台进程不可以 。

 

2.在进行访问外设有关进程时,操作系统大部分时间用于将PCB结点在调度队列和外设的等待队列之间移动,状态会在R和S之间移动

小知识

1.系统中,会同时存在大量进程。

2.对于进程、软件、硬件等,管理的本质都是先描述,再组织。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值