Конспект лекций по дисциплине " Операционные системы"
Вид материала | Конспект |
- Конспект лекций по дисциплине «Операционные системы и среды», 618.94kb.
- Методические указания для выполнения Курсовой работы по дисциплине «Операционные системы», 72.86kb.
- Программа по дисциплине «Технологии программирования и операционные системы», 42.87kb.
- Ые системы", "Операционные системы, среды и оболочки" и "Операционные системы и системное, 1294.27kb.
- Конспект лекций по дисциплине «Маркетинг», 487.79kb.
- Конспект лекций по дисциплине «Информационные системы в экономике», 1286.5kb.
- Рабочая программа По дисциплине «Операционные системы» По специальности 230102., 376.29kb.
- В. Ф. Панин Конспект лекций по учебной дисциплине "Теоретические основы защиты окружающей, 1559.17kb.
- Рабочая программа по учебной дисциплине Операционные системы, среды и оболочки наименование, 623.3kb.
- Тема лекции «Многозадачные многопользовательские операционные системы. Операционные, 154.91kb.
Типы адресов
Для идентификации переменных и команд на разных этапах жизненного цикла программы используются символьные имена, виртуальные адреса и физические адреса.
- Символьные имена присваивает пользователь при написании программы.
- Виртуальные (условные) адреса, вырабатывает транслятор, переводящий программу на машинный язык.
- Физические адреса соответствуют номерам ячеек оперативной памяти, где в действительности расположены переменные и команды.
Совокупность виртуальных адресов называется виртуальным адресный пространством.
Диапазон возможных адресов виртуального пространства у всех процессов является одним и тем же. Тем не менее, каждый процесс имеет собственное виртуальное адресное пространство — транслятор присваивает виртуальные адреса переменным и кодам каждой программе независимо.
В разных ОС используются разные способы структуризации адресного пространства.
1. Линейная последовательности виртуальных адресов. Такая структура адресного пространства называют также плоской (flat). При этом виртуальным адресом является единственное число, представляющее собой смещение относительно начала виртуального адресного пространства. Адрес такого типа называют линейным виртуальным адресом.
2. Виртуальное адресное пространство делится на части, называемые сегментами. Виртуальный адрес представляющий собой пару чисел (n, m), где n определяет сегмент, a m — смещение внутри сегмента.
3. Есть более сложные способы структуризации, когда виртуальный адрес образуется тремя или даже более числами.
Существуют два принципиально отличающихся подхода к преобразованию виртуальных адресов в физические.
1.Замена виртуальных адресов на физические выполняется один раз для каждого процесса во время начальной загрузки программы в память. Выполняет это системная программа — перемещающий загрузчик — на основании имеющихся у нее исходных данных о начальном адресе физической памяти, а также информации, предоставленной транслятором об адресно-зависимых элементах программы, выполняет загрузку программы, совмещая ее с заменой виртуальных адресов физическими.
2. Программа загружается в память в неизмененном виде в виртуальных адресах. При загрузке ОС фиксирует смещение действительного расположения программного кода относительно виртуального адресного пространства. Во время выполнения программы при каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в физический.
Последний способ является более гибким: в то время как перемещающий загрузчик жестко привязывает программу к первоначально выделенному ей участку памяти, динамическое преобразование виртуальных адресов позволяет перемещать программный код процесса в течение всего периода его выполнения.
Как правило, объем виртуального адресного пространства превышает доступный объем оперативной памяти. В таком случае ОС для хранения данных виртуального адресного пространства использует дополнительную внешнюю память.
Однако соотношение объемов виртуальной и физической памяти может быть и обратным.
Следует помнить, что механизмы виртуального адресного пространства, и виртуальной памяти в общем случае – это не одно и тоже. Можно представить себе ОС, в которой поддерживаются виртуальные адресные пространства для процессов, но отсутствует механизм виртуальной памяти. Это возможно только в том случае, если размер виртуального адресного пространства каждого процесса меньше объема физической памяти.
Содержимое назначенного процессу виртуального адресного пространства, представляет собой образ процесса.
Во время работы процесса постоянно выполняются переходы от прикладных кодов к кодам ОС, которые либо явно вызываются из прикладных процессов как системные функции, либо вызываются как реакция на внешние события. Для того чтобы упростить передачу управления от прикладного кода к коду ОС, а также для легкого доступа модулей ОС к прикладным данным, в большинстве ОС ее сегменты разделяют виртуальное адресное пространство с прикладными сегментами активного процесса.
То есть виртуальное адресное пространство процесса делится на две непрерывные части: системную и пользовательскую. В некоторых ОС (например, Windows NT) эти части имеют одинаковый размер — по 2 Гбайт.
Часть виртуального адресного пространства каждого процесса, отводимая под сегменты ОС, является идентичной для всех процессов. Поэтому при смене активного процесса заменяется только вторая часть виртуального адресного пространства. Например, в процессорах Intel Pentium существует два типа системных таблиц: одна — для описания сегментов, общих для всех процессов, другая — для описания индивидуальных сегментов данного процесса. При смене процесса первая таблица остается неизменной, а вторая – заменяется новой.
Алгоритмы распределения памяти
Алгоритмы распределения памяти разделены на два класса: алгоритмы, в которых используется перемещение сегментов процессов между оперативной памятью и диском, и алгоритмы, в которых внешняя память не привлекается.
Распределение памяти фиксированными разделами
Это простейший способ управления памятью. Память разбивается на несколько областей фиксированной величины, называемых разделами.
Это разбиение может быть выполнено вручную оператором во время старта системы или во ее установки. После этого границы разделов не изменяются.
Новый процесс, поступивший на выполнение, помещается либо в общую очередь, либо в очередь к некоторому разделу.
Система управления памяти решает следующие задачи:
- Сравнивает объем памяти, требуемый для нового процесса, с размерами свободных разделов и выбирает подходящий раздел.
- Осуществляет загрузку программы в один из разделов и настройку адресов.
Уже на этапе трансляции разработчик программы может задать раздел, в котором ее следует выполнять. Это позволяет сразу, без использования перемещающего загрузчика, получить машинный код, настроенный на конкретную область памяти.
Существенный недостаток — жесткость.
Уровень мультипрограммирования заранее ограничен числом разделов. Независимо от размера программы она будет занимать весь раздел, с другой стороны процесс, требующий несколько разделов, не может быть выполнен.
Этот простейший метод распределения памяти сейчас находит применение только в системах реального времени, благодаря детерминированности вычислительного процесса.
Распределение памяти динамическими разделами
Каждому новому поступающему на выполнение процессу выделяется вся необходимая ему память, если ее не хватает, процесс не запускается.
Функции ОС, для реализации этого метода:
- Ведение таблиц свободных и занятых областей, в которых указываются начальные адреса и размеры участков памяти.
- При создании нового процесса – анализ требований к памяти, просмотр таблицы свободных областей и выбор раздела. Выбор раздела может осуществляться по разным правилам: первый попавшийся раздел достаточного размера, раздел, имеющий наименьший достаточный размер, раздел, имеющий наибольший достаточный размер.
- Загрузка программы в выделенный ей раздел и корректировка таблиц свободных и занятых областей.
- Корректировка таблиц свободных и занятых областей.
Этому методу присущ серьёзный недостаток – фрагментация памяти.
Фрагментация – наличие большого числа несмежных участков свободной памяти маленького размера. Такого, что ни одна из вновь поступающих программ не может поместиться ни в одном из участков, хотя суммарный объем фрагментов может составить величину, превышающую требуемый объем памяти.
Примером этого метода является популярная в прошлом OS/360 и EC – ЭВМ..
Перемещаемые разделы
Борьба с фрагментацией – перемещение всех занятых участков в сторону старших или младших адресов, так, чтобы вся свободная память образовала свободную единую область.
В дополнение к функциям, которые выполняет ОС с динамическими разделами, она еще время от времени копирует содержимое разделов из одного места памяти в другое, корректируя таблицы свободных и занятых областей. Эта процедура называется сжатием.
Сжатие выполняется либо при каждом завершении процесса, либо когда для создаваемого процесса нет свободного раздела достаточного размера.
Так как программы перемещаются в оперативной памяти в ходе своего выполнения, то в данном случае невозможно выполнить настройку адресов с помощью перемещающего загрузчика. Здесь необходима реализация динамического преобразования адресов.
Хотя этот метод приводит к более эффективному использованию памяти, но требует значительных временных затрат, что перевешивает имущества данного метода.
Метод используется в ранних версиях ОС OS/2.
ОС
П1
a
П2
П2
b
П4
П4
Процедура
сжатия
c
ОС
П1
a+b+c
Распределение памяти перемещаемыми разделами
Свопинг и виртуальная память
Объем оперативной памяти, который имеется в компьютере, существенно сказывается на протекании вычислительного процесса. Он ограничивает число одновременно выполняющихся программ и размеры их виртуальных адресных пространств.
Если все задачи мультипрограммной смеси являются вычислительными (мало операций ввода-вывода), для хорошей загрузки процессора может оказаться достаточным всего 3-5 задач.
Если вычислительная система загружена выполнением интерактивных задач, для эффективного использования процессора может потребоваться уже несколько десятков, а то и сотен задач.
Большое количество задач требует больших объемов оперативной памяти.
В условиях, когда для обеспечения приемлемого уровня мультипрограммирования имеющейся памяти оказывается недостаточно, был предложен метод организации вычислительного процесса, при котором образы некоторых процессов целиком или частично временно выгружаются на диск.
В мультипрограммном режиме помимо активного процесса, имеются также приостановленные процессы, ожидающие завершения ввода-вывода или освобождения ресурсов, а также процессы в состоянии готовности, стоящие в очереди к процессору.
Образы таких неактивных процессов могут быть временно, до следующего цикла активности, выгружены на диск. Несмотря на это, ОС «знает» о существовании процессов и учитывает это при распределении процессорного времени и других ресурсов. К моменту, когда подходит очередь выполнения выгруженного процесса, его образ возвращается с диска в оперативную память. Если при этом оказывается, что свободного места в оперативной памяти не хватает, то на диск выгружается другой процесс.
Такая подмена (виртуализация) оперативной памяти дисковой позволяет повысить уровень мультипрограммирования.
Виртуальным называется ресурс, который пользователю или пользовательской программе представляется обладающим свойствами, которыми он, в действительности, не обладает.
Ясно, что работа виртуальной оперативной памяти происходит медленнее, чем реальной.
Виртуализация оперативной памяти осуществляется совокупностью программных модулей ОС и аппаратных схем процессора и включает решение следующих задач:
- размещение данных в запоминающих устройствах различного типа;
- выбор образов процессов или их частей для перемещения из оперативной памяти на диск и обратно;
- перемещение по мере необходимости данных между памятью и диском;
- преобразование виртуальных адресов в физические.
Заметим, что с проблемой размещения в оперативной памяти программ, которые превышают ее размеры, программисты столкнулись достаточно давно. Одним из решений было разбиение программы на части, которые назывались оверлеями. Когда один оверлей заканчивал свое выполнение, он вызывал другой оверлей. Все оверлеи хранились на диске и перемещались между памятью и диском средствами ОС на основании директив программиста, содержащихся в программе.
Несмотря на внешнее сходство, имеет принципиальное отличие от виртуальной памяти. Оно состоит в том, что при оверлее разбиение программы на части и планирование их загрузки в оперативную память выполняются программистом заранее во время написания программы.
Виртуализация памяти может быть осуществлена на основе двух различных подходов:
- свопинг — образы процессов выгружаются на диск и возвращаются в оперативную память целиком;
- виртуальная память — между оперативной памятью и диском перемещаются части (сегменты, страницы) образов процессов.
Свопинг – частный случай виртуализации. Это наиболее простой способ совместного использования оперативной памяти и диска.
Недостаток – избыточность. Когда ОС решает активизировать процесс, для его выполнения, часто не требуется загружать в оперативную память все его сегменты полностью. Аналогично при освобождении памяти для загрузки нового процесса очень часто не требуется выгружать другой процесс на диск целиком. Достаточно выгрузить только часть его образа. Перемещение избыточной информации замедляет работу системы и неэффективно используется оперативная память.
Еще один недостаток. Системы, поддерживающие свопинг не способны загрузить для выполнения процесс, виртуальное адресное пространство которого превышает имеющуюся в наличии свободную память.
В современных ОС свопинг применения не находит.
Ключевой проблемой виртуальной памяти, возникающей в результате многократного изменения местоположения в оперативной памяти образов процессов или их частей, является преобразование виртуальных адресов в физические.
В настоящее время все множество реализаций виртуальной памяти может быть представлено тремя классами:
- Страничная виртуальная память. Перемещение данных осуществляется страницами — частями виртуального адресного пространства, фиксированного и сравнительно небольшого размера.
- Сегментная виртуальная память –перемещение осуществляется сегментами — частями виртуального адресного пространства произвольного размера.
- Сегментно-страничная виртуальная память. Здесь используется двухуровневое деление: виртуальное адресное пространство делится на сегменты, а затем сегменты делятся на страницы. Единицей перемещения здесь является страница.
Для временного хранения сегментов и страниц на диске отводится либо специальная область, либо специальный файл, который носит название страничный файл.
Текущий размер страничного файла является важным параметром ОС, чем он больше, тем больше приложений может одновременно выполнять ОС. Однако, с увеличением страничного файла увеличивается время на перекачку информации и общая полезная производительность системы уменьшается.
Размер страничного файла в современных ОС является настраиваемым параметром.
Страничное распределение
Виртуальное адресное пространство каждого процесса делится на части одинакового, фиксированного для данной системы размера – виртуальные страницы.
В общем случае размер виртуального адресного пространства процесса не кратен размеру страницы. Поэтому последняя страница каждого процесса дополняется фиктивной областью.
Вся оперативная память машины также делится на части такого же размера, называемые физическими страницами.
Размер страницы выбирается равным степени двойки: 512, 1024, 4096 байт и т. д, Это позволяет упростить механизм преобразования адресов.
Для каждого процесса ОС создает таблицу страниц — информационную структуру, содержащую записи обо всех виртуальных страницах процесса.
Запись таблицы, называемая дескриптором страницы и включает следующую информацию:
- номер физической страницы, в которую загружена данная виртуальная страница;
- признак присутствия, устанавливается в единицу, если виртуальная страница находится в оперативной памяти;
- признак модификации страницы, который устанавливается в единицу всякий раз, когда производится запись по адресу, относящемуся к данной странице;
- признак обращения к странице, называемый также битом доступа, который устанавливается в единицу при каждом обращении по адресу, относящемуся к данной странице.
Признаки присутствия, модификации и обращения в большинстве современных процессоров устанавливаются аппаратно при операциях с памятью. Информация из таблиц страниц используется для решения вопроса о необходимости перемещения той или иной страницы между памятью и диском, а также для преобразования виртуального адреса в физический.
Таблицы страниц размещаются в оперативной памяти. Адрес таблицы страниц включается в контекст соответствующего процесса. При активизации очередного процесса ОС загружает адрес его таблицы страниц в специальный регистр процессора.
При каждом обращении к памяти выполняется поиск номера виртуальной страницы, содержащей требуемый адрес, затем по этому номеру определяется нужный элемент таблицы страниц, и из него извлекается описывающая страницу информация. Далее анализируется признак присутствия, и, если страница находится в оперативной памяти, то выполняется преобразование виртуального адреса в физический. Если же нужная виртуальная страница в данный момент выгружена на диск, то происходит страничное прерывание. Выполняющийся процесс переводится в состояние ожидания, и активизируется другой процесс из очереди процессов, находящихся в состоянии готовности. Параллельно программа обработки страничного прерывания находит на диске требуемую виртуальную страницу и пытается загрузить ее в оперативную память. Если в памяти имеется свободная физическая страница, то загрузка выполняется немедленно, если же свободных страниц нет, то на основании принятой в данной системе стратегии замещения страниц решается вопрос о том, какую страницу следует выгрузить из оперативной памяти.
После определения виртуальной страницы, обнуляется ее бит присутствия и анализируется ее признак модификации. Если за время последнего пребывания в оперативной памяти была модифицирована, ее новая версия должна быть переписана на диск. Если нет, то никакой записи на диск не производится (она и так есть). Физическая страница объявляется свободной.
Виртуальный адрес при страничном распределении может быть представлен в виде пары (р, sv), где p — порядковый номер виртуальной страницы процесса (нумерация страниц начинается с 0), a sv — смещение в пределах виртуальной страницы.
Физический адрес также может быть представлен в виде пары (n, Sf), где n — номер физической страницы, a Sf — смещение в пределах физической страницы. Задача подсистемы виртуальной памяти состоит в преобразовании пары (р, sv) в (n, Sf).
Рассмотрим два базисных свойства страничной организации.
Первое из них состоит в том, что объем страницы выбирается равным степени двойки — 2k . Из этого следует, что смещение s может быть получено простым отделением k младших разрядов в двоичной записи адреса, а оставшиеся старшие разряды адреса представляют собой двоичную запись номера страницы.
Например:
Размер страницы 1 Кбайт (210). Двоичной адрес 101 000 111 0012. Он принадлежит странице 102 и смещен относительно ее начала на 1 000 111 0012 байт.
Второе свойство заключается в том, что в пределах страницы непрерывная последовательность виртуальных адресов однозначно отображается в непрерывную последовательность физических адресов, т.е. sv = Sf.
Отсюда следует простая схема преобразования виртуальных адресов в физические.
Младшие разряды физического адреса, соответствующие смещению, получаются переносом такого же количества младших разрядов из виртуального адреса. Старшие разряды физического адреса, соответствующие номеру физической страницы, определяются из таблицы страниц, в которой указывается соответствие виртуальных и физических страниц.
Если происходит обращение к памяти по некоторому виртуальному адресу. Аппаратными схемами процессора выполняются следующие действия:
- Из специального регистра процессора извлекается адрес AT таблицы страниц активного процесса. На основании начального адреса таблицы страниц, номера виртуальной страницы p (старшие разряды виртуального адреса) и длины отдельной записи в таблице страниц L (системная константа) определяется адрес нужного дескриптора в таблице страниц: а =АТ+(рхL).
- Из этого дескриптора извлекается номер соответствующей физической страницы — n.
- К номеру физической страницы присоединяется смещение s (младшие разряды виртуального адреса).
Аппаратный механизм получения физического адреса по виртуальному, предусмотрен для уменьшения времени преобразования адресов.
Другим важным фактором, влияющим на производительность системы, является частота страничных прерываний. На нее, в свою очередь, влияют размер страницы и принятые в данной системе правила выбора страниц для выгрузки и загрузки.
При выборе страницы на выгрузку смысл критерия сводится к одному: на диск выталкивается страница, к которой дольше всего не будет обращений
Однако, точно предсказать ход вычислительного процесса невозможно, а следовательно, и точно определить страницу, подлежащую выгрузке. Решение принимается на основе неких эмпирических критериев.
Например, если страница не использовалась долгое время, делается вывод о том, что она не потребуется и сейчас.
Наиболее популярным критерием является число обращений к странице за последний период времени. ОС ведет по каждой странице программный счетчик. Когда возникает необходимость удалить какую-либо страницу из памяти, ОС находит страницу, счетчик обращений которой имеет наименьшее значение. Все счетчики периодически обнуляются.
Интенсивность страничного обмена может быть снижена за счет, так называемой, упреждающей загрузки, в соответствии с которой при возникновении страничного прерывания в память загружается не одна страница, а сразу несколько прилегающих к ней страниц.
Концептуально предполагается, что если обращение произошло по некоторому адресу, то велика вероятность обращения по соседним адресам.
Важнейшая задача – выбор оптимального размера страницы.
Если страница велика, то велики потери из фиктивных областей (в среднем половина последней страницы). Выбор размера страницы – сложная оптимизационная задача. На практике размер страницы выбирают в несколько килобайт. Например, в процессорах Pentiumи ОС на них, поддерживают страницы размером 4096 байт (4 Кбайт).
Размер страницы также влияет на количество записей в таблицах страниц процессов. Так в современных процессорах максимальный объем виртуального адресного пространства процесса, не меньше 4 Гбайт (232), то при размере страницы 4 Кбайт (212) и длине записи 4 байта для хранения таблицы страниц требуется 4 Мбайт памяти!
Выходом из возникшей ситуации является хранение в памяти только той части таблицы страниц, которая активно используется в данный период времени, т.е. таблицу страниц можно временно вытеснять из оперативной памяти.
Именно такой результат может быть достигнут путем усложнения структуризации виртуального адресного пространства, при котором все множество виртуальных адресов процесса делится на разделы, а разделы делятся на страницы.
Все страницы имеют одинаковый размер, а разделы содержат одинаковое количество страниц.
Если размер страницы и количество страниц в разделе выбрать равными степени двойки (2k и 2n соответственно), то принадлежность виртуального адреса к разделу и странице, а также смещение внутри страницы определяется очень просто: младшие k двоичных разрядов дают смещение, следующие n разрядов – номер виртуальной страницы, а оставшиеся старшие разряды содержат номер раздела.
Для каждого раздела строится собственная таблица страниц. Количество дескрипторов в таблице и их размер подбираются такими образом, чтобы объем таблицы оказался равным объему страницы.
Например, в процессоре Pentium при размере страницы 4 Кбайт длина дескриптора составляет 4 байта и количество записей в таблице страниц, помещающейся на страницу, равно 1024. Каждая таблица страниц описывается дескриптором, структура которого полностью совпадает со структурой дескриптора обычной страницы. Эти дескрипторы сведены в таблицу разделов, называемую также каталогом страниц. Физический адрес таблицы разделов активного процесса содержится в специальном регистре процессора и поэтому всегда известен ОС. Страница, содержащая таблицу разделов, никогда не выгружается из памяти.
Выгрузка страниц с таблицами страниц позволяет экономить память, но при этом приводит к дополнительным затратам при получении физического адреса. Действительно, может случиться так, что та таблица страниц, которая содержит нужный дескриптор, в данный момент выгружена на диск, тогда процесс преобразования адреса приостанавливается до загрузки требуемой страницы в память.
Для уменьшения вероятности отсутствия страницы в памяти используют различные приемы, основным из которых является кэширование (будем изучать позже).
Проследим более подробно схему преобразования адресов для случая двухуровневой структуризации виртуального адресного пространства:
- Путем отбрасывания k+n младших разрядов в виртуальном адресе определяется номер раздела, к которому принадлежит данный виртуальный адрес.
- По этому номеру из таблицы разделов извлекается дескриптор соответствующей таблицы страниц. Проверяется, находится ли данная таблица страниц в памяти. Если нет, происходит страничное прерывание и система загружает нужную страницу с диска.
- Далее из этой таблицы страниц извлекается дескриптор виртуальной страницы, номер которой содержится в средних n разрядах преобразуемого виртуального адреса. Снова выполняется проверка наличия данной страницы в памяти и при необходимости ее загрузка.
- Из дескриптора определяется номер (базовый адрес) физической страницы, в которую загружена данная виртуальная страница. К номеру физической страницы пристыковывается смещение, взятое из k младших разрядов виртуального адреса. В результате получается искомый физический адрес.
Заметим что страничное распределение памяти может быть реализовано в упрощенном варианте, без выгрузки страниц на диск. В этом случае все виртуальные страницы всех процессов постоянно находятся в оперативной памяти. Такой вариант не имеет преимуществ работы с виртуальной памятью большого объема, но позволяет успешно бороться с фрагментацией физической памяти. Никогда не образуется неиспользуемые остатки. Такой режим используется в специализированных ОС, когда требуется высокая реактивность системы.
Сегментное распределение
При страничной организации виртуальное адресное пространство процесса делится на равные части механически, без учета смыслового значения данных.
Однако, разбиение виртуального адресного пространства па «осмысленные» части делает принципиально возможным совместное использование фрагментов программ разными процессами. Например, двум процессам требуется одна и та же подпрограмма, которая к тому же обладает свойством реентерабельности. Тогда коды этой подпрограммы могут быть оформлены в виде отдельного сегмента и включены в виртуальные адресные пространства обоих процессов.
При отображении в физическую память сегменты, содержащие коды подпрограммы из обоих виртуальных пространств, проецируются на одну и ту же область физической памяти. Таким образом, оба процесса получат доступ к одной и той же копии подпрограммы.
Виртуальное адресное пространство процесса делится на части — сегменты.
Их размер которых определяется с учетом смыслового значения содержащейся в них информации. Отдельный сегмент может представлять собой подпрограмму, массив данных и т. и. Деление виртуального адресного пространства па сегменты осуществляется компилятором на основе указаний программиста или по умолчанию, на основе принятых в системе соглашений. Максимальный размер сегмента определяется разрядностью виртуального адреса, например при 32-разрядной организации процессора он равен 4 Гбайт. При этом максимально возможное виртуальное адресное пространство процесса представляет собой набор из N виртуальных сегментов, каждый размером по 4 Гбайт. В каждом сегменте виртуальные адреса находятся в диапазоне от 0000000016 до FFFFFFFF16.
Сегменты не упорядочиваются относительно друг друга, так что общего для сегментов линейного виртуального адреса не существует, виртуальный адрес задается парой чисел: номером сегмента и линейным виртуальным адресом.
При загрузке процесса в оперативную память помещается только часть его сегментов, полная копия виртуального адресного пространства находится в дисковой памяти. Для каждого загружаемого сегмента ОС подыскивает непрерывный участок свободной памяти достаточного размера. Смежные в виртуальной памяти сегменты одного процесса могут занимать в оперативной памяти несмежные участки (это очевидно). Если во время выполнения процесса происходит обращение по виртуальному адресу, относящемуся к сегменту, который в данный момент отсутствует в памяти, то происходит прерывание. ОС приостанавливает активный процесс, запускает на выполнение следующий процесс из очереди, а параллельно организует загрузку нужного сегмента. При отсутствии в памяти места, ОС выбирает сегмент на выгрузку.
На этапе создания процесса во время загрузки его образа в оперативную память система создает таблицу сегментов процесса (аналогичную таблице страниц), в которой для каждого сегмента указывается:
- базовый физический адрес сегмента в оперативной памяти;
- размер сегмента;
- правила доступа к сегменту;
- признаки модификации, присутствия и обращения к данному сегменту, а также некоторая другая информация
Если виртуальные адресные пространства нескольких процессов включают один и тот же сегмент, то в таблицах сегментов этих процессов делаются ссылки на один и тот же участок оперативной памяти, в который данный сегмент загружается в единственном экземпляре.
Механизмы преобразования адресов в страничном и сегментном способах организации памяти весьма схожи. Однако в них имеются и существенные отличия. Эти отличия являются следствием того, что сегменты, в отличие от страниц имеют произвольный размер.
Виртуальный адрес при сегментной организации можно представлен парой (g, s), где g - номер сегмента, as- смещение.
Страницы имеют одинаковый размер, а значит, их начальные адреса кратны размеру страниц. Поэтому ОС заносит в таблицы страниц не полные адреса, а номера физических страниц, которые совпадают со старшими разрядами базовых адресов.
Сегмент может в общем случае располагаться в физической памяти начиная с любого адреса. Следовательно, для определения местоположения в памяти необходимо задавать его полный начальный физический адрес.
Использование операции сложения замедляет процедуру преобразования виртуального адреса в физический по сравнению со страничной организацией (там просто объединение старших и младших разрядов).
Другим недостатком сегментного распределения является избыточность. При сегментной организации единицей перемещения между памятью и диском является сегмент, общем которого, как правило, больший, чем страница. Но во многих случаях для работы программы не требуется загружать весь сегмент целиком, достаточно было бы одной или двух страниц. Аналогично при отсутствии свободного места не следует выгружать целый сегмент, если можно ограничится несколькими страницами.
Но главный недостаток — это фрагментация, который возникает из-за непредсказуемости размеров сегментов.
Наиболее существенным отличием сегментной организации от страничной является возможность задания дифференцированных прав доступа процесса к его сегментам.
Например, сегмент данных исходной информации может иметь права доступа «только чтение», а сегмент результатов, — «чтение и запись». Это свойство определяет преимущество сперед страничной.