
- •Введение
- •Требования к содержанию лекций
- •Организация лабораторного практикума
- •Программа лабораторного практикума
- •Лабораторная работа 1. Краткосрочное планирование задач
- •Лабораторная работа 2. Замещение областей памяти
- •Лабораторная работа 3. Синхронизация процессов/потоков
- •Лабораторная работа 5. Файловые системы
- •Литература
- •Основные понятия и определения
- •Распределение ресурса «центральный процессор»
- •Процесс и поток – типы ресурсов операционной системы
- •Классификация ОС по признаку поддержки процессов и потоков
- •1. Однозадачные ОС
- •2. Многозадачные ОС без поддержки многопоточности
- •3. Многозадачные ОС с поддержкой многопоточности
- •Реализация многопоточности внутри программы пользователя
- •Состояния потока
- •Дескрипторы процессов и потоков
- •Операции над процессами
- •1. Создание процесса
- •2. Завершение процесса
- •Операции над потоками
- •1. Создание потока
- •2. Завершение потока
- •Планирование
- •Модель поведения процесса с одним потоком
- •Критерии оценки алгоритмов планирования
- •Алгоритмы планирования в системах пакетной обработки данных
- •«Кратчайшая задача - первая» (Shortest Job First, SJF)
- •«Наименьшее оставшееся время выполнения»
- •Алгоритмы планирования в интерактивных системах
- •«Циклическое планирование» (Round Robin, RR)
- •«Приоритетное планирование»
- •«Самый короткий поток - следующий»
- •«Гарантированное планирование»
- •Лотерейное планирование
- •Планирование с использованием многоуровневых очередей
- •Алгоритм планирования Windows NT
- •Алгоритм планирования UNIX
- •Алгоритм планирования UNIX System V Release 4
- •Алгоритм планирования Linux (версия ядра 2.2 и ниже)
- •Заключение
- •Управление памятью
- •Архитектура оперативной памяти
- •Способ описания физической памяти
- •Алгоритм обеспечения пространственного мультиплексирования
- •Схема с фиксированными разделами
- •Оверлейная структура
- •Свопинг
- •Схема с переменными разделами
- •Общие вопросы управления страничной памятью
- •Алгоритмы замещения страниц
- •Оптимальный алгоритм
- •Алгоритм FIFO - Выталкивание первой пришедшей страницы
- •Алгоритм Second-Chance - Вторая попытка
- •Алгоритм «часы»
- •Заключение
- •Взаимодействие потоков – передача данных и синхронизация
- •Взаимодействие потоков
- •Критическая секция
- •Задача взаимного исключения
- •Семафоры
- •Тупики
- •Синхронизирующие объекты ОС
- •Сигналы
- •Обмен сообщениями (message passing) (Хоар, 1978 год)
- •Реализация взаимоисключений
- •Алгоритм Петерсона
- •Алгоритм булочной (Bakery algorithm)
- •Аппаратная поддержка взаимоисключений
- •Команда Test-and-Set (Проверить и присвоить 1)
- •Команда Swap (Обменять значения)
- •Классические задачи взаимодействия потоков
- •Задача "Производитель-потребитель"
- •Задача "Читатели-писатели"
- •Задача "Обедающие философы"
- •Проблема спящего брадобрея
- •Передача данных между взаимодействующими потоками
- •Архитектура файловой системы
- •Файлы с точки зрения пользователя
- •Типы объектов файловой системы
- •Имена объектов файловой системы
- •Операции над файлами
- •Директории – логическая структура файлового архива
- •Операции над директориями
- •Пользовательский интерфейс системы управления файлами
- •Виртуальная Файловая Система
- •Принцип работы
- •Структура VFS
- •Типы объектов в VFS
- •Символьные связи (мягкие ссылки)
- •Именованные конвейеры (именованные каналы)
- •Реализация VFS
- •Лабораторная работа 1. Краткосрочное планирование задач
- •Симулятор многозадачной системы
- •Модель эксперимента
- •Архитектура программной лаборатории
- •Проведение эксперимента
- •Выполнение лабораторной работы
- •Архитектура планировщика в Linux (Ядро 2.4.18)
- •Очередь процессов
- •Кванты времени центрального процессора
- •Выбор процесса на исполнение
- •Вычисление эффективного приоритета и размера кванта
- •Вытеснение процесса
- •Изменение алгоритма планирования
- •Компиляция и установка ядра Linux
- •Литература по лабораторной работе 1
- •Лабораторная работа 2. Замещение областей памяти
- •Симулятор многозадачной системы
- •Управление памятью в Linux (ядро 2.4.18)
- •Описание физической памяти в Linux
- •Узлы
- •Зоны
- •Отметки уровня воды (watermarks)
- •Страницы
- •Адресное пространство процесса
- •Страничные сбои
- •Выделение памяти по запросу
- •Подкачка по запросу
- •Демон выгрузки страниц (kswapd)
- •Кэш страниц
- •Добавление страниц в кэш страниц
- •Заполнения списка «холодных» страниц
- •Стратегия замещения страниц
- •Изменение стратегии замещения
- •Литература по лабораторной работе 2
- •Механизмы межпроцессного взаимодействия ОС UNIX
- •Семафоры.
- •Очереди сообщений.
- •Работа с разделяемой памятью.
- •Механизмы межпроцессного взаимодействия ОС Windows
- •Wait-функции
- •События
- •Ожидаемые таймеры
- •Семафоры
- •Мьютексы
- •Литература по лабораторным работам 3-4
- •Лабораторная работа 5. Файловые системы
- •Предлагаемые к реализации файловые системы
- •Файловая система 1
- •Файловая система 2
- •Файловая система 3
- •Симулятор работы с файловой системой
- •Постановка задачи
- •Операции над файлами
- •Операции над директориями
- •Требования к лабораторной работе
- •Архитектура программной лаборатории
- •Обзор архитектуры модуля поддержки файловой системы в Linux
- •Модули драйвера файловой системы Minix
- •Описание суперблока файловой системы
- •Описание индексного дескриптора (inode)
- •Основной файл заголовков
- •Исходные тексты функций работы с индексным дескриптором
- •Исходные тексты функций работы с объектами ФС разных типов
- •Другие модули
- •Реализация драйвера файловой системы
- •Литература по лабораторной работе 5
- •Литература
- •Дополнительная литература

Лабораторный практикум по курсу "Операционные системы"
непригодными. В таких системах синхронизация может быть реализована только посредством обмена сообщениями.
Обмен сообщениями (message passing) (Хоар, 1978 год)
Цели предложенного подхода - избавиться от проблем разделения памяти и предложить модель взаимодействия процессов для распределенных систем. Предлагается две операции:
send(destination, &message, msize);
receive([source], &message, msize);
соответственно, передача и прием сообщения.
В качестве адресата выступает процесс. Отправитель может не специфицироваться (например быть любым - широковещательное сообщение). Передача может осуществляться как с буферизацией (почтовые ящики) так и без нее (рандеву - Ада, Оккам). Пайпы ОС UNIX - почтовые ящики, заменяют файлы и не хранят границы сообщений (все сообщения объединяются в одно большое, которое можно читать произвольными порциями.
Механизмы семафоров и обмена сообщениями взаимозаменяемы семантически и на мультипроцессорах могут быть реализованы один через другой.
Реализация взаимоисключений
Алгоритм Петерсона
Первое решение проблемы взаимного исключения, удовлетворяющее всем требованиям, было предложено датским математиком Деккером (Dekker). В 1981 году Петерсон (Peterson) предложил более изящное решение.
Пусть два потока имеют доступ к массиву флагов готовности и к переменной очередности. Предлагается использовать следующий код.
int ready[2] = {0, 0}; |
/* |
разделяемая |
переменная |
*/ |
int turn; |
/* |
разделяемая |
переменная |
*/ |
while(some_condition) { |
|
|
|
|
ready[i] = 1; |
|
|
|
|
turn = 1 - i;
while( ready[1-i] && turn == 1-i )
;
critical section ready[i] = 0; remainder section
}
При исполнении пролога критической секции поток P1 заявляет о своей готовности выполнить критический участок и одновременно предлагает другому потоку приступить к его выполнению. Если оба потока подошли к прологу практически одновременно, то они оба объявят о своей готовности и предложат выполняться друг другу. При этом одно из
76 Учебно-исследовательская лаборатория «Информационные технологии»

Лабораторный практикум по курсу "Операционные системы"
предложений всегда последует после другого. Тем самым работу в критическом участке продолжит поток, которому было сделано последнее предложение.
Так как в процессе ожидания разрешения на вход поток P0 не изменяет значения переменных, то он сможет начать исполнение своего критического участка после не более чем одного прохода по критической секции потока P1.
Алгоритм булочной (Bakery algorithm)
Алгоритм Петерсона дает нам решение задачи корректной организации взаимодействия двух потоков. Давайте рассмотрим теперь соответствующий алгоритм для n взаимодействующих потоков, который получил название алгоритм булочной. Основная его идея выглядит так. Каждый вновь прибывающий клиент (он же поток) получает талончик на обслуживание с номером. Клиент с наименьшим номером на талончике обслуживается следующим. К сожалению, из-за неатомарности операции вычисления следующего номера алгоритм булочной не гарантирует, что у всех потоков будут талончики с разными номерами. В случае равенства номеров на талончиках у двух или более клиентов первым обслуживается клиент с меньшим значением имени (имена можно сравнивать в лексикографическом порядке). Разделяемые структуры данных для алгоритма – это два массива
enum {false, true} choosing[n]; int number[n];
Изначально элементы этих массивов инициируются значениями false и 0 соответственно. Введем следующие обозначения
(a,b) < (c,d), если a < c или если a = = c и b < d
max(a0, a1, ...., an) — это число k такое, что k >= ai для всех i = 0, ...,n
Структура кода потока Pi для алгоритма булочной приведена ниже while(some_condition) {
choosing[i] = true;
number[i] = max(number[0], ..., number[n-1]) + 1; choosing[i] = false;
for( j = 0; j < n; j++ ){ while(choosing[j])
;
while(number[j] != 0 && (number[j],j) < (number[i],i))
;
}
critical section number[i] = 0; remainder section
}
Учебно-исследовательская лаборатория «Информационные технологии» 77