主观题:h512.Linux进程有几个状态,简述各状态的转换条件。
Linux进程有几个状态,简述各状态的转换条件。
答案:解:
1.运行状态 2. 可中断睡眠状态 3.不可中断睡眠状态 4.暂停状态 5.跟踪状态 6.僵死状态 7.退出状态 (2分)
进程创建时的状态为不可中断睡眠状态,在do_fork()结束前被父进程唤醒后,变为执行状态,适当时候获得CPU。(2分)
获得CPU且正在运行的进程若申请不到某个资源时,进入睡眠状态,如果调用sleep_on(),则其状态变为不可中断睡眠状态,如果调用interruptible_sleep_on(),则其状态变为可中断睡眠状态,当进程获取所申请的资源时,睡眠进程进入运行状态。(3分)
当系统调用do_exit()时,进程进入僵死状态。若进程通过系统调用设置标志PF_SYSTRACE,则在系统调用返回前进入函数syscall_trace(),状态改为暂停。只有通过其他进程发送的信号SIG_KILL或SIG_CONT,才能把暂停状态进程唤醒,重新进入run-queue队列。(3分)
答案:解:
1.运行状态 2. 可中断睡眠状态 3.不可中断睡眠状态 4.暂停状态 5.跟踪状态 6.僵死状态 7.退出状态 (2分)
进程创建时的状态为不可中断睡眠状态,在do_fork()结束前被父进程唤醒后,变为执行状态,适当时候获得CPU。(2分)
获得CPU且正在运行的进程若申请不到某个资源时,进入睡眠状态,如果调用sleep_on(),则其状态变为不可中断睡眠状态,如果调用interruptible_sleep_on(),则其状态变为可中断睡眠状态,当进程获取所申请的资源时,睡眠进程进入运行状态。(3分)
当系统调用do_exit()时,进程进入僵死状态。若进程通过系统调用设置标志PF_SYSTRACE,则在系统调用返回前进入函数syscall_trace(),状态改为暂停。只有通过其他进程发送的信号SIG_KILL或SIG_CONT,才能把暂停状态进程唤醒,重新进入run-queue队列。(3分)