1

例如,等待磁盘 I/O 完成的进程将在与正在传输的数据对应的缓冲区头的地址上休眠。当磁盘驱动程序的中断例程注意到传输完成时,它会在缓冲区头上调用唤醒。中断使用内核堆栈来处理当时正在运行的任何进程,并且从该系统进程中完成唤醒。

您能否解释一下我强调的段落中的最后一行。它是关于唤醒一直在等待某些事件发生并因此已经休眠的进程。这一段来自高尔文。顺便问一下,你能推荐一些学习unix操作系统的好书或链接吗?

谢谢。

4

4 回答 4

1

在收到中断时有一些进程正在运行。内核不会切换到其他进程上下文来处理它——这需要时间——它只是在当前上下文中执行必要的操作,并让调度程序知道下次调度时,等待进程已准备好继续。

周围有很多不错的内部书籍。我喜欢 McKusick等人的各种书籍,例如FreeBSD 操作系统的设计和实现

于 2009-04-19T14:43:17.403 回答
1

Maurice Bach 的Unix 操作系统设计是这方面最著名和最全面的书。

于 2009-04-19T15:09:08.510 回答
0

I/O 完成中断将在磁盘发出传输结束信号后立即执行。无论内核当前在做什么,都会这样做。中断处理程序通常非常小且独立。因此,重用当前运行时环境(堆栈、CPU 状态等)比将完整的上下文切换到单独的线程更快。不利的一面是,这意味着中断处理程序只允许做非常有限的事情,比如在其他地方设置一个标志,或者将一个工作项加入队列。此外,他们必须非常小心地清理自己,以免干扰运行过程。

于 2009-04-19T14:45:04.967 回答
0

应该阅读Eric Raymond 的“Unix 编程艺术”以了解 Unix 哲学和文化。真正了解和欣赏其设计背后的原因。

于 2009-04-19T15:43:39.457 回答