
- •Оглавление
- •Введение
- •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. 6. Синхронизация процессов и потоков
3. 5. 1. Цели и средства синхронизации
Существует достаточно обширный класс средств операционной системы, с помощью которых обеспечивается взаимная синхронизация процессов и потоков. Потребность в синхронизации потоков возникает только в мультипрограммной операционной системе и связана с совместным использованием аппаратных и информационных ресурсов вычислительной системы. Во многих операционных системах эти средства называются средствами межпроцессного взаимодействия InterProcess Communications (IPC), что отражает историческую первичность понятия «процесс» по отношению к понятию «поток». Обычно к средствам IPC относят не только средства межпроцессной синхронизации, но и средства межпроцессного обмена данными.
Потоки в общем случае (когда программист не предпринял специальных мер по их синхронизации) протекают независимо, асинхронно друг другу. Это справедливо как по отношению к потокам одного процесса, выполняющим общий программный код, так и по отношению к потокам разных процессов, каждый из которых выполняет собственную программу. Любое взаимодействие процессов или потоков связано с их синхронизацией, которая заключается в согласовании их скоростей путем приостановки потока до наступления некоторого события и последующей его активизации при наступлении этого события. Синхронизация лежит в основе любого взаимодействия потоков, связано ли это взаимодействие с разделением ресурсов или с обменом данными.
3.6.2 Необходимость синхронизации и гонки
Пренебрежение вопросами синхронизации в многопоточной системе может привести к неправильному решению задачи или даже к краху системы. Рассмотрим, например (рис. 4.16), задачу ведения базы данных клиентов некоторого предприятия. Каждому клиенту отводится отдельная запись в базе данных, в которой среди прочих полей имеются поля Заказ и Оплата. Программа, ведущая базу данныx, оформлена как единый процесс, имеющий несколько потоков, в том числе поток А, который заносит в базу данных информацию о заказах, поступивших от клиентов, и поток В, который фиксирует в базе данных сведения об оплате клиентами выставленных счетов. Оба эти потока совместно работают над общим файлом базы данных, используя однотипные алгоритмы, включающие три шага.
Считать из файла базы данных в буфер запись о клиенте с заданным идентификатором.
Внести новое значение в поле Заказ (для потока А) или Оплата (для потока В).
Вернуть модифицированную запись в файл базы данных.
Рис. 4.16. Возникновение гонок при доступе к разделяемым данным
Обозначим соответствующие шаги для потока А как Al, A2 и A3, а для потока В как В1, В2 и ВЗ. Предположим, что в некоторый момент поток А обновляет поле Заказ записи о клиенте N. Для этого он считывает эту запись в свой буфер (шаг Al}, модифицирует значение поля Заказ (шаг А2), но внести запись в базу данных (шаг A3) не успевает, так как его выполнение прерывается, например, вследствие завершения кванта времени.
Предположим также, что потоку В также потребовалось внести сведения об оплате относительно того же клиента N. Когда подходит очередь потока В, он успевает считать запись в свой буфер (шаг В1) и выполнить обновление поля Оплата (шаг В2), а затем прерывается. Заметим, что в буфере у потока В находится запись о клиенте N, в которой поле Заказ имеет прежнее, не измененное значение.
Когда в очередной раз управление будет передано потоку А, то он, продолжая свою работу, запишет запись о клиенте N с модифицированным полем Заказ в базу данных (шаг A3). После прерывания потока А и активизации потока В последний запишет в базу данных поверх только что обновленной записи о клиенте N свой вариант записи, в которой обновлено значение поля Оплата. Таким образом, в базе данных будут зафиксированы сведения о том, что клиент N произвел оплату, но информация о его заказе окажется потерянной (рис. 4.17, а).
Сложность проблемы синхронизации кроется в нерегулярности возникающих ситуаций. Так, в предыдущем примере можно представить и другое развитие событий: могла быть потеряна информация не о заказе, а об оплате (рис. 4.17, 6)
или, напротив, все исправления были успешно внесены (рис. 4.17, в). Все определяется взаимными скоростями потоков и моментами их прерывания. Поэтому отладка взаимодействующих потоков является сложной задачей. Ситуации, подобные той, когда два или более потоков обрабатывают разделяемые данные и конечный результат зависит от соотношения скоростей потоков, называются гонками.
Рис. 4.17. Влияние относительных скоростей потоков на результат решения задачи