Совместно используемые страницы

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

Если поддерживаются отдельные I- и D-пространства, задача совместного использования программ становится относительно простой за счет наличия одного или нескольких процессов, использующих одну и ту же таблицу страниц для своих I-пространств, но разные таблицы страниц для своих D-пространств. Обычно в реализациях, поддерживающих совместное использование страниц таким образом, таблица страниц является структурой данных, независимой от таблицы процессов. При этом, как показано на рис. 3.23, каждый процесс в своей таблице процесса имеет два указателя: один на таблицу страниц I-пространства, другой на таблицу страниц D-пространства. Когда планировщик процессов выбирает запускаемый процесс, он использует эти указатели для определения местонахождения таблиц страниц и настройки с их помощью диспетчера памяти (MMU). Процессы могут совместно использовать программы (или иногда библиотеки) даже в отсутствие отдельных I- и D-пространств, но для этого используется более сложный механизм.

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

Также при остановке процесса A необходимо иметь возможность определить, какие страницы все еще используются, чтобы их дисковое пространство случайно не оказалось освобожденным. Просмотр всех таблиц страниц для того, чтобы определить совместное использование страницы, — обычно очень затратная операция, поэтому для отслеживания совместно используемых страниц понадобится специальная структура данных, особенно если предметом совместного использования является отдельная страница (или ряд страниц), а не вся таблица страниц.

Совместное использование данных является более сложной задачей, чем совместное использование кода, но и она не является невыполнимой. В частности, в UNIX после системного вызова fork родительский и дочерний процессы вынуждены совместно использовать как текст программы, так и данные. В системах со страничной организацией


памяти часто практикуется предоставление каждому из таких процессов собственной таблицы страниц и наличие у них обоих указателя на один и тот же набор страниц. Таким образом, при выполнении системного вызова fork копирования страниц не происходит. Тем не менее все страницы с данными отображаются для каждого процесса как страницы только для чтения — READ ONLY.

Пока оба процесса только читают свои данные, не внося в них изменений, эта ситуация может продолжаться. Как только какой-нибудь из процессов обновит слово памяти, нарушение защиты режима только для чтения приведет к системному прерыванию операционной системы. После чего делается копия вызвавшей эту ситуацию страницы, чтобы у каждого процесса имелся собственный экземпляр. Теперь для обеих копий устанавливается режим чтения-записи — READ-WRITE, поэтому следующие записи в каждую копию происходят без системного прерывания. Эта стратегия означает, что те страницы, которые никогда не изменяются (включая все страницы программы), не нуждаются в копировании. Копирование требуется только для тех страниц, которые на самом деле подвергаются изменениям. Этот подход, названный копированием при записи (copy on write), повышает производительность за счет сокращения объема копирования.

3.5.6.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Совместно используемые страницы:

  1. Первая страница
  2. Приложение СЛОВАРЬ ТЕРМИНОВ, ИСПОЛЬЗУЕМЫХ В АКТАХ ИНФОРМАЦИОННОГО ЗАКОНОДАТЕЛЬСТВА
  3. 3.3. Научно-технические методы и средства, используемые для лабораторного исследования объектов
  4. 3.2. Научно-технические средства и методы криминалистической техники, используемые для обнаружения, фиксации и изъятия доказательств
  5. 12.3.3. Совместное путешествие
  6. ДЕЯТЕЛЬНОСТЬ СОВМЕСТНАЯ
  7. 3. Проекты совместного внедрения
  8. О недостатках совместного сна
  9. Статья 1130. Договор о совместной деятельности
  10. § 3. Право общей совместной собственности
  11. Статья 1131. Форма и условия договора о совместной деятельности
  12. § 3. Право общей совместной собственности