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

13. Проблема переключения контекста. Виртуальная память процесса в Windows. (Лекция 3)

Проблема переключений контекста.

Системные вызовы (обращение прикладной программы к ядру ОС для выполнения какой-либо операции (обеспечивает доступ со стороны приложений к возможностям ОС)), являющиеся блокирующими, обычно приводят к смене контекста потока, т.е. меняется выполняющийся поток. Для остальных системных вызовов передача управления системным потокам неэффективна. Поэтому системные вызовы и обработка прерываний происходят в контексте исполняемого потока. Части ядра, работающие в контексте потока пользователя, должны иметь возможность работать с памятью ядра. Вывод: пространство виртуальной памяти потока делится на 2 части – пользовательскую (сам поток) и системную (для работы кода ядра при системных вызовах и прерываниях).

Проблема переключений контекста зависит от архитектуры процессора. Типичный случай сохранение и восстановление следующих данных: указателя команд, указателей стека ядра и пользовательский стек, указателя на адресное пространство, в котором выполняется поток.

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

При наличии отложенной АРС (текущий поток) ядра запрашивается прерывание (сигнал, сообщающий процессору о наступлении какого-либо события) IRQL уровня 1. В ином случае управление передается загруженному для нового потока указателю команд, и выполнение этого потока возобновляется.

Виртуальная память. Системная часть содержит:

код ядра, HAL, драйверы; структуры для управления виртуальной памятью; системный кэш; области подкачиваемой и неподкачиваемой системной памяти.

Пользовательская часть содержит: код приложения; код динамических библиотек (dll); стеки потоков; глобальные переменные; свободная область.

Методы управление свободной памятью:

- операции со страницами виртуальной памяти (по 64 КБ);

- отображение файлов в память (mapped memory);

- использование кучи (heap).

Куча – механизм динамического выделения памяти небольшими блоками. У каждого процесса имеется минимум одна куча (по умолчанию – 1 МБ). Управление – диспетчер куч, хранящий сведения о блоках памяти в виде списка.

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

Размер виртуального адресного пространства зависит от конкретной аппаратной платформы. На 32-разрядных х8б-системах теоретический максимум для общего виртуального адресного пространства составляет 4 Гб.