Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Операционные системы. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
11.08.2026
Размер:
646 Кб
Скачать

4.3. Алгоритмы распределения памяти

Виртуальный адрес при страничном распределении может быть представлен в виде пары (p, s), где p – номер виртуальной страницы процесса (нумерация страниц начинается с 0), а s – смещение в пределах виртуальной страницы. Учитывая, что размер страницы равен 2 в степени k, смещение s может быть получено простым отделением k младших разрядов в двоичной записи виртуального адреса. Оставшиеся старшие разряды представляют собой двоичную запись номера страницы p.

При каждом обращении к оперативной памяти аппаратными средствами выполняются следующие действия:

1)на основании начального адреса таблицы страниц (содержимое регистраадресатаблицыстраниц),номеравиртуальнойстраницы(старшие разряды виртуального адреса) и длины записи в таблице страниц (системная константа) определяется адрес нужной записи в таблице;

2)из этой записи извлекается номер физической страницы;

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

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

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

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

взначительной степени определяется временем доступа к таблице страниц. В связи с этим таблицу страниц стремятся размещать в «быстрых»

71

4. Управление памятью

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

Страничное распределение памяти может быть реализовано

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

вОС Novell NetWare.

Сегментное распределение

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

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

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

72

4.3. Алгоритмы распределения памяти

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

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

Виртуальный адрес при сегментной организации памяти может быть представлен парой (g, s), где g – номер сегмента, а s – смещение

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

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

Сегментно-страничное распределение

Данный метод представляет собой комбинацию страничного исегментного распределения памяти и, вследствие этого, сочетает в себе достоинства обоих подходов. ВАП делится на сегменты, а каждый сегмент

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

73

4. Управление памятью

Контрольные вопросы и задания

1.Дайте определение понятию «память».

2.Перечислите основные параметры запоминающих устройств.

3.Приведите два подхода виртуализации памяти.

4.Перечислите функции ОС по управлению памятью.

5.Назовите алгоритмы распределения памяти без использования внешней памяти.

6.Перечислите алгоритмы распределения памяти с использованием внешней памяти.

7.Что такое фрагментация?

8.Для чего предназначен страничный файл?

9.Какая информация хранится в таблице страниц?

10.Перечислите и охарактеризуйте стратегии выбора страницы для выгрузки из оперативной памяти на диск.

11. Как осуществляется преобразование виртуального адреса

вфизический при страничном распределении?

12.Каковы особенности сегментного и сегментно-страничного распределения?

74

5. УПРАВЛЕНИЕ ДАННЫМИ

Обмен данными между пользователями, приложениями и периферийными устройствами (ПУ) выполняет подсистема ввода-вывода (ПВВ). Клиентами ПВВ являются пользователи, приложения, а также некоторые компоненты самой ОС, которым требуется получение системных данных и их вывод.

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

5.1. Задачи подсистемы ввода-вывода

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

1)организация параллельной работы устройств ввода-вывода (УВВ) и процессора;

2)согласование скоростей обмена и кэширование данных;

3)разделение устройств и данных между процессами;

4)обеспечение удобного логического интерфейса между устройствами и остальной частью системы;

5)поддержка широкого спектра драйверов с возможностью простого включения в систему нового драйвера;

6)динамическая загрузка и выгрузка драйверов без дополнительных действий с ОС;

7)поддержка нескольких ФС;

8)поддержка синхронных и асинхронных операций ввода-вывода. Рассмотрим эти задачи более подробно.

5.1.1.Организация параллельной работы УВВ и процессора

Каждое УВВ в вычислительной системе снабжено специализированным блоком управления, называемым контроллером. Контроллер

75

5. Управление данными

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

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

5.1.2. Согласование скоростей обмена и кэширование данных

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

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

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

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

5.1.3. Разделение устройств и данных между процессами

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

76

5.1. Задачи подсистемы ввода-вывода

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

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

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

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

5.1.4. Обеспечение удобного логического интерфейса между устройствами и остальной частью системы

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

77

5.Управление данными

5.1.5.Поддержка широкого спектра драйверов и простота включения

нового драйвера в систему

Достоинством ПВВ любой универсальной ОС является наличие разнообразного набора драйверов для наиболее популярных ПУ.

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

Функциями драйверов устройств являются:

1.Обработка запросов записи-чтения от ПО управления устройствами. Постановка запросов в очередь.

2.Проверка входных параметров запросов и обработка ошибок.

3.Инициализация устройства и проверка статуса устройства.

4.Управление энергопотреблением устройства.

5.Регистрация событий в устройстве.

6.Выдача команд устройству и ожидание их выполнения, возможно, в блокированном состоянии, до поступления прерывания от устройства.

7.Проверка правильности завершения операции.

8.Передача запрошенных данных и статуса завершенной операции.

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

Для поддержки процесса разработки драйверов ОС обычно выпускается пакет DDK (Driver Development Kit), представляющий собой набор соответствующих инструментальных средств – библиотек, компиляторов и отладчиков.

78

5.1.Задачи подсистемы ввода-вывода

5.1.6.Динамическая загрузка и выгрузка драйверов

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

5.1.7. Поддержка нескольких ФС

Популярность той или иной ФС часто приводит к ее миграции из «родной» ОС в другие – например, ФС FAT появилась в MS-DOS, но затем была реализована в OS/2, семействе MS Windows и многих реализациях Unix. Ввиду этого поддержка нескольких популярных ФС для ПВВ также важна, как и поддержка спектра ПУ. Важно также, чтобы архитектура ПВВ позволяла достаточно просто включать в ее состав новые типы ФС, без переписывания кода.

5.1.8. Поддержка синхронных и асинхронных операций ввода-вывода

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

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

79

5.Управление данными

5.2.Многослойная модель подсистемы ввода-вывода

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

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

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

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

Для решения поставленных проблем целесообразно разделить программное обеспечение ввода-вывода на четыре слоя:

1)обработка прерываний;

2)драйверы устройств;

3)независимый от устройств слой ОС;

4)пользовательский слой ПО.

Обработка прерываний

Прерывания должны быть скрыты как можно глубже в недрах

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

80

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]