- •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. Стратегия подкачки и рабочие наборы. Стратегия подкачки и рабочие наборы
44. Диспетчер. Виртуальная память. Диспетчер.
Когда-то компьютеры были однозадачными, однопоточными системами. Программистам, опытным и начинающим, приходилось заранее записываться, чтобы получить время для работы с единственной консолью компьютера. Роль ОС исполнял сам программист: он должен был вручную загружать программу в память, используя переключатели, перфоленту или перфокарты. После того как программа была загружена, он вводил начальный адрес и приказывал процессору перейти по этому адресу и начать выполнение. В те времена одновременная загрузка и исполнение нескольких программ были невозможны. Большая часть времени процессора терялась впустую.
Развитие технологии ОС сводилось к поиску того, как сделать процессор занятым большую часть времени и, таким образом, выполнять больший объем работы. Многозадачные ОС загружают в память несколько программ и поддерживают высокий уровень загрузки процессора, переключаясь между ними. Распределение всей доступной памяти между процессами и в то же время защита кода и данных одного процесса от других и составляет задачу управления памятью, а в случае Windows NT, управления виртуальной памятью (virtual memory management).
На заре компьютерной эпохи не было возможности выполнять программу, размер которой превышает объем физической памяти компьютера. Позже программисты стали писать оверлейные программы, которые выгружали одни части своего кода на диск и загружали другие в память. Когда программе требовался код, находящийся на диске, она загружала его в память поверх ненужного в данный момент кода. Помимо того, что оверлейные программы было утомительно писать и трудно сопровождать и модифицировать, в каждой программе нужно было заново создавать код, выгружающий содержимое памяти на диск.
Виртуальная память, реализованная впервые в 1959 году, сняла бремя управления памятью с программиста и переложила его на ОС. Виртуальная память — это централизованная система выгрузки на диск содержимого памяти при переполнении последней. Она позволяет программистам создавать и запускать программы, которые требуют памяти больше, чем есть у компьютера.
Виртуальная память стала стандартным методом управления памятью для всех ОС, кроме простейших.
Компонент исполнительной системы NT, отвечающий за виртуальную память, диспетчер виртуальной памяти (virtual memory manager) — это базовая система управления памятью в Windows NT. Любые возможности управления памятью, предоставляемые подсистемами среды, основаны на средствах диспетчера виртуальной памяти. Цели, поставленные перед разработчиками диспетчера виртуальной памяти:
• Сделать его максимально переносимым.
• Добиться, чтобы он работал надежно и эффективно для приложений любых размеров и не требовал настройки пользователем или администратором.
• Обеспечить современные средства управления памятью, поддерживающие проецируемые файлы, память типа "копирование при записи", а также поддержку приложений, использующих большие, возможно, не непрерывные адресные пространства.
• Обеспечить процессам возможность выделения и управления собственной памятью.
• Обеспечить механизмы поддержки подсистем среды, в частности, позволить подсистеме (имеющей соответствующие права доступа) управлять виртуальной памятью клиентского процесса.
• Достичь баланса между удовлетворением требований мультипроцессорной обработки и скоростью доступа к памяти. (Например, защита структур данных с использованием нескольких уровней блокировки может повысить степень параллелизма в диспетчере виртуальной памяти, но каждая блокировка связана с дополнительными накладными расходами).
