16
в состоянии неконтролируемым образом прочитать что-либо из памя-
ти другого процесса или записать в нее. Однако контролируемые
взаимодействия процессов допускаются системой, в том числе за счет
возможности разделения одного сегмента памяти между виртуальной
памятью нескольких процессов. Каждый процесс может образовать
полностью идентичный подчиненный процесс выполнением систем-
ного вызова
FORK() и дожидаться окончания выполнения своих под-
чиненных процессов с помощью системного вызова
WAIT.
После создания процесса предок и потомок могут произвольным
образом изменять свой контекст. В частности, и предок, и потомок
могут выполнить какой-либо из вариантов системного вызова exec,
приводящего к полному изменению контекста процесса.
Нити. Понятие нити (thread, light-weight process − легковесный
процесс, поток управления) давно известно в области операционных
систем. В одной виртуальной памяти может выполняться не один по-
ток управления. Если несколько процессов совместно пользуются не-
которыми ресурсами (общим адресным пространством, общими пере-
менными, аппаратными ресурсами и др.), то при доступе к этим ре-
сурсам они должны синхронизовать свои действия. Многолетний
опыт программирования с использованием явных примитивов син-
хронизации показал, что этот стиль "параллельного" программирова-
ния порождает серьезные проблемы при написании, отладке и сопро-
вождении программ (наиболее трудно обнаруживаемые ошибки в
программах обычно связаны с синхронизацией). Это было главной
причиной того, что в традиционных вариантах ОС UNIX понятие
процесса жестко связывалось с понятием отдельной и недоступной
для других процессов виртуальной памяти.
При появлении систем SMP отношение к процессам претерпело
существенные изменения. В таких компьютерах физически присутст-
вуют несколько процессоров, которые имеют одинаковые по скорости
возможности доступа к совместно используемой основной памяти.
Появление подобных машин на мировом рынке поставило проблему
их эффективного использования. При применении традиционного
подхода ОС UNIX к организации процессов наличие общей памяти
не давало эффекта. К моменту появления SMP выяснилось, что техно-
логия программирования еще не может предложить эффективного и
безопасного способа реального параллельного программирования.
Поэтому пришлось вернуться к явному параллельному программиро-
ванию с использованием параллельных процессов в общей виртуаль-
ной (а тем самым и основной) памяти с явной синхронизацией.