进程、系统调用和进程调度( 三 )


利用相对精准的时钟中断周期来实现更精准的延时函数
8253/8254 PIT可编程周期计数器/定时器
这部分其实算是复习了,因为之前微机原理学习过 。8254就是比8253功能强一些 。
8253有3个计数器()它们都是16位的 。
计数器作用
0
输出到IRQ0, 以便每隔一段时间让系统产生一次时钟中断
1
通常被设为18,以便每15us做一次RAM刷新
2
连接PC喇叭
进程调度
这一小节主要是利用刚刚的ticks来让进程运行的时间不一,从而在某种意义上实现优先级的概念 。但是这里的调度算法比较简单和操作系统理论书里的很多调度算法不一样 。不过,本着简洁高效的原则,只要能够体现一定的优先级,并对不同优先级的进程实现不同的调度即可 。
初始调度策略改进的调度策略
就是一直调度值最大的进程,直到其ticks为0,再调度下一个第二的进程 。三个进程都结束后,再重置它的ticks为初值 。这样就能够实现按照优先级,优先级值高的进程先被调度,而且执行每次调度执行时间也和优先级成正比 。
可以看到,运行结果如图,打印出的字符的比例和优先级比例15:5:3很接近

进程、系统调用和进程调度

文章插图
总结
最后,作者提到,这个最后的调度策略其实是从linux中借鉴来的,“轻重缓急”四个字可以概况这个策略,优先级高的进程"更早地处理"也被处理“更多的时间” 。
Minix中,进程被分成Task、和User(任务、服务和用户进程)三种,进程调度也为此设置了三个不同的优先级队列来分别调度 。