用户自己的代码时,称其为处于用户运行态(用户态)。当系统资源 已经可用时,进程就被唤醒而进入准备运行状态,该状态称为就绪态 这些状态在内核中表示方法相同,都被称为处于 TASK RUNNING状态。 当一个新进程刚被创建出后就处于本状态中 (2)可中断睡眠状态( TASK INTERRUPTIBLE)。 当进程处于可中断等待(睡眠)状态时,系统不会调度该进程执 行。当系统产生一个中断或者释放了进程正在等待的资源,或者进程 收到一个信号,都可以唤醒进程转换到就绪状态(即可运行状态)。 (3)不可中断睡眠状态( TASK UNINTERRUPTIBLE)。 除了不会因为收到信号而被唤醒,该状态与可中断睡眠状态类似。 但处于该状态的进程只有被使用wake_upO函数明确唤醒时才能转换 到可运行的就绪状态。该状态通常在进程需要不受干扰地等待或者所 等待事件会很快发生时使用。 (4)暂停状态( TASK STOPPED)。 当进程收到信号 SIGSTOP、 SIGTSTP、 SIGTTIN或 SIGTTOU时就会 进入暂停状态。可向其发送 SIGCONT信号让进程转换到可运行状态。 进程在调试期间接收到任何信号均会进入该状态。 (5)僵死状态( TASK ZOMBIE)。 当进程已停止运行,但其父进程还没有调用wait0询问其状态 时,则称该进程处于僵死状态。为了让父进程能够获取其停止运行的 信息,此时子进程的任务数据结构信息还需要保留着。一旦父进程调 用wait(取得了子进程的信息,则处于该状态进程的任务数据结构 就会被释放。 当一个进程的运行时间片用完,系统就会使用调度程序强制切换 到其他的进程去执行。另外,如果进程在内核态执行时需要等待系统 的某个资源,此时该进程就会调用 sleep on(或 interruptible_ sleep_on(自愿地放弃CPU的使用权,而让调度程序 去执行其他进程。进程则进入睡眠状态( TASK UNINTERRUPTIBLE或 TASK INTERRUPTIBLE)。 只有当进程从"内核运行态"转移到"睡眠状态"时,内核才会进行 进程切换操作。在内核态下运行的进程不能被其他进程抢占,而且一 4|am操作系统》讲稿/河南中医学院/阮晓龙/@phactcm.edu.cn4 《Linux 操作系统》讲稿 / 河南中医学院 / 阮晓龙 / rxl@hactcm.edu.cn 用户自己的代码时,称其为处于用户运行态(用户态)。当系统资源 已经可用时,进程就被唤醒而进入准备运行状态,该状态称为就绪态。 这些状态在内核中表示方法相同,都被称为处于 TASK_RUNNING状态。 当一个新进程刚被创建出后就处于本状态中。 (2)可中断睡眠状态(TASK_INTERRUPTIBLE)。 当进程处于可中断等待(睡眠)状态时,系统不会调度该进程执 行。当系统产生一个中断或者释放了进程正在等待的资源,或者进程 收到一个信号,都可以唤醒进程转换到就绪状态(即可运行状态)。 (3)不可中断睡眠状态(TASK_UNINTERRUPTIBLE)。 除了不会因为收到信号而被唤醒,该状态与可中断睡眠状态类似。 但处于该状态的进程只有被使用wake_up()函数明确唤醒时才能转换 到可运行的就绪状态。该状态通常在进程需要不受干扰地等待或者所 等待事件会很快发生时使用。 (4)暂停状态(TASK_STOPPED)。 当进程收到信号 SIGSTOP、SIGTSTP、SIGTTIN 或 SIGTTOU 时就会 进入暂停状态。可向其发送 SIGCONT 信号让进程转换到可运行状态。 进程在调试期间接收到任何信号均会进入该状态。 (5)僵死状态(TASK_ZOMBIE)。 当进程已停止运行,但其父进程还没有调用 wait()询问其状态 时,则称该进程处于僵死状态。为了让父进程能够获取其停止运行的 信息,此时子进程的任务数据结构信息还需要保留着。一旦父进程调 用 wait()取得了子进程的信息,则处于该状态进程的任务数据结构 就会被释放。 当一个进程的运行时间片用完,系统就会使用调度程序强制切换 到其他的进程去执行。另外,如果进程在内核态执行时需要等待系统 的 某 个 资 源 , 此 时 该 进 程 就 会 调 用 sleep_on() 或 interruptible_sleep_on()自愿地放弃 CPU 的使用权,而让调度程序 去执行其他进程。进程则进入睡眠状态(TASK_UNINTERRUPTIBLE 或 TASK_INTERRUPTIBLE)。 只有当进程从"内核运行态"转移到"睡眠状态"时,内核才会进行 进程切换操作。在内核态下运行的进程不能被其他进程抢占,而且一