Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры ос.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
515.58 Кб
Скачать

Пять механизмов операции getblk

  1. Ядро обнаруживает блок в ХЭШ‑очереди, соответствующий ему буфер свободен.

  2. Ядро не может обнаружить блок в ХЭШ‑очереди, выделяет буфер из списка свободных буферов.

  3. Ядро не может обнаружить блок в ХЭШ‑очереди и, пытаясь выделить буфер из списка свободных буферов, обнаруживает буфер, который помечен ЗВЗ (задержка вызванная записью), ядро должно переписать буфер на диск.

  4. Ядро не может обнаружить блок в ХЭШ‑очереди, а список свободных буферов пуст.

  5. Ядро обнаруживает блок в ХЭШ‑очереди, но его буфер в настоящий момент занят.

П ервый механизм:

Находим нужный блок:

  1. Находим в ХЭШ-очереди;

  2. Удаляем из списка свободных буферов;

  3. Действие с буфером;

  4. Возвращаем в список свободных буферов ( в конец списка ).

Свободные блоки: 23, 10, 4, 17.

Находим буфер, содержащий нужный блок в ХЭШ-очереди.

Удаляем из списка свободных буферов ( на рисунке это показано толстой пунктирной линией ).

Вернули в конец списка ( сплошная линия ).

Сначала имели:

После того, как вернули в список:

В торой механизм:

Понадобился 14. 14-го нет => выделим буфер из списка свободных => исключим 23 из списка свободных буферов ( на рис. это изображено толстой пунктирной линией ). № 14 помещаем в блок 2.

  1. выделяем буфер из списка свободных;

  2. считываем нужный блок;

  3. помещаем в ХЭШ-очередь;

  4. действие;

  5. возвращаем в список свободных.

Понадобился блок, которого нет в буфере. Взяли свободный из начала, считали в него 14, 23 стёрли. Поместили в ХЭШ-очередь. После использования поместили в список свободных буферов.

Третий механизм:

  1. Берём буфер, который ЗВЗ

  2. Записываем его блок на диск

  3. getblk .

Четвёртый / пятый механизм :

  1. Сон

  2. getblk

Преимущества и недостатки кэширования диска

“+” единообразие обращений к диску; сокращается объём дискового траффика; обеспечивается целостность файловой системы.

“-” пользователь не знает, когда данные завершат свой путь на диск;

при передачи большого количества данных происходит дополнительное копирование.

(12) Структура процессов. Диаграмма переходов

Процесс- это последовательность операций при выполнении программы. Он состоит из текста, данных и стека.

Под текстом понимаются код, машинные инструкции.

Все процессы создаются системным вызовом fork().

Посмотреть системные процессы можно либо командой ps либо pstree.

fork порождает новый процесс. А чтобы запустить процесс с диска используется exec.

Когда программа лежит на диске в ней содержатся:

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

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

Процесс может:

  • Создавать новый процесс

  • Сделать системный вызов и, следовательно, перейти в режим ядра

  • Завершиться по вызову exit

Процесс не может:

  • Управлять своппингом

  • Вернуться самостоятельно а режим задачи

  • Бывают завершения из режима ядра без exit

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

У процесса есть 9 состояний:

  1. Процесс выполняется в режиме задачи.

  2. Процесс выполняется в режиме ядра.

  3. Процесс не выполняется, но готов к запуску под управлением ядра.

  4. Процесс приостановлен и находится в оперативной памяти.

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

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

  7. Процесс возвращён из режима ядра в режим задачи, ядро резервирует его.

  8. Процесс вновь создан и находится в переходном состоянии.

  9. Процесс существует, но не готов к выполнению, хотя и не приостановлен.

  10. Процесс вызывает системную функцию exit и прекращает существование.

Диаграмма переходов

1 – 2 -делаем системный вызов, или возникает прерывание;

2 – 1 -возврат, иногда возврат происходит через 7 состояние;

9 –выход;

пока пользователь не введёт нужные данные, пребываем в состоянии 4;

после ввода переходим в состояние 3;

6 –можем выгрузить процесс во внешнюю память.

Применение:

  1. Процесс выполняется. Он находится в состоянии 1. Это режим задачи. К примеру, он делает системный вызов => переходим в состояние 2. Сделали системный вызов на считывание кусочка файла => нам нужна дисковая операция => переходим в состояние 4. Находимся в 4 состоянии, пока не будет аппаратного прерывания. Когда оно пришло, переходим в состояние 3. Оказалось, что в системе недостаточно памяти => переходим в состояние 5. В какой-то момент он оказывается подходящим к запуску => переходим в состояние 3. В состоянии 2 нужные данные перекопировали, переходим в состояние 1.

  2. Находимся в состоянии 1. Делаем системный вызов exit, переходим в состояние 2, а потом в состояние 9.

  3. Находимся в состоянии 1. Аппаратно пришло прерывание => обработчик прерывания перевёл процесс в состояние 2, где произвелась обработка прерывания, и процесс перешёл в состояние 1.

(13) Формат памяти системы

Текст содержит адреса:

  • команд;

  • данных;

  • стека.

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

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

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

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

Таким образом адрес делится на две составляющие - номер страницы и смещение относительно ее начала.

Для простоты взяв размер страницы 1 Кб. И 32 битную архитектуру получим

возможный объем виртуальной памяти 2 ^ 32 b = 2 ^ 22 Kb = 2 ^ 12 Mb = 4 Gb,

диапазон смещения 1 Kb = 2 ^ 10 b,

число страниц 2 ^ 22 шт.

Для того чтобы разделить адрес на номер страницы и смещение надо "отрезать" от этого адреса нижние 10 бит - это будет смещение, то что останется - номер страницы. Или, что тоже самое, поделить нацело на 1024 (2 ^ 10). Остаток будет смещением, а частное - номером страницы.

Рассмотрим для примера адрес 0x58432. Мы взяли число в шестнадцатиричном коде, т. к. он удобен при переводе в двоичный - каждая цифра переводится в четыре двоичных.

Номер страницы получился 0x161, а смещение 0x32

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

Возьмем некоторый процесс, виртуальные адреса которого начинаются с 8k (8*1024 = 8192), а его физическое расположение фрагментировано и номера физических страниц указаны в таблице страниц.

По этому рисунку... Обращение к виртуальному адресу 68432 (в десятичном коде на этот раз). Этот адрес, как видно (> 64 * 1024), относится к области стека. Вычислим смещение от начала стека: 68432-64*1024=68432-65536=2896. Определим номер страницы в стеке: 2896 div 1024 = 2. По рисунку видно, что второй виртуальной странице стека соответствует физическая страница по адресу 986k (считаем от 0). Смещение относительно начала страницы 2896 mod 1024 = 848. Таким образом мы получили, что виртуальному адресу 68432 соответствует физический 986*1024+848.

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