Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпора димана.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.84 Mб
Скачать

Соображения мультипроцессорной обработки

Любой код, который может выполняться одновременно на нескольких процес­сорах, должен удовлетворять некоторым ограничениям. Он должен быть реен­терабельным, предотвращать одновременное использование несколькими по­токами глобальных структур данных и не позволять двум потокам захватывать ресурсы таким образом, чтобы заблокировать друг друга (взаимоблокировка, или клинч, deadlock). Кроме того, на многопроцессорных системах существуют специфические проблемы производительности (отсутствующие на однопро­цессорных машинах).

Диспетчер виртуальной памяти реентерабелен, так что для него основны­ми проблемами были предотвращение разрушения данных и взаимоблокиро­вок, а также достижение хорошей производительности.

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

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

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

•предоставляет каждому процессу достаточное количество страниц в рабочем наборе;

•автоматически урезает рабочие наборы процессов, чтобы излишние или неиспользуемые страницы стали доступны другим процессам.

Соображения переносимости

Диспетчер виртуальной памяти зависит от определенных аппаратных возмож­ностей. Ниже приведены требования, которые он предъявляет к процессору:

• 32-разрядные адреса (64-разрядные адреса поддерживаются, но тре­буют некоторой переделки диспетчера виртуальной памяти).

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

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

• Совмещение виртуальных адресов. Процессор должен допускать ото­бражение на один и тот же страничный фрейм двух элементов таблицы страниц одного и того же процесса. ОС часто использует страницу совместно с пользовательским процессом, отображая второй элемент таблицы страниц.

Некоторые части диспетчера виртуальной памяти зависят от особеннос­тей процессора, на котором исполняется ОС. Перечисленные ниже части дис­петчера памяти должны быть модифицированы для каждой аппаратной плат­формы, на которую он переносится.

• Элементы таблицы страниц. Когда элемент таблицы страниц действи­телен, процессор подразделяет эти 32 бита на поля и устанавливает их значения соответствующим образом. Когда элемент недействителен, диспетчер виртуальной памяти использует остальной 31 бит по своему усмотрению. Формат, выбираемый им, зависит от средств виртуальной памяти, предоставляемых процессором.

• Размер страницы. Разные процессоры используют разные размеры страницы. Диспетчер виртуальной памяти выделяет ее в пределах блока в 64 Кбайт, что гарантирует возможность поддержки любого размера страницы от 4 до 64 Кбайт. Страницы менее 4 Кбайт не поддерживаются.

• Защита страниц. Способ использования диспетчером виртуальной па­мяти аппаратной защиты страниц для реализации дополнительной про­граммной защиты, естественно, аппаратно зависим.

• Трансляция виртуального адреса. Алгоритм, используемый диспетчером виртуальной памяти для трансляции виртуального адреса в номер эле­мента таблицы страниц, тоже аппаратно зависим.

54. Операционная система, как и любая большая программная сис­тема, состоит из расположенных друг над другом уровней кода. Верхние уров­ни используют более примитивные (но в данном случае более мощные) функ­ции и структуры данных нижних уровней.

Ядро выполняет наиболее фундаментальные функции Windows NT, опре­деляя, как ОС использует процессор или процессоры и обеспечивая рациональ­ность их использования. Таким образом, эффективность всей ОС зависит от правильной и эффективной работы ядра.

Главной задачей разработчиков при создании ядра NT было обеспечение базы, со­стоящей из примитивов и механизмов с тщательно определенным и предсказу­емым поведением, которые позволили бы высокоуровневым компонентам ис­полнительной системы NT выполнять свои задачи. Используя примитивы ядра, исполнительная система NT может создавать бесконечное разнообразие абст­ракций высокого уровня. Ей не нужно использовать для этого недокументиро­ванные интерфейсы и хитрые трюки или непосредственно обращаться к аппа­ратуре. Ядро отделяет себя от остальных частей исполнительной системе, реа­лизуя механизмы ОС и избегая установления жестких правил.

Предоставляя богатый набор контролируемых универсальных механизмов, ядро NT позволяет Windows NT расти и расширяться предсказуемым и упорядо­ченным образом. (Для простоты будем использовать термин исполнительная система (executive) для обозначения всех компонентов ОС, работающих в режиме ядра, за исключением самого ядра.)