- •Операционные системы (учебное пособие)
- •Введение
- •1. Операционная система: основные понятия
- •1.1. Понятие операционной системы, её роль и функции
- •1.2. Операционная и программная среды
- •1.3. Очередь и стек
- •1.4. Машинная команда, способы адресации, привилегированные команды
- •1.5.Система прерываний
- •1.6. Задачи, вычислительные процессы и ресурсы
- •Ресурс – это абстрактная структура, имеющая множество атрибутов, характеризующих способы доступа к ресурсу и его физическое представление в системе
- •1.7. Мультипрограммный, мультизадачный и многопользовательский режимы работы операционной системы. Режим разделения времени
- •2. Управление памятью в операционных системах
- •2.1. Память и отображения, виртуальное адресное пространство
- •2.2. Простое непрерывное распределение и распределение с перекрытием
- •2.3. Распределение памяти статическими разделами
- •2.4. Распределение памяти с динамическими разделами
- •2.5. Распределение памяти с фрагментацией задач
- •3. Управление процессами
- •3.1. Реализация последовательного процесса в операционной системе
- •3.2. Планирование и диспетчеризация процессов и задач
- •3.3. Управление параллельными процессами
- •3.3.1. Понятие параллельных процессов
- •3.3.2. Методы реализации взаимных исключений
- •3.3.3. Блокировка памяти
- •3.3.4. Применение специальных операций типа "проверка–установка"
- •3.3.5.Семафоры и их применение
- •3.3.6. Мониторы
- •3.3.7. Почтовые ящики, конвейеры и очереди сообщений
- •4. Проблема тупиков и её решение
- •4.1. Проблема тупиков, разделяемые ресурсы и модели параллельных процессов
- •4.2. Модель повторно используемых ресурсов Холта1
- •4.3. Сети Петри
- •4.4. Модель пространства состояний системы
- •4.5. Борьба с тупиками
- •4.5.1. Предотвращение тупиков
- •4.5.2. Обход тупиков
- •4.5.3. Обнаружение тупика
- •5. Жёсткий диск
- •5.1. Устройство накопителя жесткого диска (hdd) и адресация элементов дискового пространства
- •5.2. Логическая структура диска
- •5.3. Создание загрузочных дисков
- •6. Файловые системы
- •6.1. Файлы и каталоги
- •6.2. Понятие и функции файловой системы и системы управления файлами.
- •6.3. Обзор файловых систем
- •6.3.1. Файловая система fat16, fat32 и vfat
- •6.3.2. Файловая система ntfs
- •6.3.3. Файловые системы компакт-дисков
- •7. Средства защиты и восстановления операционных систем
- •7.1. Цифровая подпись драйверов и её верификация
- •7.2. Защита и проверка системных файлов
- •7.3. Откат драйверов
- •7.6. Безопасный режим загрузки
- •7.7. Мастер и точки восстановления системы
- •7.8. Резервное копирование и восстановление
- •7.9. Аварийное восстановление системы. Консоль восстановления.
- •8. Загрузчики операционных систем
- •8.1. Понятие загрузчика и виды его реализации
- •8.2. Решение проблемы четырех разделов в mbr
- •8.3. Установка загрузчиков ос
- •8.4. Настройка загрузчиков ос
- •8.5. Удаление загрузчиков ос
- •9. Системный реестр и системные службы
- •9.1. Назначение и структура реестра
- •9.2. Работа с реестром
- •9.3. Системные службы
- •10. Безопасность операционных систем
- •10.1. Угрозы, уязвимости, атаки
- •10.2. Политика безопасности
- •10.3. Защита от вторжений
- •10.4. Межсетевые экраны
- •10.5. Отключение ненужных служб
- •10.6. Защита от спама
- •10.7. Защита от вредоносных программ и вирусов средствами операционных систем
- •10.8. Защита конфиденциальной информации.
- •Список литературных источников
3.3. Управление параллельными процессами
3.3.1. Понятие параллельных процессов
В современных мультипрограммных системах могут одновременно выполняться несколько последовательных вычислительных процессов, находящихся в активном состоянии. Такие процессы называются параллельными и могут выполняться как на независимых устройствах, так и разделять различные ресурсы и конкурировать за них между собой. Например, может существовать конкуренция за процессорное время. Параллельные процессы могут быть независимыми и взаимодействующими.
Независимыми процессами называются процессы, которые не имеют общих данных, располагающихся в оперативной и внешней памяти. Независимые процессы не оказывают влияния друг на друга посредством изменения данных. Однако они замедляют исполнение друг друга.
Взаимодействующие процессы имеют общие данные, расположенные как в оперативной памяти, так и во внешней памяти. Они могут также конкурировать за разделяемые ресурсы. Разделяемые ресурсы, которые в каждый конкретный момент времени могут находиться в распоряжении только одного процесса, называются критическими. Два процесса, конкурирующие за критический ресурс должны быть синхронизированы, т.е. согласованы во времени. Это означает, что их обращения к критическим ресурсам должны происходить в разные моменты времени, в противном случае появляются ошибки, которые трудно выявляются и устраняются. Дополнительные трудности в синхронизацию параллельных процессов вносит разная скорость их исполнения, причём процессы не имеют информации ни о содержании, ни о скорости выполнения друг друга.
Программный код, реализуемый каждым процессом можно разбить на две секции. Секция, которая содержит обращение к критическому ресурсу, называется критической, а секция, которая не содержит такого обращения, может быть названа обычной секцией. Следует иметь в виду, что секции в свою очередь могут являться процессами.
Обобщённая модель взаимодействующих процессов показана на рис. 3.2.
Рис. 3.2. Обобщённая модель взаимодействующих процессов |
Коды процессов Р1 и Р2 имеют критические (CS1, CS2) и обычные (PR1, PR2) секции. Процессы Р1 и Р2 могут выполняться произвольное число раз, имеют общую область памяти Х и обращаются к критическому разделяемому ресурсу КР. |
Формально описать взаимодействие процессов можно описать следующим программным кодом на языке, подобном Паскалю и Алголу 60 (рис. 3.3).
Begin . . . |
{начало программного кода} |
Parbegin |
{начало описания параллельных процессов} |
S11; S12; . . . S1N |
{список N операторов процесса № 1 } |
AND |
{разделитель описаний процессов } |
S11; S12; . . . S1Q |
{список Q операторов процесса № 2 } |
Parend |
{конец описания параллельных процессов} |
End |
{конец программного кода} |
Рис. 3.3. Код, описывающий параллельные взаимодействующие процессы
По способу взаимного влияния взаимодействующие процессы можно разделить на конкурирующие и сотрудничающие. Конкурирующие процессы могут в принципе выполняться поодиночке. Однако при параллельном выполнении они начинают конкурировать за разделяемый критический ресурс и оказывать влияние друг на друга. Сотрудничающие процессы совместно обрабатывают общие данные и содержат в явном виде операторы передачи данных из одного процесса в другой.
В [1] описано несколько примеров конкурирующих процессов, в частности два не синхронизированных процесса Р1 и Р2, имеющих общую переменную Х, размещённую в оперативной памяти. Процесс Р1 имеет собственную переменную R1, а процесс Р2 – собственную переменную R2. Разумеется, эти переменные размещаются в памяти по разным адресам. Процесс Р1 состоит из трёх операторов присваивания: R1:=X, R1:=R1+1 и X:=R11. Процесс Р2 включает в себя тоже три оператора присваивания: R2:=X, R2:=R2+1 и X:=R2. Предположим, что к моменту начала выполнения процессов переменная Х имеет значение 10.
Пусть при выполнении процессов сложилась ситуация, в которой сначала выполнялся процесс Р1, а потом Р2. Тогда реализуется цепочка операторов, показанная в табл. 3.1. Ситуация, в которой после первого оператора процесса Р1 выполнится первый оператор процесса Р2 показана в табл. 3.2.
Таблица 3.1. Первый вариант взаимодействия конкурирующих процессов
|
Таблица 3.2. Второй вариант взаимодействия конкурирующих процессов
|
Из табл. 3.1 и 3.2 видно, что значения общей переменной Х в первом и втором вариантах получены разные. Очевидно, что хотя бы один из результатов является ошибочным. Вполне возможно, что ошибочными могут оказаться и оба результата выполнения подобных конкурирующих процессов. Для конкурирующих процессов введено понятие "взаимное исключение", означающее невозможность одновременного обращения двух и более процессов к критическому ресурсу.
Сотрудничающие процессы строятся по схеме "поставщик – потребитель". Для них так же, как и для конкурирующих процессов, справедлив механизм взаимных исключений, регулирующий доступ к критическим ресурсам. Однако, должны быть и средства синхронизации процессов, согласующих выполнение процессов во времени и позволяющие осуществить обмен данными. При обмене данными поставщик посылает потребителю сообщение. Однако потребитель может оказаться не готовым к принятию сообщения. Поэтому сообщение поступает в специально выделенную для обмена данными область памяти, называемую буфером, и ждёт выборки процессом-потребителем.
Однако, в силу разной скорости выполнения процессов и их разного содержания может возникнуть ситуация, в которой поставщик успевает послать несколько сообщений, прежде, чем потребитель выберет хотя бы одно. Для решения возникшей проблемы создаётся множество динамически распределяемых буферов, которое называется пулом буферов. Это приводит к появлению очереди буферов. Каждое новое сообщение создаёт буфер, который ставится в конец очереди.
В данном случае синхронизация процессов состоит в ведении обоими процессами совместного учёта занятых и свободных буферов и обеспечении чтения сообщений потребителем при непустой очереди и посылки сообщений поставщиком при наличии пустых буферов. Для ведения подобного учёта процессы должны иметь общие переменные, доступ к которым регулируется опять-таки на основе взаимных исключений.