高级操作系统——Nachos进程调度

因为这篇文章引用博主 superli90有点多了(主要是他写的很清楚,我也不知道在哪找。所以就直接引用过来了Hhh)于是首先附上链接

版权声明:本文为CSDN博主「superli90」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/superli90/article/details/29373593

Exercise 1 调研
调研Linux或Windows中采用的进程/线程调度算法。具体内容见课堂要求。

1. SCHED_OTHER分时调度策略。

2. SCHED_FIFO实时调度策略,先到先服务。一旦占用CPU则一直运行直到有更高优先级任务达到或自己放弃。

3. SCHED_RR实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列。放在队尾保证了所有具有相同优先级的RR任务的调度公平。

Linux内核将进程分成两个级别:普通进程和实时进程。实时进程的优先级都高于普通进,除此之外,它们的调度策略也有所不同。

1:如果一个进程有实时需求(它是一个实时进程),则只要它是可执行状态的,内核就一直让它执行
2:如果有多个实时进程都处于可执行状态,则内核会先满足优先级最高的实时进程对CPU的需要,直到它变为非可执行状态。
3:只要有高优先级的实时进程一直处于可执行状态,低优先级的实时进程就一直不能得到CPU;只要一直有实时进程处于可执行状态,普通进程就一直不能得到CPU。
4:后来内核进行了一些改动,限定了以sched_rt_period_us为周期的时间内,实时进程最多只能运行sched_rt_runtime_us。这样给普通进程留下了一点点能够得到执行的机会。

Exercise 2 源代码阅读
仔细阅读下列源代码,理解Nachos现有的线程调度算法。
 code/threads/scheduler.h和code/threads/scheduler.cc
 code/threads/switch.s
 code/machine/timer.h和code/machine/timer.cc

scheduler.cc:
Scheduler::ReadyToRun (Thread *thread)
将thread加入到线程队列中
Scheduler::FindNextToRun ()
从线程队列中找到第一个线程
Scheduler::Run (Thread *nextThread)

  1. 保存当前线程为旧线程;
  2. 如果是用户程序,则保存当前CPU寄
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值