关于Linux内核内部的问题

Mar*_*ark 4 linux linux-kernel

我正在阅读"Linux设备驱动程序,第3版",并面对一些我不太了解的内核项目.希望大师在这个论坛上帮助我.

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

2)CPU指令是否正确无法直接寻址存储在外围设备中的数据,因此可以使用可寻址存储器,即缓冲区,用于这些目的?

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

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

eph*_*ent 6

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