А. Робачевский - Операционная система UNIX (1114671), страница 38
Текст из файла (страница 38)
Например, несколько процессов, выполняющиходну и ту же программу, могут совместно использовать сегмент кода.Все эти возможности реализованы в современных версиях UNIX с по!мощью т. н. виртуальной памяти, о которой пойдет речь в следующемподразделе. Виртуальная память не является "бесплатным приложением",повышая накладные расходы операционной системы: структуры данныхуправления памятью размещаются в оперативной памяти, уменьшая ееразмер; управление виртуальной памятью процесса может требовать ресур!соемких операций ввода/вывода; для системы со средней загрузкой около7% процессорного времени приходится на подсистему управления па!мятью. Поэтому от эффективности реализации и работы этой подсистемыво многом зависит производительность операционной системы в целом.www.books-shop.comПринципы управленияВиртуальная и физическая памятьОперативная память является, пожалуй, одним из наиболее дорогих ком!понентов компьютерной системы. Ранние системы UNIX имели в своемраспоряжении 64 Кбайт оперативной памяти, и это количество было явнонедостаточным, современные компьютеры обладают гигабайтами опера!тивной памяти, но и этого уже мало.Оперативная память может быть представлена в виде последовательностибайтов, каждый из которых имеет свой уникальный адрес, называемыйфизическим адресом.
Именно эти адреса в конечном счете использует про!цессор, обмениваясь данными с оперативной памятью. Однако адресноепространство процесса существенным образом отличается от адресногопространства физической оперативной памяти. Представим себе, что ад!ресное пространство процесса непосредственно отображалось бы в опера!тивную память, другими словами, что адреса, используемые процессом,являлись бы физическими адресами.
При таком подходе на пути созданиямногозадачной системы нас ожидал бы ряд непреодолимых препятствий:Во!первых, трудно себе представить механизм, защищающий адрес!ное пространство одного процесса, от адресного пространства дру!гого или, что более важно, от адресного пространства самой опера!ционной системы. Поскольку каждый процесс работает с физиче!скими адресами, нет никакой гарантии, что процесс не обратится кячейкам памяти, принадлежащим другим процессам или ядру систе!мы. Последствия такого обращения скорее всего будут весьма пла!чевными.Во!вторых, уже на этапе компиляции необходимо было бы преду!смотреть распределение существующего физического адресного про!странства. При запуске каждый процесс должен занимать непрерыв!ную и непересекающуюся область физических адресов.П В!третьих, подобное распределение памяти между процессами врядли можно назвать оптимальным.
Объем физической оперативнойпамяти будет существенным образом ограничивать число процессов,одновременно выполняющихся в системе. Так восемь процессов,каждый из которых занимает 1 Мбайт памяти, исчерпают 8 Мбайтоперативной памяти, а операционная система при средней загрузкенасчитывает более 80 процессов!Все перечисленные проблемы преодолимы с помощью виртуальной памя!ти. При этом адреса, используемые приложениями и самим ядром, не обя!заны соответствовать физическим адресам. Виртуальные адреса трансли!руются или отображаются в физические на аппаратном уровне при актив!ном участии ядра операционной системы.Смысл виртуальной памяти заключается в том, что каждый процесс вы!полняется в собственном виртуальном адресном пространстве.
Виртуальноеwww.books-shop.com198Глава 3.управления процессамиадресное пространство — настоящий рай для процесса. Во!первых, у про!цесса создается ощущение исключительности — ведь все адресное про!странство принадлежит только ему. Во!вторых, он больше не ограниченобъемом физической памяти — виртуальная память может значительнопревышать физическую. В результате процессы становятся изолированны!ми друг от друга и не имеют возможности (даже при желании)"хозяйничать" в адресном пространстве соседа. Физическая память распре!деляется максимально эффективно — она не зависит от распределениявиртуальной памяти отдельного процесса.Очевидно, что для реализации виртуальной памяти необходим управляе!мый механизм отображения виртуального адреса в физический. В совре!менных компьютерных системах процесс отображения выполняется на ап!паратном уровне (с помощьюобеспечивая высокую скоростьтрансляции. Операционная система осуществляет управление этим про!цессом.Современные процессоры, как правило, поддерживают объединение ад!ресного пространства в области переменного размера — сегменты и облас!ти фиксированного размера — страницы.
При этом для каждого сегментаили страницы может быть задано собственное отображение виртуальныхадресов в физические.На рис. 3.4 показана взаимосвязь между виртуальным и физическим ад!ресным пространством. Виртуальное адресное пространство процесса, какправило, является последовательным в рамках уже знакомых нам сегмен!тов — кода, данных, стека и библиотек. Расположение соответствующихобластей физической памяти может иметьхарактер,позволяя оптимально распределять память между процессами.Рис. 3.4. Виртуальная и физическая памятьwww.books-shop.comПринципы управления памятью199Размер виртуальной памяти может существенно превышать размер физи!ческой за счет использования вторичной памяти или области свопинга —как правило, дискового пространства, где могут сохраняться временно неиспользуемые участки адресного пространства процесса.
Например, еслипри выполнении процесса происходит обращение к виртуальному адресу,для которого присутствует соответствующая страница физической памяти,операция чтения или записи завершится успешно. Если страница в опера!тивной памяти отсутствует, процессор генерирует аппаратное прерывание,называемое страничной ошибкой (page fault), в ответ на которое ядро опреде!ляет положение сохраненного содержимого страницы в области свопинга,считывает страницу в память, устанавливает параметры отображения вирту!альных адресов в физические и сообщает процессору о необходимости по!вторить операцию. Все эти действия невидимы для приложения, котороеработает с виртуальной памятью.Механизм отображения виртуальных адресов в физические (трансляцияадреса) существенным образом зависит от конкретной аппаратной реали!зации.
Чтобы наше обсуждение не носило слишком абстрактного характе!ра, в этом разделе рассмотрим механизм отображения виртуальных адресовв физические в операционной системе SCO UNIX на примере семействапроцессоров Intel. Однако, как и для остальных подсистем UNIX, основ!ные принципы отличаются мало, и данное изложение поможет читателюпредставить механизмы управления памятью и разобраться, при необхо!димости, в конкретной реализации.СегментыСемейство процессоров Intel позволяет разделить память на несколькологических частей, называемых сегментами.
При этом адресное простран!ство процесса может быть представлено в виде нескольких логическихсегментов, каждый из которых состоит из непрерывной последовательно!сти адресов, лежащих в заданном диапазоне. Трансляция адресов, осно!ванная на сегментации, предусматривает однозначное отображение адре!сов сегмента в непрерывную последовательность физических адресов.
Вир!туальный адрес при этом состоит из двух частей: селектора сегмента исмещения относительно начала сегмента. Селектор (точнее, поле селектораINDEX) указывает на так называемый дескриптор сегмента, содержащийтакие параметры, как его расположение в памяти, размер и права доступа.Процессор поддерживает косвенную адресацию сегментов через дескрип!торы сегментов, которые располагаются в специальных таблицах — облас!тях памяти, на которые указывают предназначенные для этого регистрыпроцессора. Ядро операционной системы отвечает за заполнение этих таб!лиц и установку значений регистров. Другими словами, ядро задает ото!бражение, а процессор выполняет отображение на аппаратном уровне.Благодаря такой косвенной адресации логические сегменты защищеныдруг от друга, что обеспечивает целостность адресного пространства про!цесса и ядра.Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRSɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕɈɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com200Глава 3.управления процессамиДескрипторы сегментов расположены в двух системных таблицах — ло!кальной таблице дескрипторов (Local Descriptor Table — LDT) и глобаль!ной таблице дескрипторов (Global Descriptor Table — GDT).
Как следуетиз названия, LDT обеспечивает трансляцию виртуальных адресов сег!ментов процесса, в то время как GDT обслуживает адресное пространст!во ядра (например, при обработке системного вызова или прерывания).Для каждого процесса создается собственная LDT, в то время как GDTразделяется всеми процессами. Информация о таблице, на которую ука!зывает селектор, находится в самом селекторе, вид которого представленна рис. 3.5.15INDEXTIRPLРис.