Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 25
Текст из файла (страница 25)
В общем случае это отображение осуществляется в два этапа (рис. 3.1): сначала системойпрограммирования, а затем операционной системой. Это второе отображение осуществляется с помощью соответствующих аппаратных средств процессора —подсистемы управления памятью, которая использует дополнительную информацию, подготавливаемую и обрабатываемую операционной системой. Междуэтими этапами обращения к памяти имеют форму виртуального адреса. При этомможно сказать, что множество всех допустимых значений виртуального адресаДля некоторой программы определяет ее виртуальное адресное пространство,или виртуальную память. Виртуальное адресное пространство программы зависит, прежде всего, от архитектуры процессора и от системы программирования ипрактически не зависит от объема реальной физической памяти компьютера.Можно еще сказать, что адреса команд и переменных в машинной программе,подготовленной к выполнению системой программирования, как раз и являютсявиртуальными адресами.лак мы знаем, система программирования осуществляет трансляцию и компоновку программы, используя библиотечные программные модули.
В результате работы системы программирования полученные виртуальные адреса могут иметь какДвоичную форму, так и символьно-двоичную. Это означает, что некоторые проРаммные модули (их, как правило, большинство) и их переменные получают ка-f74Глава 3. Управление памятью в операционных системахкие-то числовые значения, а те модули, адреса для которых пока ие могут бытьопределены, имеют по-прежнему символьную форму, и их окончательная привязка к физическим ячейкам будет осуществлена на этапе загрузки программы в память перед ее непосредственным выполнением.Виртуальное адресное пространствоВиртуальный адресСистема!программирования Г!ОперационнаясистемаФизическая память компьютера^Ячейка оперативной памяти(физический адрес)Рис.
3 . 1 . Память и отображенияОдним из частных случаев отображения пространства символьных имен на физическую память является полная тождественность виртуального адресного пространства физической памяти. При этом нет необходимости осуществлять второе ото-мдть иотображения, виртуальное адресное пространство75жение. В таком случае говорят, что система программирования генерирует абчютную двоичную программу; в этой программе все двоичные адреса таковы, чтооограмма может исполняться только тогда, когда ее виртуальные адреса будутПРЧ Н о соответствовать физическим. Часть программных модулей любой операциТ° ной системы обязательно должна быть абсолютными двоичными программами.Чти программы размещаются по фиксированным адресам физической памяти,с их помощью уже можно впоследствии реализовывать размещение остальныхгоограмм, подготовленных системой программирования таким образом, что онимогут работать на различных физических адресах (то есть на тех адресах, на котопые" их разместит операционная система).
В качестве примера таких программможно назвать программы загрузки операционной системы.Другим частным случаем этой общей схемы трансляции адресного пространстваявляется тождественность виртуального адресного пространства исходному логическому пространству имен. Здесь уже отображение выполняется самой операционной системой, которая во время исполнения использует таблицу символьныхимен. Такая схема отображения используется чрезвычайно редко, так как отображение имен на адреса необходимо выполнять для каждого вхождения имени (каждого нового имени), и особенно много времени тратится на квалификацию имен.Данную схему можно было встретить в интерпретаторах, в которых стадии трансляции и исполнения практически неразличимы.
Это характерно для простейшихкомпьютерных систем, в которых вместо операционной системы использовалсявстроенный интерпретатор (например, Basic).Возможны и промежуточные варианты. В простейшем случае транслятор-компилятор генерирует относительные адреса, которые, по сути, являются виртуальнымиадресами, с последующей настройкой программы на один из непрерывных разделов.
Второе отображение осуществляется перемещающим загрузчиком. После загрузки программы виртуальный адрес теряется, и доступ выполняется непосредственно к физическим ячейкам. Более эффективное решение достигается в томслучае, когда транслятор вырабатывает в качестве виртуального адреса относительный адрес и информацию о начальном адресе, а процессор, используя подготавливаемую операционной системой адресную информацию, выполняет второе отображение не один раз (при загрузке программы), а при каждом обращении к памяти.Термин виртуальная память фактически относится к системам, которые сохраняют виртуальные адреса во время исполнения.
Так как второе отображение осуществляется в процессе исполнения задачи, то адреса физических ячеек могут изменяться. При правильном применении такие изменения улучшают использованиепамяти, избавляя программиста от деталей управления ею, и даже повышают надежность вычислений.если рассматривать общую схему двухэтапного отображения адресов, то с позиции соотношения объемов упомянутых адресных пространств можно отметитьналичие следующих трех ситуаций:объем виртуального адресного пространства программы Vv меньше объема физической памяти Vp (Vv < V„);ооъем виртуального адресного пространства программы Vv равен объему физической памяти V„ (Vv = Vp);76Глава 3. Управление памятью в операционных системахQ объем виртуального адресного пространства программы Vv больше объема физической памяти Vp (Vv > Vp).Первая ситуация (Vv < Vp) ныне практически не встречается, но, тем не менее, этореальное соотношение.
Скажем, не так давно 16-разрядные мини-ЭВМ имели систе|6му команд, в которых пользователи-программисты могли адресовать до 2 = 64 Кбайтадресов (обычно в качестве адресуемой единицы выступала ячейка памяти размером с байт). А физически старшие модели этих мини-ЭВМ могли иметь объем оперативной памяти в несколько мегабайтов. Обращение к памяти столь большогообъема осуществлялось с помощью специальных регистров, содержимое которыхскладывалось с адресом операнда (или команды), извлекаемым из поля операндаили указателя команды (и/или определяемым по значению поля операнда или указателя команды).
Соответствующие значения в эти специальные регистры, выступающие как базовое смещение в памяти, заносила операционная система. Для одной задачи в регистр заносилось одно значение, а для второй (третьей, четвертойи т. д.) задачи, размещаемой одновременно с первой, но в другой области памяти,заносилось, соответственно, другое значение. Вся физическая память таким образом разбивалась на разделы объемом по 64 Кбайт, и на каждый такой раздел осуществлялось отображение своего виртуального адресного пространства.Вторая ситуация (Vv = Vp) встречается очень часто, особенно характерна она быладля недорогих вычислительных комплексов. Для этого случая имеется большоеколичество методов распределения оперативной памяти.Наконец, в наше время мы уже достигли того, что ситуация превышения объемавиртуального адресного пространства программы над объемом физической памяти (Vv > Vp) характерна даже для персональных компьютеров, то есть для самыхраспространенных и недорогих машин.
Теперь это самая обычная ситуация, и длянее имеется несколько методов распределения памяти, отличающихся как сложностью, так и эффективностью.Простое непрерывное распределениеи распределение с перекрытиемОбщие принципы управления памятьюв однопрограммных операционных системахПростое непрерывное распределение — это самая простая схема, согласно которойвся память условно может быть разделена на три области:•область, занимаемая операционной системой;Q область, в которой размещается исполняемая задача;•незанятая ничем (свободная) область памяти.Изначально являясь самой первой схемой, схема простого непрерывного распределения памяти продолжает и сегодня быть достаточно распространенной.
Эта схемапредполагает, что операционная система не поддерживает мультипрограммирование, поэтому не возникает проблемы распределения памяти между несколькимиенепрерывное распределение и распределение с перекрытием77ячами. Программные модули, необходимые для всех программ, располагаютсялйласти самой операционной системы, а вся оставшаяся память может быть предо3ялена задаче. Эта область памяти получается непрерывной, что облегчает работуСтемы программирования.
Поскольку в различных однотипных вычислительныхСмплексах может быть разный состав внешних устройств (и, соответственно, ониодержат различное количество драйверов), для системных нужд могут быть отвеены отличающиеся объемы оперативной памяти, и получается, что можно не привязывать жестко виртуальные адреса программы к физическому адресному пространству. Эта привязка осуществляется на этапе загрузки задачи в память.Для того чтобы для задач отвести как можно больший объем памяти, операционная система строится таким образом, чтобы постоянно в оперативной памяти располагалась только самая нужная ее часть. Эту часть операционной системы сталиназывать ядром. Прежде всего, в ядро операционной системы входят основныемодули супервизора.
Для однопрограммных систем понятие супервизора вырождается в модули, получающие и выполняющие первичную обработку запросов отобрабатывающих и прикладных программ, и в модули подсистемы памяти. Ведьесли программа по ходу своего выполнения запрашивает некоторое множествоячеек памяти, то подсистема памяти должна их выделить (если они есть), а послеосвобождения этой памяти подсистема памяти должна выполнить действия, связанные с возвратом памяти в систему. Остальные модули операционной системы,не относящиеся к ее ядру, могут быть обычными диск-резидентными (или транзитными), то есть загружаться в оперативную память только по необходимости,и после своего выполнения вновь освобождать память.Такая схема распределения влечет за собой два вида потерь вычислительных ресурсов — потеря процессорного времени, потому что процессор простаивает, показадача ожидает завершения операций ввода-вывода, и потеря самой оперативнойпамяти, потому что далеко не каждая программа использует всю память, а режимработы в этом случае однопрограммный.