
- •Классификация и характеристика программного обеспечения
- •Назначение, классификация системного программного обеспечения. Требования к спо
- •Формирование целостного представления о назначения организации сис по.
- •Овладение методами и инструментами: настройки, откладки, диагностики и защиты программных систем.
- •Назначение, функции и основные качества операционных систем. Требования к современным ос
- •Поколения операционных систем и их классификация
- •Функциональные компоненты операционных систем: подсистема управления ресурсами
- •1.1. Управление процессами
- •1.2. Управление памятью
- •1.3. Управление файлами и внешними устройствами
- •Функциональные компоненты операционных систем: подсистема управления задачами
- •2.1. Защита данных и администрирование
- •2.2. Интерфейс прикладного программирования
- •2.3. Пользовательский интерфейс
- •Архитектура операционных систем: ядро и вспомогательные модули ос
- •Модулями ос
- •Архитектура операционных систем: ядро в привилегированном режиме
- •В привилегированном режиме
- •К привилегированному ядру
- •Архитектура операционных систем: многослойная структура ос
- •Типовые средства аппаратной поддержки операционных систем
- •Концепция, преимущества и недостатки микроядерной архитектуры
- •Пространство
- •Мультипрограммирование. Реализация в системах пакетной обработки
- •Ввода-вывода
- •В мультипрограммной системе (б)
- •Мультипроцессорная обработка: сущность и характеристика
- •Понятия «процесс» и «поток», операции над процессами в мультипрограммных системах
- •Планирование и диспетчеризация потоков в мультипрограммных системах
- •Состояния потока в мультипрограммных системах
- •Вытесняющие и невытесняющие алгоритмы планирования
- •Алгоритмы планирования, основанные на квантовании
- •Алгоритмы планирования, основанные на приоритетах
- •Синхронизация процессов и потоков: цели и средства синхронизации
- •Синхронизация процессов и потоков: гонки и тупики
- •Синхронизация процессов и потоков: критическая секция, блокирующие
- •Синхронизация процессов и потоков: использование семафоров
- •Синхронизация процессов и потоков: синхронизирующие объекты ос
- •Функции операционных систем по управлению памятью
- •Управление памятью: виртуальное адресное пространство и виртуальная память
- •Алгоритмы распределения памяти: распределение памяти фиксированными разделами
- •Алгоритмы распределения памяти: распределение памяти динамическими разделами, перемещаемые разделы
- •Управление памятью: страничное распределение
- •Управление памятью: сегментное распределение
- •Управление памятью: сегментно-страничное распределение
- •Мультипрограммирование на основе прерываний: диспетчеризация и приоритезация прерываний в ос
- •Мультипрограммирование на основе прерываний: системные вызовы
- •Управление вводом-выводом в операционной системе: основные понятия и концепции организации ввода/вывода
- •Режимы управления вводом/выводом. Основные системные таблицы ввода/вывода
- •2.1. Режимы управления вводом/выводом
- •2.2. Основные системные таблицы ввода-вывода
- •Управление вводом-выводом в операционной системе: кэширование операций ввода/вывода при работе с накопителями на магнитных дисках
- •Управление файлами: общий принцип работы операционной системы с файлами
- •Управление файлами: общая характеристика файловых систем (fat, fat32 и ntfs)
- •2.1. Файловая система fat
- •2.2. Файловые системы vfat и fat32
- •3. Файловая система ntfs
- •3.1. Структура тома с файловой системой ntfs
- •3.2. Возможности файловой системы ntfs по ограничению
- •Сетевые и распределенные операционные системы
- •Функциональные компоненты сетевой операционной системы
- •Одноранговые и серверные сетевые операционные системы
- •Интерфейс прикладного программирования (api)
- •1.1. Принципы построения интерфейсов ос
- •1.2. Варианты реализации функций api
- •1). Реализация функций api на уровне ос
- •2). Реализация функций api на уровне системы программирования
- •3). Реализация функций api с помощью внешних библиотек
- •Платформенно-независимый интерфейс posix
- •Технологии программирования сом
Синхронизация процессов и потоков: критическая секция, блокирующие
Критические секции
Критическая секция – часть программы, результат выполнения которой может непредсказуемо меняться, если переменные, относящиеся к этой части программы изменяются другими потоками, в то время, когда выполнение этой части ещё не завершено.
Критическая секция всегда определяется по отношению к определённым критическим данным, при несогласованном изменении которых могут возникнуть нежелательные эффекты
Во всех потоках, работающих с критическими данными ОС должна определить
Чтобы исключить эффект гонок (эффект нежелательного результата) по отношению к критическим данным необходимо обеспечить, чтобы в каждый момент времени в критической секции, связанной с этими данными, находился только один поток – такой приём называется взаимным исключением
Возможные условия для обеспечения взаимного исключения поясняется рис. 3
PR2
Рис. 3. К пояснению проблемы организации
взаимного исключения
В этом случае, для попеременного входа в свои критические секции для процесса 1 и процесса 2 необходимо потребовать одинаковой длины процесса 1 и процесса 2 и одинаковой скорости их выполнения, что на практике практически невозможно, поэтому проблема взаимного исключения является далеко не простой, и разными ОС решаются по-разному
Самый простой и самый неэффективный способ обеспечить взаимное исключение состоит в том, что ОС позволяют потоку запрещать любые прерывания на время его прохождения в критической секции
Блокирующие переменные
Для синхронизации потоков одного процесса прикладной программист может использовать глобальные блокирующие переменные
Каждому набору критических данных ставится в соответствие двоичная переменная, которой поток присваивает значение 0, когда он входит в критическую секцию, и значение 1, когда он её покидает
На рис. 4 поясняется алгоритм использование блокирующих переменных при работе с критическими секциями
Рис. 4. Реализация критических секций с использованием
блокирующих переменных
Использование блокирующих переменных гарантирует выполнение условий взаимного исключения, однако недостатком является то, что при нахождении из одного потоков в критической секции, все остальные потоки будут нерационально использовать своё процессорное время на опрос блокирующую переменную.
Кроме этого, существует ограничение на прерывание, т.е. нельзя прерывать поток между выполнением операции проверки и установки блокирующей переменной. Во избежание таких ситуаций в системе команд многих компьютеров предусмотрено неделимая команда анализа и присвоения значения логической переменной.
Однако, в ОС реализуются специальные системные примитивы, на случай отсутствия в процессоре таких команд
На рис. 5 показана реализация взаимного исключения с использованием системных функций входа и выхода из критической секции для ОС семейства Window NT
Рис. 5. Реализация взаимного исключения с использованием системных
функций входа в критическую секцию и выхода из нее
в ОС Windows NT
Таким образом, при использовании системных примитивов исключается непроизводительная потеря процессорного времени на циклическую проверку, освобождения занятого ресурса
Если критические секции небольших размеров, то более предпочтительными являются использование блокирующих переменных, а не системных примитивов из-за накладных расходов, связанных с системными вызовами