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

Современные операционные системы (90

..pdf
Скачиваний:
2
Добавлен:
15.11.2022
Размер:
445.26 Кб
Скачать

размером оперативной памяти. Недостатки: имеется фрагментация памяти, размер раздела нельзя изменить после его создания.

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

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

С перемещаемыми разделами. Аналогичен алгоритму с переменными разделами, только ОС может перемещать раздел в оперативной памяти и изменять его размер. Таким образом решается проблема фрагментации памяти за счёт некоторых накладных расходов на перемещение и перенастройку адресов процесса. ОС приходится также хранить в памяти таблицу настройки адресов для каждого процесса или требовать от всех программ использовать позиционнонезависимый код9. Регистры процессора должны быть специализированы, некоторые регистры должны использоваться только для адресации, остальные — только для данных, чтобы ОС могла изменить состояние адресных регистров при изменении положения раздела в памяти.

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

7Last In First Out — принцип стека.

8Terminate and Stay Resident — резидентные программы, подобие многозадачности в DOS.

9PIC — Position Independent Code.

21

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

Memory

+

A: S D

Segment table

Base

Рис. 4. Сегментная адресация

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

10Процессор Alpha, например, имеет страницы размера 8192 байта.

22

Memory

P’ D

A: P D

Page table

Page address

Рис. 5. Страничная адресация

Адрес страницы не суммируется со смещением, а совмещается, так как они занимают разные наборы битов физического адреса.

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

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

23

COW (см. раздел 9) или процесс может быть аварийно завершён.

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

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

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

В современных универсальных ОС используется страничное или сегментно-страничное распределение памяти.

Контрольные вопросы

1)к какой проблеме приводит фрагментация памяти?

2)как решается задача изоляции процессов в страничном распределении памяти?

3)что происходит при обращении по записи к защищённой от записи странице?

24

7. Кэширование данных

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

Дисковый кэш (disk cache) — часть ОП, в которой временно хранится содержимое некоторых участков внешней памяти (например, жёсткого диска) для ускорения доступа к ним. Как правило, внешняя память многократно (в сотни или тысячи раз) превосходит ОП по объёму, поэтому ОС загружает в кэш и выгружает из кэша различные участки внешней памяти в процессе работы. Эффективность кэширования определяется коэффициентом попадания в кэш (hit rate), который вычисляют как отношение количества попаданий в кэш 11 к общему числу запросов к внешней памяти:

hit rate =

hit count

access count

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

Имеются различные алгоритмы организации дискового кэша.

Кэш фиксированного размера. Для кэширования данных выделяется область ОП, размер которой не меняется в процессе работы. Например, такой алгоритм использовался в MS-DOS (smartdrv). Это наиболее простой алгоритм, так как не требуется постоянное взаимодействие подсистемы кэширования с подсистемой распределения памяти.

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

Выгрузка блоков с наибольшим временем отсутствия обращений. При необходимости освободить место в кэше

11Попадание в кэш — запрос к внешней памяти, данные для которого нашлись в кэше.

25

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

Выгрузка блоков с наименьшей частотой обращений.

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

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

Прямая запись (write through). Этот способ кэширования записи предполагает одновременную запись данных во внешнюю память и помещение их в кэш. В случае краха системы (из-за отключения электричества и по другим причинам) минимизируются потери данных.

Отложенная запись (write back). В этом случае данные, предназначенные для записи, помещаются в кэш со специальным флажком dirty, который означает, что данные ещё не были записаны во внешнюю память. Запись осуществляется через некоторое время или при переполнении кэша. При крахе системы теряются незаписанные данные из кэша, но производительность по записи существенно выше по сравнению с прямой записью.

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

Отдельный от адресного пространства процессов кэш.

Пространство кэша не пересекается с адресным пространством процессов.

12Например, SUN Sparc Storage Array или Oracle StorageTek.

26

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

Контрольные вопросы

1)как зависит производительность операций ввода-вывода от кэширования?

2)какую опасность для данных представляет режим отложенной записи?

3)как унифицированный дисковый кэш увеличивает коэффициент попадания в кэш?

8.Файловые системы

Данные во внешней памяти могут быть организованы с помощью файловой системы.

Понятие файловой системы (ФС) может обозначать:

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

совокупность файлов и каталогов, записанных на носителе;

формат записи файлов и каталогов на носителе;

подсистему ОС, которая работает с этим форматом данных (эту подсистему также называют драйвером ФС).

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

27

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

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

ОС может поддерживать несколько ФС, однако какая-то одна (иногда несколько) файловая система считается «родной» и используется по умолчанию. Остальные файловые системы поддерживаются для совместимости с носителями, перенесёнными из других ОС.

ФС могут быть журналируемыми, что обеспечивает повышенную отказоустойчивость. Журнал — особая область на носителе, в которую заносится информация об изменениях файловой системы перед тем, как они действительно записываются на носитель данных. Управляющий блок журнала хранит два указателя — начало и конец журнала. За счёт маленького размера управляющего блока обеспечивается атомарность изменения этих указателей. В случае сбоя изменения, которые были записаны полностью в журнал, переносятся в саму ФС при следующей загрузке ОС.

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

13Однако имя может быть у самой файловой системы — так называемая «метка тома».

28

входит текущая позиция чтения-записи, режим доступа, местоположение файла в ФС и прочие сведения.

Таблица 4

Список некоторых файловых систем

Название

ОС

Журнал

Год

ext2

Linux

нет

1993

ext3

Linux

есть

2001

ext4

Linux

есть

2008

fat

MS-DOS

нет

1980

fat32

Windows

нет

1996

hpfs

OS/2

нет

1989

ntfs

Windows NT

есть

1993

ufs

UNIX

нет

1982

xfs

IRIX

есть

1994

zfs

Solaris

есть

2005

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

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

Контрольные вопросы

1)какая структура данных файловой системы обеспечивает отказоустойчивость?

2)почему файл нужно открывать перед чтением или записью?

3)каковы достоинства древовидной системы каталогов?

9.Отображение файлов в память

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

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

29

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

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

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

Функция копирования при записи (copy on write — COW) позволяет процессам изменять данные отображённого в память файла без записи их обратно на диск. При изменении страницы программой ОС создаёт копию этой страницы, которая уже не связана с файлом на диске. Эта функция ОС позволяет при создании процесса загружать программу и библиотеки с диска в режиме отображения файлов в память с опцией COW. В процессе работы изменяемые одним процессом страницы дублируются, при этом содержимое дискового кэша и соответствующих страниц других процессов не меняется.

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

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

9.1. Отображение файлов в память в UNIX и Linux

Для отображения файла в виртуальное адресное пространство процесса в UNIX и Linux применяется функция mmap. Эта функция принимает следующие аргументы:

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

30

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