|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Виртуальная память
Разработчики архитектуры ЭВМ стремятся снять ограничения на объем памяти, используемый программами. Это достигается за счет введения аппаратно-поддерживаемой идеи виртуальной памяти или виртуальной адресации. Эта идея состоит в том, что трансляторам предоставляется возможность использовать для своих целей практически неограниченный (ограничен только размером жесткого диска) объем адресного пространства воображаемого ОЗУ, не зависящего от объемов реальных физических ресурсов ОЗУ. Процесс на некотором интервале времени использует лишь небольшую часть адресного пространства, выделенного всему процессу. Это позволяет выделять ему не все адресное пространство сразу, а по частям, в динамике. Кроме того, в любой момент времени ЭВМ выполняет множество процессов, каждый из которых располагает своим адресным пространством. Было бы слишком накладно отдавать всю физическую память какому-либо одному процессу. Поэтому необходим механизм разделения небольшой физической памяти между различными процессами. Виртуальная память является одним из способов реализации такой возможности. Она делит физическую память на блоки и распределяет их между различными процессами. При этом она предусматривает так же некоторую схему защиты, которая ограничивает процесс теми блоками, которые ему принадлежат. Большинство типов виртуальной памяти сокращают также время начального запуска на процессоре. Поскольку не весь программный код и данные требуются в ОЗУ, чтобы начать выполнение. Наличие виртуальной памяти противоречит основным принципам ОСРВ.
15.11…Виртуальная память может быть организована 3мя методами: 1. Страничная виртуальная память – организует перемещение процессов между ОЗУ и диском частями фиксированного размера (страницами). 2. Сегментная виртуальная память – предусматривает перемещение данных между ОЗУ и диском частями произвольного размера (сегментами), полученными с учетом назначения данных. 3. Сегментно-страничная виртуальная память – использует комбинацию двух приведенных методов, когда адресное пространство процесса делится на сегменты, а затем сегменты делятся на страницы. 4.2.2.1 Страничная организация памяти При страничной организации, адресное пространство ОЗУ и диска разбивают на блоки фиксированного размера, которые называются страничные рамки или FRAMES, Логическое адресное пространство программы так же разбивается на блоки фиксированного размера (того же), называемые виртуальными страницами PAGES. Размеры рамок и страниц совпадают. Размер страничных рамок не зависит от соотношения объемов ОЗУ и виртуальной памяти и выбирается проектировщиками ЭВМ по собственному усмотрению. При этом каждый адрес генерируемый процессором представляется в виде пары чисел (P, S), где P – это номер виртуальной страницы, а S – это смещение внутри страницы. Физический адрес определяется путем сложения начального адреса страничной рамки и смещения в пределах страницы. Рис. 1 Каждый новый процесс загружается в память постранично, причем каждая страница помещается в любую свободную страничную рамку ОЗУ. Смежные виртуальные страницы процесса необязательно должны размещаться в смежных страничных рамках ОЗУ. Это открывает возможность экономного использования ОЗУ путем размещения в нем только тех страниц, которые интенсивно используются в данный промежуток времени. Это также облегчает эффективную реализацию многопользовательского, многозадачного и многопоточного режима. Для указания соответствия между виртуальными страницами и страничными рамками в ОЗУ, ОС должна сформировать таблицу страниц для каждого процесса и разместить ее в ОЗУ. При этом каждой виртуальной странице процесса, независимо от того находится ли она в ОЗУ или нет, ставится в соответствие некоторый элемент таблицы страниц. Каждый элемент таблицы страниц содержит номер страничной рамки в ОЗУ и специальный индикатор, единичное состояние которого свидетельствует о наличие данной страницы в ОЗУ, а нулевое – об отсутствии страницы в ОЗУ. Указатель на таблицу страниц хранится в PCB(Блок управления процессором). Рис.2. Для того чтоб предотвратить обращение процесса к таблицам страниц, с которыми он не связан предусмотрены специальные меры. С этой целью в процессоре предусмотрены дополнительные специальные регистры защиты, содержащие описатель (дескриптор) таблицы страниц (базово-граничную пару). База определяет адрес начала таблицы страниц, а граница длину таблицы страниц соответствующего процесса. При страничной организации памяти, адресное пространство процесса делится на равные части без учета смыслового значения данных. В результате в одной странице могут оказаться команды и данные, поэтому данный подход не позволяет обеспечить дифференцированный доступ к разным частям программы. Например, страничная организация памяти не позволяет 2м процессам использовать одну общую подпрограмму одновременно. Если в ОЗУ не оказывается свободных страничных рамок для размещения страниц нового процесса, то ОС принимает решение о выгрузке на диск неиспользуемых в данный момент страниц. При оценке страниц, которые возможно выгрузить на диск могут использоваться различные методы. Самый простой метод состоит в том, что выбирается на выгрузку та страница, которая не использовалась долгое время, т.к. предполагается, что она, скорее всего не будет использоваться и в ближайшее время, однако, данный метод может давать значительную ошибку при прогнозировании. Другой метод заключается в том, что при выборе страницы на выгрузку определяется числом обращений к ней за последний период. Для этого ОС ведет для каждой страницы программный счетчик, в котором фиксируется число обращений к ней. Когда возникает необходимость выгрузить какую-л. Страницу из ОЗУ. ОС находит страницу, счетчик которой имеет наименьшее значение. Очевидно, что на производительность ОС при страничной организации памяти влияет частота загрузок и выгрузок страниц, на которую влияет размер страниц. Поэтому разработчики ОС большое внимание уделяют выбору оптимального размера страницы. Экспериментальные исследования показывают, что реальная производительность системы довольно слабо зависит от применяемого алгоритма поиска жертвы. Статистика исполнения реальных программ говорит о том, что каждый процесс имеет некоторый набор страниц, называемый рабочим множеством, который ему в данный момент действительно нужен. Размер такого набора сильно зависит от алгоритма программы и изменяется на различных этапах исполнения. Если все страницы рабочего набора находятся в ОЗУ, то частота промахов из-за отсутствия страницы в физической памяти резко снижается. Кроме того, для уменьшения частоты операций загрузки/выгрузки страниц, используют метод упреждающей загрузки. Он состоит в том, что в ОЗУ загружается не одна требуемая страница из виртуальной памяти, а сразу несколько прилегающих к ней страниц. Т.к. считается, что если произошло обращение по некоторому адресу, то велика вероятность того, что следующее обращение к памяти произойдут по соседним адресам. 4.2.2.2 Сегментная организация памяти. Представляет собой метод, при котором процессы разбиваются на части (сегменты), размер которых определяется из смыслового значения, содержащейся в них информации. Обычно сегменты формируются компилятором, а на этапе загрузки им присваиваются идентифицирующие номера. Сегменты не упорядочиваются друг относительно друга, при загрузке процесса в ОЗУ помещается только часть его сегмента, а остальные располагаются на диске. Для каждого загружаемого сегмента ОС подыскивает непрерывный свободный участок ОЗУ достаточного размера. Если во время выполнения процесса происходит обращение к сегменту, который в данный момент отсутствует в ОЗУ, то происходит прерывание, ОС приостанавливает выполняемый процесс, запускает на выполнение следующий процесс из очереди готовых и параллельно организует загрузку нужного сегмента с диска. При этом, если в ОЗУ отсутствует свободное место, то для освобождения пространства, ОС выгружает некоторый сегмент или сегменты на диск. Сегменты являются отдельными логическими единицами информации, которые необходимо защищать. Именно на этом уровне вводятся различные режимы доступа к сегментам. Поскольку общие процедуры должны обладать свойством реинтерабельности (повторной входимости), то из сегментов кода допускается только чтение. Запись в сегменты кода может рассматриваться как незаконная и запрещается системой. Выборка команд из сегментов данных может тоже считаться незаконной. Любой сегмент данных может быть защищен от записи и от чтения. Недостатки: Меньшее быстродействие по сравнению со страничной организации памяти. Это объясняется тем, что между ОЗУ и диском перемещаются целиком сегменты, которые имеют в общем случае больший объем, чем страницы. Фрагментация памяти. В системах с сегментной организацией памяти, адрес в памяти определяется виртуальным адресом, состоящим из двух частей. Старшие разряды адреса рассматриваются как номер сегмента, а младшие как номер слова внутри сегмента. Как и в случае со страничной организацией, необходимо обеспечить преобразование виртуального адреса в реальный физический адрес ОЗУ. С этой целью для каждого процесса ОС должна сформировать таблицу сегментов, каждый элемент таблицы содержит описатель (дескриптор) сегмента (базовый адрес, границы, индикатор режима доступа и индикатор наличия). Таблицы сегментов различных процессов ОС хранит в ОЗУ. Для определения расположения таблицы сегментов выполняющегося процесса используется специальный регистр защиты, который загружается ОС перед началом выполнения процесса. Таким образом наличие базовых граничных дескрипторов сегмента предотвращает доступ к таблицам сегментов, с которыми он не связан. А наличие индикаторов режима доступа помогает осуществить доступ к процессу. Рис.3 4.2.2.3 Сегментно-страничная организация памяти Совмещает в себе достоинства выше рассмотренных механизмов памяти. Так же как и при сегментной организации, адресное пространство процессора разделено на сегменты, это позволяет определять разные права доступа к коду и данным процесса. Однако перемещение данных между ОЗУ и диском осуществляется не сегментами, а страницами. Для этого каждый сегмент процесса и ОЗУ делятся на страницы равного размера, что позволяет более эффективно использовать память, сократив до минимума фрагментацию. Для каждого сегмента создается своя таблица страниц, структура которой полностью совпадает со структурой таблицей страниц, используемой при страничной организации. А для каждого процесса создается таблица сегментов. Состоит из 3х частей. Старшие разряды адреса – номер сегмента, средние – номер страницы внутри сегмента, младшие – смещение внутри страницы. Основная проблема: проблема выбора размера страницы. Рис.4 4.3 Настройка адресов программы на конкретную область ОЗУ. Для простоты будем считать, что программа заранее собрана в некоторый единый загружаемый модуль(в ряде ОС это может быть не так). 4.3.1 Абсолютная загрузка Программа загружается всего с одного и того же адреса. Это возможно в случаях: - система может представить каждой программе, принадлежащее только ей адресное пространство. - система исполняет в каждый момент только одну программу. Подобный программный модуль называется абсолютным загрузочным модулем. Абсолютная загрузка используется например в системе Unix на 32х разрядных процессорах. 4.3.2 Относительная загрузка Состоит в том, что программа каждый раз грузится с произвольного адреса, очевидно, что при этом она должны быть настроена на новые адреса. В этом случае существенное значение приобретают используемые в программе способы адресации. Если для адресации операндов используется абсолютная адресация, то подобная перенастройка выливается в процесс редактирования всех используемых в программе абсолютных адресов. Если используется относительная адресация или ее разновидности, то задача значительно упрощается. В системе Windows или MsDos для перемещения программы нужно изменить значение базовых регистров и программа даже не узнает, что загружена с другого адреса. Так например в ОС MsDos или Windows необходимо настроить сегментные регистры CS. 4.3.3 Позиционно независимый код. Кроме рассмотренных ранее основных способов адресации существует разновидность относительной адресации, когда адрес получается сложением адресного поля команды и адреса самой команды. Очевидно, что модуль можно грузить с любого адреса без всякой перенастройки. Такой код называется позиционно независимым. Позиционно независимые программы очень удобны для загрузки, но, к сожалению, их написание накладывает довольно жесткие ограничения на стиль программирования. Например, использование некоторых типов переменных или создание программы из нескольких модулей, поэтому такой стиль программирования используют только в особых случаях. Например, для написания вирусов. 5. Файловые системы Совокупность каталогов, а так же системных структур данных отслеживающих размещение файлов на диске и свободное дисковое пространство, называется файловой системой. Файл – именованная область данных. Современные ОС позволяют размещать на одном физическом диске несколько файловых систем, выделяя каждой из них фиксированную часть диска. Такая часть диска называется раздел (partition). 5.1 Логическая организация. 5.1.1 Формат имен файлов. В различных файловых системах допустимое имя файла может иметь различную длину и в нем могут использоваться различные наборы символов. Некоторые ОС поддерживают так же номер версии файла. В каталоге может существовать несколько версий файла с одним именем. Если номер версии при открытии файла не указывается, то открывается последняя версия. Версии файла очень удобны при разработке любых объектов: программ, печатных плат, книг… Если вам не понравились изменения, внесенные вами в последнюю версию, вы всегда можете откатиться назад. 5.1.2 Тип файлов. Первые попытки ассоциировать с файлом признак типа были сделаны еще в 60-е годы прошлого века. При этом идентификатор типа добавлялся к имени файла в виде короткой последовательности символов – расширения. В большинстве современных ОС расширение отделяется от имени символом «.». Расширение является удобным способом идентификации типа файла. Для использования этого метода не нужно почти никаких усилий со стороны ОС. Программы сами договариваются и интерпретируют расширение файла определенным образом. Однако, никакие средства ОС не могут навязать прикладным программам правила выбора расширения для файла. Это может привести к неприятным последствиям. 5.1.3 Операции над файлами. Операции над файлами могут быть разделены на 3 группы 1. Операции над файлами как единым целым(открыть, закрыть, копировать, объединить, переместить, удалить) 2. Операции обмена данными между файлом и программой (чтение, запись) 3. Служебные операции (изменение владельца, переименование, изменение прав доступа, атрибутов) В стандарте POSIX определены следующие операции: 1. Открыть файл. Это операция открывает файл, устанавливая соединение между процессом и файлом. При этом процесс получает дескриптор файла (целое число, идентифицирующее данное соединение. Фактически – это индекс в системной таблице открытых файлов для данного процесса, все остальные операции в процессе используют этот индекс для работы с файлом.) Файл может быть открыт только на чтение, только на запись и на чтение и запись. Можно открывать существующий файл с этим именем а можно создать новый файл нулевой длины. 2. Чтение из файла. В ней в качестве параметров задается буфер, куда можно поместить прочитанные данные, сколько данных прочитать. Система считывает требуемое число байт из файла начиная с указателя в этом файле. И перемещает указатель к концу считанной последовательности. Если файл окончился раньше, считывается столько данных, сколько оставалось до его конца. Операция возвращает кол-во считанных байт, если файл был открыт только для записи, операция возвратит ошибку. 3. Операция записи в файл. Параметры: начало буфера данных, сколько данных надо записать. Система записывает требуемое число байт в файл, начиная с указателя в этом файле. Заменяет(перезаписывает) хранившиеся после указателя данные. И перемещает указатель к концу записанного блока. Если указатель установлен на конец файла, данные записываются в конец файла, а его длина увеличивается. Операция возвращает количество записанных байт. Если файл был открыт только для чтения – вызов операции возвратит ошибку. Дополнительные операции над файлами: Стандарт Посикс определяет некоторые операции над дескриптором, например, дублирование, и получаются 2 дескриптора, связанные с одним и тем же файлом, и над самим файлом, например, обрезать файл до заданной длины. Важной операцией является также блокировка участков файла. Участок файла отображается в виртуальное адресное пространство процесса и на это адресное пространство задаются права доступа: чтение, запись, исполнение… 5.2 Монтирование файловых систем. Прежде чем ОС сможет использовать файловую систему, она должна выполнить над этой системой операцию, называемую монтированием. В общем случае эта операция включает: 1. Проверку типа монтируемой файловой системы 2. Проверку целостности файловой системы 3. Считывание системы и структур данных 4. Инициализация соответствующего модуля работы с файловой системой(драйвера файловой системы). В некоторых случаях 5. Модификацию файловой системы с тем чтобы показать что она уже смонтирована (устанавливается специальный флаг) Это может быть необходимо, если файловая система не устойчива к сбоям. В этом случае при ее размонтировании необходимо выполнить специальные операции. Если ОС пытается смонтировать такую файловую систему и видит, что спец. флаг установлен – это означает, что при последнем использовании, ее не размонтировали надлежащим образом. В этом случае перед монтированием необходимо запустить программу починки файловой системы, которая выявит все проблемы, возникшие при таком неправильном размонтировании. Чаще всего проблем нет, но они могут иногда возникать. 6. Включение новой файловой системы в общее пространство имен. В различных ОС это делается различными способами. Если монтируется файловая система размещенная на удаленной машине(файловом сервере например), то шаги 1 и 2 заменяются на установление соединений с этой машиной. Пользователи MsDos и Windows не сталкиваются с понятием монтирования, т.к. эти ОС выполняют упрощенную процедуру монтирования при каждом обращении к файлу. Упрощения состоят в пропуске шагов 1,2 и отсутствии шага 4(Файловые системы MsDos и Windows считаются устойчивыми к сбою). Обычно имя в смонтированной файловой системе имеет вид: ИМЯ_ФС:ИМЯ_КАТАЛОГА1\...\ИМЯ_КАТАЛОГАх\ИМЯ_ФАЙЛА При этом в разных ОС вместо разделителей: и \ могут использоваться и другие символы. В ОС RT-11 RSX-11 VMS, в качестве имени файловой системы используется имя физического устройства, на котором размещена файловая система. Если используется сеть DEC NET – перед именем устройства можно поместить имя узла сети, на котором это устройство находится. Пример: Имя файла VMS может быть таким: DUA0:[USERS.FAT_BROTHER.WORK]test.exe Это означает дисковое устройство 0 присоединено к контролеру А, на этом устройстве находится каталог USERS, в котором находится каталог FAT_BROTHER, а в нем находится каталог WORK. В файловых системах CP/M, MsDos, IOS/2 имена файловых систем обозначаются буквами латинского алфавита, а сами файловые системы называются устройствами. Дисковые ОС как правило помещают в пространство имен все доступные блочные устройства, не выполняя полной процедуры монтирования. Если какое-то из этих устройств содержит файловую систему неизвестного типа или не содержит файловую систему, то ОС будет выдавать ошибку, при обращении к такому устройству, но не удалит его из списка доступных файловых систем. В ОС семейства UNIX смонтированные файловые системы выглядят как каталоги единого дерева, начинающегося с корневого каталога, выделенного первой файловой системе, называемой корневой. Администратор системы может подмонтировать новую файловую систему к любому каталогу находящемся на любом уровне дерева, такой каталог называют точкой монтирования, но это выражение отражает только текущее состояние каталога. После того как мы размонтируем файловую систему этот каталог становится обычным. Такой подход имеет серьезное преимущество перед раздельным пространством имен для разных физических файловых систем. Преимущество состоит в том, что пространство имен оказывается отвязанным от физического размещения файлов, поэтому администратор может поддерживать неизменную структуру дерева каталогов, перемещая при этом отдельные ветви по дискам (устройствам) 5.2.1 Драйверы файловых систем. При эксплуатации ОС может возникнуть необходимость монтировать файловую систему, отличающуюся от родной файловой системы. Для этого необходим драйвер файловой системы. Набор функций такого драйвера должен включать функции монтирования, размонтирования файловой системы, открытия/закрытия, чтения/записи, удаления, чтение каталогов, прав доступа и выдачи служебной информации о файловой системе или файле. Кроме собственного файла драйвера файловой системе для ее поддержки нужны следующие программы: программа форматирования(создания ф.с.), починки файловой системы, дефрагментации файловой системы. 5.3 Структуры файловых систем
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.009 сек.) |