Особенности разработки части программного обеспечения операционной системы, управляющей памятью, зависят от ответа на три основныхвопроса.
1. Будет ли использоваться виртуальная память.
2. Будет ли использоваться сегментация, страничная адресация или обе указанные технологии.
3. Какие алгоритмы будут использованы для различных аспектов управления памятью.
Ответы на первые два вопроса тесно связаны с используемой аппаратной платформой. Так, ранние реализации UNIX не использовали виртуальную память, поскольку процессоры, на которых работали эти операционные системы, не поддерживали ни сегментации, ни страничной организации, а без аппаратной поддержки преобразования адресов ни сегментация, ни страничная организация никакой практической ценности не представляют.
Приведем два небольших замечания по поводу первых двух вопросов из представленного списка. Во-первых, за исключением операционных систем типа MS DOS для некоторых старых персональных компьютеров и специализированных систем, все важные операционные системы используют виртуальную память. Во-вторых, "чистая" сегментация становится очень редким явлением. При комбинации сегментации и страничной организации основная масса вопросов управления памятью, с которыми сталкивается разработчик операционной системы, лежит в области страничной организации. Таким образом, мы сосредоточим свое внимание на вопросах, связанных со страничной организацией памяти.
Ответ на третий из поставленных в этом разделе вопросов связан с программным обеспечением операционной системы, и именно ему посвящен данный раздел. В табл. 8.3 перечислены основные рассматриваемые в этом разделе стратегии. В каждом случае ключевым вопросом становится производительность: требуется сократить количество прерываний из-за отсутствия страницы в памяти, поскольку их обработка приводит к существенным накладным расходам, которые включают как минимум принятие решения о том, какие резидентные страницы должны быть замещены, и операции ввода-вывода по замене страниц в основной памяти. Кроме того, операционная система должна активизировать на время выполнения медленных операций ввода-вывода другой готовый к работе процесс. Ни одна из перечисленных в табл. 8.3 стратегий не является "наилучшей". Задача управления памятью чрезвычайно сложна. Кроме того, производительность каждого набора стратегий зависит от размера основной памяти, относительной скорости основной и вторичной памяти, размера и количества конкурирующих за ресурсы процессов и поведения отдельных программ. Последняя характеристика зависит от природы приложения, использованных языка программирования и компилятора, стиля программиста, а для интерактивных программ — от динамичности пользователя. Так что читатель не должен ожидать окончательного ответа на поставленные вопросы. Для малых вычислительных систем разработчик операционной системы должен попытаться выбрать такой набор стратегий, который представляется ему наиболее подходящим; в случае использования больших систем, в частности майнфреймов, операционная система должна быть оснащена инструментами для мониторинга и управления, которые позволят администратору настроить ее таким образом, чтобы получить наивысшую производительность для данных физических параметров и решаемых на ней задач.
Таблица 8.3. Стратегии операционной системы для виртуальной памяти
Стратегия выборки
По требованию
Предварительная выборка
Стратегия размещения
Стратегия замещения
Основные алгоритмы
Оптимальный
Дольше всех неиспользовавшиеся
Первым вошел – первым вышел
Часовой
Буферизация страниц
Управление резидентным множеством
Размер резидентного множества Фиксированный
Переменный
Область видимости
Глобальная
Локальная
Стратегия очистки
По требованию
Предварительная очистка
Управление загрузкой
Степень многозадачности