Файл: Литература по курсу аос (по всем вопросам должен быть представлен краткий рукописный конспект в общей тетради).docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 08.02.2024

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

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
.
Минусы:

- затраты времени


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

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


Поэтому было предложено попеременно выгружать неактивные задачи (заблоченные, ожидающие ввода-вывода, готовые, но в очереди на исполнение) с оперативы на диск.
Такая подмена называется ВИРТУАЛИЗАЦИЕЙ – и она здорово помогает повысить уровень мультипрограммирования, т.к. теперь объем оперативы не так жестко ограничивает количество одновременно выполняемых задач.
Виртуальный ресурс – это такой ресурс, который для пользователя вроде как обладает определенными свойствами, но на самом деле их у него нет.

Работа такой виртуальной памяти будет значительно МЕДЛЕННЕЕ.
Что должна делать ОС для поддержки виртуальной памяти:

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

- выбирать нужные образы процессов для перемещения их в/из оперативы;

- перемещать данные между памятью и диском

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

- все это она должна делать сама, автоматически, чтобы у прикладного программиста не болела голова.
/* Первая попытка использовать внешнюю память – оверлеи.

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

То есть бедные программисты должны были все это учитывать, морока, в общем.*/
Существует 2 основных подхода к организации виртуализации памяти:

- свопинг

- виртуальная память
Свопинг

Свопинг – (swapping) – образы процессов выгружаются/загружаются ЦЕЛИКОМ.

Плюсы:

- простота реализации

Минусы:

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


- замедляет работу системы

- неэффективно используется память

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

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

Существует 3 класса реализации виртуальной памяти:

- Страничная ВП – данные перемещаются страницами – частями фиксированного и небольшого размера

- Сегментная ВП – данные перемещаются сегментами – частями произвольного размера, организованными по смыслу.

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

Размер файла подкачки в современных ОС настраивается администратором.
Страничная организация памяти

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

Размер страницы выбирается равным степени 2, так проще преобразовывать адреса.

Для каждого процесса ОС создает таблицу страниц – структуру с записями о всех ВИРТУАЛЬНЫХ СТРАНИЦАХ процесса.

Запись в таблице называется ДЕСКРИПТОРОМ СТРАНИЦЫ. Он содержит:

- номер физической страницы, куда загружена виртуальная

- признак присутствия (есть ли страница в памяти)

- признак модификации (1 – когда произошла запись по этому адресу)

- признак обращения к страницу (бит доступа) – в 1 при каждом обращения.
Последние три в современных процессорах устанавливаются аппаратно.



Таблица страниц хранится в памяти, ее адрес – часть контекста процесса.
ОС обращается к памяти:

- получает номер виртуальной страницы процесса

- идет в Таблицу Страниц и находит там нужный дескриптор

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

- если 0 – генерируется ошибка страницы, процесс – блокируется, активизируется новый.

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

- если страница, которую надо выгрузить, была модифицирована – ее переписывают на диск.

- страница обнуляется (чтобы нельзя было использовать инфу выгруженной страницы)
2 базисных свойства страничной организации:

  1. размер страницы = степени двойки

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

Все остальные разряды – номер страницы.

2 16 – значит 16 разрядов – это смещение.

  1. смещения виртуальное и физическое равны (они отображаются непрерывно);




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

  1. Надо получить адрес нужного дескриптора в Таблице Страниц

Есть:

  • адрес начала таблицы страниц (АТ) – хранится в спец регистре процессора

  • длина записи в таблице страниц (Л) – системная константа

  • номер виртуальной страницы Р – это старшие разряды виртуального адреса (известен размер страницы)

Адрес дескриптора = АТ + (Р * Л);


  1. Из дескриптора извлекается номер физической страницы – Н

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


Типичная машинная инструкция требует 3-4 обращения к памяти (взять команду, данные, записать результаты). Каждое обращение – требует преобразования адреса либо обработку страничного прерывания. Это снижает производительность системы, поэтому нужна оптимизация виртуальной памяти:

  • Аппаратный механизм получения физического адреса по виртуальному

  • Размер страницы = степени двойки (можно заменить сложение конкатенаций, это проще);

  • Кэширование таблицы страниц (хранение наиболее часто используемых записей в регистрах);



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

Основной смысл алгоритмов: вытеснение страниц, к которым дольше всего НЕ БУДЕТ обращений.

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

  • Страница, которая дольше всего не использовалась

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

Кроме того, используется принцип УПРЕЖДАЮЩЕЙ загрузки:

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


Второй важный критерий – размер страницы.

  • Чем больше размер страницы – тем меньше страничных прерываний

  • Чем больше размер – тем меньше записей в таблице страниц, тем меньше размер таблицы страниц, а она ведь хранится в памяти!

  • Но чем больше страница – тем больше фиктивная область

Типичный размер страницы – несколько килобайт – в Интел Пентиум – 4 килобайта.

Еще можно хранить в памяти не всю таблицу страниц:

Организуется несколько уровней таблицы страниц:

  • Виртуальные адреса делятся на разделы, а разделы делятся на страницы.

  • Размер раздела – тоже степень двойки

  • У каждого раздела своя таблица страниц

  • Размер таблицы страниц раздела = размеру страницы

  • Инфа о разделах собрана в таблицу разделов, именно она всегда в памяти

  • Адрес таблицы разделов – в специальном регистре процессора (игла в яйце, яйцо в утке….)


Итого:

  • Экономится память

  • Снижается производительность (добывание страницы занимает больше усилий и времени)




Размер страницы 2Н

Размер раздела – 2К

Н разрядов – смещение

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

Что осталось – номер раздела
Также страничную организацию памяти можно использовать и без выгрузки разделов на диск. Она высоко реактивна и дает низкую фрагментацию – используется в ОС Novell Netware 3 и 4;
Сегментное распределение памяти
Страничное распределение не учитывает смысла.

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

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



Это позволяет сделать сегментное распределение памяти.

  • ВАП процесса делится на сегменты (по смыслу) – либо по принятым в системе законам либо по указаниям программиста.

  • Максимальный размер сегмента ограничен разрядностью процессора (32 разряда – 4 Гбайт)

  • Диапазон адресов одного сегмента – 0000 0000 – FFFF FFFF

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

  • Виртуальный адрес = номер сегмента + линейный виртуальный адрес внутри сегмента.



При создании процесса ОС формирует таблицу сегментов. Для каждого сегменты указаны:

  • Базовый физический адрес сегмента в ОП

  • Размер сегмента

  • Правила доступа к нему

  • Признаки модификации, присутствия и обращения и еще чего-то.

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

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



  • Сложение замедляет процедуру преобразования адреса.

  • Избыточность – для работы программы часто не нужен целый сегмент

  • И самое страшное – ФРАГМЕНТАЦИЯ. Возникает из-за непредсказуемости размера сегмента.


Плюс:

  • Возможность задавать разные права доступа к разным сегментам (это невозможно со страничной организацией)


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

Комбинация страничного и сегментного методов.

Сочетает плюсы обоих подходов (должен, по крайней мере);


  • ВАП делится на сегменты (можно задавать права доступа)

  • Сегменты делятся на страницы фиксированного размера – перемещение данных осуществляется страницами (минимизация фрагментации)

  • Сегменты образуют линейное адресное пространство

  • Адрес можно задавать:

** либо линейным адресом

** либо парой чисел: номер сегмента + смещение (ОС делает так, т.к. это позволяет проверить права доступа к сегменту)
Напрочь не понимаю, что на этой картинке нарисовано, но…