-
12-09-2019 - |
题
例如,一个过程等待 磁盘I / O完成将睡在 缓冲区头的地址 对应于该数据是 转移。当中断 对于常规的磁盘驱动器指出, 转让完成后,它会调用 唤醒的缓冲区头。的的 中断使用的内核堆栈 不管过程正好是 在运行的时候,并且是唤醒 从该系统过程中完成的。强>
能否请您解释一下在我所强调的段落中的最后一行。它是关于醒来已等待某一事件的发生,因此已经睡了的过程。这对从高尔文。顺便说一句,你可以推荐一些好书或链接,学习UNIX操作系统?
感谢。
解决方案
有是一些过程在接收到中断时正在运行。内核不超过更改为其他进程上下文来处理它 - 这将需要时间 - 它只是做了什么是在目前情况下有必要,并让调度知道在下一次进度,等待的过程是准备以继续。
有一些很好的内部书籍周围。我喜欢的各种McKusick 的等人书,如 FreeBSD操作系统的设计与实现。
其他提示
UNIX操作系统的
莫里斯Bach的设计是最公已知的和全面的书上的主题。
在I / O完成的中断将被只要磁盘信号通知传输结束执行。不管什么样的内核目前正在做这做。中断处理程序通常是非常小的,自成一体。因此,这是更快的重新使用当前的运行时环境(堆栈,CPU状态等),而不是做了充分的上下文切换到一个单独的线程。不利的一面,这意味着中断处理程序只允许做的非常有限的事情,比如设置一个标志别的地方,或者一个入队的工作项目。此外,他们必须照顾自己非常仔细地清理,使正在运行的进程不受影响。
不隶属于 StackOverflow