Название: Операционные системы как системы управления вычислительными ресурсами - (Коршикова Л.А.)

Жанр: Технические

Просмотров: 1094


1. теоретические основы управления памятью

 

Оперативная память, или память с произвольным доступом, является достаточно дорогостоящим ресурсом. Время доступа к оперативной памяти составляет всего несколько циклов процессора, поэтому работа с данными, находящимися в памяти, обеспечивает максимальную производительность. Данный ресурс, как правило, ограничен. В большей степени это справедливо для многозадачных операционных систем общего назначения. Данные, которые не могут быть размещены в оперативной памяти, располагаются на вторичных устройствах хранения, или во вторичной памяти, роль которой обычно выполняют дисковые накопители. Время доступа к вторичной памяти на несколько порядков превышает время доступа к оперативной памяти и требует активного содействия операционной системы. Подсистема управления памятью должна отвечать за справедливое и эффективное распределение разделяемого ресурса оперативной памяти между процессами и за обмен данными между оперативной и вторичной памятью. Часть операций производится аппаратно устройством управления памятью процессора под управлением операционной системы, чем достигается требуемое быстродействие.

Существуют различные способы логического расширения ресурса памяти и отображения логической памяти на физическую. Эти способы определяют стратегию распределения памяти между несколькими процессами, одновременно использующими оперативную память. Основные из них приведены на рис. 1.

 

 

Рис. 1. Способы управления памятью

 

На выбор конкретной стратегии управления памятью при разработке программно-аппаратных средств компьютера оказывают влияние различные соображения:

– простота реализации;

– гибкость использования имеющегося ресурса оперативной памяти;

– требования повышения эффективности системы и т.д.

Концептуально память делится на три основные области:

– область памяти, постоянно распределенная операционной системе;

– область памяти, используемая заданием пользователя;

– область памяти, выделенная заданию, но не используе-

мая им.

Простыми являются методы распределения памяти без вытеснения. Эти методы управления памятью используются для реализации без мультипрограммирования, а также операционных систем, реализующих мультипрограммный режим.

Примитивное управление памятью значительно уменьшает функциональность операционной системы. Такие системы, как правило, позволяют загрузить в заранее определенное место в оперативной памяти единственную задачу и передать ей управление. При этом задача получает в свое распоряжение все ресурсы компьютера (разделяя их с операционной системой), а адреса, используемые задачей, являются физическими адресами оперативной памяти. Такой способ запуска и выполнения одной программы является наиболее быстрым и включает минимальные накладные расходы.

Этот подход часто используется в специализированных микропроцессорных системах, но практически не применим в операционных системах общего назначения.

Схемы управления памятью без вытеснения не решают такие важные проблемы, как фрагментация памяти, ограничение адресного пространства заданий физическим объемом памяти.

Эту проблему можно разрешить, используя оперативную память чрезвычайно больших размеров. Такой подход очень прост, но не реализуем по экономическим причинам.

Ниже перечислены некоторые возможности, которые должна обеспечивать подсистема управления памятью современной многозадачной операционной системы:

– выполнение задач, размер которых превышает размер оперативной памяти;

– выполнение частично загруженных в память задач для минимизации времени их запуска;

– размещение нескольких задач в памяти одновременно для повышения эффективности использования процессора;

– размещение задачи в произвольном месте оперативной памяти;

– размещение задачи в нескольких различных частях оперативной памяти;

– совместное использование несколькими задачами одних и тех же областей памяти.

Исходя из вышесказанных условий, предъявляемых подсистеме управления памятью, необходимо создать такую ОС, которая обеспечивала бы иллюзию чрезвычайно большой памяти. В современных операционных системах такая "иллюзорная" память реализована с помощью, так называемой, виртуальной памяти.

Проблема размещения в памяти программ, размер которых превышал имеющуюся в наличии свободную память, решалась разбиением программы на части, называемые оверлеями. Нулевой оверлей начинал выполняться первым. Когда он заканчивал свое выполнение, он вызывал другой оверлей. Все оверлеи хранились на диске и перемещались между памятью и диском средствами операционной системы. Однако разбиение программы на части и планирование их загрузки в оперативную память должен был осуществлять программист.

Развитие методов организации вычислительного процесса привело к появлению метода, известного под названием виртуальная память. Виртуальным называется ресурс, который пользователю или пользовательской программе представляется как обладающий свойствами, которыми он в действительности не обладает. Так, например, пользователю может быть предоставлена виртуальная оперативная память, размер которой превосходит всю имеющуюся в системе реальную оперативную память. Пользователь пишет программы так, как будто в его распоряжении имеется однородная оперативная память большого объема, но в действительности все данные, используемые программой, хранятся на одном или нескольких разнородных запоминающих устройствах, обычно на дисках, и, при необходимости, частями отображаются в реальную память.

Для идентификации переменных и команд используются символьные имена (метки), виртуальные адреса и физические адреса (рис. 2).

Символьные имена присваивает пользователь при написании программы на алгоритмическом языке или ассемблере.

Виртуальные адреса вырабатывает транслятор, переводящий программу на машинный язык. Так как во время трансляции в общем случае не известно, в какое место оперативной памяти будет загружена программа, то транслятор присваивает переменным и командам виртуальные (условные) адреса, обычно считая, что программа будет размещена, начиная с нулевого адреса. Совокупность виртуальных адресов процесса называется виртуальным адресным пространством. Каждый процесс имеет собственное виртуальное адресное пространство. Максимальный размер виртуального адресного пространства ограничивается разрядностью адреса, присущей данной архитектуре компьютера, и, как правило, не совпадает с объемом физической памяти, имеющейся в компьютере.

 

Рис. 2. Схема "Пространство и отображение" при виртуальной памяти

 

Отображение символьных имен на конкретные физические ячейки памяти производится в два этапа:

– системой программирования;

– операционной системой с помощью программы управления памятью.

Физические адреса соответствуют номерам ячеек оперативной памяти, где в действительности расположены или будут расположены переменные и команды. Переход от виртуальных адресов к физическим может осуществляться двумя способами. В первом случае замену виртуальных адресов на физические делает специальная системная программа – перемещающий загрузчик. Перемещающий загрузчик на основании имеющихся у него исходных данных о начальном адресе физической памяти, в которую предстоит загружать программу, и информации, предоставленной транслятором об адресно-зависимых константах программы, выполняет загрузку программы, совмещая ее с заменой виртуальных адресов физическими.

Второй способ заключается в том, что программа загружается в память в неизмененном виде в виртуальных адресах, при этом операционная система фиксирует смещение действительного расположения программного кода относительно виртуального адресного пространства. Во время выполнения программы при каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в физический. Второй способ является более гибким, он допускает перемещение программы во время ее выполнения, в то время как перемещающий загрузчик жестко привязывает программу к первоначально выделенному ей участку памяти. Использование перемещающего загрузчика уменьшает накладные расходы, так как преобразование каждого виртуального адреса происходит только один раз во время загрузки, а во втором случае – каждый раз при обращении по данному адресу.

В некоторых случаях (обычно в специализированных системах), когда заранее точно известно, в какой области оперативной памяти будет выполняться программа, транслятор выдает исполняемый код сразу в физических адресах.

Таким образом, виртуальная память – это совокупность программно-аппаратных средств, позволяющих пользователям писать программы, размер которых превосходит имеющуюся оперативную память. Для этого решаются следующие задачи:

– размещение данных в запоминающих устройствах разного типа, например, часть программы в оперативной памяти, а часть на диске;

– перемещение по мере необходимости данных между запоминающими устройствами разного типа, например, подгруздка нужных частей программы с диска в оперативную память;

– преобразование виртуальных адресов в физические.

Все эти действия выполняются автоматически, без участия программиста, т. е. механизм виртуальной памяти является прозрачным по отношению к пользователю. Смысл виртуальной памяти заключается в том, что каждый процесс выполняется в собственном виртуальном адресном пространстве. При этом адреса, используемые приложениями и операционной системой, не обязаны соответствовать физическим адресам.

Виртуальная память повышает "накладные расходы" операционной системы:

– структуры данных управления памятью размещаются в оперативной памяти, уменьшая ее размер;

– управление виртуальной памятью процесса может требовать ресурсоемких операций ввода/вывода;

– для системы со средней загрузкой около 7 \% процессорного времени приходится на подсистему управления памятью.

Поэтому от эффективности реализации и работы этой подсистемы во многом зависит производительность операционной системы в целом.

Чисто программные методы управления виртуальной памятью получили наиболее широкое развитие после создания соответствующей аппаратной поддержки. В современных компьютерных системах процесс отображения выполняется на аппаратном уровне, обеспечивая высокую скорость трансляции. Операционная система осуществляет управление этим процессом. На рис. 3 показана взаимосвязь между виртуальным и физическим адресным пространством. Виртуальное адресное пространство процесса, как правило, является последовательным. Расположение соответствующих областей физической памяти может иметь фрагментированный характер, позволяя оптимально распределять память между процессами.

 

 

Рис. 3. Виртуальная и физическая память

Идея аппаратной части механизма виртуальной памяти состоит в том, что адрес памяти, вырабатываемый командой, интерпретируется аппаратурой не как реальный адрес некоторого элемента основной памяти, а как некоторая структура, разные поля которой обрабатываются разным образом.

Прежде чем подробно рассмотреть организационные методы управления виртуальной памятью, остановимся на классических примерах распределения оперативной памяти. Все методы распределения памяти могут быть разделены на два класса: методы, которые используют перемещение процессов между оперативной памятью и диском, и методы, которые не делают этого. На рис. 4 дан перечень методов распределения памяти, основы которых излагаются ниже.

 

 

Рис. 4. Методы распределения памяти

 

Распределение памяти фиксированными разделами. Самым простым способом управления оперативной памятью является разделение ее на несколько разделов фиксированной величины. Это может быть выполнено во время старта системы или во время ее генерации. Очередная задача, поступившая на выполнение, помещается либо в общую очередь (рис. 5,а), либо в очередь к некоторому разделу (рис. 5,б).

Подсистема управления памятью в этом случае выполняет следующие задачи:

– сравнивает размер программы, поступившей на выполнение, и свободных разделов, выбирает подходящий раздел;

– осуществляет загрузку программы и настройку адресов.

При простоте реализации данный метод имеет существенный недостаток – жесткость. Так как в каждом разделе может выполняться только одна программа, то уровень мультипрограммирования заранее ограничен числом разделов не зависимо от того, какой размер имеют программы. Даже если программа имеет небольшой объем, она будет занимать весь раздел, что приводит к неэффективному использованию памяти. С другой стороны, если объем оперативной памяти машины позволяет выполнить некоторую программу, разбиение памяти на разделы не позволяет сделать этого.

Рис. 5. Распределение памяти фиксированными разделами:

а – с общей очередью; б – с отдельными очередями

Распределение памяти разделами переменной величины. В этом случае память машины не делится заранее на разделы. Сначала вся память свободна. Каждой вновь поступающей задаче выделяется необходимая ей память. Если достаточный объем памяти отсутствует, то задача не принимается на выполнение и стоит в очереди. После завершения задачи память освобождается, и на это место может быть загружена другая задача. Таким образом, в произвольный момент времени оперативная память представляет собой случайную последовательность занятых и свободных участков (разделов) произвольного размера. На рис. 6 показано состояние памяти в различные моменты времени при использовании динамического распределения. Так в момент t0 в памяти находится только ОС, а к моменту t1 память разделена между пятью задачами, причем задача П4, завершаясь, покидает память. На освободившееся после задачи П4 место загружается задача П6, поступившая в момент t3.

 

 

Рис. 6. Распределение памяти динамическими разделами

 

Задачами операционной системы при реализации данного метода управления памятью являются:

ведение таблиц свободных и занятых областей, в которых указываются начальные адреса и размеры участков памяти;

при поступлении новой задачи – анализ запроса, просмотр таблицы свободных областей и выбор раздела, размер которого достаточен для размещения поступившей задачи;

загрузка задачи в выделенный ей раздел и корректировка таблиц свободных и занятых областей;

после завершения задачи корректировка таблиц свободных и занятых областей.

Программный код не перемещается во время выполнения, т. е. может быть проведена единовременная настройка адресов посредством использования перемещающего загрузчика.

Выбор раздела для вновь поступившей задачи может осуществляться по разным правилам, таким, например, как "первый попавшийся раздел достаточного размера", или "раздел, имеющий наименьший достаточный размер", или "раздел, имеющий наибольший достаточный размер". Все эти правила имеют свои преимущества и недостатки.

По сравнению с методом распределения памяти фиксированными разделами данный метод обладает гораздо большей гибкостью, но ему присущ очень серьезный недостаток – фрагментация памяти. Фрагментация – это наличие большого числа несмежных участков свободной памяти небольшого размера (фрагментов). Ни одна из вновь поступающих программ не может поместиться ни в одном из участков, хотя суммарный объем фрагментов может составить значительную величину, намного превышающую требуемый объем памяти.

Перемещаемые разделы. Одним из методов борьбы с фрагментацией является перемещение всех занятых участков в сторону старших либо в сторону младших адресов так, чтобы вся свободная память образовывала свободную единую область (рис. 7). В дополнение к функциям, которые выполняет операционная система при распределении памяти перемещаемыми разделами, она должна еще время от времени копировать содержимое разделов из одного места памяти в другое, корректируя таблицы свободных и занятых областей. Эта процедура называется "сжатием". Сжатие может выполняться либо при каждом завершении задачи, либо только тогда, когда для вновь поступившей задачи нет свободного раздела достаточного размера. В первом случае требуется меньше вычислительной работы при корректировке таблиц, а во втором – реже выполняется процедура сжатия. Так как программы перемещаются по оперативной памяти в ходе своего выполнения, то преобразование адресов из виртуальной формы в физическую должно выполняться динамическим способом.

 

 

Рис. 7. Распределение памяти перемещаемыми разделами

 

Хотя процедура сжатия и приводит к более эффективному использованию памяти, она может потребовать значительного времени, что часто перевешивает преимущества данного метода.

Виртуальная память. Страничное распределение памяти по запросам. Виртуальное адресное пространство каждого процесса делится на части одинакового фиксированного для данной системы размера, называемые виртуальными страницами. В общем случае размер виртуального адресного пространства не является кратным размеру страницы, поэтому последняя страница каждого процесса дополняется фиктивной областью. Виртуальные страницы организуются в логическом адресном пространстве, а рамки страниц – в физическом (под рамками страниц подразумеваются физические страницы). Поскольку страницы и рамки страниц имеют различные идентификаторы, возникают ситуации, касающиеся взаимосвязи между логическим адресным пространством (ЛАП) и физическим адресным пространством (ФАП).

ЛАП < ФАП. В этом случае основной акцент делается на повышение эффективности использования памяти.

ЛАП = ФАП. Страничная организация служит не только для увеличения эффективности использования памяти, но и для расширения возможности разделенного использования процедур (т. е. несколькими пользователями). Возможно использование эффективного оверлейного механизма, реализованного аппаратно.

ЛАП > ФАП. Этот случай предполагает виртуальную память и дает наибольшие преимущества.

Для удобства реализации размер страницы всегда выбирается равным числу, являющемуся степенью 2.

Страницы и рамки страниц снабжают числовыми идентификаторами, устанавливаемыми по следующему правилу:

Пусть p есть размер страницы в словах, например, 512.

Пусть т есть размер основной памяти в словах, такой, что m = = n ´ p по модулю 1024 есть 0;  р по модулю 2К есть 0 и i ´ p =

= j ´ 1024. Таким образом, основная память состоит из участков по 1К слов в каждом. Кроме этого, размер страницы есть степень числа 2, а 1К памяти содержит четное число страниц. Набор целых чисел 0, 1, 2, ..., п – 1 соответствует идентификаторам страничных рамок.

Пусть М есть размер программы пользователя в словах. Для размещения этой программы в памяти необходимо N страниц, так что М = N ´ p. Набор целых чисел от 0 до п – 1 соответствует идентификаторам страниц пользователя. Требование равенства нулю m по модулю р не является обязательным. Это означает, что программа пользователя не должна заполнять целиком все страницы. Последняя страница может быть заполнена лишь частично.

Используя двоичную арифметику – представление страницы степенью числа 2, легко реализуемо. Наиболее предпочтительны размеры страниц 8К, 16К и 64К.

Конструкция виртуального адреса. Виртуальный адрес – это адрес логического пространства процесса пользователя (обычно для случая ЛАП > ФАП). Все ссылки к логическому пространству должны быть преобразованы в физический адрес основной памяти. Для этого системе необходимы идентификатор рамки страницы и смещение внутри нее. Система должна преобразовать виртуальный адрес в физический. Каждый виртуальный адрес есть пара (р, i), где р – номер страницы процесса пользователя, а i – индекс страницы (такой, что i < w, где w – размер страницы).

Например, если машина имеет 16-бит слово, позволяющее ей адресоваться к 64К слов, и если размер страницы составит 512 слов, то логическое адресное пространство будет состоять из 128 страниц. Для идентификатора р необходимо 7 бит, а для индекса 9 бит.

При загрузке процесса часть его виртуальных страниц помещается в оперативную память, а остальные – на диск. При наличии соответствующих аппаратных средств преобразования адресов любая страница может быть помещена в любой блок памяти (отображена на любую физическую страницу). Страницы программы пользователя остаются логически смежными, но соответствующие им блоки не всегда будут смежными. Важно заметить, что это преобразование не оказывает влияния на программы, т.е. не воздействует явно на адресное пространство задания. На рис. 8 показана схема страничного распределения памяти.

Рис. 8. Страничное распределение памяти

В аппаратных средствах, осуществляющих отображение адресного пространства на физическую память, для каждой страницы должен быть предусмотрен специальный регистр. Совокупность этих регистров образует таблицу переадресации страниц. Эти регистры являются либо специальной частью аппаратуры, либо занимают часть основной памяти. В этой таблице устанавливается соответствие между номерами виртуальных и физических страниц для страниц, загруженных в оперативную память, или делается отметка о том, что виртуальная страница выгружена на диск. Кроме того, в таблице страниц содержится управляющая информация:

признак модификации страницы;

признак невыгружаемости (выгрузка некоторых страниц может быть запрещена);

признак обращения к странице (используется для подсчета числа обращений за определенный период времени) и другие.

Так как каждая страница может быть перемещена независимо от других страниц, то раздел, выделенный задаче, может не занимать непрерывный участок памяти. Непрерывность сохраняется в пределах одной страницы. Очевидно, что выбор размера страниц существенно влияет на применение этой схемы. Если размер страницы слишком велик и становится сравнимым с размером раздела, схема распределения страницами вырождается в схему с перемещаемыми разделами. Если размер страницы слишком мал, необходимо иметь много регистров переадресации, что существенно повышает стоимость вычислительной системы. В результате компромисса, учитывающего эти и другие требования, во многих системах со страничной организацией памяти используются страницы размером от 1К до 4К байтов.

При активизации очередного процесса в специальный регистр процессора загружается адрес таблицы страниц данного процесса. При каждом обращении к памяти происходит чтение из таблицы страниц информации о виртуальной странице, к которой произошло обращение. Если данная виртуальная страница находится в оперативной памяти, то выполняется преобразование виртуального адреса в физический.

Если же нужная виртуальная страница в данный момент выгружена на диск, то происходит так называемое страничное прерывание. Выполняющийся процесс переводится в состояние ожидания, и активизируется другой процесс из очереди готовых. Параллельно программа обработки страничного прерывания находит на диске требуемую виртуальную страницу и пытается загрузить ее в оперативную память. Если в памяти имеется свободная физическая страница, то загрузка выполняется немедленно, если же свободных страниц нет, то решается вопрос, какую страницу следует выгрузить из оперативной памяти.

В некоторых системах используется понятие рабочего множества (набора) страниц. Рабочее множество определяется для каждого процесса и представляет собой перечень наиболее часто используемых страниц, которые должны постоянно находиться в оперативной памяти и поэтому не подлежат выгрузке.

После того, как выбрана страница, которая должна покинуть оперативную память, анализируется ее признак модификации (из таблицы страниц). Если выталкиваемая страница с момента загрузки была модифицирована, то ее новая версия должна быть переписана на диск. Если нет, то она может быть просто уничтожена, т. е. соответствующая физическая страница объявляется свободной.

На производительность системы со страничной организацией памяти влияют временные затраты, связанные с обработкой страничных прерываний и преобразованием виртуального адреса в физический. При часто возникающих страничных прерываниях система может тратить большую часть времени впустую – на свопинг страниц. Чтобы уменьшить частоту страничных прерываний, следовало бы увеличивать размер страницы. Кроме того, увеличение размера страницы уменьшает размер таблицы страниц, а значит, уменьшает затраты памяти. С другой стороны, если страница велика, значит, велика и фиктивная область в последней виртуальной странице каждой программы. В среднем на каждой программе теряется половина объема страницы, что в сумме при большой странице может составить существенную величину. Время преобразования виртуального адреса в физический в значительной степени определяется временем доступа к таблице страниц. В связи с этим таблицу страниц стремятся размещать в "быстрых" запоминающих устройствах. Это может быть, например, набор специальных регистров или память, использующая для уменьшения времен и доступа ассоциативный поиск и кэширование данных.

Страничное распределение памяти может быть реализовано в упрощенном варианте, без выгрузки страниц на диск. В этом случае все виртуальные страницы всех процессов постоянно находятся в оперативной памяти. Такой вариант страничной организации хотя и не предоставляет пользователю виртуальной памяти, но почти исключает фрагментацию за счет того, что программа может загружаться в несмежные области, а также того, что при загрузке виртуальных страниц никогда не образуется остатков.

Контрольные биты страниц. С каждым элементом таблицы связывается набор контрольных битов. Эти биты служат для указания стратегии управления страницами. Количество и тип этих битов определяются устройством управления памятью (УУП).

1. БИТ-ПРИСУТСТВИЯ указывает, находится ли страница в данный момент в основной памяти.

2. БИТ(Ы)-АКТИВНОСТИ указывает на использование за последнее время данной страницы процедурами страничного обмена.

3. БИТ-ИЗМЕНЕНИЯ указывает на то, что содержимое страницы памяти изменялось (или не изменялось) с момента ее загрузки в память.

Наиболее важными из этих битов являются БИТ-ПРИ-СУТСТВИЯ и БИТ-ИЗМЕНЕНИЯ. Бит присутствия анализируется при каждой адресной ссылке программы пользователя. Равенство его нулю означает, что страница была удалена из памяти. Бит изменения определяет необходимость записи страницы на диск при ее замене в памяти. Единичное его значение показывает, что в содержимом страницы были сделаны изменения, и, следовательно, она должна быть записана на диск. (Нулевое значение предполагает использование прежней копии.) В системах, в которых страницы инструкций (в противоположность страницам данных) являются реентерабельными, бит изменения никогда не устанавливается.

Сегментная организация. При страничной организации виртуальное адресное пространство процесса делится механически на равные части. Это не позволяет дифференцировать способы доступа к разным частям программы (сегментам), а это свойство часто бывает очень полезным. Например, можно запретить обращаться с операциями записи и чтения в кодовый сегмент программы, а для сегмента данных разрешить только чтение. Кроме того, разбиение программы на "осмысленные" части делает принципиально возможным разделение одного сегмента несколькими процессами. Например, если два процесса используют одну и ту же математическую подпрограмму, то в оперативную память может быть загружена только одна копия этой подпрограммы.

Виртуальное адресное пространство процесса делится на сегменты, размер которых определяется программистом с учетом смыслового значения содержащейся в них информации. Отдельный сегмент может представлять собой подпрограмму, массив данных и т.п. Иногда сегментация программы выполняется по умолчанию компилятором.

При загрузке процесса часть сегментов помещается в оперативную память (при этом для каждого из этих сегментов операционная система подыскивает подходящий участок свободной памяти), а часть сегментов размещается в дисковой памяти. Сегменты одной программы могут занимать в оперативной памяти несмежные участки. Во время загрузки система создает таблицу сегментов процесса (аналогичную таблице страниц), в которой для каждого сегмента указывается начальный физический адрес сегмента в оперативной памяти, размер сегмента, правила доступа, признак модификации, признак обращения к данному сегменту за последний интервал времени и некоторая другая информация. Если виртуальные адресные пространства нескольких процессов включают один и тот же сегмент, то в таблицах сегментов этих процессов делаются ссылки на один и тот же участок оперативной памяти, в который данный сегмент загружается в единственном экземпляре.

Система с сегментной организацией функционирует аналогично системе со страничной организацией: время от времени происходят прерывания, связанные с отсутствием нужных сегментов в памяти, при необходимости освобождения памяти некоторые сегменты выгружаются, при каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в физический. Кроме того, при обращении к памяти проверяется, разрешен ли доступ требуемого типа к данному сегменту.

При сегментной организации виртуальный адрес по-прежнему состоит из двух полей – номера сегмента и смещения внутри сегмента. Отличие от страничной организации заключается в том, что сегменты виртуальной памяти могут быть разного размера. В элементе таблицы сегментов помимо физического адреса начала сегмента (если виртуальный сегмент находится в основной памяти) содержится длина сегмента. Если размер смещения в виртуальном адресе выходит за пределы размера сегмента, возникает прерывание. Понятно, что компьютер с сегментной организацией виртуальной памяти можно использовать как компьютер со страничной организацией, если использовать сегменты одного размера. Механизм преобразования виртуального адреса в физический при сегментной организации памяти показан на рис. 9.

 

 

Рис. 9. Схема сегментной организации виртуальной памяти

 

Физический адрес получается путем сложения начального физического адреса сегмента, найденного в таблице сегментов по номеру (i) и смещения (j).

Недостатком данного метода распределения памяти является фрагментация на уровне сегментов и более медленное по сравнению со страничной организацией преобразование адреса.

Сегментно-страничная организация. Данный метод представляет собой комбинацию страничного и сегментного распределения памяти и, вследствие этого, сочетает в себе достоинства обоих подходов. Виртуальное пространство процесса делится на сегменты, а каждый сегмент в свою очередь делится на виртуальные страницы, которые нумеруются в пределах сегмента. Оперативная память делится на физические страницы. Загрузка процесса выполняется операционной системой постранично, при этом часть страниц размещается в оперативной памяти, а часть на диске. Для каждого сегмента создается своя таблица страниц, структура которой полностью совпадает со структурой таблицы страниц, используемой при страничном распределении. Для каждого процесса создается таблица сегментов, в которой указываются адреса таблиц страниц для всех сегментов данного процесса (рис. 10).

Адрес таблицы сегментов загружается в специальный регистр процессора, когда активизируется соответствующий процесс.

Сегментно-страничная организация виртуальной памяти позволяет совместно использовать одни и те же сегменты данных и программного кода в виртуальной памяти разных задач (для каждой виртуальной памяти существует отдельная таблица сегментов, но для совместно используемых сегментов поддерживались общие таблицы страниц).

 

 

Рис. 10. Схема сегментно-страничной организации виртуальной памяти

 

Свопинг. Разновидностью виртуальной памяти является свопинг. В соответствии с этим методом некоторые процессы (обычно находящиеся в состоянии ожидания) временно выгружаются на диск. Планировщик операционной системы не исключает их из своего рассмотрения, и при наступлении условий активизации некоторого процесса, находящегося в области свопинга на диске, этот процесс перемещается в оперативную память. Если свободного места в оперативной памяти не хватает, то выгружается другой процесс.

При свопинге, в отличие от рассмотренных ранее методов реализации виртуальной памяти, процесс перемещается между памятью и диском целиком, а не отдельные его страницы, т. е. в течение некоторого времени процесс может полностью отсутствовать в оперативной памяти. Существуют различные алгоритмы выбора процессов на загрузку и выгрузку, а также различные способы выделения оперативной и дисковой памяти загружаемому процессу.