Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 29
Текст из файла (страница 29)
В самом деле, теневой регистр при каждом селекторе имеется в единственном экземпляре, и при переходе на другой сегменттребуется вновь находить и извлекать соответствующий дескриптор сегмента, а. этоотнимает время. Страничный же способ трансляции виртуальных адресов, как мызнаем, имеет немало достоинств. Поэтому в защищенном режиме работы, при котором всегда действует описанный выше механизм определения линейных адресов, может быть включен еще и страничный механизм.Поддержка страничного способа организациивиртуальной памятиПри создании микропроцессора i80386 разработчики столкнулись с очень серьезной проблемой в реализации страничного механизма.
Дело в том, что микропроцессор имел широкую шину адреса (32 бит), и возник вопрос о разбиении всегоадреса на поле страницы и поле индекса. Если большое количество битов адресаотвести под индекс, то страницы станут очень большими, что повлечет значительные потери и на фрагментацию, и на операции ввода-вывода, связанные с замещением страниц. Хотя количество страниц стало бы при этом меньше, и накладныерасходы на их поддержание тоже уменьшились бы. Если же размер страницы уменьшить, то большое поле номера страницы привело бы к потенциально громадномуколичеству страниц, и пришлось бы либо вводить какие-то механизмы контроляза номерами страниц (с тем, чтобы они не выходили за размеры таблицы страниц),либо создавать эти таблицы максимального размера.
Разработчики пошли по пути,при котором размер страницы выбран небольшим (2 1 2 = 4096 = 4 Кбайт), а поленомера страницы величиной в 20 бит, в свою очередь, разбивается на два поля иосуществляется двухэтапная страничная трансляция.Для описания каждой страницы создается соответствующий дескриптор. Длинадескриптора выбрана равной 32 бит: 20 бит линейного адреса определяют номерстраницы (по существу — ее адрес, поскольку добавление к нему 12 нулей приводит к определению начального адреса страницы), а остальные биты разбитына поля, показанные на рис.
4.7. Как видно, три бита дескриптора зарезервировано для использования системными программистами при разработке подсистемыорганизации виртуальной памяти. С этими битами микропроцессор сам не работает.0087SШ65400321Rea d/Writeддрес таблицы страниц или адрес страничного кадра Для ОС9User/S upervisor11Бит Access12г Ditry31110ssentАдресация в 32-разрядных микропроцессорах J80xcSbftРис. 4.7. Дескриптор страницыПрежде всего, микропроцессор анализирует самый младший бит дескриптора —бит присутствия, если он равен нулю, то это означает отсутствие данной страницы в оперативной памяти, и такая ситуация влечет прерывание в работе процессора с передачей управления на соответствующую программу, которая должна будетзагрузить затребованную страницу.
Бит, называемый «грязным» (dirty), показывает, что данную страницу модифицировали, и при замещении этого страничногокадра следующим ее необходимо сохранить во внешней памяти. Бит обращения(access) свидетельствует о том, что к данной таблице или странице осуществлялсядоступ. Он анализируется для определения страницы, которая будет участвоватьв замещении при использовании дисциплины LRU или LFU.
Наконец, первый ивторой биты требуются для защиты памяти.Старшие 10 бит линейного адреса определяют номер таблицы страниц (Page TableEntry, РТЕ), из которой посредством вторых 10 бит линейного адреса выбираетсясоответствующий дескриптор виртуальной страницы.
И уже из этого дескрипторавыбирается номер физической страницы, если данная виртуальная страница отображена на оперативную память. Эта схема определения физического адреса излинейного изображена на рис. 4.8.Первая таблица, которую мы индексируем первыми (старшими) десятью битамилинейного адреса, названа таблицей каталога таблиц страниц (Page DirectoryEntry, PDE). Ее адрес в оперативной памяти определяется старшими двадцатьюбитами управляющего регистра CR0.10Каждая из таблиц (PDE и РТЕ) состоит из 1024 элементов (2 = 1024).
В своюочередь, каждый элемент (дескриптор страницы) имеет длину 4 байт (32 бит), поэтому размер этих таблиц как раз соответствует размеру страницы.Оценим теперь эту схему трансляции с позиций расхода памяти. Каждый дескриптор описывает страницу размером 4 Кбайт. Следовательно, одна таблица страниц,содержащая 1024 дескриптора, описывает пространство памяти в 4 Мбайт. Если задача пользуется виртуальным адресным пространством, например, в 55 Мбайт (предположим, что речь идет о некотором графическом редакторе, который обрабатываетизображение, состоящее из большого количества пикселов1), то для описания этойпамяти необходимо иметь 14 страниц (14 х 4 Мбайт = 56 Мбайт), содержащих таблицы РТЕ.
Кроме того, нам потребуется для этой задачи еще одна таблица PDE (тожеРазмером в одну страницу), в которой 14 дескрипторов будут указывать на местоНапомшш, что термин «пиксел» происходит от английского Picture Elementмент. Множество пикселов образуют изображение.графический эле-112Глава 4, Особенности архитектуры микропроцессоров J80x86нахождение упомянутых таблиц РТЕ. Остальные дескрипторы PDE не требуются.Итого, для описания 55 Мбайт адресного пространства задачи потребуется всего15 страниц, то есть 60 Кбайт памяти, что можно считать приемлемым.Линейный адресI312111РТЕ102331\'11\„ о\\DTE((10233111' )*0Физический адрес31/•г> °1131Регистр CR3Рис.
4.8. Трансляция линейного адреса в микропроцессорах i80x860Адресация в 32-разрядных микропроцессорах J80x86113Если бы не был использован такой двухэтапный механизм трансляции, то потерипамяти на описание адресного пространства могли бы составить 4 Кбайт х 2'° =4 Мбайт! Очевидно, что это уже неприемлемое решение.Итак, микропроцессор для каждой задачи, для которой у него есть TSS, позволяетиметь таблицу PDE и некоторое количество таблиц РТЕ. Поскольку это дает возможность адресоваться к любому байту из 232, а шина адреса как раз и позволяетиспользовать физическую память с таким объемом, то можно как бы отказаться отсегментного способа адресации. Другими словами, если считать, что задача состоит из одного единственного сегмента кода и одного сегмента данных, которые,в свою очередь, разбиты на страницы, то фактически мы получаем только одинстраничный механизм работы с виртуальной памятью.
Этот подход получил название плоской модели памяти. При использовании плоской модели памяти упрощается создание и операционных систем, и систем программирования, кроме того,уменьшаются расходы памяти на поддержку системных информационных структур. Поэтому в абсолютном большинстве современных 32-разрядных операционных систем, создаваемых для микропроцессоров i80x86, используется плоскаямодель памяти. Более того, появление новых 64-разрядных микропроцессоров вомногом определено желанием получить большее адресное пространство, чем егоимеют 32-разрядные процессоры, при сохранении возможности работать только сплоской моделью памяти.Режим виртуальных машин для исполненияприложений реального режимаРазработчики рассматриваемого семейства микропроцессоров в своем стремленииобеспечить максимально возможную совместимость архитектуры пошли не толькона то, чтобы за счет введения реального режима работы обеспечить возможностьпрограммам, созданным для первых 16-разрядных персональных компьютеров, безпроблем выполняться на компьютерах с более поздними моделями микропроцессоров.
Они обеспечили возможность выполнения 16-разрядных приложений реального режима при условии, что сам процессор функционирует в защищенномрежиме работы, и операционная система, используя соответствующие аппаратныесредства микропроцессора, организует мультипрограммный (мультизадачный)режим. Другими словами, микропроцессоры i80x86 поддерживают возможностьсоздания операционных сред реального режима при работе микропроцессора в защищенном режиме.
Если условно назвать 16-разрядные приложения DOS-приложениями (поскольку в абсолютном большинстве случаев это именно так), то можно сказать, что введена поддержка виртуальных DOS-машин, работающих вместес обычными 32-разрядными приложениями защищенного режима. Это нашло отражение в названии такого режима работы микропроцессоров i80x86 (его называют режимом виртуального процессора i8086, иногда для краткости — режимом V86,или просто виртуальным режимом), когда в защищенном режиме работы можетисполняться код DOS-приложения. Мультизадачность при выполнении нескольких программ реального режима поддерживается аппаратными средствами защищенного режима.114Глава 4.
Особенности архитектуры микропроцессоров i80x86Переход в виртуальный режим осуществляется посредством изменения бита VM(Virtual Mode) в регистре EFLAGS. Когда процессор находится в виртуальномрежиме, для адресации памяти используется схема реального режима работы (сегмент плюс смещение) с размером сегментов до 64 Кбайт, которые могут располагаться в адресном пространстве размером в 1 Мбайт, однако полученные адресасчитаются не физическими, а линейными. В результате страничной трансляцииосуществляется отображение виртуального адресного пространства 16-разрядного приложения на физическое адресное пространство. Это позволяет организоватьпараллельное выполнение нескольких задач, разработанных для реального режима, да еще совместно с обычными 32-разрядными приложениями, требующимизащищенного режима работы.Естественно, что для обработки прерываний, возникающих при выполнении 16-разрядных приложений в виртуальном режиме, процессор возвращается из этого режима в обычный защищенный режим.
В противном случае невозможно было быорганизовать полноценную виртуальную машину. Очевидно, что обработчикипрерываний для виртуальной машины должны эмулировать работу подсистемыпрерываний процессора i8086. Другими словами, прерывания отображаютсяв операционную систему, работающую в защищенном режиме, и уже основная операционная система моделирует работу операционной среды выполняемого приложения.Вопрос, связанный с операциями ввода-вывода, которые недоступны для обычных приложений (см.