- •Оглавление
- •Введение
- •1. Назначение и функции операционной системы
- •1. 1. Функциональные компоненты операционной системы автономного компьютера
- •1. 1. 1. Управление процессами
- •1. 1. 2. Управление памятью
- •1. 1. 3. Управление файлами и внешними устройствами
- •1. 1. 4. Защита данных и администрирование
- •1. 1. 5. Интерфейс прикладного программирования
- •1. 1. 6. Пользовательский интерфейс
- •Вопросы для самопроверки
- •Контрольные вопросы
- •1. 2. Сетевые операционные системы
- •1. 2. 1. Сетевые и распределенные ос
- •1. 2. 2. Два значения термина «сетевая ос»
- •1. 2. 3. Функциональные компоненты сетевой ос
- •1. 2. 4. Сетевые службы и сетевые сервисы
- •1. 2. 5. Встроенные сетевые службы и сетевые оболочки
- •1.3 Одноранговые и серверные сетевые операционные системы
- •1.3.1 Ос в одноранговых сетях
- •1.3.2 Ос в сетях с выделенными серверами
- •1. 4. Требования к современным операционным системам
- •Вопросы для самопроверки
- •Контрольные вопросы
- •2. Архитектура операционной системы
- •2. 1. Ядро и вспомогательные модули ос
- •2. 2. Ядро и привилегированный режим
- •2. 3. Многослойная структура ос
- •2. 4. Аппаратная зависимость и переносимость ос
- •2. 5. Переносимость операционной системы
- •Вопросы для самопроверки
- •Контрольные вопросы
- •2. 6. Микроядерная архитектура
- •2 .6. 1. Концепция
- •2. 6. 2. Преимущества и недостатки микроядерной архитектуры
- •2. 7. Совместимость и множественные прикладные среды
- •2. 7. 1. Двоичная совместимость и совместимость исходных текстов
- •2. 7. 2. Трансляция библиотек
- •2. 7. 3. Способы реализации прикладных программных сред
- •Вопросы для самопроверки
- •Контрольные вопросы
- •3. Процессы и потоки
- •3. 1. Мультипрограммирование
- •3. 1. 1. Мультипрограммирование в системах пакетной обработки
- •3. 1. 2. Мультипрограммирование в системах разделения времени
- •3. 1. 3. Мультипрограммирование в системах реального времени
- •Вопросы для самопроверки
- •Контрольные вопросы
- •3. 2. Мультипроцессорная обработка
- •Вопросы для самопроверки
- •Контрольные вопросы
- •3. 3. Планирование процессов и потоков
- •3. 4. Понятия «процесс» и «поток»
- •3 .4. 1. Создание процессов и потоков
- •3. 4. 2. Планирование и диспетчеризация потоков
- •3. 4. 3. Состояния потока
- •3. 4. 4. Вытесняющие и невытесняющие алгоритмы планирования
- •3. 4. 5. Алгоритмы планирования, основанные на квантовании
- •3. 4. 6. Алгоритмы планирования, основанные на приоритетах
- •3. 4. 7. Смешанные алгоритмы планирования
- •3.5 Мультипрограммирование на основе прерываний
- •3.5.1 Назначение и типы прерываний
- •3.5.2 Механизм прерываний
- •3.5.3 Программные прерывания
- •3.5.4 Диспетчеризация и приоритезация прерываний в ос
- •3.5.5 Функции централизованного диспетчера прерываний на примере Windows nt
- •3.5.6 Процедуры обработки прерываний и текущий процесс
- •3.5.7 Системные вызовы
- •3. 6. Синхронизация процессов и потоков
- •3. 5. 1. Цели и средства синхронизации
- •3.6.2 Необходимость синхронизации и гонки
- •3.6.3 Критическая секция
- •3.6.4 Блокирующие переменные
- •3.6.5 Семафоры
- •3.6.6 Тупики
- •3.6.7 Синхронизирующие объекты ос
- •3.6.8 Сигналы
- •Вопросы для самопроверки
- •Контрольные вопросы
- •4. Управление памятью
- •4. 1. Функции ос по управлению памятью
- •4. 2. Типы адресов
- •Вопросы для самопроверки
- •Контрольные вопросы
- •4. 3. Алгоритмы распределения памяти
- •4. 3. 1. Алгоритмы распределения без использования внешней памяти Распределение памяти динамическими разделами
- •Перемещаемые разделы
- •4. 3. 2. Алгоритмы распределения с использованием внешней памяти
- •Свопинг и виртуальная память
- •Страничное распределение
- •Сегментное распределение
- •Сегментно-страничное распределение
- •Разделяемые сегменты памяти
- •4.4 Кэширование данных
- •4. 4. 1 Иерархия запоминающих устройств
- •4.4.3 Проблема согласования данных
- •4.4.4 Способы отображения основной памяти на кэш
- •Вопросы для самопроверки
- •Контрольные вопросы
- •5. Ввод-вывод и файловая система
- •5. 1. Задачи ос по управлению файлами и устройствами
- •5. 2. Специальные файлы
- •5. 3. Логическая организация файловой системы
- •5. 3. 1. Цели и задачи файловой системы
- •5. 3. 2. Типы файлов
- •5. 3. 3. Иерархическая структура файловой системы
- •5. 3. 4. Имена файлов
- •5. 3. 5. Монтирование
- •5. 3. 6. Атрибуты файлов
- •5. 3. 7. Логическая организация файла
- •Вопросы для самопроверки
- •Контрольные вопросы
- •5. 4. Физическая организация файловой системы
- •5. 4. 1. Диски, разделы, секторы, кластеры
- •5. 4. 2. Физическая организация и адресация файла
- •2048 Записей
- •5. 5. Физическая организация fat
- •5. 6. Физическая организация s5 и ufs
- •5. 7. Физическая организация ntfs
- •5. 7. 1. Структура тома ntfs
- •5. 7. 2. Структура файлов ntfs
- •5. 7. 3. Каталоги ntfs
- •Вопросы для самопроверки
- •Контрольные вопросы
- •5. 8. Контроль доступа к файлам
- •5. 8. 1. Доступ к файлам как частный случай доступа к разделяемым ресурсам
- •5. 8. 2. Механизм контроля доступа
- •5. 8. 3. Организация контроля доступа в ос unix
- •Процесс
- •Запрос операции
- •Вопросы для самопроверки
- •Контрольные вопросы
- •5. 8. 4. Организация контроля доступа в ос Windows nt
- •Разрешения на доступ к каталогам и файлам
- •Вопросы для самопроверки
- •Контрольные вопросы
- •5.9 Отказоустойчивость файловых систем
- •5.9.1 Восстанавливаемость файловых систем Причины нарушения целостности файловых систем
- •5.9.2 Протоколирование транзакций
- •5.9.3 Восстанавливаемость файловой системы ntfs
- •5.9.4 Избыточные дисковые подсистемы raid
- •Библиографический список
- •Ответы на вопросы для самопроверки
3 .4. 1. Создание процессов и потоков
Создать процесс это прежде всего означает создать описатель процесса, в качестве которого выступает одна или несколько информационных структур, содержащих все сведения о процессе, необходимые операционной системе для управления им. В число таких сведений могут входить, например, идентификатор процесса, данные о расположении в памяти исполняемого модуля, степень привилегированности процесса (приоритет и права доступа) и т. п. Создание описателя процесса знаменует собой появление в системе еще одного претендента на вычислительные ресурсы. Начиная с этого момента при распределении ресурсов ОС должна принимать во внимание потребности нового процесса.
Создание процесса включает также загрузку кодов и данных исполняемой программы данного процесса с диска в оперативную память. Для этого ОС должна обнаружить местоположение такой программы на диске, перераспределить оперативную память и выделить память исполняемой программе нового процесса. Затем необходимо считать программу в выделенные для нее участки памяти и, возможно, изменить параметры программы в зависимости от размещения в памяти. В системах с виртуальной памятью в начальный момент может загружаться только часть кодов и данных процесса, с тем чтобы «подкачивать» остальные по мере необходимости.
В многопоточной системе при создании процесса ОС создает для каждого процесса как минимум один поток выполнения. При создании потока так же, как и при создании процесса, операционная система генерирует специальную информационную структуру описатель потока, который содержит идентификатор потока, данные о правах доступа и приоритете, о состоянии потока и другую информацию. В исходном состоянии поток (или процесс, если речь идет о системе, в которой понятие «поток» не определяется) находится в приостановленном состоянии. Момент выборки потока на выполнение осуществляется в соответствии с принятым в данной системе правилом предоставления процессорного времени и с учетом всех существующих в данный момент потоков и процессов. В случае если коды и данные процесса находятся в области подкачки, необходимым условием активизации потока процесса является также наличие места в оперативной памяти для загрузки его исполняемого модуля.
Во многих системах поток может обратиться к ОС с запросом на создание так называемых потоков-потомков. В разных ОС по-разному строятся отношения между потоками-потомками и их родителями. Например, в одних ОС выполнение родительского потока синхронизируется с его потомками, в частности, после завершения родительского потока ОС может снимать с выполнения всех его потомков. В других системах потоки-потомки могут выполняться асинхронно по отношению к родительскому потоку. Потомки, как правило, наследуют многие свойства родительских потоков. Во многих системах порождение потомков является основным механизмом создания процессов и потоков.
Рассмотрим в качестве примера создание процессов в популярной версии операционной системы UNIX System V Release 4. В этой системе потоки не поддерживаются, в качестве единицы управления и единицы потребления ресурсов выступает процесс.
При управлении процессами операционная система использует два основных типа информационных структур: дескриптор процесса и контекст процесса.
Дескриптор процесса содержит такую информацию о процессе, которая необходима ядру в течение всего жизненного цикла процесса независимо от того, находится он в активном или пассивном состоянии, находится образ процесса в оперативной памяти или выгружен на диск (образом процесса называется совокупность его кодов и данных).
Дескрипторы отдельных процессов объединены в список, образующий таблицу процессов. Память для таблицы процессов отводится динамически в области ядра. На основании информации, содержащейся в таблице процессов, операционная система осуществляет планирование и синхронизацию процессов. В дескрипторе прямо или косвенно (через указатели на связанные с процессом структуры) содержится информация о состоянии процесса, о расположении образа процесса в оперативной памяти и на диске, о значении отдельных составляющих приоритета, а также о его итоговом значении глобальном приоритете, об идентификаторе пользователя, создавшего процесс, о родственных процессах, о событиях, осуществления которых ожидает данный процесс, и некоторая другая информация.
Контекст процесса содержит менее оперативную, но более объемную часть информации о процессе, необходимую для возобновления выполнения процесса с прерванного места: содержимое регистров процессора, коды ошибок выполняемых процессором системных вызовов, информация обо всех открытых данным процессом файлах и незавершенных операциях ввода-вывода и другие данные, характеризующие состояние вычислительной среды в момент прерывания. Контекст, так же, как и дескриптор процесса, доступен только программам ядра, то есть находится в виртуальном адресном пространстве операционной системы, однако он хранится не в области ядра, а непосредственно примыкает к образу процесса и перемещается вместе с ним, если это необходимо, из оперативной памяти на диск.
Порождение процессов в системе UNIX происходит в результате выполнения системного вызова fork. ОС строит образ порожденного процесса, являющийся точной копией образа породившего процесса, то есть дублируются дескриптор, контекст и образ процесса. Сегмент данных и сегмент стека родительского процесса копируются на новое место, образуя сегменты данных и стека процесса-потомка.
После выполнения системного вызова fork оба процесса продолжают выполнение с одной и той же точки. Чтобы процесс мог опознать, является он родительским процессом или процессом-потомком, системный вызов fork возвращает в качестве своего значения в породивший процесс идентификатор порожденного процесса, а в порожденный процесс NULL.
Таким образом, в UNIX порождение нового процесса происходит в два этапа сначала создается копия процесса-родителя, затем у нового процесса производится замена кодового сегмента на заданный.
Вновь созданному процессу операционная система присваивает целочисленный идентификатор, уникальный на весь период функционирования системы.