Devices and Interrupts
Contents
Devices and Interrupts
本章引入外设, 讲解了round-robin调度算法的优缺点.
首先, “IO阻塞"的本质是什么?
当IO请求没有收到回复时, OS在调度到该进程时还是会继续执行等待IO的指令.
虽然每次调度到正在等待IO的进程也花不了多少条指令, 但还是要切换上下文啥的, 为了提高轮询的效率, 我们可以想办法让这些等待IO的进程不会被调度.
我们可以将进程分为不同的状态, 只有状态为0的进程可以被正常调度.
当进程开始等待IO时, 便用 sleep(id)
来改变进程的状态, 其中 id
相当于这个IO资源的标识符, 比如可以有多个进程都在等待键盘的输入. 当相应的IO时间响应后, 再根据这个id
去恢复进程的状态.
加了状态的轮询调度感觉也挺合理的!
那么, 轮询能满足所有的任务吗? 当然是不能!
某些特殊的系统, 例如车载系统, 会有一些特别紧急的中断必须要优先执行, 比如紧急制动啥的. 按我们之前的设计, 中断都是在内核态中执行, 而内核态会禁用中断, 所以当需要紧急制动时, 巧好有一个耗时较长的中断在执行, 可能就会引发悲剧!
像这种每个中断都要及时响应或者在一定时间内执行完成的, 一般称为实时调度.
本章介绍了弱优先级抢占和强优先级抢占两种调度算法. 区别就是当前的中断是否能被高优先级的中断中断 (