
- •3) Архитектура unix. Режимы задачи ядра и процесса
- •Массив адресов блоков данных.
- •Структура каталогов.
- •Буферный кэш
- •Заголовок буфера
- •Состояния буферов
- •Пять механизмов операции getblk
- •Преимущества и недостатки кэширования диска
- •(14) Уровни и слои контекста
- •1) Вытесняющее (permit)
- •2) Не вытесняющее (non-permit) (Корпоративная многозадачность)
- •Системные операции, связанные со временем
- •Управление пространством в свопе
- •Выгрузка процесса в своп
- •Загрузка или подкачка процесса
- •Выгрузка
- •Системы смешанного типа со свопингом и подкачкой по запросу
- •Рабочее множество процесса
- •Откачка страниц
- •Процесс старения
- •Обработка ошибок
- •Системы смешанного типа со свопингом и подкачкой по запросу
- •24) Именованные каналы
Пять механизмов операции getblk
Ядро обнаруживает блок в ХЭШ‑очереди, соответствующий ему буфер свободен.
Ядро не может обнаружить блок в ХЭШ‑очереди, выделяет буфер из списка свободных буферов.
Ядро не может обнаружить блок в ХЭШ‑очереди и, пытаясь выделить буфер из списка свободных буферов, обнаруживает буфер, который помечен ЗВЗ (задержка вызванная записью), ядро должно переписать буфер на диск.
Ядро не может обнаружить блок в ХЭШ‑очереди, а список свободных буферов пуст.
Ядро обнаруживает блок в ХЭШ‑очереди, но его буфер в настоящий момент занят.
П
ервый
механизм:
Находим нужный блок:
Находим в ХЭШ-очереди;
Удаляем из списка свободных буферов;
Действие с буфером;
Возвращаем в список свободных буферов ( в конец списка ).
Свободные блоки: 23, 10, 4, 17.
Находим буфер, содержащий нужный блок в ХЭШ-очереди.
Удаляем из списка свободных буферов ( на рисунке это показано толстой пунктирной линией ).
Вернули в конец списка ( сплошная линия ).
Сначала имели:
После того, как вернули в список:
В
торой
механизм:
Понадобился 14. 14-го нет => выделим буфер из списка свободных => исключим 23 из списка свободных буферов ( на рис. это изображено толстой пунктирной линией ). № 14 помещаем в блок 2.
выделяем буфер из списка свободных;
считываем нужный блок;
помещаем в ХЭШ-очередь;
действие;
возвращаем в список свободных.
Понадобился блок, которого нет в буфере. Взяли свободный из начала, считали в него 14, 23 стёрли. Поместили в ХЭШ-очередь. После использования поместили в список свободных буферов.
Третий механизм:
Берём буфер, который ЗВЗ
Записываем его блок на диск
getblk .
Четвёртый / пятый механизм :
Сон
getblk
Преимущества и недостатки кэширования диска
“+” единообразие обращений к диску; сокращается объём дискового траффика; обеспечивается целостность файловой системы.
“-” пользователь не знает, когда данные завершат свой путь на диск;
при передачи большого количества данных происходит дополнительное копирование.
(12) Структура процессов. Диаграмма переходов
Процесс- это последовательность операций при выполнении программы. Он состоит из текста, данных и стека.
Под текстом понимаются код, машинные инструкции.
Все процессы создаются системным вызовом fork().
Посмотреть системные процессы можно либо командой ps либо pstree.
fork порождает новый процесс. А чтобы запустить процесс с диска используется exec.
Когда программа лежит на диске в ней содержатся:
Стек состоит из логических записей активации, помещаемых в него при вызове функции.
Каждая запись состоит из параметров функции, её локальных переменных и данных для восстановления последней активации.
Процесс может:
Создавать новый процесс
Сделать системный вызов и, следовательно, перейти в режим ядра
Завершиться по вызову exit
Процесс не может:
Управлять своппингом
Вернуться самостоятельно а режим задачи
Бывают завершения из режима ядра без exit
Информация о процессе может содержаться либо в таблице процессов ядра, либо в пространстве процессов, где есть запись, которая содержит указатель на соответствующую запись в таблице процессов.
У процесса есть 9 состояний:
Процесс выполняется в режиме задачи.
Процесс выполняется в режиме ядра.
Процесс не выполняется, но готов к запуску под управлением ядра.
Процесс приостановлен и находится в оперативной памяти.
Процесс готов к запуску, но программа подкачки должна загрузить его в оперативную память прежде чем он будет запущен под управлением ядра.
Процесс приостановлен, и программа подкачки выгрузила его во внешнюю память.
Процесс возвращён из режима ядра в режим задачи, ядро резервирует его.
Процесс вновь создан и находится в переходном состоянии.
Процесс существует, но не готов к выполнению, хотя и не приостановлен.
Процесс вызывает системную функцию exit и прекращает существование.
Диаграмма переходов
1 – 2 -делаем системный вызов, или возникает прерывание;
2 – 1 -возврат, иногда возврат происходит через 7 состояние;
9 –выход;
пока пользователь не введёт нужные данные, пребываем в состоянии 4;
после ввода переходим в состояние 3;
6 –можем выгрузить процесс во внешнюю память.
Применение:
Процесс выполняется. Он находится в состоянии 1. Это режим задачи. К примеру, он делает системный вызов => переходим в состояние 2. Сделали системный вызов на считывание кусочка файла => нам нужна дисковая операция => переходим в состояние 4. Находимся в 4 состоянии, пока не будет аппаратного прерывания. Когда оно пришло, переходим в состояние 3. Оказалось, что в системе недостаточно памяти => переходим в состояние 5. В какой-то момент он оказывается подходящим к запуску => переходим в состояние 3. В состоянии 2 нужные данные перекопировали, переходим в состояние 1.
Находимся в состоянии 1. Делаем системный вызов exit, переходим в состояние 2, а потом в состояние 9.
Находимся в состоянии 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.
Все эти действия выполняет центральный процессор, а задача операционной системы только составить эти таблицы и сообщить процессору, где они находятся.