ch6-CPU调度.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文档。上传文档
查看更多
李治军 操作系统 授课教师:李治军 并发回顾 如何让出CPU? 让出CPU的具体实现 PickNext()的直观思考 CPU调度策略的设计准则 存在矛盾的目标集合 CPU调度应综合考虑 ? 任务特点 CPU调度应综合考虑 ? 任务特点(续) 任务的CPU-IO区间的周期特性 CPU调度应综合考虑 ? 调度时机 内核线程通常的调度时机 CPU调度应综合考虑 ? 调度算法的实现 复杂调度算法 vs. 调度程序执行时间 FIFO或First Come, First Served (FCFS) 调度的顺序就是任务到达就绪队列的顺序 FCFS的分析 公平、简单(FIFO队列)、非抢占、不适合交互式 Shortest Job First (SJF) 最短的作业(CPU区间长度最小)最先调度 SJF的分析 SJF可以保证最小的平均等待时间 SJF: 任务到达的时间有先后怎么办? Shortest Remaining Job First (SRJF),SJF的可抢占版本 SJF vs. SRJF SJF(SRJF): 如何知道下一CPU区间大小 根据历史进行预测: 指数平均法 SJF的一般化: 优先权调度 优先权调度引起的一个有趣问题 适合交互式的调度: Round-robin (RR) RR: 按时间片来轮转调度 RR的分析 RR优点: 定时有响应,等待时间较短 RR中的时间片该如何设定? 时间片太大 混合多种调度算法 ? 多级队列调度 多个就绪队列,不同的队列采用不同的调度方法 更成熟的多级队列调度 ? 多级反馈队列 任务可以在队列之间移动,更细致的区分任务 Linux调度算法概述 采用优先权的、基于信用度的、可抢占RR调度 Linux调度函数schedule() Linux counter的修改及调度引发 Linux时钟中断的设置 Linux中的priority Linux中的调度时机 CPU调度的总结 一点题外话 void Schedule(void) //在kernel/sched.c中 { int i, next, c; struct task_struct **p; //PCB指针 while(1) { c=-1; next=0; i=NR_TASKS; p=task[NR_TASKS]; while(--i){ if((*p)-state==TASK_RUNNING(*p)- counterc) c=(*p)-counter, next=i; } if(c) break; //找到了最大的counter for(p=LAST_TASK;pFIRST_TASK;--p) (*p)-counter=((*p)-counter1) +(*p)-priority; } switch_to(next); } void do_timer(...) //在kernel/sched.c中 { if((--current-counter0) return; current-counter=0; schedule(); } _timer_interrupt: //在kernel/system_call.s中 movl CS(%esp), %eax andl $3, %eax push %eax call _do_timer addl $4, %esp jmp ret_from_sys_call void sched_init(void) //在kernel/sched.c中 { outb_p(0x36, 0x43); //设置8253模式 outb_p(LATCH0xff, 0x40); outb_p(LATCH8, 0x40); set_intr_gate(0x20, timer_interrupt); outb(inb_p(0x21)~0x01, 0x21); //允许中断 } #define LATCH (1193180/HZ)//在kernel/sched.c #define HZ 100 //在include/linux/sched.h PC机8253定时芯片的输入时钟频率为1.193180MHz #define set_intr_gate(n,addr)\ //asm/system.h _set_gate(idt[n], 14, 0, addr) 出现在系统初始化中 struct task_struct{ //在sched.h中 {long state; long counter; lon

文档评论(0)

智慧书苑 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档