linux0.11内核分析之进程调度
文章目录
引入
对于一个操作系统小白来说,最重要系统性能的衡量指标就是——流畅度,也就是俗称的“卡不卡”,而这个系统性能背后的支撑就是linux内核的重要组成部分——进程的调度。
进程调度策略概述
进程调度的策略常见有三
1、first come first serve(FCFS)
顾名思义,即先来先服务。指的是每次选择一个最先进入进程队列的进程,为其分配CPU资源,使其进入运行状态,该进程将一直运行至完成或者事件发生使其进入阻塞状态。
-
优点:简单明了
-
缺点:如果进程需要长时间占用CPU资源,则在进程执行期间,别的进程将会一直无法运行,这样的策略将会导致“卡顿”如同家常便饭。
2、高优先级优先
对进程划分优先级,每次选择一个优先级最高的进程运行,低优先级的进程需要等到高优先级的进程运行完成方可获得CPU资源。而该策略又分为抢占式和非抢占式两种策略,区别是当前进程运行的时候能否被后来的高优先级进程打断。
- 优点:照顾紧迫型作业,让“好钢用在刀刃上”
- 缺点:如果队列中一直有新的高优先级进程进入,低优先级的进程可能永远不会被执行;如果低优先级进程访问了高优先级进程所需的共享资源,则高优先级进程由于资源被占用处于阻塞态,低优先级由于优先级低无法获得CPU资源,可能高优先级进程永远无法获得资源。
3、时间片轮转法
给就绪进程队列中的每一个进程分配一定量的时间片,当执行的时间片用完时,把进程送往就绪队列的末尾,再将CPU资源分配给队列中新的队首进程。
- 优点:雨露均沾,系统能对每一个进程做出响应
- 缺点:时间片的大小难以确定,需要经过多次实验方可确定最优值,保证既使得每一个进程都获得一定的CPU执行时间,又体现进程的执行效率
进程调度相关源码阅读
1、schedule
void schedule(void)
{
int i,next,c;
struct task_struct ** p;
/* check alarm, wake up any interruptible tasks that have got a signal */
for(p = &LAST_TASK ; p > &FIRST_TASK ; --p)
if (*p<