2022年LINUX进程调度算法的分析 .pdf
《2022年LINUX进程调度算法的分析 .pdf》由会员分享,可在线阅读,更多相关《2022年LINUX进程调度算法的分析 .pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、21LINUX进程调度算法的分析 何 翔,顾 新 (西安电子科技大学,陕西西安 710071 )摘 要进程调度对一个操作系统来说是至关重要的,它起着非常关键的作用。本文针对Linux 操作系统中的普通进程调度算法进行了分析,对以进程为CPU 时间分配单位和以用户为CPU时间分配单位的两种算法进行了分析和对比。对它们在不同环境下对进程调度效率和公平性的影响进行了探讨,并总结出它们各自适用的环境。最后为了进一步提高进程调度的效率和公平性,提出了混合算法的思想。 关键词进程调度;普通进程;动态优先级中图分类号 TP3161 前 言在 Linux 操作系统中,有两种常用的普通进程调度算法。它们分别以进
2、程和用户为调度单位来进行 CPU 时间的分配。这两种算法分别体现了多进程环境下系统运行的高效性和多用户环境下的公平性。但是这两种算法都有各自的适用环境,因此它们各自都有优缺点。本文从多用户的公平性和多进程的高效性出发对这两种算法进行了分析和比较,最后提出了混合算法的思想,使进程调度更加高效和公平。2 进程调度 进程调度要满足高效率,公平性, 响应时间快,周转时间短和吞吐量大等要求。Linux操作系统的内核根据进程响应时间的情况把进程分为3 大类:交互进程;批处理进程;实时进程。内核在此基础上实现了3 种不同的调度策略:SCHED_ FIFO( 即先进 现 出 策 略 ) ; SCHED_RR
3、( 即 轮 转 策 略 ) ;SCHED_OTHER (适合交互分时的程序) 。进程调度时机,即调度器何时开始启动。可以在以下几个时刻进行进程调度:( 1)进程状态转换的时刻;( 2)可运行队列中新增加一个进程时;( 3)当前进程的时间片用完时;( 4)进程从系统返回到用户态时;( 5) 内核处理完中断后,进程返回到用户态时。在以上几种情况下进程调度可以解释为在下面几个状态中进行切换。进程调度的流程如图1 所示。图 1 进程调度的流程图 图 1 的转换条件如下:(1)调度; (2)时间片用完;(3)跟踪并调度;(4)退出;(5)收到信号并醒来;(6)等待资源到位再调度;( 7)等待资源到位再调
4、度;(8)等待资源到位;(9)资源到位或收到信号。3 普通进程调度算法的分析 3.1 按进程调度的算法分析 Schedulue()是按进程调度算法的主要函数,是系统的核心函数。它的核心代码如下:next=idle_task(this_cpu); 不可中断态可中断态占用 CPU 运行态停止态僵死态34 567 12 89 fork()电子科技 2005 年第 9 期(总第 192 期)收稿日期 :2005-04-26名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 -
5、 - - - - - - - - LINUX进程调度算法的分析 IT Age/ Sep. 15, 2005 22c=-1000;list_for_each(tmp,&runqueue_head) p= list_entry(tmp, struct task_struct, run_list); if(can_schedule(p, this_cpu) int weight=goodness(p , this_cpu, prev-active_mm); if(weightc) c=weight, next=p; 这种算法是对可运行队列中的进程进行一次遍历,拿当前进程的权值和其余进程的权值进行比较
6、。初始的权值为c=1000,这只有在可运行队列为空时才成立,其他进程的权值(weight )是由goodness()函数计算出来的。 当队列中某个进程的权值最大且大于当前进程的权值时,系统就把CPU的占有权让给这个进程,否则当前进程继续占有CPU。这种算法在用户拥有的进程数相差不大时,可以提高系统效率。但在各用户进程数相差悬殊时,就会产生某些拥有很少进程的用户的“饥饿感”并加大进程调度的不公平性。举个例子 例如 A,B 两个用户, A 用户开了99 个进程, B 用户只开了1个进程,根据按进程的调度算法,CPU 的时间是平均分配给每个进程的,因此系统将大部分的CPU时间分配给了A 用户,而 B
7、 用户得到的CPU 时间只有 1。所以B 用户一定感到很不公平。3.2 按用户调度的算法分析 算法流程如图2 所示。图中标号含义如下:( 1)遍历所有用户结构,并把 move_task 置空;( 2)访问每一个进程;( 3)判断进程所属用户的CPU 时间是否为0;( 4)重新计算该进程的counter 值;( 5)判断是否遍历完了所有的进程;( 6)访问每一个用户;( 7)判断此用户的CPU 时间是否为0;( 8)把该用户放到可运行队列尾部;( 9)重新计算该用户的CPU 时间;( 10)判断是否遍历完了所有用户;( 11)结束算法。图 2 算法流程图 算法中的用户结构如下:struct us
8、er_struct atomic_t count; atomic_t processes; atomic_t files; struct user_struct *next, *pprev; uid_t uid; struct user_struct *our_next,*our_prev; /遍历用户结构时所需的两个指针struct task_struct *move_task; /保存当前进程信息的指针long cpu_ticks; /用户实际拥有CPU 时间的变量 这种算法是以用户为单位来分配CPU 的占用时间在用户拥有进程数相差很大时,可以有效的提高调度的公平性。但在用户拥有的进程数相
9、差不大时,就会因为多余的循环而使系统效率下降。我们假设有两个用户分别拥有M 和 N 个进程,对以上两种算法进行了,如表1。表 1 两种算法比较运行状态两 用 户 瞬时 CPU 占用之比进程瞬时占用率之比进 程 占 用CPU 时间之比按进程调度算法M 个进程M:N 1:1 1:1 按用户调度算法N 个进程1:1 N:M 1:1 1 2 456 7 8 910 11 3YN Y NN Y NY名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - -
10、- - LINUX进程调度算法的分析 电子科技 /2005 年 9 月 15 234 混合算法的思想 4.1 算法描述 在以上分析的基础之上笔者提出了一种混合算法的思想。它是在按用户调度算法的基础上进行修改而得来的。算法中主要增加了一个常数和一个数据结构,如下:const int ourschedule; / 常数struct mixing_struct int userUID_SZ; /保存各用户的进程数 int max_process; / 用户中拥有最多的进程数 int min_process; / 用户中拥有最少的进程数 该算法分为两个阶段。第一个阶段:需要对每个用户所拥有的进程数进行
11、统计。在进程控制块task_struct 结构中有个指针user,用来指向一个user_struct 结构。一个用户常常有许多个进程,所以有关用户的一些信息并不专属于某一个进程。这样,属于同一个用户的进程就可以通过指针user 共享这些信息。 显然,每个用户有且有一个user_struct结构。结构中有个计数器count,对属于该用户的进程数进行计数。在进行下一个进程调度开始时对所有用户结构struct user_struct 进行遍历。在遍历过程中计 录 用 户 结 构 中 的 count 值 并 写 入 数 组int userUID_SZ 中。 UID_SZ代表系统中的用户数。然后再对该数
12、组进行排序,并把排序结果的最大,最小值分别写入变量max_process, min_process 中。因为在每次进程调度时用户数的变动不会太大且用户中的进程数也不会有太大的变动,所以采取冒泡排序的方法。这样可以提高排序的效率。最后用排序中的最大值减去最小值得到一个差值。第二个阶段:根据常数和差值的比较结果选择调度算法,当差值等于或大于这个常数值时,也就是说系统中有些用户所拥有的进程数相差过大时就选择按用户为CPU 时间分配单位的调度算法,否则就选择按进程为CPU 时间分配单位的调度算法。算法流程如图3 所示。算法思想如下:user_struct up; /进程结构变量const int ou
13、rschedule; /常数值int difference; /差值 mixing_struct userstruct; /记录用户进程数的结构变量for_each_user_struct(up) /遍历每一个用户结构userstruct .user=count; /统计所有计数器的值for(i=0;i=ourschedule) 选择按用户调度的算法; else 选择按进程调度的算法; 图 3 算法流程图 schedule()函数是被频繁调用的一个函数,它的运行直接影响到了系统的效率,因此所添加的代码应该是被调用的频率越小越好。在这种原则之下,我们发现有一段代码只有在CPU 的时间段(epoc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年LINUX进程调度算法的分析 2022 LINUX 进程 调度 算法 分析
限制150内