93
Однако отображаемые объекты обязательно должны быть объектами
памяти – оперативной или внешней. Не могут быть отображаемыми
файлами, например, терминалы или сетевые соединения.
Механизм отображения в память в Open Unix заменяет старые
средства управления памятью. Хотя традиционные системные вызовы
управления памятью здесь тоже сохраняются, но они обеспечиваются
только библиотекой системных вызовов, которая преобразует их в
отображение в память. Механизм отображения в память позволяет
процессам также получать дополнительные частные сегменты в адресном
пространстве процессе. Отображение в память "файла" с именем
"/dev/zero" дает процессу частный сегмент запрошенного размера.
Выполнение системного вызова fork в традиционной ОС Unix
подразумевает откладывание выделения для процесса-потомка отдельных
частных сегментов. Вместо этого применяется политика "копирования при
записи": два процесса – предок и потомок – разделяют один сегмент, но
этот сегмент помечается как защищенный от записи. Пока ни один из
процессов не изменяет содержимого сегмента, процессы используют один
и тот же сегмент. Когда один из процессов пытается писать в сегмент,
происходит исключение, обрабатывая которое ОС создает копию сегмента
для процесса-потомка, и с этого момента каждый процесс использует свой
собственный сегмент. В Open Unix политика "копирования при записи"
реализуется на уровне страниц.
Динамическая компоновка в современных Unix в принципе
идентична таковой во многих других современных ОС (OS/2, Windows 9x,
Windows NT). Модули динамической компоновки называются здесь
разделяемыми объектами (shared object). Они представляют собой
программные модули, содержащие несколько входных точек. Библиотека
разделяемых объектов, однако, содержат не один такой модуль, а целый
набор их. При загрузке или при выполнении кодовый сегмент