2009-04-19 88 views
1

例如,过程等待 磁盘I/O完成将睡在对应于该数据是 传送的缓冲区头 的 地址。当磁盘驱动程序的中断 例程注意到 传输完成时,它会调用 唤醒缓冲区头文件。 中断使用内核堆栈 无论发生哪种进程碰巧当时正在运行 ,并且唤醒是从该系统进程完成的 。进程调度问题

请您介绍我强调的段落中的最后一行。这是关于唤醒已经等待某个事件发生并因此睡眠的过程。这一段来自高尔文。顺便说一下,你可以建议一些好的书或链接学习UNIX操作系统?

谢谢。

+0

如果您正在寻找一本了解内核的好书,了解Linux内核是关于Linux内部的一本非常棒的书。 – Zifre 2009-04-19 14:49:44

回答

1

一些过程在收到中断时运行。内核不会切换到其他进程上下文来处理它 - 这需要时间 - 它只是在当前上下文中做了必要的事情,并让调度程序知道下一次调度时,等待进程已准备就绪继续。

有很多很好的内部书籍。我喜欢各种McKusick 书籍,如The Design and Implementation of the FreeBSD Operating System

+0

真的非常感谢你的支持。 FreeBSD使用 页面着色实现页面着色。队列根据处理器的L1和L2高速缓存的大小排列;当需要分配一个新页面时,FreeBSD会尝试获取最适合缓存的页面。 谢谢 – mawia 2009-04-19 15:13:07

+0

哇,不在评论我不能。 – 2009-04-19 15:25:41

0

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

0

Eric Raymond的'The Art of Unix Programming',应该被理解为了解Unix的哲学和文化。要真正了解和理解其设计背后的原因。