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

Современные операционные системы
Процессы и потоки  Взаимодействие процессов

Взаимодействие процессов

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

Взаимодействие процессов читать полное описание.


Процессы и потоки  Сигналы прерывания клавиатуры

Сигналы прерывания клавиатуры

Другие сигналы, например прерывания клавиатуры, не имеют определенного отношения к потокам. Кто их должен перехватывать? Один специально назначенный поток? Или все потоки? А может быть, заново создаваемый всплывающий поток? Кроме того, что произойдет, если один из потоков вносит изменения в обработчики сигналов, не уведомляя об этом другие потоки? А что случится, если одному потоку потребуется перехватить конкретный сигнал (например, когда пользователь нажмет CTRL-C), а другому потоку этот сигнал понадобится для завершения процесса? Подобная ситуация может сложиться, если в одном или нескольких потоках выполняются стандартные библиотечные процедуры, а в других — процедуры, созданные пользователем. Совершенно очевидно, что такие требования потоков несовместимы.

Сигналы прерывания клавиатуры читать полное описание.


Процессы и потоки  Проблема с процедурами распределения памяти

Проблема с процедурами распределения памяти

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

Проблема с процедурами распределения памяти читать полное описание.


Процессы и потоки  Активация планировщика

Активация планировщика

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

Далее мы опишем один из таких способов, изобретенный Андерсоном (Anderson et al., 1992), который называется активация планировщика. Родственная работа рассматривается Элдером и Скоттом (Edler et al.,1988; Scott et al., 1990).

Активация планировщика читать полное описание.


Процессы и потоки  Гибридная реализация

Гибридная реализация

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

Гибридная реализация читать полное описание.