2011-01-31 99 views
3

我在阅读“Linux设备驱动程序第三版”,并遇到了一些我不太了解的内核项目。在这个论坛上的希望大师将帮助我。关于Linux内核内部问题

1)Linux内核是否在内部使用虚拟或物理地址进行操作?特别让我困惑的是,有几种类型的地址(逻辑,虚拟,总线和物理),它们都是有效的,可由内核操作。

2)这是正确的,CPU指令不能直接寻址存储在外围设备中的数据,因此使用可寻址的存储器,即缓冲区来达到这些目的?

4)请求信号量(值为0)时进程是否可以休眠并等待它?

4)原子操作 - 是否由特定的CPU指令保证?

+0

您可能要问这对unix.stackexchange.com为好。或者你有任何更具体的问题。只要你能提出正确的问题,你就会得到非常深入的答案。 – Falmarri 2011-01-31 05:47:09

+0

Falmarri,感谢您的链接。也会在那里尝试我的运气。 – Mark 2011-01-31 06:23:03

回答

5
  1. 一些特殊比特(例如初始自举)在物理地址实模式操作,但大多数内核代码(所有用C语言编写的部分)在一个虚拟地址空间中运行。您会看到带有注释的指向其他地址空间的指针,以提醒您不要直接解引用它们。
  2. 在各种其他地址空间(例如PCI设备的配置空间)和内核内存之间执行拷贝有特殊功能。取决于体系结构,某些部分可以直接映射。
  3. 是的。
  4. 不一定。对于缺乏原子操作的体系结构,可以通过停止所有其他处理器(单核简单)和禁止中断来保证原子性。