linux进程调度
文章平均质量分 78
bullbat
爱好程序设计,对待问题喜欢追根溯源。
展开
-
linux内核之进程调度(一)
等待队列Sleep相关函数将进程的状态设置为非运行态,在下一次调度来时,将在schedule函数中将本进程从运行队列中移除。sleep函数将进程加入等待队列,然后调用schedule函数选择并重新开始另一个程序的执行。当调用wake_up类函数将进程唤醒时,wake_up类函数将进程加入运行队列中,调度程序重新从sleep函数中下一条没有执行的指令开始执行。sleep类函数都调用sleep原创 2011-12-20 20:57:40 · 3192 阅读 · 0 评论 -
linux进程调度之进程切换
linux调度中,在schedule函数中完成选择下一个进行、进程间切换进程的切换在schedule函数中主要由两个函数完成: sched_info_switch(prev, next);主要是更新切换出去和进来进程以及对应rq的相关变量。该函数主要调用__sched_info_switch函数来实现。/* * Called when tasks are switched involu原创 2011-12-21 17:35:30 · 3774 阅读 · 1 评论 -
linux内核分析之调度算法(一)
linux调度算法在2.6.32中采用调度类实现模块式的调度方式。这样,能够很好的加入新的调度算法。linux调度器是以模块方式提供的,这样做的目的是允许不同类型的进程可以有针对性地选择调度算法。这种模块化结构被称为调度器类,他允许多种不同哦可动态添加的调度算法并存,调度属于自己范畴的进程。每个调度器都有一个优先级,调度代码会按照优先级遍历调度类,拥有一个可执行进程的最高优先级的调度器类胜出,原创 2011-12-30 09:09:03 · 18297 阅读 · 5 评论 -
linux内核之调度算法(二)
上层调度,linux调度的核心函数为schedule,schedule函数封装了内核调度的框架。细节实现上调用具体的调度类中的函数实现。schedule函数主要流程为:1,将当前进程从相应的运行队列中删除;2,计算和更新调度实体和进程的相关调度信息;3,将当前进重新插入到调度运行队列中,对于CFS调度,根据具体的运行时间进行插入而对于实时调度插入到对应优先级队列的队尾;4,从运行队原创 2011-12-30 09:30:48 · 4720 阅读 · 0 评论 -
linux内核分析之调度——实时调度算法
linux内核中提供了两种实时调度策略:SCHED_FIFO和SCHED_RR,其中RR是带有时间片的FIFO。这两种调度算法实现的都是静态优先级。内核不为实时进程计算动态优先级。这能保证给定优先级别的实时进程总能抢占优先级比他低得进程。linux的实时调度算法提供了一种软实时工作方式。实时优先级范围从0到MAX_RT_PRIO减一。默认情况下,MAX_RT_PRIO为100,所以默认的实时优先级原创 2011-12-30 17:30:01 · 9127 阅读 · 4 评论 -
linux内核分析之调度算法——CFS调度分析
前面对linux调度算法的框架进行了介绍,在这里对CFS(完全公平调度)算法进行分析。CFS允许每个进程运行一段时间、循环轮转、选择运行最少的进程作为下一个运行进程,而不再采用分配给每个进程时间片的做法了,CFS在所有可运行进程总数基础上计算出一个进程应该运行多久,而不是依靠nice值来计算时间片。nice值在CFS中被作为进程获得的处理器运行比的权重:越高的nice值(越低的优先级)进程获得原创 2011-12-30 14:31:20 · 10561 阅读 · 2 评论