
- •Введение
- •Введение в компьютерные и операционные системы
- •Структура компьютерной системы
- •Программное обеспечение компьютерной системы
- •1.2.1 Операционная система
- •1.2.1.1 Управляющая программа
- •1.2.1.2 Системные обрабатывающие программы
- •1.2.2 Пакеты прикладных программ
- •1.2.3 Программы технического обслуживания
- •Аппаратное обеспечение компьютерной системы
- •1.3.1 Процессор
- •1.3.2 Внутренняя память
- •1.3.3 Устройства ввода и вывода, внешняя память
- •Основные функции и архитектурные особенности ос
- •1.4.1 Основные функции ос:
- •3) Управление памятью.
- •1.4.2 Монолитное ядро
- •1.4.3 Слоеные системы (Layered systems)
- •1.4.4 Виртуальные машины
- •1.4.5 Микроядерная архитектура
- •1.4.6 Смешанные системы
- •Классификация ос
- •Контрольные вопросы
- •Архитектура компьютерных систем
- •Классификация архитектур по параллельной обработке данных
- •Гибридная архитектура numa
- •Кластерная архитектура
- •Проблемы выполнения сети связи процессоров в кластерной системе
- •Контрольные вопросы
- •Способы организации высокопроизводительных процессоров. Ассоциативные конвейерные и матричные процессоры
- •1) Ассоциативные процессоры
- •2) Конвейерные процессоры
- •3) Матричные процессоры
- •Ассоциативные процессоры
- •Конвейерные процессоры
- •Матричные процессоры
- •Контрольные вопросы
- •Способы организации высокопроизводительных процессоров. Новые архитектуры процессоров
- •Клеточные и днк-процессоры.
- •Коммуникационные процессоры
- •Процессоры баз данных
- •Потоковые процессоры
- •Нейронные процессоры
- •Процессоры с многозначной (нечеткой) логикой
- •Контрольные вопросы
- •Управление процессами. Состояние процессов и операции над процессами
- •Введение в процессы
- •Состояния процесса
- •Операции над процессами и связанные с ними понятия
- •5.3.1 Набор операций
- •5.3.2 Pcb и контекст процесса
- •5.3.3 Одноразовые операции
- •5.3.4 Многоразовые операции
- •5.3.5 Прерывание и типы прерываний
- •5.3.6 Переключение контекста
- •5.3.7 Ядро операционной системы
- •Контрольные вопросы
- •Управление процессами. Кооперация процессов и основные аспекты ее логической организации
- •Введение в кооперацию процессов
- •Взаимодействующие процессы
- •Категории средств обмена информацией
- •Логическая организация механизма передачи информации
- •6.4.1 Установление связи между процессами
- •6.4.2 Однонаправленные и двунаправленные связи между процессами
- •6.4.3 Особенности передачи информации с помощью линий связи
- •1) Буферизация
- •2) Поток ввода/вывода и сообщения
- •6.4.4. Надежность средств связи
- •6.4.5 Завершение связи
- •Потоки исполнения
- •Контрольные вопросы
- •Управление процессами. Алгоритмы синхронизации
- •Чередования, условия состязания и взаимоисключения
- •Критическая секция
- •Алгоритмы взаимоисключений
- •7.3.1 Требования, предъявляемые к алгоритмам
- •7.3.2 Запрет прерываний
- •7.3.3 Переменная-замок
- •7.3.4 Строгое чередование
- •7.3.5 Флаги готовности
- •7.3.6 Алгоритм Петерсона
- •7.3.7 Алгоритм булочной (Bakery algorithm)
- •Аппаратная поддержка взаимоисключений
- •7.4.1 Команда Test-and-Set (Проверить и присвоить 1)
- •7.4.2 Команда Swap (Обменять значения)
- •Недостатки алгоритмов взаимоисключений
- •Семафоры
- •7.6.1 Концепция семафоров
- •7.6.2 Решение проблемы производитель-потребитель с помощью семафоров
- •Мониторы
- •Сообщения
- •Эквивалентность семафоров, мониторов и сообщений
- •Контрольные вопросы
- •Управление процессами. Тупики
- •Введение в тупики
- •Концепция ресурса
- •Условия возникновения тупиков
- •Основные направления борьбы с тупиками
- •2) Обнаружение тупиков
- •3) Восстановление после тупиков
- •Алгоритм страуса
- •Обнаружение тупиков
- •Восстановление после тупиков
- •8.7.1 Восстановление при помощи перераспределения ресурсов
- •8.7.2 Восстановление через откат назад
- •8.7.3 Восстановление через ликвидацию одного из процессов
- •Способы предотвращения тупиков путем тщательного распределения ресурсов
- •8.8.1 Предотвращение тупиков и алгоритм банкира
- •8.8.2 Недостатки алгоритма банкира
- •Предотвращение тупиков за счет нарушения условий возникновения тупиков
- •8.9.1 Нарушение условия взаимоисключения
- •8.9.2 Нарушение условия ожидания дополнительных ресурсов
- •8.9.3 Нарушение принципа неперераспределяемости
- •8.9.4 Нарушение условия кругового ожидания
- •Проблемы аналогичные тупикам
- •8.10.1 Двухфазная локализация
- •8.10.2 Тупики не ресурсного типа
- •8.10.3 Голод
- •Контрольные вопросы
- •Управление памятью. Простейшие схемы управления памятью
- •1) Введение в управление памятью
- •2) Связывание адресов
- •Введение в управление памятью
- •Связывание адресов
- •Простейшие схемы управления памятью
- •9.3.1 Схема с фиксированными разделами
- •1) Один процесс в памяти
- •2) Оверлейная структура
- •9.3.2 Схема со свопингом
- •9.3.3 Схема с переменными разделами
- •Контрольные вопросы
- •Управление памятью. Архитектурные средства поддержки виртуальной памяти
- •1) Проблема размещения больших программ. Понятие виртуальной памяти
- •Проблема размещения больших программ. Понятие виртуальной памяти
- •Архитектурные средства поддержки виртуальной памяти
- •Способы организации виртуальной памяти
- •1) Страничная память
- •2) Сегментная организация памяти
- •3) Сегментно-страничная организации памяти
- •Ассоциативная память
- •Иерархия памяти
- •Размер страницы
- •Контрольные вопросы
- •Управление памятью. Аппаратно-независимый уровень управления виртуальной памятью
- •Введение в аппаратно-независимый уровень управления виртуальной памятью
- •Исключительные ситуации при работе с памятью
- •Стратегии управления страничной памятью
- •Алгоритмы замещения страниц
- •11.4.1 Алгоритм fifo (выталкивание первой пришедшей страницы)
- •11.4.2 Оптимальный алгоритм
- •11.4.3 Алгоритм lru (выталкивание дольше всего не использовавшейся страницы)
- •11.4.4 Алгоритм nfu (выталкивание редко используемой страницы)
- •11.4.5 Другие алгоритмы
- •Thrashing. Свойство локальности. Модель рабочего множества
- •Демоны пейджинга
- •Аппаратно-независимая модель памяти процесса
- •Отдельные аспекты функционирования менеджера памяти
- •Контрольные вопросы
- •Система управления вводом-выводом. Физические принципы организации ввода-вывода
- •Введение в систему управления вводом-выводом
- •Введение в физические принципы организации ввода-вывода
- •Общие сведения об архитектуре компьютера
- •Структура контроллера устройства
- •Опрос устройств
- •Прерывания
- •Прямой доступ к памяти
- •Контрольные вопросы
- •Система управления вводом-выводом. Логические принципы организации ввода-вывода
- •1) Введение в логические принципы организации ввода-вывода
- •2) Структура системы ввода-вывода
- •3) Систематизация внешних устройств и интерфейс между базовой подсистемой ввода-вывода и драйверами
- •Введение в логические принципы организации ввода-вывода
- •Структура системы ввода-вывода
- •Систематизация внешних устройств и интерфейс между базовой подсистемой ввода-вывода и драйверами
- •Функции базовой подсистемы ввода-вывода
- •Блокирующиеся, не блокирующиеся и асинхронные системные вызовы
- •Буферизация и кэширование
- •Spooling и захват устройств
- •Обработка прерываний и ошибок
- •Планирование запросов
- •Алгоритмы планирования запросов к жесткому диску
- •13.10.1 Строение жесткого диска и параметры планирования
- •Алгоритм fcfs
- •Алгоритм sstf
- •Алгоритмы сканирования (scan, c-scan, look, c-look)
- •Контрольные вопросы
- •Интерфейсы компьютерных систем
- •Классификация интерфейсов
- •Интерфейс rs-232 для порта сом
- •Интерфейс ieee 1284 для порта lpt
- •Интерфейс ps/2
- •Интерфейс usb
- •Интерфейс Firewire
- •Контрольные вопросы
- •Многопроцессорные компьютерные системы
- •1) Достоинства многопроцессорных систем
- •Достоинства многопроцессорных систем
- •Организация многопроцессорной аппаратуры
- •15.2.1 Общая шина
- •15.2.2 Матрица координатной коммутации
- •15.2.3 Организация с многопортовой памятью
- •Организация многопроцессорных операционных систем
- •15.3.1 Организация «главный-подчиненный»
- •15.3.2 Организация с раздельными мониторами
- •15.3.3 Симметричная организация
- •Контрольные вопросы
- •Требования к компьютерным системам
- •Основные требования к компьютерным системам
- •Отношение "стоимость/производительность"
- •Надежность и отказоустойчивость компьютерных систем
- •Показатели надежности компьютерных систем
- •Масштабируемость
- •Совместимость и мобильность программного обеспечения
- •Контрольные вопросы
- •Программы диагностики компьютерных систем
- •1) Программа диагностики post
- •2) Программа диагностики WatchDog
- •Программа диагностики post
- •Программа диагностики WatchDog
- •Контрольные вопросы
- •Список использованных источников
7.3.3 Переменная-замок
Возьмем некоторую переменную, доступную всем процессам, и положим ее начальное значение равным 0. Процесс может войти в критическую секцию только тогда, когда значение этой переменной-замка равно 0, одновременно изменяя ее значение на 1 – закрывая замок. При выходе из критической секции процесс сбрасывает ее значение в 0 – замок открывается.
shared int lock = 0;
while (some condition)
{
while(lock); lock = 1;
critical section
lock = 0;
remainder section
}
Данный алгоритм не удовлетворяет условию взаимоисключения.
7.3.4 Строгое чередование
Строгое чередование будет также использовать общую для обоих процессов переменную с начальным значением 0. Только теперь она будет играть не роль замка для критического участка, а явно указывать, кто может следующим войти в него. Для i-го процесса это выглядит так:
shared int turn = 0;
while (some condition)
{
while(turn != i);
critical section
turn = 1-i;
remainder section
}
Данный алгоритм удовлетворяет условию взаимоисключения, но не удовлетворяет условию прогресса.
7.3.5 Флаги готовности
В данном алгоритме процессы будут знать о состоянии друг друга в текущий момент времени.
Пусть два процесса имеют разделяемый массив флагов готовности входа процессов в критический участок
shared int ready[2] = {0, 0};
Когда i-й процесс готов войти в критическую секцию, он присваивает элементу массива ready[i] значение равное 1. После выхода из критической секции он, естественно, сбрасывает это значение в 0. Процесс не входит в критическую секцию, если другой процесс уже готов к входу в критическую секцию или находится в ней.
while (some condition)
{
ready[i] = 1;
while(ready[1-i]);
critical section
ready[i] = 0;
remainder section
}
Данный алгоритм удовлетворяет условию взаимоисключения, но не удовлетворяет условию прогресса.
7.3.6 Алгоритм Петерсона
Данный алгоритм был предложен Деккером и развит Петерсоном (1981). Он использует идеи предыдущих алгоритмов.
Пусть оба процесса имеют доступ к массиву флагов готовности и к переменной очередности. При исполнении пролога критической секции процесс Pi заявляет о своей готовности выполнить критический участок и одновременно предлагает другому процессу приступить к его выполнению. Если оба процесса подошли к прологу практически одновременно, то они оба объявят о своей готовности и предложат выполняться друг другу. При этом одно из предложений всегда последует после другого. Тем самым работу в критическом участке продолжит процесс, которому было сделано последнее предложение.
shared int ready[2] = {0, 0}; shared 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
}
Этот алгоритм удовлетворяет условиям 1-5
7.3.7 Алгоритм булочной (Bakery algorithm)
Основная идея алгоритма булочной выглядит так. Каждый вновь прибывающий клиент (процесс) получает талончик на обслуживание с номером. Клиент с наименьшим номером на талончике обслуживается следующим. К сожалению, из-за неатомарности операции вычисления следующего номера алгоритм булочной не гарантирует, что у всех процессов будут талончики с разными номерами. В случае равенства номеров на талончиках у двух или более клиентов первым обслуживается клиент с меньшим значением имени (имена можно сравнивать в лексикографическом порядке). Разделяемые структуры данных для алгоритма – это два массива
shared enum {false, true} choosing[n];
shared 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
}
Этот алгоритм удовлетворяет условиям 1-5