- •36. Подсистема Win32. 32-х разрядный api. Подсистема Win32
- •37. Структура.
- •38. Конструктивные изменения.
- •39. Api: ms-dos и 16-ти разрядной Windows. Виртуальные dos-машины. Api: ms-dos и 16-ти разрядной Windows.
- •Виртуальные dos-машины
- •44. Диспетчер. Виртуальная память. Диспетчер.
- •Виртуальная память
- •45. Средства пользовательского режима: управление памятью, совместное использование. Средства пользовательского режима
- •Управление памятью
- •Совместное использование памяти
- •46. Совместное использование: секции, проекции и проецируемые файлы. Секции, проекции и проецируемые файлы
- •47. Объект-секция. Способы защиты памяти. Объект-секция
- •Защита памяти
- •48. Собственная память процесса. Совместное использование памяти. Собственная память процесса
- •Совместное использование памяти
- •49. Адресное пространство. Подкачка страниц. Адресное пространство
- •Подкачка страниц
- •50. Механизмы подкачки страниц. Механизмы подкачки страниц
- •51. Стратегия подкачки и рабочие наборы. Стратегия подкачки и рабочие наборы
Защита памяти
В Windows NT существует четыре формы защиты памяти. Первые три встречаются в большинстве современных ОС:
• Отдельное адресное пространство для каждого процесса. Аппаратура не позволяет потоку обращаться по виртуальным адресам другого процесса.
• Два режима работы: режим ядра, в котором потоки имеют доступ к системному коду и данным, и пользовательский режим, потоки которого такого доступа не имеют.
• Механизм постраничной защиты. С каждой виртуальной страницей связан набор флажков, определяющий, какие типы доступа к ней разрешены в пользовательском режиме и в режиме ядра.
Следующий механизм, уникальный для Windows NT, обеспечивает еще одну форму защиты памяти:
• Пообъектная защита памяти. Всякий раз, когда процесс открывает описатель объекта—секции или отображает проекцию секции, справочный монитор защиты Windows NT проверяет, имеет ли процесс, пытающийся выполнить операцию, соответствующие права доступа.
48. Собственная память процесса. Совместное использование памяти. Собственная память процесса
Всякий раз, когда поток обращается по виртуальному адресу, диспетчер виртуальной памяти исполнительной системы NT и аппаратура вмешиваются и транслируют этот адрес в физический. Управляя трансляцией виртуальных адресов, система виртуальной памяти гарантирует, что потоки одного процесса не получат доступа к страничному фрейму, принадлежащему другому процессу.
Помимо косвенной защиты за счет трансляции виртуального адреса в физический, каждый процессор, поддерживающий виртуальную память, обеспечивает некоторую форму аппаратной защиты памяти. Однако формы защиты и их аппаратная реализация на разных процессорах различны. Аппаратная защита зачастую минимальна, и ее требуется дополнить механизмами, предоставляемыми программным обеспечением виртуальной памяти. Из-за этого диспетчер виртуальной памяти Windows NT сильнее зависит от аппаратных особенностей, чем другие части системы.
Аппаратная страничная защита действует при всяком обращении потока к памяти. Например, на процессоре MIPS R4000 каждая страница виртуальной памяти — это либо страница пользовательского режима (нижние 2 Гбайт), либо страницей режима ядра (верхние 2 Гбайт); она также имеет признак "только чтение" либо "чтение/запись". Если поток исполняется в режиме ядра, то процессор позволяет ему читать любую действительную страницу памяти и изменять действительные страницы с признаком "чтение/запись". В пользовательском режиме поток может обращаться только к действительным страницам пользовательского режима и модифицировать те из них, которые имеют признак "чтение/запись". MIPS R4000 генерирует страничную ошибку при обращении к недействительной (отсутствующей в памяти) странице. При попытке чтения или записи действительной страницы с нарушением описанных выше правил он генерирует исключение адресной ошибки (нарушение доступа).
Аппаратура может контролировать доступ только для действительных страниц — тех, которые присутствуют в памяти. Если поток обращается к недействительной странице (той, которой в памяти нет), MIPS R4000 генерирует страничную ошибку и в дело вступает программное обеспечение подкачки страниц диспетчера виртуальной памяти.
Диспетчер виртуальной памяти обеспечивает те же виды защиты, которые MIPS R4000 предоставляет для действительных страниц:
• только чтение;
• чтение/запись;
а также предоставляет несколько собственных:
• только исполнение (если есть аппаратная поддержка);
• сторожевая страница;
• нет доступа;
• копирование при записи.
Используя базовые сервисы виртуальной памяти, подсистема среды может управлять страничной защитой личных страниц. Управление защитой страниц может повысить надежность программ, гарантируя, что потоки не модифицируют страницы "только для чтения". Эта возможность также полезна, например, при отладке многопоточной программы, один из потоков которой выполняет ошибочную запись в память. Временно изменив защиту соответствующей страницы на "только чтение" или "нет доступа", отладчик может перехватить неверную операцию потока и локализовать ошибку.
Поток не может выполнять ни чтение, ни запись страницы "только исполнение", однако он может перейти по адресу на этой странице и начать выполнение. Этот тип защиты подходит для совместно используемого кода приложения, например редактора или компилятора. Все потоки должны иметь возможность выполнения данного кода, но никто не должен иметь права читать или изменять исполняемый образ. (Обратите внимание, что ни MIPS R4000, ни Intel 386 или 486 не поддерживают такой тип защиты. Таким образом, на этих процессорах доступ для исполнения эквивалентен доступу "только для чтения".)
Диспетчер виртуальной памяти предоставляет защиту сторожевых страниц для поддержки автоматической проверки переполнения стека. Однако этот тип защиты может также использоваться и для обозначения границ других структур. Когда поток обращается к сторожевой странице, диспетчер виртуальной памяти генерирует исключение сторожевой страницы, и поток получает уведомление о том, что была затронута такая страница. Затем диспетчер виртуальной памяти позволяет продолжить операцию, вызвавшую это исключение. Если подсистема или другое приложение поместит сторожевую страницу, например, в конце динамического массива, то при обращении к этой странице подсистема получит предупреждение и сможет динамически расширить массив.
Защита страницы "нет доступа" используется, чтобы предотвратить чтение или запись данной страницы. При доступе к такой странице диспетчер виртуальной памяти генерирует исключение. Он назначает такой тип защиты страницам, которые не были выделены или были зарезервированы, но не переданы. Тип защиты "нет доступа" используется в основном отладчиками.
Подсистема Win32 обеспечивает приложениям Win32 доступ к средствам защиты страниц диспетчера виртуальной памяти посредством функции API VirtualProtect(). Эта функция позволяет приложениям помечать виртуальные страницы как “только для чтения”, ”чтение/запись” или “нет доступа” . Не обеспечивается защита вида ”сторожевая страница”, “только исполнение” и “компилирование при записи”.
