Вопросы по внутренним компонентам ядра Linux - PullRequest
4 голосов
/ 31 января 2011

Я читал «Драйверы для устройств Linux, 3-е издание» и столкнулся с некоторыми пунктами ядра, которые я не совсем понимаю. Надеюсь, что гуру на этом форуме помогут мне.

1) Внутренне ядро ​​Linux работает с виртуальными или физическими адресами? Что меня особенно смущает, так это то, что существует несколько типов адресов (логических, виртуальных, шинных и физических), и все они действительны и работают в ядре.

2) Верно ли, что инструкции процессора не могут напрямую обращаться к данным, хранящимся на периферийных устройствах, и, следовательно, для этих целей используется адресуемая память, то есть буферы?

4) Может ли процесс спать при запросе семафора (который имеет значение 0) и должен ждать его?

4) Атомарные операции - гарантируются ли они конкретными инструкциями ЦП?

Ответы [ 2 ]

6 голосов
/ 31 января 2011
  1. Некоторые специальные биты (например, начальный загрузчик) работают в реальном режиме на физических адресах, но большая часть кода ядра (все части, написанные на C) выполняются в виртуальном адресном пространстве. Вы увидите указатели на другие адресные пространства с аннотациями, чтобы напомнить вам, что не следует напрямую разыменовывать их.
  2. Существуют специальные функции для выполнения копирования между различными другими адресными пространствами (например, пространством конфигурации устройств PCI) и памятью ядра. В зависимости от архитектуры некоторые части могут быть отображены напрямую.
  3. Да.
  4. Не обязательно. Для архитектур, в которых отсутствуют атомарные операции, атомарность может быть гарантирована остановкой всех других процессоров (простой, если одноядерный) и отключением прерываний.
0 голосов
/ 31 января 2011

Три- Да Четыре- Зависит от архитектуры

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...