Linux OS Scheduling

(服务器抽疯,图片全部丢失,日后再补~待续~)

Scheduling 调度

Scheduling是指决定哪一个进程(线程)运行的过程

 

Context switching

从一个进程转换到另一个进程的实际过程。

什么时候会发生context switch?

(1) Whenever a process goes to blocking / waiting state.  e.g., wait()/sleep() is called
(2) A POSIX signal arrives (e.g., SIGCHLD)
(3) An interrupt arrives (e.g., keystroke)
(4) When the OS scheduler says “time’s up!”. put it back to “ready”
(5) When the OS scheduler says “hey, please let the PRESIDENT(高优先级) use first”. put it back to “ready”

作用:

(1) For multi-tasking 多任务
(2) For fully utilize the CPU 充分利用CPU资源

过程:

将当期进程在kernel space中的信息保存到user space里,比如current register values,program counter (当期程序运行到哪一行代码);接着从user space里把即将运行的进程的一些信息(同上)加载到kernel space里。

 

Process scheduling 进程调度

主要有两种类型的进程

092431_iT0Y_2242731.png

(sys-time经常与系统I/O有关,如读写文件,打印到终端...)

 

Preemptive scheduling 抢占式调度

当一个进程已经获取了CPU,它能一直使用直到

-the process voluntarily waits for I/O 等待 I/O
-the process voluntarily releases the CPU, e.g., exit(). 主动放弃(退出)
-particular kinds of interrupts (e.g., periodic clock interrupt, a new process steps in) are detected. 被打断

 

优点: 有利于注重交互的系统,因为每个任务都有机会得到执行

缺点:不利于追求快速完成任务的系统(调度带来额外的时间花费)

 

Scheduling algorithms 调度算法

offline scheduling algorithm 假设已经知道了所有进程的信息。作为理论baseline。

online scheduling algorithm 实际使用的算法,无法预知所有进程的信息。

 

调度算法中的几个概念:

Scheduling order : 调度顺序

Number of context switching :   context switching的次数

Individual & average turnaround time :Turnaround time指一个进程的现实结束时间与现实开始时间的间隔(包括等待cpu的时间)

Individual & average waiting time : waiting time 指一个进程等待cpu的总时间

 

几种基础算法

Shortest-job-first (SJF) 最短任务优先

Non-preemptive SJF 非抢占型: 在所有当前任务中,将费时最少的任务优先安排,直到当前任务完成后再安排下一个任务。

  例:

092542_sgVF_2242731.png

简单分析:尽管P2,P3,P4的CPU需求时间都远小于P1,但也只能等待P1完成后才有机会获得CPU。

 

Preemptive SJF 抢占型 : 每当有新的任务加入时,调度器都检查一下,将当前所有任务中需要的剩余时间最短的任务安排执行。

093409_6uoi_2242731.png

简单分析:由于P1的耗时要求太长,P2,P3,P4都先后抢占了它的执行,更合理,但是任务切换次数也增加了。

 

简单的比较

093547_fjmn_2242731.png

Preemptive SJF 的waiting time 和 turnaround time 都更短,但是context switch次数增加。

context switch是相对耗时的操作,因此Preemptive SJF实际运行时间会稍长一些。

 

Round-robin (RR)  轮循调度

轮循调度是抢占型的,每个任务都有一个量子值quantum,加入调度后,量子值被初始化到指定的一个值。接着,最先到且还未完成的任务进入执行quantum长度的时间,之后释放cpu,换下一个任务顺序执行,当结束一轮调度后,尚未完成的任务恢复量子值,进入下一轮调度。

093728_YVsX_2242731.png

简单分析: 更公平的一种策略,每个任务都依次得到cpu,执行一段时间后再让给下一个任务。

比较结果

093826_QDv9_2242731.png

轮循调度的三个指标的表现都是最差的,但是轮循调度具有high responsiveness的优点,因为每个任务都能间隔地获得cpu(不会有任务需要等待过长的时间),这使每个任务都有进展的感觉。

Priority scheduling with multiple queues. 多队列优先级调度

每个任务都拥有一个优先级,系统安排优先级最高的任务先执行。同等优先级的任务,再使用其他的调度算法结合使用,比如 轮循调度,FIFO等。

优先级机制分2类,静态优先级和动态优先级。

Linux kernel 2.6拥有100个优先级(0-99)。

高优先级任务通常是重要的且耗时短的任务(否则会导致低优先级的任务过长时间没有得到cpu资源)。

低优先级的任务只有在高优先级的任务都被完成了才有机会被安排执行。

093859_kVsC_2242731.png

093918_cCPG_2242731.png

(注:FIFO指 first in first out 即先到先得策略)

 

 

 

 

 

转载于:https://my.oschina.net/Bruce370/blog/886363

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值