- 论坛徽章:
- 0
|
今天已经入手此书,有点儿贵啊。。。 500多页的书,定价98.。。大概翻了一下,作者确实是下了一番功夫的,态度看出来很认真。
想趁此请教一个关于中断栈的问题:
当内核栈大小是8k时,中断处理函数的栈就位于内核栈上,如果在中断处理函数中有引起阻塞的代码,那么在这种情况下,调度器最终究竟能不能重新调度当前被中断的进程?(在LKD里,love只是简单地说在中断上下文中,没法重新调度)
当内核栈大小为4k时候,内核会分配专门的异常栈、硬中断栈,软中断栈,可否告知它们具体在内存中的位置?谢谢。
另外,在推荐序中发现个小错误,《深入理解linux内核》的英文名就是《understanding the linux kernel》,前边没有 deep 这个单词。
======================================================================================
书的定价完全是出版社定的,我在临出版前才被告知价格,他们是专业的商人,所以整个过程我只负责书的内容和整体框架。这本书从终稿到现在差不多有三个多月了,其实还是有很多遗憾在里面的,我想再版时应该会好很多,现在我能做的只能是在论坛上补充一些内容,发帖比写书自由多了,呵呵
关于中断栈的问题,实际当中绝对不应该在中断处理函数中引用可能阻塞的代码,因为这会引起很多问题。不过可以讨论一下你所关心的“最终究竟”,如果象你所说,中断栈位于内核栈上,那么这个中断上下文实际上寄生在被中断进程的上下文当中,理论上被重新调度应该是可行的。但是目前内核在处理中断时,会重新分配一个中断栈(mov PER_CPU_VAR(irq_stack_ptr),%rsp),中断处理函数有自己的上下文,所以如果阻塞,调度器无法找到current进程。我没听说过软中断栈的提法,也没仔细研究过它们的内存位置,所以没办法回答这个问题。还有,内核并不会因为栈大小来分配什么专门的栈,你后面的问题有点象是x86_64 IST中的内容,可以参考一下AMD64 Architecture Programmer's Manual V2 System Programming, 官网上可下
最后的勘误,会发在www.embexperts.com论坛上。
|
|