首先先简单的介绍一下runqueue
runqueue 代表了一个 CPU 的停当队列,此中包罗了多个进程的 task_struct(即进程控制块)。在 Linux 等操纵系统中,每个 CPU 都会有一个独立的 runqueue,用来管理该 CPU 上的全部停当进程。每个 task_struct 存储了该进程的状态、调理信息等。
然后下图是Linux2.6内核中进程队列的数据结构,之间关系已经给大家画出来,方便大家明白。
然后对此根据上面的介绍,我们在对此扩展一下他的内容。
一个CPU拥有一个runqueue (struct runqueue)
runqueue是CPU的PCB(task_strutc)、
假如有多个CPU就要考虑进程个数的负载平衡题目
我们现在评论的OS都是分时操纵系统,调理时夸大的是公平!
关于实时操纵系统,暂且不谈,调理时夸大的时实时性!智能自动驾驶骑车等。
对于后三个的解释:
多个 CPU 和负载平衡:
当有多个 CPU 时,进程的负载平衡题目确实是一个紧张的考虑因素。操纵系统通常会通过负载平衡策略将进程分配到差别的 CPU 上,以避免某些 CPU 过载而其他 CPU 处于空闲状态。
Linux 等现代操纵系统会定期通过进程迁徙等本领实现负载平衡,确保各个 CPU 的负载较为平衡,从而提高系统的整体效率。
分时操纵系统的调理(公平性):
你说的“分时操纵系统,调理时夸大的是公平性”是正确的。在分时系统中,调理的焦点目的之一是公平性,即尽量保证每个进程能够在合理的时间内获得 CPU 时间片。调理算法(好比轮转法、优先级调理等)都是为了保证这种公平性,避免某些进程长时间得不到执行。
这种公平性通常意味着“每个进程的执行时间应该大致相称”,纵然是用户进程,也会得到相对平等的 CPU 时间,而不是长期被某个进程或线程独占。