例如,一个等待的过程 磁盘I / O完成就会睡上了 缓冲区头的地址 对应于数据 转移。当中断 磁盘驱动程序的例程注意到 转移完成,它打电话 唤醒缓冲区头。的的 中断使用内核堆栈 无论发生什么过程 当时正在运行,而唤醒则是 从该系统流程完成。
请您解释我强调的段落的最后一行。它是关于唤醒一直等待某个事件发生的过程,因此已经睡了。这段是来自高尔文。顺便问一下,你可以为学习unix操作系统提供一些好的书或链接吗?
感谢。
答案 0 :(得分:1)
在收到中断时有某些进程正在运行。内核不会转换到其他进程上下文来处理它 - 这需要时间 - 它只是在当前上下文中执行必要的操作,并让调度程序知道下次调度时,等待进程已准备就绪继续。
周围有许多好的内部书籍。我喜欢各种McKusick et al 书籍,如The Design and Implementation of the FreeBSD Operating System。
答案 1 :(得分:1)
莫里斯·巴赫的Design of the Unix Operating System是关于这一主题的最着名和最全面的书。
答案 2 :(得分:0)
一旦磁盘发出传输结束信号,就会执行I / O完成中断。无论内核当前在做什么,都可以完成此操作。中断处理程序通常非常小并且是独立的。因此,重用当前运行时环境(堆栈,CPU状态等)而不是完全上下文切换到单独的线程更快。在不利方面,这意味着只允许中断处理程序执行非常有限的操作,例如在其他位置设置标志或者对工作项进行排队。此外,他们必须非常小心地进行清理,以免跑步过程受到干扰。
答案 3 :(得分:0)