进程创建时候,是加入到wait queue中吗
时间: 2024-04-04 21:31:18 浏览: 12
是的,当一个进程被创建后,它一开始会处于 `TASK_RUNNING` 状态,即可执行状态。但是如果它需要等待某些事件(如等待 I/O 完成),则它会被挂起,并加入到相应的等待队列(waitqueue)中。等待队列是一种数据结构,用于管理等待某个事件的进程或线程,以便在事件发生后唤醒它们。在 Linux 内核中,等待队列通常是通过定义一个 `wait_queue_head_t` 类型的变量来实现的。当一个进程被加入到等待队列中时,它的状态会被设置为 `TASK_UNINTERRUPTIBLE` 或 `TASK_INTERRUPTIBLE`,以指示它正在等待某个事件。当事件发生时,内核会将进程从等待队列中唤醒,并将其重新放入可执行队列中,以便它可以继续运行。
相关问题
进程刚开始创建的时候,会放再哪个队列,runqueue还是waitqueue
当进程刚开始创建时,它会被加入到当前 CPU 的可执行队列(runqueue)中,处于 `TASK_RUNNING` 状态,以等待 CPU 时间片调度并运行。只有在进程需要等待某个事件(如 I/O 完成)时,才会将它加入到相应的等待队列(waitqueue)中,此时进程状态会被设置为 `TASK_INTERRUPTIBLE` 或 `TASK_UNINTERRUPTIBLE`,并且进程不再处于可执行状态,直到等待的事件发生并将进程从等待队列中唤醒。因此,进程刚开始创建时会放在可执行队列中,而不是等待队列中。
内核中具体用的是哪个变量
内核中具体使用的等待队列变量名因功能而异。以下是一些常见的等待队列变量名及其功能:
- `wait_queue_head_t wait`:这是内核中一些基本的等待队列之一,用于等待一些事件的发生。例如,在进程阻塞时,就可以将进程加入到 `wait` 等待队列中,等待唤醒信号的到来。
- `wait_queue_head_t poll_wait`:这是内核中用于等待文件描述符上的数据可用的等待队列。当文件描述符上没有可读/写数据时,进程就可以将自己加入到 `poll_wait` 等待队列中,等待数据的到来。
- `wait_queue_head_t wait_chldexit`:这是内核中用于等待子进程退出的等待队列。当一个进程创建了一个子进程,就可以将自己加入到 `wait_chldexit` 等待队列中,等待子进程退出的信号。
- `wait_queue_head_t sk_sleep`:这是内核中用于等待网络套接字数据可用的等待队列。当网络套接字上没有可读/写数据时,进程就可以将自己加入到 `sk_sleep` 等待队列中,等待数据的到来。
需要注意的是,这些等待队列变量名只是内核中的一种命名约定,具体的实现和使用方式会因不同的内核版本、驱动程序和模块而有所不同。