1. 功能 将user space processes和 freezable的kernel thread 置成 TASK_UNINTERRUPTIBLE。 kernel threads are not freezable by default. 2. android 2.3里面 除了runtime_suspend所用到pm工作队列,没有其他线程是freezable的。 3. runtime_suspend 1、TASK_RUNNING(运行状态): 表示进程正在被CPU执行,或者已经准备就绪随时可由调度程序调度执行。若此时进 程没有被CPU执行,则称其处于就绪状态。当一个进程在内核代码中运行时,我们称其处于内核态,当一个进程正在执行用户自己的代码时,我们称其处于用户态。当系统资源已经可用时,进程就被唤醒而进入准备运行状态,也就是就绪状态。这些状态在内核中表示方法相同,都被称为TASK_RUNNING状态。当 一个进程刚被创建后就处于TASK_RUNNING状态。 2、TASK_INTERRUPTIBLE(可中断睡眠状态): 睡眠,可中断 进程处于等待状态,不会被调度执行。直到等待的资源可用(或等待某条件为真)或者 系统产生一个中断或进程收到一个信号时,进程就被唤醒继而进入就绪状态(TASK_RUNNING)。 3、TASK_UNINTERRUPTIBLE(不可中断的睡眠状态): 睡眠,不可中断(不可被信号唤醒) 与TASK_INTERRUPTINLE状态的唯一区别就是该状态不可被收到的信号唤醒。这种状态很少用到,但在一些特殊的情况下(进程必须等待,直到一个不能被中断的事件发生,发送硬盘I/O要求而等待I/O完成的状态,等待TTY 终端的输入的状态等),这种状态是很有用的。例如,当进程打开一个设备文件,其相应的设备驱动程序开始探测相应的硬件设备时会用到这种状态。探测完成以 前,设备驱动程序不能被中断,否则,硬件设备会处于不可预知的状态。在状态通常在进程需要不受干扰的等待或者所等待的事件会很快发生时使用。 |
|