【问题标题】:Questions on Linux kernel internalsLinux内核内部问题
【发布时间】:2011-01-31 04:46:18
【问题描述】:

我正在阅读“Linux 设备驱动程序,第 3 版”,遇到了一些我不太了解的内核项目。希望这个论坛上的大师能帮助我。

1) Linux 内核内部是使用虚拟地址还是物理地址运行?尤其让我困惑的是,有几种类型的地址(逻辑地址、虚拟地址、总线地址和物理地址),它们都是有效的并且可以被内核操作。

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

4) 进程在请求信号量(值为 0)并且必须等待时可以休眠吗?

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

【问题讨论】:

  • 您可能还想在 unix.stackexchange.com 上问这个问题。或者您有任何更具体的问题。只要你能提出正确的问题,你就会在那里得到一个非常深入的答案。
  • 法尔马里,感谢您的链接。也会在那里碰碰运气。

标签: linux linux-kernel


【解决方案1】:
  1. 一些特殊位(例如初始引导程序)在物理地址上以实模式运行,但大多数内核代码(所有用 C 编写的部分)在虚拟地址空间中运行。您会看到带有注释的指向其他地址空间的指针,以提醒您不要直接取消引用它们。
  2. 有一些特殊功能可以在各种其他地址空间(例如 PCI 设备的配置空间)和内核内存之间执行复制。根据架构,某些部分可以直接映射。
  3. 是的。
  4. 不一定。对于缺乏原子操作的架构,可以通过停止所有其他处理器(如果是单核处理器则很容易)和禁用中断来保证原子性。

【讨论】:

    【解决方案2】:

    三个-是的 四架构依赖

    【讨论】:

      猜你喜欢
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多