17进程调度.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
17进程调度,进程调度器,进程调度算法,linux进程调度,时间片轮转调度算法,银行家算法,任务调度,进程调度实验报告,作业调度,进程调度策略

调度 调度 什么是调度? 从就绪的进程中选出最适合的一个来执行。 学习调度需要掌握哪些知识点? 1、调度策略 2、调度时机 3、调度步骤 调度策略 SCHED_NORMAL(SCHED_OTHER):普通的分时进程 SCHED_FIFO:先入先出的实时进程 SCHED_RR:时间片轮转的实时进程 SCHED_BATCH:批处理进程 SCHED_IDLE:只在系统空闲时才能够被调度执 行的进程 调度类 调度类的引入增强了内核调度程序的可扩展性,这些类(调度程序模块)封装了调度策略,并将调度策略模块化。 CFS调度类(在kernel/sched_fair.c中实现)用于以下调度策略:SCHED_NORMAL、SCHED_BATCH和SCHED_IDLE。 实时调度类(在kernel/sched_rt.c中实现)用于SCHED_RR和SCHED_FIFO策略。 调度类 struct sched_class{ struct sched_class*next; void(*enqueue_task)(struct rq*rq,struct task_struct*p,int wakeup); void(*dequeue_task)(struct rq*rq,struct task_struct*p,int sleep); void(*yield_task)(struct rq*rq,struct task_struct*p); void(*check_preempt_curr)(struct rq*rq,struct task_struct*p); struct task_struct*(*pick_next_task)(struct rq*rq); void(*put_prev_task)(struct rq*rq,struct task_struct*p); unsigned long(*load_balance)(struct rq*this_rq,int this_cpu,struct rq*busiest,unsigned long max_nr_move,unsigned long max_load_move,struct sched_domain*sd,enum cpu_idle_type idle,int*all_pinned,int*this_best_prio); void(*set_curr_task)(struct rq*rq);void(*task_tick)(struct rq*rq,struct task_struct*p); void(*task_new)(struct rq*rq,struct task_struct*p); }; pick_next_task:选择下一个要运行的进程 调度时机 调度什么时候发生?即:schedule()函数什么时 候被调用? 调度的发生有两种方式: 1、主动式 在内核中直接调用schedule()。当进程需要等待 资源等而暂时停止运行时,会把状态置于挂起 (睡眠),并主动请求调度,让出CPU。 调度时机 主动放弃cpu例: 1.current- state=TASK_INTERRUPTIBLE; 2.schedule(); 调度时机 2、被动式(抢占) 用户抢占(Linux2.4、Linux2.6) 内核抢占(Linux2.6) 用户抢占 用户抢占发生在: 从系统调用返回用户空间。 从中断处理程序返回用户空间。 内核即将返回用户空间的时候,如果 need_resched标志被设置,会导致schedule()被调用,此时就会发生用户抢占。 用户抢占 ENTRY(ret_from_exception)//异常返回 get_thread_info tsk mov why,#0 b ret_to_user __irq_usr://在用户态收到中断 usr_entry kuser_cmpxchg_check ……………… b ret_to_user 用户抢占 ENTRY(ret_to_user) ret_slow_syscall: disable_irq@disable interrupts ldrr1,[tsk,#TI_FLAGS] tst r1,#_TIF_WORK_MASK bne work_pending 用户抢占 work_pending: tst r1,#_TIF_NEED_RESCHED bne work_resched work_resched: bl schedule 内核抢占 在不支持内核抢占的系统中,进程/线程一旦运行于内核空间,就可以一直执行,直到它主动放弃或时间片耗尽为止。这样一些非常紧急的进程或线程将长时间得不到运行。 在支

文档评论(0)

ajgoaw + 关注
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档