- •/Классификация операционных систем
- •Сравнительные характеристики ос.
- •/Процессы и примитивы.
- •Примитивы.
- •Процессы.
- •/Предполагаемая среда выполнения процессов.
- •/ Диаграмма переходов.
- •/Создание процессов.
- •/Уровневое представление ос unix
- •/Функции ядра операционной системы.
- •/Понятие прерываний в ос
- •/Структура ос
- •/Обзор подсистем ядра Unix
- •Описание подсистем ядра unix
- •Планирование но наивысшему приоритету (hpf)
- •Метод круговорота (карусель)
- •Очереди с обратной связно (fв)
- •Планирование в unix.
- •Типы многозадачности.
- •Состав планировщика
- •Зависимости подсистем ядра
- •Контроллер памяти (Метоrу Manager)
- •Механизм свопинга (Swapping)
- •Механизм пейджинга (Paging)
- •Внешний интерфейс
- •Verify_area()– проверка прав на доступ к выделенному региону памяти; get_free_page() / free_page() – выделение и освобождение физической памяти.
- •Реализация программ выделения памяти
- •Сборка мусора
- •Типы сборщиков памяти
- •Взаимодействие внутренних модулей мм
- •Архитектура vfs
- •Интерфейсы файловой системы
- •Ioctlo: установить атрибуты файла;
- •Защита файлов
- •Списки прав доступа
- •Механизмы обмена данными в vfs
- •Буферный кэш.
- •Механизмы обмена данными.
- •Логическая файловая система
- •Физическая организация файловой системы
- •Структура файла обычного типа
- •Примечания к физической организации vfs
- •Сетевая подсистема (Net)
- •Состав сетевой подсистемы
- •Представление и структуры данных
- •Внутренняя структура подсистемы
- •Зависимости сетевой подсистемы
- •Подсистема межпроцессного взаимодействия
/Создание процессов.
Единственный способ создания пользователем нового процесса в операционной системе UNIX является выполнение системной функции fork(). Процесс, вызывающий функцию fork(), называется родительским (процесс-родитель), вновь создаваемый процесс называется порожденным (процесс-потомок). Синтаксис функции fork:
int pid = fork ();
При вызове fork() возникают два полностью идентичных процесса. Весь код после fork() выполняется дважды, как в процессе-потомке, таки процессе-родителе. В результате выполнения функции fork() пользовательский контекст и того, и другого процессов совпадает во всем,. кроме следующих характеристик:
-
Идентификатор процесса (PID, PPID);
-
Израсходованное время CPU (оно обнуляется);
-
Сигналы процесса-родителя, требующие ответа;
-
Блокированные файлы (record locking)
В ходе выполнения функции fork() ядро производит следующую последовательность действий:
-
Отводит место в таблице процессов под новый процесс.
-
Присваивает порождаемому процессу уникальный код идентификации.
-
Делает логическую копию контекста родительского процесса. Поскольку те или иные составляющие процесса, такие как область команд, могут разделяться другими процессами, ядро может иногда вместо копирования области в новый физический участок памяти просто увеличить значение счетчика ссылок на область.
-
Увеличивает значения счетчика числа файлов, связанных с процессом, как в таблице файлов, так и в таблице индексов.
-
Возвращает родительскому процессу код идентификации порожденного процесса, а порожденному процессу - нулевое значение.
/Анализ состояний процессов
При помощи изучения состояний, в которых находятся процессы, можно исследовать операционную систему. Разработчики ОС Unix на основе этого анализа предложили следующую теорему:
Теорема:
Эффективность ОС может быть неявно измерена или определена в результате наблюдения распределения процессов по состояниям.
Из этой теоремы вытекают следствия:
Следствие 1.
Система называется ограниченной по вводу/выводу (I/О), если большое число процессов пребывает в ожидании доступа к файлам или устройствам либо ожидает завершения операций I/О.
Следствие 2.
Система называется ограниченной по быстродействию, если большая часть процессов находится в очереди на выполнение, а меньшая часть — в очереди к устройствам I/О.
Таким образом, сбалансированная система обладает равномерным распределением процессов по состояниям. Наблюдая состояния процессов,
можно сделать вывод о том, как работает система и что необходимо сделать для оптимизации ее работы.
/Уровневое представление ос unix
Ядро операционной системы UNIX не является изолированным. На рис. 1.5 видно место ядра в операционной системе UNIX, представленной в виде уровней. Обычно выделяют четыре главных уровня в системе:
Уровень пользователя (User Applications) — набор программных приложений, используемый клиентом для обеспечения взаимодействия с системой и ее управлением.
Сервисы ОС (System Са11 Interface) —виды услуг, которые ОС предоставляет пользователю через интерфейсы (например, типа SHELL или window, виды компиляторов и т.п.).
|
User Applications |
|
System Саll 1nteface |
|
OS Kernel |
|
Hardware Controllers |
Рис. 1.5.
Ядро системы (OS Кегпе1)- основная часть, обеспечивающая работу всей системы. В том числе планирование и управление задачами, поддержка многопользовательского режима, синхронизация работы системы, управление устройствами на уровне управления объектами без конкретно выделенного вида устройств.
Управление устройствами (Hardware Controllers) – подсистема управления возможными физическими устройствами на уровне устройств.
Согласно такой архитектуре каждый уровень может взаимодействовать только с соседним уровнем. Каждый вышележащий уровень является зависимым от нижележащих уровней. Так как уровни пользователя и сервисы ОС UNIX существенно зависят от реализации, то их рассмотрение не входит в круг задач этого пособия. Мы будем далее рассматривать ядро операционной системы, которое практически одинаково для всех видов ОС, а не только для UNIX.
