Главная » Ядро Linux » Синхронизация и параллелизм

0

Ядро подвержено  состояниям  конкуренции   за ресурсы  (race condition).  В отличие от однопоточной  пользовательской  программы,  ряд свойств ядра позволяет  осуществлять  параллельные  обращения  к ресурсам общего доступа,  и  поэтому  требуется выполнять  синхронизацию для предотвращения состояний  конкуренции  за ресурсы. В частности,  возможны  следующие ситуации.

• Ядро  Linux  поддерживает многопроцессорную  обработку. Поэтому,  без  соответствующей защиты,  код  ядра  может  выполняться  на  одном,  двух  или  большем  количестве процессоров и  при  этом  одновременно  обращаться к  одному ресурсу.

• Прерывани я  возникают асинхронн о  по  отношению  к  исполняемому коду.

Поэтому, без  соответствующей защиты, прерывания могут  возникнуть во  время обращения  к  ресурсу  общего  доступа,  и  обработчик прерывания  может  тоже обратиться к  этому  же  ресурсу.

• Ядро  Linux  является преемптивным.  Поэтому,  без  соответствующей  защиты, исполняемый код  ядра  может  быть  вытеснен в пользу  другого  кода  ядра, который  тоже  может  обращаться к  некоторому общему  ресурсу.

Стандартное решение  для  предотвращения состояния  конкуренции  за  ресурсы

(состояния гонок) — это  использование спин-блокировок и семафоров.

Более  полное  обсуждение вопросов синхронизации  и  параллелизма приведено в следующих    главах.

Переносимость  — это важно

При  разработке пользовательских программ переносимость  не всегда является це лью, однако   операционная система  Linux  является переносимой и  должна  оставаться  такой.  Это  означает, что  платформо-независимый код, написанный на языке  С, должен  компилироваться без  ошибок и  правильно выполняться на  большом количестве  систем.

Несколько правил, такие  как  не  создавать  зависимости от  порядка следования байтов,  обеспечивать возможность  использования  кода  для  64-битовых систем,  не привязываться к размеру  страницы памяти или  машинного слова  и другие— имеют большое значение.  Эти  вопросы более  подробно освещаются в одной  из  следующих глав.

Резюме

Да,  ядро—  это  действительно  нечто  иное:   отсутствует   защита   памяти, нет  проверенной библиотеки функций языка  С, маленький стек, большое дерево  исходного кода.  Ядро  Linux  играет  по  своим  правилам и  занимается  серьезными  вещами.  Тем не  менее, ядро—  это  всего  лишь  программа; оно,  по  сути, не  сильно   отличается от других  обычных программ.  Не  нужно  его  бояться.

Понимание  того, что  ядро  не  так  уж страшно, как  кажется, может  стать  первым шагом  к пониманию того, что  все  имеет  свой  смысл. Однако чтобы  достичь  этой  утопии,  необходимо стараться, читать  исходный код,  изменять его  и  не  падать  духом.

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

Источник: Лав,  Роберт. Разработка ядра  Linux, 2-е  издание. : Пер.  с англ.  — М.  : ООО  «И.Д.  Вильяме» 2006. — 448 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии