Глава 5, Конкуренция и состояния состязаний

Предыдущая  Содержание  Следующая V*D*V

Глава 5

 

До сих пор мы уделяли мало внимания проблеме конкуренции - то есть тому, что происходит, когда система пытается сделать больше, чем что-то одно одновременно. Управление конкуренцией является, однако, одной из основных проблем в программировании операционных систем. Ошибки, связанные с конкуренцией, одни из самых лёгких для создания и те, которые труднее всего найти. Даже опытные программисты ядра Linux в конечном итоге периодически допускают ошибки, связанные с конкуренцией.

 

В ранних ядрах Linux было относительно мало источников конкуренции. Симметричные многопроцессорные системы (Symmetric multiprocessing systems, SMP) не поддерживались ядром и единственной причиной одновременного исполнения было обслуживание аппаратных прерываний. Такой подход предлагает простоту, но это больше не работает в мире, который ценит производительность систем со всё большим и большим числом процессоров, и настаивает на том, чтобы система быстро реагировала на события. В ответ на эти требования современного оборудования и приложений ядро Linux превратилось в точку, где происходит одновременно много больших событий. Эта эволюция привела к гораздо более высокой производительности и масштабируемости. Это, однако, значительно усложняет программирование ядра. Программисты драйверов устройств должны теперь учитывать конкуренцию в их разработке с самого начала и они должны иметь чёткое понимание возможностей, предоставляемых ядром для управления конкуренцией.

 

Цель этой главы - начать процесс создания такого понимания. С этой целью мы вводим средства, которые сразу же применяются в драйвере scull из Главы 3. Другие средства, представленные здесь, не будут использоваться ещё некоторое время. Но сначала мы взглянем на то, что может пойти не так с нашим простым драйвером scull и как избежать этих потенциальных проблем.

 

Предыдущая  Содержание  Следующая