
- •Эволюция операционных систем. Структура вычислительной системы
- •Понятие операционной системы.
- •Функции операционных систем.
- •Основные понятия и концепции ос.
- •Архитектурные особенности ос.
- •Классификация ос.
- •Краткие сведения об архитектуре компьютера.
- •История создания ос корпорации Microsoft.
- •Системы Unix и Linux.
- •Дистрибутивы Linux.
- •Процессы. Понятие процесса.
- •Состояния процесса.
- •Одноразовые операции. Упрощенная иеархическая структура процессов.
- •Многоразовые операции. Приостановка, блокирование и разблокирование процесса.
- •Переключение контекста. Выполнение операции разблокирования процесса.
- •Планирование процессов. Уровни планирования процессов.
- •Критерии планирования и требования к алгоритмам.
- •Вытесняющее и невытесняющее планирование.
- •Алгоритм планирования First-Come, First-Served (fcfs).
- •Алгоритм планирования Round Robin (rr).
- •Алгоритм планирования Shortest-Job-First (sjf).
- •Гарантированное планирование.
- •Приоритетное планирование.
- •Многоуровневые очереди с обратной связью (Multilevel Feedback Queue).
- •Категории средств обмена информацией.
- •Логическая организация механизма передачи информации. Установка связи.
- •Особенности передачи информации с помощью линий связи.
- •Буферизация.
- •Поток ввода/вывода и сообщения.
- •Надежность средств связи. Завершение связи.
- •Потоки исполнения.
- •Алгоритмы синхронизации. Interleaving, race condition и взаимоисключения.
- •Критическая секция.
- •Программные алгоритмы организации взаимодействия процессов.
- •Требования, предъявляемые к алгоритмам синхронизации.
- •Запрет прерываний.
- •Переменная-замок.
- •Флаги готовности.
- •Алгоритм Петерсона.
- •Команда Test-and-Set (проверить и присвоить).
- •Команда Swap (обменять значения).
- •Механизмы синхронизации процессов и потоков.
- •Цели и средства синхронизации.
- •Решение проблемы producer-consumer с помощью семафоров.
- •Wait-функции и ожидаемые таймеры.
- •События и семафоры.
- •Мьютексы.
- •Реализация мониторов и передачи сообщений с помощью семафоров.
- •Реализация семафоров и передачи сообщений с помощью мониторов
- •Реализация семафоров и мониторов с помощью очередей сообщений
- •Управление памятью. Физическая организация памяти
- •Физическая организация памяти компьютера
- •Свойство локальности
- •Логическая память
- •Связывание адресов
- •Функции системы управления памятью
- •59. Схема управления памятью с одним процессом в памяти
- •Страничная память
- •Сегментная и сегментно-страничная организация памяти
- •Виртуальная память. Архитектурные средства поддержки виртуальной памяти. Понятие виртуальной памяти
- •Архитектурные средства поддержки виртуальной памяти
- •Страничная виртуальная память
- •Сегментно-страничная организация виртуальной памяти
- •Структура таблицы страниц
- •Ассоциативная память
- •Размер страницы
- •Аппаратно-независимый уровень управления виртуальной памятью. Исключительные ситуации при работе с памятью
- •Стратегии управления страничной памятью
- •Алгоритмы замещения страниц: общие правила, классификация, эффективность
- •Алгоритм fifo
- •Аномалия Билэди
- •Оптимальный алгоритм (opt)
- •Алгоритм nru
- •Алгоритм lru
- •Программное моделирование алгоритма lru
- •Трешинг
- •Моделирование рабочего множества
- •Страничные демоны (сервисы). Фоновый процесс
- •Программная поддержка сегментной модели памяти процесса
- •Файловая система. Файлы с точки зрения пользователя. Функции файловой системы
- •Общие сведения о файлах (имена, типы, атрибуты)
- •Организация файлов и доступ к ним (последовательный, прямой). Формы организации файлов
- •Операции над файлами
- •Директории. Логическая структура файлового архива
- •Разделы диска
- •Операции над директориями
- •Защита файлов
- •Реализация файловой системы. Общая структура файловой системы. Блок-схема файловой системы
- •Управление внешней памятью. Методы выделения дискового пространства
- •Выделение непрерывной последовательностью дисковых блоков
- •Связанный список. Хранение файла в виде связанного списка дисковых блоков.
- •Индексные узлы.
- •Управление свободным и занятым дисковым пространством.
- •Структура файловой системы на диске. Примерная структура файловой системы на диске.
- •Связывание файлов. Структура файловой системы с возможностью связывания файла с новым именем.
- •Кооперация процессов при работе с файлами.
- •Примеры разрешения коллизий и тупиковых ситуаций.
- •Hадежность файловой системы.
- •Целостность файловой системы.
- •Порядок выполнения операций.
- •Журнализация.
- •Производительность файловой системы. Кэширование.
- •Современные архитектуры файловых систем.
- •Дополнительные возможности современных файловых систем (на примере ntfs ос Windows xp).
- •Система управления вводом-выводом
- •Физические принципы организации ввода-вывода.
- •Общие сведения об архитектуре компьютера.
- •Прямой доступ к памяти (Direct Memory Access – dma).
- •Структура системы ввода-вывода. Логические принципы организации ввода-вывода.
- •Структура подсистемы ввода-вывода. Драйверы.
- •Функции подсистемы ввода-вывода.
- •Компоненты подсистемы ввода-вывода (структурная схема).
- •Диспетчер ввода-вывода.
- •Типовая обработка ввода-вывода.
- •Установка драйвера.
- •Диспетчер электропитания.
- •Сетевые и распределенные операционные системы.
- •Взаимодействие удаленных процессов как основа работы вычислительных сетей.
- •Основные вопросы логической организации передачи информации между удаленными процессами.
- •Понятие протокола.
- •Многоуровневая модель построения сетевых вычислительных систем. Семиуровневая эталонная модель osi/iso.
- •Проблемы адресации в сети. Одноуровневые адреса. Двухуровневые адреса.
- •Удаленная адресация и разрешение адресов. Схема разрешения имен с использованием dns-серверов.
- •Основные понятия информационной безопасности. Угрозы безопасности
- •Формализация подхода к обеспечению информационной безопасности.
- •Криптография как одна из базовых технологий безопасности ос.
- •Шифрование. Шифрование открытым ключом.
- •Шифрование с использованием алгоритма rsa.
- •Защитные механизмы ос. Идентификация и аутентификация
- •Пароли, уязвимость паролей.
- •Шифрование пароля.
- •Авторизация. Разграничение доступа к объектам ос.
- •Аудит системы защиты.
- •Анализ некоторых популярных ос с точки зрения их защищенности: ms-dos; Windows nt/2000/xp; Windows Vista; Windows 7.
- •Брандмауэр ос ms Windows.
Мьютексы.
Мьютекс (англ. mutex, от mutual exclusion – взаимное исключение) – одноместный семафор, служащий в программировании для синхронизации одновременно выполняющихся потоков.
Мьютексы (mutex) – это один из вариантов семафорных механизмов для организации взаимного исключения. Они реализованы во многих ОС, их основное назначение – организация взаимного исключения для потоков из одного и того же или из разных процессов.
Мьютексы – это простейшие двоичные семафоры, которые могут находиться в одном из двух состояний – отмеченном или неотмеченном (открыт и закрыт соответственно). Когда какой-либо поток, принадлежащий любому процессу, становится владельцем объекта mutex, последний переводится в неотмеченное состояние. Если задача освобождает мьютекс, его состояние становится отмеченным.
Организация последовательного доступа к ресурсам с использованием мьютексов становится несложной, поскольку в каждый конкретный момент только один поток может владеть этим объектом. Для того, чтобы мьютекс стал доступен потокам, принадлежащим разным процессам, при создании ему необходимо присвоить имя. Потом это имя нужно передать «по наследству» задачам, которые должны его использовать для взаимодействия. Для этого вводятся специальные системные вызовы (CreateMutex), в которых указывается начальное значение мьютекса и его имя.
Для работы с мьютексом имеется несколько функций. Помимо уже упомянутой функции создания такого объекта (CreateMutex), есть функции открытия (OpenMutex) и функция освобождения этого объекта (ReleaseMutex). Конкретные обращения к этим функциям и перечни передаваемых и получаемых параметров нужно смотреть в документации на соответствующую ОС.
Единственная задача мьютекса – защита объекта от доступа к нему других потоков, отличных от того, который завладел мьютексом. Если другому потоку будет нужен доступ к переменной, защищённой мьютексом, то этот поток просто засыпает до тех пор, пока мьютекс не будет освобождён.
Цель использования мьютексов – защита данных от повреждения; однако им порождаются другие проблемы, такие как взаимная блокировка (клинч) и «соревнование за ресурс».
Одной из особенностей мьютексов, отличающей их от других средств синхронизации, например от критических секций, является то, что данными объектами управляет операционная система. Следствием этого являются дополнительные затраты процессорного времени, требуемые на переключение между режимом пользователя и ядра.
Реализация мониторов и передачи сообщений с помощью семафоров.
Рассмотрим сначала, как реализовать мониторы с помощью семафоров. Для этого нам нужно уметь реализовывать взаимоисключения при входе в монитор и условные переменные. Возьмем семафор mutex с начальным значением 1 для реализации взаимоисключения при входе в монитор и по одному семафору ci для каждой условной переменной. Кроме того, для каждой условной переменной заведем счетчик fi для индикации наличия ожидающих процессов. Когда процесс входит в монитор, компилятор будет генерировать вызов функции monitor_enter, которая выполняет операцию P над семафором mutex для данного монитора. При нормальном выходе из монитора (т. е. при выходе без вызова операции signal для условной переменной) компилятор будет генерировать вызов функции monitor_exit, которая выполняет операцию V над этим семафором.
Для выполнения операции wait над условной переменной компилятор будет генерировать вызов функции wait, которая выполняет операцию V для семафора mutex, разрешая другим процессам входить в монитор, и выполняет операцию P над соответствующим семафором ci, блокируя вызвавший процесс. Для выполнения операции signal над условной переменной компилятор будет генерировать вызов функции signal_exit, которая выполняет операцию V над ассоциированным семафором ci (если есть процессы, ожидающие соответствующего события) и выход из монитора, минуя функцию monitor_exit.
Semaphore mutex = 1;
void monitor_enter(){
р(mutex);
}
void monitor_exit(){
V(mutex);
}
Semaphore ci = 0;
int fi = 0;
void wait(i) {
fi = fi + 1;
V(mutex);
р(ci);
Fi = fi - 1;
}
void signal_exit(i) {
if (fi) V(ci);
else V(mutex);
}
Заметим, что при выполнении функции signal_exit, если кто-либо ожидал этого события, процесс покидает монитор без увеличения значения семафора mutex, не разрешая тем самым всем процессам, кроме разбуженного, войти в монитор. Это увеличение совершит разбуженный процесс, когда покинет монитор обычным способом или когда выполнит новую операцию wait над какой-либо условной переменной.
Рассмотрим теперь, как реализовать передачу сообщений, используя семафоры. Для простоты опишем реализацию только одной очереди сообщений. Выделим в разделяемой памяти достаточно большую область под хранение сообщений, там же будем записывать, сколько пустых и заполненных ячеек находится в буфере, хранить ссылки на списки процессов, ожидающих чтения и памяти. Взаимоисключение при работе с разделяемой памятью будем обеспечивать семафором mutex. Посмотрим, как такой механизм будет работать. Начнем с процесса, желающего получить сообщение.
Процесс-получатель с номером i прежде всего выполняет операцию P(mutex), получая в монопольное владение разделяемую память. После этого он проверяет, есть ли в буфере сообщения. Если нет, то он заносит себя в список процессов, ожидающих сообщения, выполняет V(mutex) и р(ci). Если сообщение в буфере есть, то он читает его, изменяет счетчики буфера и проверяет, есть ли процессы в списке процессов, жаждущих записи. Если такой процесс есть (с номером j), то он удаляется из этого списка, выполняется V для его семафора cj, и мы выходим из критического района. Проснувшийся процесс начинает выполняться в критическом районе, так как mutex имеет значение 0 и никто более не может попасть в критический район. При выходе из критического района именно разбуженный процесс произведет вызов V(mutex).
Как строится работа процесса-отправителя с номером i? Процесс, посылающий сообщение, тоже ждет, пока он не сможет иметь монополию на использование разделяемой памяти, выполнив операцию р(mutex). Далее он проверяет, есть ли место в буфере, и если да, то помещает сообщение в буфер, изменяет счетчики и смотрит, есть ли процессы, ожидающие сообщения. Если нет, выполняет V(mutex) и выходит из критической области, если есть, «будит» один из них (с номером j), вызывая V(cj), с одновременным удалением этого процесса из списка процессов, ожидающих сообщений, и выходит из критического региона без вызова V(mutex), предоставляя тем самым возможность разбуженному процессу прочитать сообщение. Если места в буфере нет, то процесс-отправитель заносит себя в очередь процессов, ожидающих возможности записи, и вызывает V(mutex) и р(ci).