Современные операционные системы

Современные операционные системы
Процессы и потоки  Строгое чередование

Строгое чередование

Третий подход к решению проблемы взаимных исключений показан на рис. 2.17. Этот программный фрагмент, как почти все фрагменты, приводимые в этой книге, написан на языке С. Выбор пал именно на этот язык, поскольку настоящие операционные системы фактически всегда пишутся на С (или изредка на С++) и практически никогда не пишутся на Java, Modula 3 или Pascal. Мощность, эффективность и предсказуемость языка С — именно те характеристики, которые крайне необходимы для написания операционных систем. Java, к примеру, не является предсказуемым языком, поскольку в критический момент у него может закончиться свободная память и возникнуть потребность в вызове сборщика мусора для очистки памяти в самый неподходящий момент. Для С это не свойственно, поскольку в этом языке нет сборщика мусора. Количественное сравнение С, С++, Java и четырех других языков приведено в работе Пречелда (Precheld, 2000).


Строгое чередование читать полное описание.


Процессы и потоки  Мьютексы в пакете pthreads

Мьютексы в пакете pthreads

Пакет Pthreads предоставляет ряд функций, которые могут быть использованы для синхронизации потоков. Основным механизмом является использование переменных — мьютексов, предназначенных для защиты каждой критической области. Каждая такая переменная может быть в заблокированном или незаблокированном состоянии. Поток, которому необходимо войти в критическую область, сначала пытается заблокировать соответствующий мьютекс. Если мьютекс не заблокирован, поток может войти в нее беспрепятственно и заблокировать мьютекс в одном неделимом действии, не позволяя войти в нее другим потокам. Если мьютекс уже заблокирован, вызывающий поток блокируется до тех пор, пока не разблокируется мьютекс.

Мьютексы в пакете pthreads читать полное описание.


Процессы и потоки  Условные переменные и мьютексы

Условные переменные и мьютексы

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

Также стоит заметить, что условные переменные (в отличие от семафоров) не запоминаются. Если сигнал отправлен условной переменной, изменения значения которой не ожидается ни одним из потоков, сигнал теряется.

Условные переменные и мьютексы читать полное описание.


Процессы и потоки  Запрещение прерываний

Запрещение прерываний

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

Запрещение прерываний читать полное описание.


Процессы и потоки  Различие между процессами и потоками

Различие между процессами и потоками

На этот вопрос есть два ответа. Во-первых, некоторые общие структуры данных, например семафоры, могут храниться в ядре и быть доступны только через системные вызовы. Такой подход позволяет устранить проблему. Во-вторых, большинство современных операционных систем (включая UNIX и Windows) предлагают процессам способ, позволяющий использовать некоторую часть их адресного пространства совместно с другими процессами. В этом случае допускается совместное использование буферов и других структур данных. В худшем случае, когда нет доступа ни к чему другому, можно воспользоваться общим файлом.

Различие между процессами и потоками читать полное описание.