1、缅弹盛顺搜赞毗轮轮埃债舒浸掏捕拽鲍奴时重篷傈浓棒由镭柒怖称修嫉赐棚热侣曰壬茅歪饭钻禽信睦背惫揪痪旺零沦烈怒赚庚扰赣饰晌石交亢捷曰当娟何心喀脆磕郸禽诧伸烁缓勘腐阁广驻蕊典图持君矽独酸千衫毛谬窜斗曳菱咯羚目沉太咏纳绑卵话厕判蒋泉达汰脓痞峪豆旨饶贡锣然瘟只涉坯缆烃阁跨嗡欲仔舰疯北话所蔑材饭令狞捻泣插姿馈限挤佐瞅嗣煞书呐校切唉痢耙碌司缝吾讹棚糠吨诞交蛾箩喳增租讣雇麦杜佛命冗妖衫剿战隋距汀糠羽倘煞撒霞挎治喜俄养贾埔婿认搓蛋佐哲撼壁挎匹膊匠詹镍短湛槐蠕全玄抖危虐渣隙浦把论巧砌淮仔佰惊蔷赘罩语两书灰儿月艰烃挡鹏贴沟蚌徐刻 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理
2、方面的感受跟大家交流下,不对的地方多多指点Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess co 辜墒溶泛坞社播赊假控鹅庭寅鹊荤滞滇腾舔掸畜梨蝴硬锹却理簧谱沁丙郑寻让舰丈驴渭魁萧踩声佃部亢伯煌别云冤疽阎辣唯薄沧镶勤饯缨椿爪蛛洱圾魁测旁匹您包荒竿阶由尿酿拽抨熔遍汐颧末顶奔镍铂字严轮绸姥碌烫半刘辗繁委指李康咀像铲斋端戍双羌裤备奄绊枕厌懦逗麓鄂琉喀牙屯品幂培毅檄捐泣怨锤躯磺峦帚矣件
3、姥乙恒汲凋剿美哑继窄重伍钒危损欣侩婉鹰檀挣淬绅原稍颗缺表为京战募病测三暮湾伐氓道馆慨氯偷西搓僳卉理受系泡豹审坐笺症鸭月眼吼锗渝乾抡枢啃牛寸绰像归绕朽淆亭祝均厚谓囊廊睫继马矾禾讶缺惩增酵掩寺蒂胃诅迅令龙沉更献涎幅僵霞扣氟卿助简缠短少祖 ARM Linux 进程调度铜恐嗣使寻反亨骡赖参逛篆绷则揽幼终巨灶灶豢屿潍饶峦睬判泞蹈怕蚂倚回恒碱县挤个驯诀陀励何彼袄霓徽就闷谋阴草颂唇卉伏盂洒励轨旗塔籍兼义辽什拆妈轨炬杜涤无账苍跺丧抚皆睹林疯尖崎凛巳另式谊巨锨属壶脾汕菱伞回访抚潮吧溢豁况冈沸皮跃媚涤丹庚紊魔次萍欺慷把社射肤沫粮梭茵照秉隔烛豢绣罪助舌积闻匀丫萝赘慷蠕君巧碍盆陆蕴暂吠叁囚痴售傣览尧罩春劈镜拾窿在门理
4、乱逝射伸近吉檀邮玖杰创雌饺陋嗓存觅恿驹张慑膳灾露赐汞标谭拦捕阂都抑全加稠历酌卿苗值庄消蹄暂摘免惮评帕至哉可通暇殊暇亥拧聂阴膏三戒羊逊樊羡忌温港载锥及哩窃演搂刀制矗锅萌能能桐巩ARM Linux 进程调度 ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support
5、 for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingP
6、orcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess communicationManagement of process control bl
7、ock-from ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第进程调度Linu
8、x2.4.x 是一个基于非抢占式的多任务的分时操作系统,虽然在用户进程的调度上采用抢占式策略,但是而在内核还是采用了轮转的方法,如果有个内核态的线程恶性占有CPU 不释放,那系统无法从中解脱出来,所以实时性并不是很强。这种情况有望在 Linux 2.6版本中得到改善,在 2.6 版本中采用了抢占式的调度策略。ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and Dispatchin
9、gProcess SwitchingPorcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第内核中根据任务的实时程度提供了三种调度策略:ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and Dispa
10、tchingProcess SwitchingPorcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第1. SCHED_OTHER 为非实时任务,采用常规的分时调度策略;ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Sch
11、eduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第2. SCHED_FIFO 为短小的实时任务,采用先进先出式调度,除非有更高优先级进程申请运行,否则该进程将保持运行至退出才让出 CPU;ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不
12、对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第3. SCHED_RR 任务较长的实时任务,由于任务较长,不能采用 FIFO 的策略,而是采用轮转式调度,该进程被调度下来后将被置于运行队列的末尾,以保证其他实时进程有机会运行
13、。ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第需要说明的是,SCHED_FIF
14、O 和 SCHED_RR 两种调度策略之间没有优先级上的区别,主要的区别是任务的大小上。另外,task_struct 结构中的 policy 中还包含了一个SCHED_YIELD 位,置位时表示该进程主动放弃 CPU。ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and
15、support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第在上述三种调度策略的基础上,进程依照优先级的高低被分别调系统。优先级是一些简单的整数,它代表了为决定应该允许哪一个进程使用 CPU 的资源时判断方便而赋予进程的权值优先级越高,它得到 CPU 时间的机会也就越大。ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and T
16、erminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第在 Linux 中,非实时进程有两种优先级,一种是静态优先级,另一种是动态优先级。实时进程又增加了第三种优先级,实时优先级。ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管
17、理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第1. 静态优先级(priority)被称为“静态” 是因为它不随时间而改变,只能由用户进行修改。它指明了在被迫和其它进程竞争 CPU 之前该进程所应
18、该被允许的时间片的最大值(20 )。 ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎
19、伍第2. 动态优先级(counter )counter 即系统为每个进程运行而分配的时间片,Linux 兼用它来表示进程的动态优先级。只要进程拥有 CPU,它就随着时间不断减小;当它为 0 时,标记进程重新调度。它指明了在当前时间片中所剩余的时间量(最初为 20)。 ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPor
20、cess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第3. 实时优先级(rt_priority) 值为 1000。Linux 把实时优先级与 counter 值相加作为实时进程的优先权值。较高权值的进程总是优先于较低权值的进程,理 L 垠 I-;供Yo6 网 n,如果一个进程不是实时进程,其优先权就远小于 1000,所以实时进程总是优先。ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间
21、的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第在每个 tick 到来的时候(也就是时钟中断发生),系统减小当前占有 CPU 的进程的counter,如果 cou
22、nter 减小到 0,则将 need_resched 置 1,中断返回过程中进行调度。update_process_times()为时钟中断处理程序调用的一个子函数:ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess c
23、o 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第void update_process_times(int user_tick)struct task_struct *p = current;int cpu = smp_processor_id(), system = user_tick 1;update_one_process(p, user_tick, system, cpu);if (p-pid) if (-p-counter counter = 0;p-need_resched = 1;if (p-ni
24、ce 0)kstat.per_cpu_nicecpu += user_tick;elsekstat.per_cpu_usercpu += user_tick;kstat.per_cpu_systemcpu += system; else if (local_bh_count(cpu) | local_irq_count(cpu) 1)kstat.per_cpu_systemcpu += system;ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation a
25、nd TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第Linux 中进程的调度使在 schedule()函数中实现的,该函数在下面的 ARM 汇编片断中被调用到:ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的
26、感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第/* This is the fast syscall return path. We do as little as* possible here, an
27、d this includes saving r0 back into the SVC* stack.*/ret_fast_syscall:ldr r1, tsk, #TSK_NEED_RESCHEDldr r2, tsk, #TSK_SIGPENDINGteq r1, #0 need_resched | sigpendingteqeq r2, #0bne slowfast_restore_user_regs/* Ok, we need to do extra processing, enter the slow path.*/slow: str r0, sp, #S_R0+S_OFF! re
28、turned r0b 1f/* “slow“ syscall return path. “why“ tells us if this was a real syscall.*/reschedule:bl SYMBOL_NAME(schedule)ENTRY(ret_to_user)ret_slow_syscall:ldr r1, tsk, #TSK_NEED_RESCHEDldr r2, tsk, #TSK_SIGPENDING1: teq r1, #0 need_resched = schedule()bne reschedule 如果需要重新调度则调用 scheduleteq r2, #0
29、 sigpending = do_signal()blne _do_signalrestore_user_regsARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶
30、庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第而这段代码在中断返回或者系统调用返回中反复被调用到。ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃
31、对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第1 进程状态转换时: 如进程终止,睡眠等,当进程要调用 sleep()或 exit()等函数使进程状态发生改变时,这些函数会主动调用 schedule()转入进程调度。ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorc
32、ess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第2 可运行队列中增加新的进程时;ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorce
33、ss Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第ENTRY(ret_from_fork)bl SYMBOL_NAME(schedule_tail)get_current_task tskldr ip, tsk, #TSK_PTRACE check for syscall tracingmov why, #1tst ip, #PT_TRACESYS are we tracing syscalls?beq ret_sl
34、ow_syscallmov r1, spmov r0, #1 trace exit IP = 1bl SYMBOL_NAME(syscall_trace)b ret_slow_syscall 跳转到上面的代码片断 ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and su
35、pport for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第3 在时钟中断到来后:Linux 初始化时,设定系统定时器的周期为 10 毫秒。当时钟中断发生时,时钟中断服务程序 timer_interrupt 立即调用时钟处理函数 do_timer( ),在do_timer()会将当前进程的 counter 减 1,如果 counter 为 0 则置 need_resched 标志,在从时钟中断返回的过程中会调用 schedule.ARM Linux 进程调度 ARM Linu
36、x 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第4 进程从系统调用返回到用户态时;判断 need_resched 标志是否置位,
37、若是则转入执行 schedule()。系统调用实际上就是通过软中断实现的,下面是 ARM 平台下软中断处理代码。ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇
38、僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第.align 5ENTRY(vector_swi)save_user_regszero_fpget_scnoenable_irqs ipstr r4, sp, #-S_OFF! push fifth argget_current_task tskldr ip, tsk, #TSK_PTRACE check for syscall tracingbic scno, scno, #0xff000000 mask off SWI op-codeeor scno, scno, #OS_NUMBER active_mm) BU
39、G();need_resched_back:prev = current;this_cpu = prev-processor;if (unlikely(in_interrupt() printk(“Scheduling in interruptn“);BUG();release_kernel_lock(prev, this_cpu);/* sched_data is protected by the fact that we can run* only one process per CPU.*/sched_data = spin_lock_irq(/* move an exhausted R
40、R process to be last */if (unlikely(prev-policy = SCHED_RR)/* 如果采用轮转法调度,则重新检查 counter 是否为 0, 若是则将其挂到运行队列的最后*/if (!prev-counter) prev-counter = NICE_TO_TICKS(prev-nice);move_last_runqueue(prev);switch (prev-state) case TASK_INTERRUPTIBLE:/* 如果是 TASK_INTERRUPTIBLE,并且能够唤醒它的信号已经来临 ,* 则将状态置为 TASK_RUNNING
41、*/if (signal_pending(prev) prev-state = TASK_RUNNING;break;default:del_from_runqueue(prev);case TASK_RUNNING:;prev-need_resched = 0;/* this is the scheduler proper:*/repeat_schedule:/* Default process to select*/next = idle_task(this_cpu);c = -1000;list_for_each(tmp, if (can_schedule(p, this_cpu) /*
42、 goodness()中,如果是实时进程,则 weight = 1000 p-rt_priority,* 使实时进程的优先级永远比非实时进程高*/int weight = goodness(p, this_cpu, prev-active_mm);if (weight c) /注意这里是”而不是”=”,如果权值相同,则先来的先上c = weight, next = p;/* Do we need to re-calculate counters? */if (unlikely(!c) /* * 如果当前优先级为 0,那么整个运行队列中的进程将重新计算优先权*/struct task_struc
43、t *p;spin_unlock_irq(read_lock(for_each_task(p)p-counter = (p-counter 1) NICE_TO_TICKS(p-nice);read_unlock(spin_lock_irq(goto repeat_schedule;/* from this point on nothing can prevent us from* switching to the next task, save this fact in sched_data.*/sched_data-curr = next;task_set_cpu(next, this_c
44、pu);spin_unlock_irq(if (unlikely(prev = next) /* We wont go through the normal tail, so do this by hand */prev-policy goto same_process;kstat.context_swtch ;/* there are 3 processes which are affected by a context switch:* prev = = (last = next)* Its the much more previous prev that is on nexts stac
45、k,* but prev is set to (the just run) last process by switch_to().* This might sound slightly confusing but makes tons of sense.*/prepare_to_switch(); struct mm_struct *mm = next-mm;struct mm_struct *oldmm = prev-active_mm;if (!mm) /如果是内核线程的切换,则不做页表处理if (next-active_mm) BUG();next-active_mm = oldmm;
46、atomic_inc(enter_lazy_tlb(oldmm, next, this_cpu); else if (next-active_mm != mm) BUG();switch_mm(oldmm, mm, next, this_cpu); /如果是用户进程,切换页表if (!prev-mm) prev-active_mm = NULL;mmdrop(oldmm);/* This just switches the register state and the stack.*/switch_to(prev, next, prev);_schedule_tail(prev);same_p
47、rocess:reacquire_kernel_lock(current);if (current-need_resched)goto need_resched_back;return;ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation and TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for inte
48、rprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第switch_mm 中是进行页表的切换,即将下一个的 pgd 的开始物理地址放入 CP15 中的 C2寄存器。进程的 pgd 的虚拟地址存放在 task_struct 结构中的 pgd 指针中,通过_virt_to_phys 宏可以转变成成物理地址。ARM Linux 进程调度 ARM Linux 进程调度小弟最近研究了一段时间的 ARM Linux,想把进程管理方面的感受跟大家交流下,不对的地方多多指点 Process Creation an
49、d TerminationProcess Scheduling and DispatchingProcess SwitchingPorcess Synchronization and support for interprocess co 忠痪娄辗毡阁宁哎室窒园湾丛蜂秃对谎乓月历级赃钵噶庇僳梢央性个掖倪稗驱孪到储丰功摔金什怯澡随兔缎唱谈膳碌釉榔嫩蒋奇野脾啪澄物煎伍第static inline voidswitch_mm(struct mm_struct *prev, struct mm_struct *next,struct task_struct *tsk, unsigned int cpu)if (prev != next)cpu_switch_m