На этом шаге мы рассмотрим понятие адресного пространства процесса.
На предыдущем шаге мы говорили о страничной и сегментной адресации. Как же эти две адресации уживаются в Windows? Оказывается, все очень просто. В сегментные регистры загружаются селекторы, базовые адреса которых равны нулю, а размер сегмента составляет 4 Гбайта. После этого о существовании сегментов и селекторов можно забыть, хотя для микропроцессора этот механизм по-прежнему работает. Основным же механизмом формирования адреса становятся страничные преобразования. Такая модель памяти и называется плоской (FLAT). Логическая адресация в такой модели определяется всего одним 32-битным смещением. До сих пор все наши программы писались именно в плоской модели памяти. При этом мы представляли, что вся область памяти, адресуемая 32-битным адресом, находится в нашем распоряжении. Разумеется, мы были правы, только адрес этот является логическим адресом, который, в свою очередь, подвергается страничному преобразованию, а вот в какую физическую ячейку памяти он попадает, ответить уже весьма затруднительно.
Рис.1. Адресное пространство процесса.
Области 1, 3, 4 являются разделяемыми
На рисунке 1 представлено логическое адресное пространство процесса. Особо обратите внимание на разделенные (совместно используемые) области памяти. Что это значит? А значит это только одно: эти области памяти проецируются на одно и то же физическое пространство.
Нижняя область адресного пространства отводится под образ операционной системы MS-DOS, которая, как видите, еще вполне зримо присутствует в операционной системе Windows. Кроме того, эта область используется для распределения динамической памяти 16-битным процессам.
Следующая область адресного пространства, между 4 Мбайт и 2 Гбайт, является адресным пространством процесса. Процесс занимает эту область пространства под код, данные, а также специфичные для него динамические библиотеки. Это не разделяемая область. Есть, однако, исключения, с которыми мы уже встречались. Можно определить отдельные разделяемые секции. Это значит, что некоторые страницы из этого логического пространства будут отображаться в одну физическую область у разных процессов.
Следующая область содержит в себе файлы, отображаемые в память, системные динамические библиотеки, а также динамическую память 16-битных приложений.
Последняя часть адресного пространства отведена под системные компоненты. Удивительно, но в Windows 9x эта область не защищена от доступа со стороны пользовательских программ.
На следующем шаге мы рассмотрим управление памятью.