西安理工大学《linux操作系统》Linux-第四讲.pptVIP

西安理工大学《linux操作系统》Linux-第四讲.ppt

  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文档。上传文档
查看更多
* 4.2.5 计算优先级和时间片(续) 为支持交互式进程,调度程序还提供: 若一个进程的交互性很强,即优先级比较高,则当它的时间片用完后,会被再次放置到活动数组而不是直接放入过期数组。 由scheduler_tick()实现。 * 4.2.6 睡眠与唤醒 进程休眠时,内核的操作: 1、进程把自己标记为休眠状态; 2、把自己从可执行队列中移出,放入等待队列; 3、调用schedule()选择和执行一个其他的进程 * 4.2.6 睡眠与唤醒(续) 进程加入等待队列步骤: 1、调用DECLARE_WAITQUEUE()创建一个等待队列的项; 2、调用add_wait_queue()把自己加入到队列中; 3、将进程的状态变更为TASK_INTERRUPTIBLE或 UNTASK_INTERRUPTIBLE; 4、若进程被设置为TASK_INTERRUPTIBLE,则信号唤醒进程; 5、检查条件,若为真,停止休眠;否则,调用schedule(); 6、当进程被唤醒后,再次检查条件; 7、若条件满足,进程将自己设置为TASK_RUNNING并调用remove_wait_queue()把自己移出队列。 * 4.2.7 负载平衡程序 负载平衡程序负责对对称多处理及系统的可执行队列之间的负载均衡; 负载均衡程序由kernel/sched.c中的函数load_balance()实现; 负载均衡程序调用时,要锁住当前处理器的可执行队列并屏蔽中断,以避免可执行队列被并发访问。 五个步骤:1、查找最繁忙队列;2、在最繁忙队列中选择一个优先级数组;3、寻找含有进程并且优先级最高的链表;4、选择一个最合适进程,移动到当前队列;5、只要可执行队列之间仍然不均衡,重复此过程。最后,解除对当前队列的锁。 * 4.3 抢占和上下文切换 上下文切换即把一个可执行进程切换到另一个可执行进程。由kernel/sched.c中的context_switch()函数处理: 1、调用定义在asm/mmu_context.h中的switch_mm(),切换虚拟内存映射; 2、调用定义在asm/system.h中的switch_to(),切换处理器状态,包括保存、恢复栈信息和寄存器信息。 * 4.3.1 用户抢占 发生用户抢占的原因: 1、从系统调用返回用户空间; 2、从中断处理程序返回到用户空间 这些时候都要检查need_resched标志位,若 其被置位,则调用schedule(),即发生抢占 * 4.3.2 内核抢占 内核抢占会发生在: 1、当从中断处里程序正在执行,且返回内核空间之前; 2、当内核代码再一次具有可抢占性的时候; 3、如果内核中的任务显式的调用schedule(); 4、如果内核中的任务阻塞(这也会调用schedule()) 前两种情况需要检查need_resched标志位及preempt_count计数器(在thread_info中定义,记录加锁个数)。 need_resched被置位且preempt_count为0时,调用schedule(),即发生抢占 * 4.4 关于实时 非实时调度策略:SCHED_NORMAL 实时调度策略1:SCHED_FIFO 实时调度策略2:SCHED_RR 先进先出,不使用时间片,一直执行到更高优先级的SCHED_FIFO或SCHED_RR任务来抢占 使用时间片的SCHED_FIFO Linux实时调度策略的特点 静态优先级;软实时工作(对实时任务的调度不保证) * 4.5 与调度相关的系统调用 系统调用 描述 nice() 设置进程的nice值 sched_setscheduler() 设置进程的调度策略 sched_getscheduler() 获取进程的调度策略 sched_setparam() 设置进程的实时优先级 sched_getparam() 获取进程的实时优先级 sched_get_priority_max() 获取实时优先级的最大值 sched_get_priority_min() 获取实时优先级的最小值 sched_rr_get_interval() 获取进程的时间片值 sched_setaffinity() 设置进程的处理器的亲和力 sched_getaffinity() 获取进程的处理器的亲和力 sched_yield() 暂时让出处理器 * 4.5 与调度相关的系统调用 与调度策略和优先级相关的系统调用 与处理器绑定有关的系统调用 放弃处理器时间 ◇

文档评论(0)

***** + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8135026137000003

1亿VIP精品文档

相关文档