首页 > 代码库 > 进程资源和进程状态 TASK_RUNNING TASK_INTERRUPTIBLE TASK_UNINTERRUPTIBLE
进程资源和进程状态 TASK_RUNNING TASK_INTERRUPTIBLE TASK_UNINTERRUPTIBLE
摘要:本文主要介绍进程资源和进程状态.进程资源由两部分组成:内核空间进程资源以及用户空间进程资源.进程状态,就绪/运行状态、等待状态(可以被中断打断)、等待状态(不可以被中断打断)、停止状态和僵死状态.
1.进程资源
进程是Linux系统下资源管理的基本单位,每个进程都有自己的独立的运行空间.为了更好的管理Linux所访问的资源,系统引入了进程控制(PCB)的概念,PCB结构体.进程资源由两部分组成:内核空间进程资源以及用户空间进程资源.
内核空间进程资源:指的就是PCB相关信息.包括进程控制块本身、打开的文件表项、当前目录、当前终端信息、线程基本信息、可访问内存地址、PID、PPID、UID、EUID等,也就是说内核通过PCB可以访问到进程所有的资源.这些资源只能通过系统调用才能访问到.进程退出后,资源由另一进程来回收.
用户空间进程资源:通过成员mm_struct映射的内存空间.实质就是进程的代码段、数据段、堆、栈、以及可以共享访问的库的内存空间.这些资源进程可以直接访问.在进程退出时主动释放.在进程运行时,可以通过文件 /proc/{pid}/maps来产看可以访问的地址空间.
2.进程状态
人生三大错觉之一:QQ、暴风影音、浏览器等可以一起运行,难道进程是并行运行的.非也非也.对于单CPU系统来说在某一时刻,只能有一个进程处于运行状态,占有CPU的使用权,其他进程都处于其他状态,等待系统资源,各进程根据调度算法在某些状态之间不停地的切换.但由于CPU处理效率较快,使用户感觉不到其中的变化.在Linux2.6内核中,用户级进程拥有以下几种状态:就绪/运行状态、等待状态(可以被中断打断)、等待状态(不可以被中断打断)、停止状态和僵死状态.
TASK_RUNNING:正在运行或处于就绪状态:就绪状态是指进程申请到了CPU以外的其他所有资源,正所谓:万事俱备,只欠东风.提醒:一般的操作系统教科书将正在CPU上执行的进程定义为RUNNING状态、而将可执行但是尚未被调度执行的进程定义为READY状态,这两种状态在Linux下统一为 TASK_RUNNING状态.
TASK_INTERRUPTIBLE:处于等待队伍中,等待资源有效时唤醒(比如等待键盘输入、socket连接、信号等等),但可以被中断唤醒.一般情况下,进程列表中的绝大多数进程都处于TASK_INTERRUPTIBLE状态.毕竟皇帝只有一个(单个CPU时),后宫佳丽几千;如果不是绝大多数进程都在睡眠,CPU又怎么响应得过来.
TASK_UNINTERRUPTIBLE:处于等待队伍中,等待资源有效时唤醒(比如等待键盘输入、socket连接、信号等等),但不可以被中断唤醒.
TASK_ZOMBIE:僵死状态,进程资源用户空间被释放,但内核中的进程PCB并没有释放,等待父进程回收.
TASK_STOPPED:进程被外部程序暂停(如收到SIGSTOP信号,进程会进入到TASK_STOPPED状态),当再次允许时继续执行(进程收到SIGCONT信号,进入TASK_RUNNING状态),因此处于这一状态的进程可以被唤醒.
用户级进程之间的状态切换关系如图2所示.
图2 用户进程状态切换图
笔者:个人能力有限,只是学习参考...读者若发现文中错误,敬请提出.
进程资源和进程状态 TASK_RUNNING TASK_INTERRUPTIBLE TASK_UNINTERRUPTIBLE
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。