
- •1. Понятие операционной системы и цели ее работы
- •Компоненты компьютерной системы
- •Общая картина функционирования компьютерной системы
- •Классификация компьютерных систем
- •Классификация компьютерных архитектур
- •История ос
- •Отечественные операционные системы
- •Облачные вычисления и ос для облачных вычислений(развитие концепций и возможностей ос)
- •Вопрос 2
- •Особенности операционных систем для компьютеров общего назначения (mainframes)
- •Режим разделения времени и особенности ос с режимом разделения времени
- •Системы и ос реального времени
- •Особенности ос для персональных компьютеров
- •Карманные компьютеры (handhelds) и их ос
- •Параллельные компьютерные системы и особенности их ос.
- •Симметричные и асимметричные мультипроцессорные системы
- •Распределенные компьютерные системы и особенности их ос
- •Виды серверов в клиент-серверных компьютерных системах
- •Кластерные вычислительные системы и их ос
- •3. Вычислительные среды
- •Архитектура компьютерной системы
- •Функционирование компьютерной системы
- •Обработка прерываний
- •Архитектура ввода-вывода
- •Вопрос 4
- •Структура памяти
- •Аппаратная защита памяти и процессора
- •Аппаратная защита адресов памяти в системах с теговой архитектурой
- •Организация аппаратной защиты памяти и процессора
- •5. Основные компоненты ос
- •Исполнение программ в ms dos
- •Исполнение нескольких программ в unix
- •Коммуникационные модели
- •6. Уровни абстракции
- •Уровни абстракции ос
- •Структура системы ms dos
- •Структура системы unix
- •Операционные системы с микроядром
- •Виртуальная машина Java (jvm)
- •Цели проектирования и разработки ос
- •Механизмы и политики
- •Реализация операционных систем
- •Генерация операционной системы
- •7. Понятие процесса
- •Состояния процесса
- •Блок управления процессом
- •Переключение с одного процесса на другой
- •Очереди, связанные с диспетчеризацией процессов
- •Переключение контекста
- •Вопрос 8
- •Уничтожение процесса
- •Парадигма (шаблон) взаимодействия процессов: производитель – потребитель
- •9. Коммуникация процессов
- •Непосредственная коммуникация процессов
- •Косвенная коммуникация процессов (про синхронизацию есть немного)
- •Буферизация и очередь сообщений (сокеты)
- •Основные понятия диспетчеризации процессов
- •Вопрос 10 Однопоточные и многопоточные процессы
- •Проблемы многопоточности
- •Потоки posix (Pthreads
- •Потоки в Java
- •Вопрос 12 Основные понятия диспетчеризации процессов
- •Планировщик процессора
- •Критерии диспетчеризации
- •Предсказание длины следующего периода активности
- •Вопрос 13 Диспетчеризация по приоритетам
- •Стратегия Round Robin (rr)
- •Многоуровневая очередь
- •Многоуровневые аналитические очереди
- •Планирование в Solaris
- •Планирование в Windows 2000
- •Вопрос 14 История синхронизации
- •Синхронизация процессов по критическим секциям
- •Алгоритм решения проблемы критической секции
- •Вопрос 15 Синхронизация на основе общих семафоров
- •Семафоры как общее средство синхронизации
- •Общие и двоичные семафоры
- •Решение классических задач синхронизации с помощью семафоров
- •Вопрос 16
- •Мониторы
- •Синхронизация в ос Solaris
- •Синхронизация в Windows 2000
- •Вопрос 17 Проблема тупиков
- •Модель системы
- •Граф распределения ресурсов
- •Поиск тупиков по графу распределения ресурсов
- •Методы обработки тупиков
- •Предотвращение тупиков
- •Избежание тупиков
- •Безопасное состояние системы
- •Вопрос 18
- •19. Управление памятью.
- •Вопрос 20
- •Вопрос 22
- •23. Понятие файла
- •Вопрос 24
Мониторы
Конструкция монитор предложена в 1974 г. Ч. Хоаром [18]. Она является более высокоуровневой и более надежной конструкцией для синхронизации, чем семафоры.
Описание монитора имеет вид:
monitor monitor-name
{
описания общих переменных
procedure body P1 ( … ) {
. . .
}
procedure body P2 ( … ) {
. . .
}
. . .
procedure body Pn( … ) {
. . .
}
{
код инициализации монитора
}
}
Монитор является многовходовым модулем особого рода. Он содержит описания общих для нескольких параллельных процессов данных и операций над этими данными в виде процедур P1, …, Pn. Пользователи монитора – параллельные процессы – имеют доступ к описанным в нем общим данным только через его операции, причем в каждый момент времени не более чем один процесс может выполнять какую-либо операцию монитора; остальные процессы, желающие выполнить операцию монитора, должны ждать, пока первый процесс закончит выполнять мониторную операцию.
Для реализации ожидания внутри монитора по различным условиям, вводятся условные переменные (condition variables) – переменные с описаниями вида condition x,y, доступ к которым возможен только операциями wait и signal: например, x.wait(); x.signal(). Операция x.wait() означает, что выполнивший ее процесс задерживается до того момента, пока другой процесс не выполнит операцию x.signal(). Операция x.signal() возобновляет ровно один приостановленный процесс. Если приостановленных процессов нет, она не выполняет никаких действий.
Схематическое изображение монитора приведено на рис. 12.2.
Рис. 12.2. Схематическое изображение монитора.
Схема монитора с условными переменными
приведена на рис. 12.3.Рис.
12.3. Монитор с условными переменными.
Синхронизация в ос Solaris
Система Solaris предоставляет разнообразные виды блокировщиков для поддержки многозадачности, многопоточности (включая потоки реального времени) и мультипроцессирования. Используются адаптивные мюьтексы (adaptive mutexes) – эффективное средство синхронизации доступа к данным при их обработке короткими сегментами кода. Для более длинных сегментов кода используются условные переменные и блокировщики читателей-писателей (reader-writer locks; rwlocks).Для синхронизации потоков используются "вертушки" (turnstiles) – синхронизирующие примитивы, которые позволяют использовать либо adaptive mutex, либо rwlock.
Синхронизация в Windows 2000
Для защиты доступа к данным на однопроцессорных системах используются маски прерываний. Для многопроцессорных систем используются spinlocks (" вертящиеся замки. В системе реализованы также объекты-диспетчеры, которые могут функционировать как мьютексы и как семафоры. Объекты-диспетчеры генерируют события, семантика которых аналогична семантике условной переменной.
Вопрос 17 Проблема тупиков
Тупик (deadlock) – множество заблокированных процессов, каждый из которых владеет некоторым ресурсом и ожидает ресурса, которым владеет какой-либо другой процесс из этого множества.
Простой пример тупика легко смоделировать с помощью семафоров (см. "Методы синхронизации процессов"). Пусть в системе есть два внешних устройства A и B, к которым обращаются два процесса P1 и P2. С каждым из внешних устройств с целью синхронизации связан семафор, которые будем обозначать также A и B. Семафоры изначально открыты. Пусть каждому из процессов необходимы оба устройства, но они обращаются к ним в противоположном порядке:
P1: wait(A); wait (B)
P2: wait(B); wait (A).
В данном случае будет иметь место тупик: процесс P1, закрыв семафор A и заблокировав первое устройство, никогда не дождется, когда откроется семафор B, связанный со вторым устройством, так как его уже успел закрыть процесс P2. Аналогично, процесс P2 никогда не дождется, когда откроется семафор A.