- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
进程调度函数schedule分析
进程调度函数schedule()分析主要功能:实现进程的调度,从运行队列的链表中找到一个进程,然后进行分配。可以由几个内核控制路径调用。调用方式:1.当前进程不能获得必要资源而被阻塞,可以直接调用schedule()。将current进程插入适当的等待队列,把状态改为TASK_INTERRUPTABLE或TASK_UNINTERRUPTABLE,然后调用schedule()。一旦资源可用,就从等待队列删除current进程。2.把current进程的TIF_NEED_RESCHED标志设置为1,由于会在恢复前检查这个标志的值,所以schedule()将在之后某个时间被明确调用,以延迟方式调用调度程序。三. 功能分析:asmlinkage void schedule(void){struct schedule_data * sched_data;struct task_struct *prev, *next, *p;struct list_head *tmp;int this_cpu, c;//定义变量,*prev为调度之前进程,*next为调度之后进程 spin_lock_prefetch(runqueue_lock); BUG_ON(!current-active_mm);//current进程的active_mm为空,出错 need_reshced_back; prev=current;//变量初始化this_cpu = prev-processor;(unlikely(in_interrupt())) {printk(Scheduling in interrupt\n);BUG();}//不能再中断程序中执行schedule(),否则会出错release_kernel_lock(prev, this_cpu);sched_data = aligned_data[this_cpu].schedule_data;spin_lock_irq(runqueue_lock);//释放内核锁,开this_cpu中断,并锁住runqueue队列/* move an exhausted RR process to be last.. */if (unlikely(prev-policy == SCHED_RR))//是否为轮转调度if (!prev-counter) {prev-counter = NICE_TO_TICKS(prev-nice);move_last_runqueue(prev);}//prev-counter为逐渐减少的进程时间配额,当为0时就从当前位置到runqueue的末尾。NICE_TO_TICKS将优先级别换算为时间配额,即恢复开始的时间配额switch (prev-state) {case TASK_INTERRUPTIBLE:if (signal_pending(prev)) {prev-state = TASK_RUNNING;break;}//查看当前状态,如果处于TASK_INTERRUPTIBLE且有信号等待处理,内核将状态设置为TASK_RUNNING,让其处理完default:del_from_runqueue(prev);case TASK_RUNNING:;}prev-need_resched = 0;//如果没有信号等待,从等待队列撤出;如果处在TASK_RUNNING继续进行/* * this is the scheduler proper: */repeat_schedule:/* * Default process to select.. */next = idle_task(this_cpu);//指向最佳候选c = -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 (weight c)//比较权值c = weight, next = p;}}//调度之前将要调度的进程默认为0号,权值为-1000。0号进程即不会睡眠,也不会死亡。内核遍历可执行队列runqueue的每个进程,用godness计算权值,然后进行比较/* Do we need to re-calculate counters? */if (unlikely(!c)) {struct task_struct *p;spin_unlock_irq(runqueue_lock);
您可能关注的文档
- 基于b_s模式的毕业设计双向选题管理系统设计.docx
- 基于bs模式的高校科研项目管理系统的设计.doc
- 基于bs模式的即时通信软件设计.doc
- 基于bs模式的酒店管理信息系统的设计与实现.doc
- 基于bs模式的牌类游戏开发.doc
- 基于bs模式的考试系统毕业论文.doc
- 基于bs模式的汽车销售系统的设计与实现论文开题报告.doc
- 基于bs模式的网络教学辅助系统的设计与实现.docx
- 基于bs模式的网上书城概要设计.doc
- 基于bs模式的医院信息管理系统的实现.docx
- 中考语文复习专题二整本书阅读课件.ppt
- 中考语文复习积累与运用课件.ppt
- 2025年初中学业水平考试模拟试题(二)课件.ppt
- 四川省2015届理科综合试题48套第12套.pdf
- 【课件】战争与和平—美术作品反映战争+课件-2024-2025学年高中美术湘美版(2019)美术鉴赏.pptx
- 【课件】青春牢筑国家安全防线 课件 2024-2025学年高中树立总体国家安全观主题班会.pptx
- 【课件】原始人的创造+课件高中美术湘美版(2019)美术鉴赏.pptx
- 上海证券-美容护理行业周报:流量加快去中心化,强运营头部品牌影响较小 -2024-.pdf
- T_CSEIA 1005—2023_能源工业互联网平台数据治理要求.pdf
- T_CDSA 504.16-2023_急流救援技术培训与考核要求.pdf
最近下载
- 梁开洞计算(圆形洞口).xls VIP
- 浙江省G5联盟2024-2025学年高一上学期期中联考物理试题.docx VIP
- 2025年 (一季度)专题党课讲稿:坚守底线廉洁从政以忠诚担当的干劲加强队伍党风廉政建设.pdf VIP
- 在线网课学习课堂《沟通心理学(黑龙江工商学院 )》单元测试考核答案.docx
- 沙滩垃圾清理机论文.docx VIP
- 认识东、南、西、北(说课稿)-2024-2025学年二年级下册数学苏教版[001].docx
- 余甘子种植技术规范.pdf VIP
- 一次函数图象与坐标轴围成的图形面积.ppt
- 初中道德与法治教师教学能力水平考核测试试题(含答案).docx
- 《体重管理与健康生活》课件.ppt VIP
文档评论(0)