Файл: А. В. Гордеев А. Ю. Молчанов системное программное обеспечение электронный вариант книги издательства Питер СанктПетербург Челябинск юургу каф. Автоматика и управление 2002 2 Предисловие Настоящий учебник.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.01.2024

Просмотров: 1018

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

110
рый, в свою очередь, состоит из 4 килобайтных страниц. Каждая страница может располагаться где угодно в оперативной памяти (естественно, в том месте, куда её
разместит диспетчер памяти, который сам находится в невыгружаемой области)
или может быть перемещена на диск, если не запрещено использовать страничный файл.
Младшие адреса виртуального адресного пространства совместно использу- ются всеми процессами. Это сделано для обеспечения совместимости с драйверами устройств реального режима, резидентными программами и некоторыми 16-раз- рядными программами Windows. Безусловно, это плохое решение с точки зрения надёжности, поскольку оно приводит к тому, что любой процесс может непредна- меренно (или же, наоборот, специально) испортить компоненты, находящиеся в этих адресах.
В Windows 95/98 каждая 32-разрядная прикладная программа выполняется в своем собственном адресном пространстве, но все они используют совместно один и тот же 32-разрядный системный код. Доступ к чужим адресным пространствам в принципе возможен. Другими словами, виртуальные адресные пространства не ис- пользуют всех аппаратных средств защиты, заложенных в микропроцессор. В ре- зультате неправильно написанная 32-разрядная прикладная программа может при- вести к аварийному сбою всей системы. Все 16-битовые прикладные программы
Windows разделяют общее адресное пространство, поэтому они так же уязвимы друг перед другом, как и в среде Windows 3.x.
Системный код Windows 95 размещается выше границы 2 Гбайт. В простран- стве с отметками 2 и 3 Гбайт находятся системные библиотеки DLL
1
, используе- мые несколькими программами. Заметим, что в 32-битовых микропроцессорах се- мейства i80x86 имеются четыре уровня защиты, именуемые кольцами с номерами от 0 до 3. Кольцо с номером 0 является наиболее привилегированным, то есть мак- симально защищённым. Компоненты системы Windows 95, относящиеся к кольцу
0, отображаются на виртуальное адресное пространство между 3 и 4 Гбайт. К этим
1
DLL (dynamic link library) – динамически загружаемый библиотечный модуль.

111
компонентам относятся собственно ядро Windows, подсистема управления вирту- альными машинами, модули файловой системы и виртуальные драйверы (VxD).
Область памяти между 2 и 4 Гбайт адресного пространства каждой 32–разряд- ной прикладной программы совместно используется всеми 32-разрядными при- кладными программами. Такая организация позволяет обслуживать вызовы API не- посредственно в адресном пространстве прикладной программы и ограничивает размер рабочего множества. Однако за это приходится расплачиваться снижением надёжности. Ничто не может помешать программе, содержащей ошибку, про- извести запись в адреса, принадлежащие системным DLL, и вызвать крах всей сис- темы.
В области между 2 и 3 Гбайт также находятся все запускаемые 16-разрядные прикладные программы Windows. С целью обеспечения совместимости эти про- граммы выполняются в совместно используемом адресном пространстве, где они могут испортить друг друга так же, как и в Windows 3.х.
Адреса памяти ниже 4 Мбайт также отображаются в адресное пространство каждой прикладной программы и совместно используются всеми процессами. Бла- годаря этому становится возможной совместимость с существующими драйверами реального режима, которым необходим доступ к этим адресам. Это делает ещё од- ну область памяти незащищённой от случайной записи. К самым нижним 64 Кбайт этого адресного пространства 32-разрядные прикладные программы обращаться не могут, что дает возможность перехватывать неверные указатели, но 16-разрядные программы, которые, возможно, содержат ошибки, могут записывать туда данные.
Вышеизложенную модель распределения памяти можно проиллюстрировать с помощью рис. 2.11.
Минимально допустимый объём оперативной памяти, начиная с которого ОС
Windows 95 может функционировать, равен 4 Мбайт, однако при таком объёме пробуксовка столь велика, что практически работать нельзя. Страничный файл, с помощью которого реализуется механизм виртуальной памяти, по умолчанию рас- полагается в каталоге самой Windows и имеет переменный размер. Система отсле- живает его длину, увеличивая или сокращая этот файл при необходимости. Вместе


112
с фрагментацией файла подкачки это приводит к тому, что быстродействие систе- мы становится меньше, чем если бы файл был фиксированного размера и распола- гался в смежных кластерах (был бы дефрагментирован).
Рис. 2.11. Модель памяти ОС Windows 95/98
Сделать файл подкачки заданного размера можно либо через специально раз- работанный для этого апплет (Панель управления
²Система ² Быстродействие ²
Файловая система), либо просто прописав в файле SYSTEM.INI в секции [386Enh]
строчки с указанием диска и имени этого файла, например:
PagingDrive=C:
PagingFile=C:\PageFile.sys
MinPagingFileSize=65536
MaxPagingFileSize=262144
Первая и вторая строчки указывают имя страничного файла и его размещение,
а две последних – начальный и предельный размер страничного файла (значения указываются в килобайтах). Для определения необходимого минимального размера этого файла можно рекомендовать запустить программу SysMon
1
(системный мо-
1
Программа SysMon.exe входит в состав штатного программного обеспечения Windows 95/98, но при инсталляции этих ОС на ПК в режиме «обычная» (установка), а не «по выбору», не устанавливается.
Системные компоненты,
относящиеся к 0 кольцу
защиты
Системные DLL
Прикладные программы Win 16
Совместно используемые DLL
Прикладные программы Win 32
Компоненты реального режима
4Гб
3Гб
2Гб
4Мб
64Кб
0
Адреса между 2 и 4 Гб
отображаются в адресное
пространство каждой
программы Win 32
и совместно используются
В этой области адресного пространства каждой
прикладной программы располагается своё соб-
ственное адресное пространство. «Личные» ад-
ресные пространства других программ невидимы
для программы, и, следовательно, она не может
никак изменить их содержимое
Эта область используется
всеми процессами

113
нитор) и, выбрав в качестве наблюдаемых параметров размер файла подкачки и объём свободной памяти, оценить потребности в памяти, запуская те приложения,
с которыми чаще всего приходится работать.
Распределение оперативной памяти в Microsoft Windows NT
В операционных системах Windows NT тоже используется плоская модель памяти. Заметим, что Windows NT 4.0 server практически не отличается от Win- dows NT 4.0 workstation; разница лишь в наличии у сервера некоторых дополни- тельных служб, дополнительных утилит для управления доменом и несколько иных значений в настройках системного реестра. Однако схема распределения возможного виртуального адресного пространства в системах Windows NT рази- тельно отличается от модели памяти Windows 95/98. Прежде всего, в отличие от
Windows 95/98 в гораздо большей степени используется ряд серьезных аппаратных средств защиты, имеющихся в микропроцессорах, а также применено прин- ципиально другое логическое распределение адресного пространства.
Во-первых, все системные программные модули находятся в своих собствен- ных виртуальных адресных пространствах, и доступ к ним со стороны прикладных программ невозможен. Ядро системы и несколько драйверов работают в нулевом кольце защиты в отдельном адресном пространстве.
Во-вторых, остальные программные модули самой операционной системы,
которые выступают как серверные процессы по отношению к прикладным про- граммам (клиентам), функционируют также в своем собственном системном вир- туальном адресном пространстве, невидимом для прикладных процессов. Логиче- ское распределение адресных пространств приведено на рис. 2.12.
Прикладным программам выделяется 2 Гбайт локального (собственного) ли- нейного (неструктурированного) адресного пространства от границы 64 Кбайт до 2
Гбайт (первые 64 Кбайт полностью недоступны). Прикладные программы изоли- рованы друг от друга, хотя могут общаться через буфер обмена (clipboard), меха- низмы DDE
2
и OLE
3
. Между отметками 2 и 4 Гбайт расположены низкоуровневые
2
DDE (Dynamic Data Exchange) – механизм динамического обмена данными.
3
OLE (Object Linking and Embedding) – механизм связи и внедрения объектов.


114
системные компоненты Windows NT кольца 0, в том числе ядро, планировщик по- токов и диспетчер виртуальной памяти. Системные страницы в этой области наде- лены привилегиями супервизора, которые задаются физическими схемами кольце- вой защиты процессора.
В верхней части каждой 2-гигабайтной области прикладной программы разме- щён код системных DLL кольца 3, который выполняет перенаправление вызовов в совершенно изолированное адресное пространство, где содержится уже собственно системный код. Этот системный код, выступающий как сервер-процесс (server pro- cess), проверяет значения параметров, исполняет запрошенную функцию и пересы- лает результаты назад в адресное пространство прикладной программы. Хотя сер- вер-процесс сам по себе остается процессом прикладного уровня, он полностью защищён от вызывающей его прикладной программы и изолирован от неё.
Рис. 2.12. Модель распределения виртуальной памяти в Windows NT
Это делает низкоуровневый системный код невидимым и недоступным для записи для программ прикладного уровня, но приводит к падению производитель- ности во время переходов между кольцами.
Код ядра
(работает в кольце
защиты с номером 0)
DLL Win32
Клиентской стороны
Прикладные про-
граммы Win32
(у каждой программы
своё собственное
виртуальное про-
странство памяти)
Виртуальные машины
Win16
Процесс
системного
сервера
Прикладные программы
обращаются к DLL,
которые перенаправляют
обращение к системе
Этот системный код
находится в своём
собственном адресном
пространстве и недоступен
вызывающим его
процессам
4Гб
2Гб
64Кб
0

115
Для 16-разрядных прикладных Windows-программ ОС Windows NT реализует сеансы Windows on Windows (WOW). В отличие от Windows 95/98 ОС Windows NT
дает возможность выполнять 16-разрядные программы Windows индивидуально в собственных пространствах памяти или совместно в разделяемом адресном про- странстве. Почти во всех случаях 16- и 32-разрядные прикладные программы Win- dows могут свободно взаимодействовать, используя OLE, независимо от того, вы- полняются они в отдельной или общей памяти. Собственные прикладные програм- мы и сеансы WOW выполняются в режиме вытесняющей многозадачности, осно- ванной на управлении отдельными потоками. Множественные 16-разрядные при- кладные программы Windows в одном сеансе WOW выполняются в соответствии с кооперативной моделью многозадачности. Windows NT может также выполнять в многозадачном режиме несколько сеансов DOS. Поскольку Windows NT имеет полностью 32-разрядную архитектуру, не существует теоретических ограничений на ресурсы GDI
1
и USER.
При запуске приложения создается процесс со своей информационной струк- турой. В рамках процесса запускается задача. При необходимости этот тред (зада- ча) может запустить множество других тредов (задач), которые будут выполняться параллельно в рамках одного процесса. Очевидно, что множество запущенных процессов также выполняются параллельно, и каждый из процессов может пред- ставлять из себя мультизадачное приложение. Задачи (треды) в рамках одного про- цесса выполняются в едином виртуальном адресном пространстве, а процессы вы- полняются в различных виртуальных адресных пространствах. Отображение раз- личных виртуальных адресных пространств исполняющихся процессов на физиче- скую память реализует сама ОС; именно корректное выполнение этой задачи га- рантирует изоляцию приложений от невмешательства процессов. Для обеспечения взаимодействия между выполняющимися приложениями и между приложениями и кодом самой операционной системы используются соответствующие механизмы защиты памяти, поддерживаемые аппаратурой микропроцессора (см. следующую главу).
1
GDI (Graphics Device Interface) – интерфейс графических устройств.


116
Процессами выделения памяти, её резервирования, освобождения и подкачки управляет диспетчер виртуальной памяти Windows NT (Windows NT virtual mem- ory manager, VMM). В своей работе этот компонент реализует сложную стратегию учёта требований к коду и данным процесса для минимизации доступа к диску, по- скольку реализация виртуальной памяти часто приводит к большому количеству дисковых операций.
Каждая виртуальная страница памяти, отображаемая на физическую страницу,
переносится в так называемый страничный фрейм (page frame). Прежде чем код или данные можно будет переместить с диска в память, диспетчер виртуальной памяти (модуль VMM) должен найти или создать свободный страничный фрейм или фрейм, заполненный нулями. Заметим, что заполнение страниц нулями пред- ставляет собой одно из требований стандарта на системы безопасности уровня С2,
принятого правительством США. Страничные фреймы должны заполняться нуля- ми для того, чтобы исключить возможность использования их предыдущего со- держимого другими процессами. Чтобы фрейм можно было освободить, необ- ходимо скопировать на диск изменения в его странице данных, и только после это- го фрейм можно будет повторно использовать. Программы, как правило, не меня- ют страницы кода. Страницы кода, в которые программы не внесли изменений,
можно удалить.
Диспетчер виртуальной памяти может быстро и относительно легко удовле- творить программные прерывания типа «ошибка страницы» (page fault). Что каса- ется аппаратных прерываний типа «ошибка страницы», то они приводят к подкачке
(paging), которая снижает производительность системы. Мы уже говорили о том,
что в Windows NT, к большому сожалению, выбрана дисциплина FIFO для заме- щения страниц, а не более эффективные дисциплины LRU и LFU.
Когда процесс использует код или данные, находящиеся в физической памяти,
система резервирует место для этой страницы в файле подкачки Pagefile.sys на диске. Это делается с расчетом на тот случай, что данные потребуется выгрузить на диск. Файл Pagefile.sys представляет собой зарезервированный блок дискового пространства, который используется для выгрузки страниц, помеченных как «гряз-

117
ные», при необходимости освобождения физической памяти. Заметим, что этот файл может быть как непрерывным, так и фрагментированным; он может быть расположен на системном диске либо на любом другом и даже на нескольких дис- ках. Размер этого страничного файла ограничивает объём данных, которые могут храниться во внешней памяти при использовании механизмов виртуальной памяти.
По умолчанию размер файла подкачки устанавливается равным объёму физиче- ской памяти плюс 12 Мбайт, однако, пользователь имеет возможность изменить его размер по своему усмотрению. Проблема нехватки виртуальной памяти часто может быть решена за счёт увеличения размера файла подкачки.
В системах Windows NT 4.0 объекты, создаваемые и используемые приложе- ниями и операционной системой, хранятся в так называемых пулах памяти (mem- ory pools). Доступ к этим пулам может быть получен только в привилегированном режиме работы процессора, в котором работают компоненты операционной сис- темы. Поэтому для того, чтобы объекты, хранящиеся в пулах, стали видимы тредам приложений, эти треды должны переключиться в привилегированный режим.
Перемещаемый или нерезидентный пул (paged pool) содержит объекты, кото- рые могут быть при необходимости выгружены на диск. Неперемещаемый или ре-
зидентный пул (nonpaged pool) содержит объекты, которые должны постоянно на- ходиться в памяти. В частности, к такого рода объектам относятся структуры дан- ных, используемые процедурами обработки прерываний, а также структуры, ис- пользуемые для предотвращения конфликтов в мультипроцессорных системах.
Исходный размер пулов определяется объёмом физической памяти, доступной
Windows NT. Впоследствии размер пула устанавливается динамически и в зави- симости от работающих в системе приложений и сервисов будет изменяться в ши- роком диапазоне.
Вся виртуальная память в Windows NT подразделяется на классы: зарезерви- рованную (reserved), выделенную (committed) и доступную (available).
| Зарезервированная память представляет собой набор непрерывных адресов,
которые диспетчер виртуальной памяти (VMM) выделяет для процесса, но не учи- тывает в общей квоте памяти процесса до тех пор, пока она не будет фактически


118
использована. Когда процессу требуется выполнить запись в память, ему выделя- ется нужный объём из зарезервированной памяти. Если процессу потребуется больший объём памяти, то дополнительная память может быть одновременно заре- зервирована и использована, если в системе имеется доступная память
| Память выделена, если диспетчер VMM резервирует для неё место в файле
Pagefile.sys на тот случай, когда потребуется выгрузить содержимое памяти на диск. Объём выделенной памяти процесса характеризует фактически потребляе- мый им объём памяти. Выделенная память ограничивается размером файла под- качки. Предельный объём выделенной памяти в системе (commit limit) определяет- ся тем, какой объём памяти можно выделить процессам без увеличения размеров файла подкачки. Если в системе имеется достаточный объём дискового простран- ства, то файл подкачки может быть увеличен и тем самым будет расширен пре- дельный объём выделенной памяти.
Вся память, которая не является ни выделенной, ни зарезервированной, явля- ется доступной. К доступной относится свободная память, обнуленная память (ос- вобожденная и заполненная нулями), а также память, находящаяся в списке ожи-
дания (standby list), которая была удалена из рабочего набора процесса, но может быть затребована вновь.
1   ...   6   7   8   9   10   11   12   13   ...   37