![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux子系统-进程管理
文章平均质量分 72
差不太多先生
这个作者很懒,什么都没留下…
展开
-
进程管理--CFS调度器(2)
主要以CFS调度器为例,介绍一下进程调度的一般流程。首先是调度的时机,基本调度器会根据TIF_NEED_RESHED标记判断是否需要进行调度,所以这个标记的设置就是调度的开始。满足抢占的条件就是,唤醒的进程的虚拟时间首先要比正在运行进程的虚拟时间小,并且差值还要大于一定的值才行(这个值是sysctl_sched_wakeup_granularity,称作唤醒抢占粒度)。原创 2023-09-26 11:45:05 · 155 阅读 · 0 评论 -
进程管理--CFS调度器(1)
CFS(Completely Fair Scheduler,完全公平调度器)用于Linux系统中普通进程的调度。它给cfs_rq(cfs的run queue)中的每一个进程设置一个虚拟时钟,vruntime。如果一个进程得以执行,随着时间的增长(一个个tick的到来),其vruntime将不断增大。没有得到执行的进程vruntime不变。调度器总是选择vruntime跑得最慢的那个进程来执行。这就是所谓的“完全公平”。原创 2023-09-26 11:39:51 · 175 阅读 · 0 评论 -
进程管理--进程调度基本概念
所有的就绪进程都会被放入某个CPU的rq上去,具体放到哪个rq上,这个在调度均衡里面讲。内核一共定义了五个调度类,属于不同调度类的进程会被放入不同的子队列,所以rq中包含三个子运行队列cfs_rq、rt_rq、dl_rq。因为有两个调度类idle、stop,每个CPU只能有一个进程,所以没必要弄个队列,直接关联它们的进程就可以了。内核中处理优先级如上所示,范围是0-139,数值越低,优先级越高,其中nice映射到100-139,RT优先级逆向映射到0-99。内核中定义了上面这几个宏,代表不同的调度策略。原创 2023-09-26 11:36:40 · 129 阅读 · 0 评论 -
进程管理--上下文切换
上下文切换:当一个任务切换到另一个任务时,它需要保存当前任务的所有状态,即保存当前任务的上下文,以便在再次执行该任务时,能恢复之前的状态,继续执行。上下文:描述了任务的执行状态。包括任务执行过程中堆栈中的内容和寄存器值,获取的资源信息,自身状态等。原创 2023-09-26 11:31:04 · 110 阅读 · 0 评论 -
进程管理--进程创建
进程拷贝或创建的一个整体调用流程:首先通过系统调用陷入内核,然后kernel_clone完成创建。其中描述符和资源的拷贝,pid的分配等都在copy_process中完成,完成创建后需要通过wake_up_new_task加入调度。可以使用fork或vfork创建进程,使用clone系统调用创建线程。在内部都是用kernel_clone实现。区别只是传入的args不同(用来控制新进程或线程与父进程或线程共享什么资源)。进程在某一时刻只可能有一种状态。原创 2023-09-26 11:22:58 · 80 阅读 · 0 评论