【deepseek】任务的状态

📅 发布时间:2026/7/11 15:50:56 👁️ 浏览次数:
【deepseek】任务的状态
好的这是一个非常核心的操作系统概念。任务或进程/线程的状态模型是理解调度和同步的基础。不同操作系统的具体状态名称可能略有差异但核心思想是相通的。一个经典且通用的任务状态模型通常包含以下5 种基本状态1. 创建New / Created描述任务正在被创建。操作系统正在为其分配必要的资源如进程控制块 PCB/TCB、地址空间、初始栈等。转换一旦资源分配完成任务立即进入就绪状态等待被调度执行。2. 就绪Ready描述任务已准备好运行万事俱备只欠 CPU。它所需的除 CPU 之外的所有资源都已就绪正在等待操作系统的调度器选中它。转换被调度器选中 →运行状态。因等待事件如 I/O 完成、信号量而主动/被动放弃 CPU →阻塞状态。3. 运行Running描述任务正在 CPU 上执行其指令。在单核 CPU 系统中同一时刻只有一个任务处于此状态。转换时间片用完或被更高优先级任务抢占 →就绪状态。主动发起 I/O 请求、等待互斥锁、等待信号量等 →阻塞状态。任务执行完毕 →终止状态。4. 阻塞Blocked / Waiting / Sleep描述任务无法继续执行因为它正在等待某个外部事件的发生。例如等待磁盘 I/O 完成、等待网络数据包、等待一个被其他任务持有的互斥锁mutex、等待信号量、等待子进程退出等。关键处于此状态的任务不会被调度器考虑即使 CPU 空闲。转换当它所等待的事件发生时如 I/O 完成、锁被释放由操作系统或其它任务将其唤醒移回就绪状态。5. 终止Terminated / Exit / Zombie描述任务已执行完毕或被强制杀死其占用的部分资源如内存、文件已被回收但其在操作系统中的“户口”PCB/TCB可能暂时保留以便其父进程查询其退出状态。转换当父进程读取了其退出状态信息后操作系统最终会清理其所有残留数据该任务彻底消失。状态转换图下图清晰地展示了这些状态之间的转换关系新任务初始化完成被调度器选中时间片用完/被抢占等待事件I/O、锁等等待的事件发生执行完毕/被杀死资源彻底回收创建就绪运行阻塞终止实际操作系统中的扩展状态现代操作系统如 Linux、Windows的状态会更复杂包含一些子状态Linux 示例TASK_RUNNING对应就绪和运行。所有在就绪队列中的线程都标记为此状态正在 CPU 上执行的那个只是被调度器选中的特殊一个。TASK_INTERRUPTIBLE可中断的阻塞。线程在等待事件但可以被信号signal唤醒。TASK_UNINTERRUPTIBLE不可中断的阻塞。通常用于等待关键的硬件 I/O不能被信号唤醒。用ps命令看到的D状态需要特别注意。TASK_STOPPED线程被信号如SIGSTOP暂停执行直到收到SIGCONT信号才继续。TASK_TRACED被调试器如 gdb暂停以跟踪其执行。EXIT_ZOMBIE僵尸状态对应终止但资源未完全清理。EXIT_DEAD最终状态即将被系统删除。Windows 示例Ready、Running、Waiting类似阻塞、Terminated。还有Standby备用已选中为下一个运行线程、Transition资源未就绪但即将就绪等。回到你的 Mutex 问题结合之前的问题当一个任务释放 mutex 时它会让一个或多个在阻塞状态等待该锁的任务转换到就绪状态。调度器会在下次调度决策时从就绪队列中选取合适的任务并将其状态变为运行。这个状态模型是理解整个调度流程的骨架。