1. Синхронизация процессов и потоков. Методы взаимоисключений. Блокирующие переменные. Системные функции для работы с критическими секциями.
2. Архитектуры операционных систем. Принципы разработки архитектур ОС. Достоинства и недостатки различных архитектур.
1) Синхронизация необходима процессам для организации совместного использования ресурсов, таких как файлы или устройства, а также для обмена данными.
Способы взаимодействия процессов можно классифицировать по степени осведомленности одного процесса о существовании другого.
Степень осведомленности | Взаимосвязь | Влияние одного процесса на другой | Потенциальные проблемы |
Процессы не осведомлены друг о друге | Конкуренция | Результат работы одного процесса не зависит от действий других. Возможно влияние одного процесса на время работы другого. | Взаимоисключения Взаимоблокировки Голодание |
Процессы косвенно осведомлены о наличии друг друга | Сотрудничество с использованием разделения | Результат работы одного процесса может зависеть от информации, полученной от других. Возможно влияние одного процесса на время работы другого. | Взаимоисключения Взаимоблокировки Голодание Синхронизация |
Процессы непосредственно осведомлены о наличии друг друга | Сотрудничество с использованием связи | Результат работы одного процесса может зависеть от информации, полученной от других. Возможно влияние одного процесса на время работы другого. | Взаимоблокировки (возобновляемые ресурсы) Голодание |
Методы взаимоисключений.
|
|
Запрет прерываний при входе в критическую область и разрешение прерываний после выхода из критической области. Достоинства: простота реализации. Недостатки: монополизация процессора, возможный крах ОС при сбое процесса, невозможность использования в многопроцессорных системах.
Блокирующие переменные (программный подход)
Для синхронизации потоков одного процесса могут быть использованы глобальные блокирующие переменные.
Каждому набору критических данных ставится в соответствие двоичная переменная. Поток может войти в критическую секцию только тогда, когда значение этой переменной равно 0, одновременно изменяя ее значение на 1. При выходе из критической секции поток вновь сбрасывает ее значение в 0.
Использование системных функций входа в критическую секцию
Семафоры Дейкстры.
Блокирующие переменные
Недостатки: необходимость постоянного опроса другими потоками, требующими тот же ресурс, блокирующей переменной, дополнительные затраты процессорного времени. |
Системные функции для работы с критическими секциями
|
|
Достоинство: исключается потеря времени процессора на циклическую проверку освобождения занятого ресурса. Недостаток: растут накладные расходы ОС на по реализации функции входа в критическую секцию и выхода из нее. |
2) Архитектура операционной системы – структурная и функциональная ее организация на основе некоторой совокупности программных модулей. В состав ОС входят исполняемые и объектные модули специального формата (загрузчик ОС, драйверы ввода-вывода), конфигурационные файлы, файлы документации, модули справочной системы и т.д.
Принципы разработки архитектур ОС:
1. Концепция многоуровневой иерархической вычислительной системы (виртуальной машины) с ОС многослойной структуры.
2. Разделение модулей ОС по функциям на две группы: ядро – модули, выполняющие основные функции ОС, и модули, выполняющие остальные (вспомогательные) функции.
3. Разделение модулей ОС по размещению в памяти вычислительной системы: резидентные, постоянно находящиеся в оперативной памяти, и транзитные, загружаемые в оперативную память только на время выполнения своих функций.
4. Реализация двух режимов работы вычислительной системы: привилегированного режима (режима ядра – kernel mode) или режима супервизора (supervisor) и пользовательского режима (user mode) или режима задача (task mode).
5. Ограничение функций ядра (а, следовательно и числа его модулей) до минимально необходимых функций.
6. Модульное строение (однократно используемые – при загрузке ОС) и повторно используемые (привилегированные – не допускают прерываний, реентерабельные – допускают прерывания и повторный запуск, повторновходимые – допускают прерывания после завершения секций).
7. Параметрическая универсальность. Возможность генерации ОС и создания нескольких рабочих конфигураций.
8. Функциональная избыточность.
9. Функциональная избирательность.
10. Открытость, модифицируемость, расширяемость (возможность получения текстов исходных модулей).
11. Мобильность – возможность переноса на различные аппаратные платформы.
12. Совместимость – возможность выполнения приложений, рассчитанных на другие ОС.
13. Безопасность – защита от несанкционированного доступа, защита легальных пользователей друг от друга, аудит, возможность восстановления ОС после сбоев и отказов.
Монолитная архитектура
Как правило, структура отсутствует
Многоуровневая архитектура
1. Между уровнями можно организовать четкий интерфейс.
2. Систему можно спроектировать методом «сверху вниз», а реализовать методом «снизу вверх».
3. Уровни реализуются в соответствии с их порядком, начиная с аппаратуры и далее вверх.
4. Каждую новую виртуальную машину можно детально проверить, после чего продолжать дальнейшую работу.
5. Любой слой достаточно просто модифицировать, не затрагивая другие слои и не меняя межслойные интерфейсы.
Микроядерная архитектура
Операционные системы, основанные на концепции микроядра, в высокой степени удовлетворяют большинству требований, предъявляемых к современным ОС, обладая переносимостью, расширяемостью, надежностью и создавая хорошие предпосылки для поддержки распределенных приложений. За эти достоинства приходится платить снижением производительности, и это является основным недостатком микроядерной архитектуры.
Задача
У контроллера DMA четыре канала. Контроллер способен запрашивать 32-разрядное слово через каждые 100 нс. Ответ на запрос занимает столько же времени. насколько быстрой должна быть шина, чтобы не стать узким местом системы?
Если есть 4 канала, запросы идут каждые 100 нс, и одновременно с ними приходят и ответы (по идее тут асинхронная система), то за 100 нс идёт генерация 2*4*32=256 бит трафика.
Соответственно за 1 с 256*10^7 бит. Т.е. 256*10^7 / 1024/ 1024/ 1024 = 2,38 гбит/с (вполне реальная цифра)