再哪一步加入到runqueue中的
时间: 2024-04-04 17:29:19 浏览: 21
在 Linux 内核中,进程会被加入到运行队列中以便被 CPU 调度执行。进程加入运行队列的具体过程分为两个步骤:
1. 将进程加入到对应的运行队列中;
2. 唤醒 CPU,让其调度执行进程。
在进程 fork 时,子进程需要被加入到运行队列中才能被调度执行。具体来说,进程的运行队列是由 CFS 调度器维护的,当进程被加入到运行队列中时,CFS 调度器会根据进程的优先级和调度策略等信息进行调度。
在进程被加入到运行队列之前,需要先将其加入到对应的任务队列中。任务队列是 CFS 调度器维护的一个数据结构,用于存储所有等待被调度的进程。当一个进程被创建或唤醒时,它会被加入到任务队列中,等待被调度执行。
进程被加入到任务队列后,CFS 调度器会根据进程的优先级和调度策略等信息,将其加入到对应的运行队列中。在将进程加入到运行队列时,CFS 调度器会根据进程的优先级和调度策略等信息来进行排序,以决定下一个被调度执行的进程。一旦进程被加入到运行队列中,CFS 调度器会唤醒 CPU,以便让其进行调度执行。
因此,在进程 fork 时,子进程会在 `sched_post_fork` 函数中被加入到任务队列中,并在后续的调度过程中被加入到运行队列中。具体的加入过程会涉及到 CFS 调度器的内部实现和调度策略,具体细节可以参考 Linux 内核源代码的实现。
相关问题
sched_fork 会把进程加入到runqueue中吗
是的,sched_fork 函数会将新创建的进程加入到 runqueue 中,这样它就可以被调度器选择执行。具体来说,sched_fork 会调用 task_rq_lock 函数,获取新进程所在 CPU 对应的 runqueue 的锁,然后将进程加入到 runqueue 中。如果新进程是一个实时进程,sched_fork 还会将其加入到实时调度器的调度队列中。最后,sched_fork 会调用 task_rq_unlock 函数,释放 runqueue 的锁,让其他进程也有机会被调度。
linux创建线程时,怎么加入到runqueue中的
在Linux中,创建线程后,如果要将其加入到运行队列(也称为调度队列或就绪队列)中,需要操作系统内核提供的调度器来完成。调度器会将新创建的线程添加到合适的队列中,等待CPU分配时间片并运行线程。
下面是简要的步骤:
1. 内核会为每个线程创建一个内核级的task_struct结构体,其中包含线程的状态、上下文等信息。
2. 调用scheduler_tick()函数,该函数会调用pick_next_task()函数来选择下一个要运行的线程。如果当前没有运行的线程,pick_next_task()函数会选择一个最高优先级的可运行线程,并将其加入到运行队列中。
3. 当新线程创建后,调用wake_up_process()函数将其状态设置为TASK_RUNNING(可运行状态),并添加到运行队列中。
4. 调用schedule()函数来选择下一个要运行的线程。如果当前运行的线程时间片用完或者有更高优先级的线程需要运行,schedule()函数会选择一个最高优先级的可运行线程,并将其从运行队列中取出,然后切换到该线程运行。
总之,将线程加入到运行队列中,需要借助操作系统内核提供的调度器来完成,这也是操作系统实现多任务的核心机制。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)