Linux 进程控制块(PCB)/task_struct


说起进程的结构就不得不提起PCB(进程控制块)。PCB是描述一个进程的数据块。在内核中对应task_struct代码。而子进程的PCB是复制并修改父进程的PCB得来的。下面主要介绍一下task_struct 结构中所包含的各个成员。

进程状态(State)

进程执行时,它会根据具体情况改变状态。进程状态是调度和对换的依据。Linux 中的 进程主要有如下状态,如表4.1 所示。
在这里插入图片描述

  • 可运行状态:处于这种状态的进程,要么正在运行、要么正准备运行。正在运行的进程就是当前进程 (由 current 宏 所指向的进程),而准备运行的进程只要得到CPU 就可以立即投入运行,CPU 是 这些进程唯一等待的系统资源。系统中有一个运行队列(run_queue),用来容纳所有处于可 运行状态的进程,调度程序执行时,从中选择一个进程投入运行。 当前运行进程一直处于该队列中,也就是说,current 总是指向运行队列中的某个元素,只是具体指向谁由调度程序决定。

  • 等待状态:处于该状态的进程正在等待某个事件(Event)或某个资源,它肯定位于系统中的某个 等待队列(wait_queue)中。Linux 中处于等待状态的进程分为两种:可中断的等待状态和 不可中断的等待状态。处于可中断等待态的进程可以被信号唤醒,如果收到信号,该进程就 从等待状态进入可运行状态,并且加入到运行队列中,等待被调度;而处于不可中断等待态 的进程是因为硬件环境不能满足而等待,例如等待特定的系统资源,它任何情况下都不能被 打断,只能用特定的方式来唤醒它,例如唤醒函数wake_up()等。

  • 暂停状态:此时的进程暂时停止运行来接受某种特殊处理。通常当进程接收到SIGSTOP、SIGTSTP、 SIGTTIN 或 SIGTTOU 信号后就处于这种状态。例如,正接受调试的进程就处于这种状态。

  • 僵死状态:进程虽然已经终止,但由于某种原因,父进程还没有执行wait()系统调用,终止进程的 信息也还没有回收。顾名思义,处于该状态的进程就是死进程,这种进程实际上是系统中的 垃圾,必须进行相应处理以释放其占用的资源。

进程调度信息

调度程序利用这部分信息决定系统中哪个进程最应该运行,并结合进程的状态信息保证 系统运转的公平和高效。这一部分信息通常包括进程的类别(普通进程还是实时进程)、进 程的优先级等,如表4.2 所示。
在这里插入图片描述

当need_resched 被

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值