Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Обзор инструментов SEO-оптимизатора и методов продвижения" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Создай свою операционную систему! #10
Информационный Канал Subscribe.Ru |
Здравствуйте, выход рассылки возобновляется. Выпуски будут приходить раз в неделю. В течении ближайших восьми выпусков мы рассмотрим управление памятью.
| ||
Сетевые операционные системы | ||
Глава 5. Управление памятью | ||
Функции ОС по управлению памятьюПод памятью (memory) здесь подразумевается оперативная память компьюте-ра. В отличие от памяти жесткого диска, которую называют внеш-ней памятью (storage), оперативной памяти для сохранения информации требуется постоян-ное электропитание. Память является важнейшим ресурсом, требующим тщательного управления со стороны мультипрограммной операционной системы. Особая роль памяти объ-ясняется тем, что процессор может выполнять инструкции программы только в том случае, если они находятся в памяти. Память рас-пределяется как между мо-дулями прикладных программ, так и между моду-лями самой операционной сис-темы. В ранних ОС управление памятью сводилось просто к загрузке про-граммы и ее данных из некоторого внешнего накопителя (перфоленты, маг-нитной ленты или магнитного диска) в память. С появлением мультипро-граммирования перед ОС были поставлены новые задачи, связанные с рас-пределением имеющейся памяти между несколькими одновременно выпол-няющимися программами.
Помимо первоначального выделения памяти процессам при их созда-нии ОС должна также заниматься динамическим распределением памяти, то есть выпол-нять запросы приложений на выделение им дополнительной памя-ти во время выполнения. После того как приложение перестает нуждаться в дополнительной памяти, оно может возвратить ее системе. Выделение памя-ти случайной длины в случайные моменты времени из общего пула памяти приводит к фрагментации и, вследствие этого, к неэффективному ее исполь-зованию. Дефрагментация па-мяти тоже является функцией операционной системы. Во время работы операционной системы ей часто приходится созда-вать новые служебные информационные структуры, такие как описатели процессов и пото-ков, различные таблицы распределения ресурсов, буферы, используемые процес-сами для обмена данными, синхронизирующие объекты и т.п. Все эти систем-ные объекты требуют памяти. В некоторых ОС заранее (во время установки) резервируется некоторый фиксированный объем памяти для системных нужд. В других же ОС используется более гибкий подход, при котором память для системных целей выделяется динамически. В таком случае разные подсистемы ОС при создании своих таблиц, объектов, структур и т. п. обращаются к подсис-теме управления памятью с запросами. Защита памяти - это еще одна важная задача операционной системы, которая состоит в том, чтобы не позволить выполняемому процессу записы-вать или чи-тать данные из памяти, назначенной другому процессу. Эта функ-ция, как прави-ло, реализуется программными модулями ОС в тесном взаи-модействии с аппа-ратными средствами. Типы адресовДля идентификации переменных и команд на разных этапах жизнен-ного цикла программы используются символьные имена (метки), виртуаль-ные адреса и фи-зические адреса (рис. 5.1).
Совокупность виртуальных адресов процесса называется виртуаль-ным адресным пространством. Диапазон возможных адресов виртуального пространства у всех процессов является одним и тем же. Например, при ис-пользовании 32-разрядных виртуальных адресов этот диапазон задается гра-ницами 0000000016 и FFFFFFFF16. Тем не менее каждый процесс имеет соб-ственное виртуальное ад-ресное пространство - транслятор присваивает вир-туальные адреса переменным и кодам каждой программе независимо (рис. 5.2). Совпадение виртуальных адресов переменных и команд различных процессов не приводит к конфликтам, так как в том случае, когда эти пере-менные одновременно присутствуют в памяти, операционная система ото-бражает их на разные физические адреса. В разных операционных системах используются разные способы структуриза-ции виртуального адресного пространства. В одних ОС вирту-альное адресное пространство процесса подобно физической памяти пред-ставлено в виде непре-рывной линейной последовательности виртуальных ад-ресов. Такую структуру адресного пространства называют также плоской (flat). При этом виртуальным адресом является единственное число, пред-ставляющее собой смещение отно-сительно начала (обычно это значение 000...000) виртуального адресного про-странства (рис. 5.3, а). Адрес такого типа называют линейным виртуальным ад-ресом. В других ОС виртуальное адресное пространство делится на части, называемые сегментами (или секциями, или областями, или другими терми-нами). В этом случае помимо линейного адреса может быть использован вир-туальный адрес, представляющий собой пару чисел (п, т), где п определяет сегмент, a m - сме-щение внутри сегмента (рис. 5.3, б). Существуют и более сложные способы структуризации виртуального адресного пространства, когда виртуальный адрес образуется тремя или даже более числами. Задачей операционной системы является отображение индивидуаль-ных вирту-альных адресных пространств всех одновременно выполняющихся процессов на общую физическую память. При этом ОС отображает либо все виртуальное ад-ресное пространство, либо только определенную его часть. Процедура преобразования виртуальных адресов в физические должна быть максимально прозрач-на для пользователя и программиста. Существуют два принципиально отличающихся подхода к преобразованию вир-туальных адресов в физические. В первом случае замена виртуальных адресов на физические выпол-няется один раз для каждого процесса во время начальной загрузки програм-мы в память. Специальная системная программа - перемещающий загрузчик - на основании имеющихся у нее исходных данных о начальном адресе фи-зической памяти, в которую предстоит загружать программу, а также инфор-мации, предоставленной транслятором об адресно-зависимых элементах про-граммы, выполняет загрузку программы, совмещая ее с заменой виртуальных адресов физическими. Второй способ заключается в том, что программа загружается в па-мять в неизме-ненном виде в виртуальных адресах, то есть операнды инст-рукций и адреса пере-ходов имеют те значения, которые выработал трансля-тор. В наиболее простом случае, когда виртуальная и физическая память процесса представляют собой единые непрерывные области адресов, опера-ционная система выполняет преоб-разование виртуальных адресов в физиче-ские по следующей схеме. При загруз-ке операционная система фиксирует смещение действительного расположения программного кода относительно виртуального адресного пространства. Во время выполнения программы при каждом обращении к оперативной памяти выполня-ется преобразование вир-туального адреса в физический. Схема такого преобра-зования показана на рис. 5.4. Пусть, например, операционная система использует линейно-структурированное виртуальное адресное пространство и пусть некото-рая программа, работающая под управлением этой ОС, загружена в физическую память начиная с физического адреса S. ОС запоминает значение начального смещения S и во время выполнения программы помещает его в специальный ре-гистр процессора. При обращении к памяти виртуальные адреса данной програм-мы преобразуются в физические путем прибавления к ним смещения S. Напри-мер, при выполнении инструкции MOV пересылки данных, находящихся по адресу VA, виртуальный адрес VA заменяется физическим адресом VA+S. Последний способ является более гибким: в то время как переме-щающий загруз-чик жестко привязывает программу к первоначально выде-ленному ей участку памяти, динамическое преобразование виртуальных ад-ресов позволяет переме-щать программный код процесса в течение всего пе-риода его выполнения. Но использование перемещающего загрузчика более экономично, так как в этом случае преобразование каждого виртуального ад-реса происходит только один раз во время загрузки, а при динамическом преобразовании - при каждом обраще-нии по данному адресу. В некоторых случаях (обычно в специализированных системах), когда заранее точно известно, в какой области оперативной памяти будет выпол-няться про-грамма, транслятор выдает исполняемый код сразу в физических адресах. Необходимо различать максимально возможное виртуальное адресное простран-ство процесса и назначенное (выделенное) процессу виртуальное ад-ресное про-странство. В первом случае речь идет о максимальном размере виртуального адресного пространства, определяемом архитектурой компью-тера, на котором работает ОС, и, в частности, разрядностью его схем адреса-ции (32-битная, 64-бит-ная и т.п.). Например, при работе на компьютерах с 32-разрядными процессорами Intel Pentium операционная система может предоставить каждому процессу вир-туальное адресное пространство до 4 Гбайт (232). Однако это значение представ-ляет собой только потенциально возможный размер виртуального адресного пространства, который редко на практике бывает необходим процессу. Процесс использует только часть дос-тупного ему виртуального адресного пространства. Назначенное виртуальное адресное пространство представляет собой набор вир-туальных адресов, действительно нужных процессу для работы. Эти адреса пер-воначально назначает программе транслятор на основании текста программы, когда создает кодовый (текстовый) сегмент, а также сег-мент или сегменты дан-ных, с которыми программа работает. Затем при соз-дании процесса ОС фиксирует назначенное виртуальное адресное простран-ство в своих системных таблицах. В ходе своего выполнения процесс может увеличить размер первоначального назначенного ему виртуального адресно-го пространства, запросив у ОС созда-ния дополнительных сегментов или увеличения размера существующих. В лю-бом случае операционная система обычно следит за корректностью использова-ния процессом виртуальных ад-ресов - процессу не разрешается оперировать с виртуальным адресом, вы-ходящим за пределы назначенных ему сегментов. Максимальный размер виртуального адресного пространства ограни-чивается толь-ко разрядностью адреса, присущей данной архитектуре компь-ютера, и, как пра-вило, не совпадает с объемом физической памяти, имею-щимся в компьютере. Сегодня для машин универсального назначения типична ситуация, ко-гда объем виртуального адресного пространства превышает доступный объ-ем оперативной памяти. В таком случае операционная система для хранения данных виртуально-го адресного пространства процесса, не помещающихся в оперативную память, ис-пользует внешнюю память, которая в современных компьютерах представлена жесткими дисками (рис. 5.5, а). Именно на этом принципе основана виртуаль-ная память - наиболее совершенный механизм, используемый в операционных системах для управления памятью. Однако соотношение объемов виртуальной и физической памяти мо-жет быть и обратным. Так, в мини-компьютерах 80-х годов разрядности поля адреса нередко не хватало для того, чтобы охватить всю имеющуюся опера-тивную память. Не-сколько процессов могло быть загружено в память одно-временно и целиком (рис. 5.5, б). Необходимо подчеркнуть, что виртуальное адресное пространство и виртуаль-ная память - это различные механизмы и они не обязательно реализуются в операционной системе одновременно. Можно представить себе ОС, в которой поддерживаются виртуальные адресные пространства для процессов, но отсутст-вует механизм виртуальной памяти. Это возможно только в том случае, если размер виртуального адресного пространства каждого процесса меньше объема физической памяти. Содержимое назначенного процессу виртуального адресного про-странства, то есть коды команд, исходные и промежуточные данные, а также результаты вычисле-ний, представляет собой образ процесса. Во время работы процесса постоянно выполняются переходы от при-кладных ко-дов к кодам ОС, которые либо явно вызываются из прикладных процессов как системные функции, либо вызываются как реакция на внеш-ние события или на исключительные ситуации, возникающие при некоррект-ном поведении при-кладных кодов. Для того чтобы упростить передачу управления от прикладного кода к коду ОС, а также для легкого доступа мо-дулей ОС к прикладным данным (например, для вывода их на внешнее уст-ройство), в большинстве ОС ее сегмен-ты разделяют виртуальное адресное пространство с прикладными сегментами активного процесса. То есть сег-менты ОС и сегменты активного процесса обра-зуют единое виртуальное ад-ресное пространство. Обычно виртуальное адресное пространство процесса делится на две непрерыв-ные части: системную и пользовательскую. В некоторых ОС (на-пример, Win-dows NT, OS/2) эти части имеют одинаковый размер - по 2 Гбайт, хотя в прин-ципе деление может быть и другим, например 1 Гбайт - для ОС и 3 Гбайт для прикладных программ . Часть виртуального адресного пространства каждо-го процесса, отводимая под сегменты ОС, является иден-тичной для всех процес-сов. Поэтому при смене активного процесса заменя-ется только вторая часть вир-туального адресного пространства, содержащая его индивидуальные сегменты, как правило, - коды и данные прикладной программы (рис. 5.6). Архитектура современных процессоров отражает эту особенность структуры виртуального ад-ресного пространства, например, в процессорах Intel Pentium существует два типа системных таблиц: одна - для описания сегментов, общих для всех процес-сов, а другая - для описания ин-дивидуальных сегментов данного процесса. При смене процесса первая таб-лица остается неизменной, а вторая заменяется новой. Описанное выше назначение двух частей виртуального адресного пространст-ва - для сегментов ОС и для сегментов прикладной программы - является типичным, но не абсолютным. Имеются и исключения из общего правила. В неко-торых ОС существуют системные процессы, порожденные для решения внутреи-них задач ОС. В этих процессах отсутствуют сегменты прикладной программы, но они могут расположить некоторые свои сегменты (сегменты ОС) в общей части виртуального адресного пространства, а неко-торые - в индивидуальной части, обычно предназначенной для прикладных сегментов. И, наоборот, в об-щей, системной части виртуального адресного пространства размещаются сег-менты прикладного кода, предназначенные для совместного использования не-сколькими прикладными процессами. Механизм страничной памяти в большинстве универсальных опера-ционных сис-тем применяется ко всем сегментам пользовательской части виртуального адрес-ного пространства процесса. Исключения могут состав-лять специализированные ОС, например ОС реального времени, в которых некоторые сегменты жестко фиксируются в оперативной памяти и соответст-венно никогда не выгружаются на диск - это обеспечивает быструю реакцию определенных приложений на внешние события. Системная часть виртуальной памяти в ОС любого типа включает об-ласть, под-вергаемую страничному вытеснению (paged), и область, на кото-рую страничное вытеснение не распространяется (non-paged). В не вытес-няемой области разме-щаются модули ОС, требующие быстрой реакции и/или постоянного присутст-вия в памяти, например диспетчер потоков или код, который управляет заменой страниц памяти. Остальные модули ОС подвергаются страничному вытеснению, как и пользовательские сегменты. Обычно аппаратура накладывает свои ограничения на порядок ис-пользования виртуального адресного пространства. Некоторые процессоры (например, MIPS) предусматривают для определенной области системной части адресного про-странства особые правила отображения на физическую память. При этом вирту-альный адрес прямо отображается на физический ад-рес (последний либо полно-стью соответствует виртуальному адресу, либо равен его части). Такая особая область памяти не подвергается страничному вытеснению, и поскольку доста-точно трудоемкая процедура преобразования адресов исключается, то доступ к располагаемым здесь кодам и данным осу-ществляется очень быстро. Продолжение следует...
В следующем выпуске:
| ||
Copyright (C) 2004-2005 UzhOS-Team | ||
Ведущий рассылки DFirst (winexp[@]yandex.ru) | ||
Дизайн Vladimir Tsarkov (bvbn[@]lipetsk.ru) |
Subscribe.Ru
Поддержка подписчиков Другие рассылки этой тематики Другие рассылки этого автора |
Подписан адрес:
Код этой рассылки: comp.soft.othos.osmaker |
Отписаться
Вспомнить пароль |
В избранное | ||