- •Основы построения операционных систем
- •Введение
- •1. Основные аспекты операционных систем
- •1.1. Программные системы
- •1.2. Ресурсы вычислительных систем
- •1.3. Функции операционных систем
- •1.3.1. Упрощение доступа к компьютеру
- •1.3.2. Повышение эффективности использования ресурсов
- •1.4. Классификация операционных систем
- •2. Управление файлами
- •2.1. Файлы
- •2.1.1. Имя файла
- •2.1.2. Типы файлов
- •2.1.3. Атрибуты файла
- •2.2. Функции системы управления файлами
- •2.3. Способы организации файлов
- •2.3.1. Последовательное размещение
- •2.3.2. Размещение с помощью сцепленных блоков
- •2.3.3. Организация файлов на основе таблиц размещения
- •2.3.4. Размещение с использованием таблицы индексов
- •2.3.5. Индексно-последовательное размещение
- •2.3.6. Библиотечная структура данных
- •2.4. Методы доступа к содержимому файлов
- •2.4.1. Последовательный доступ
- •2.4.2. Прямой доступ
- •2.4.3. Другие методы доступа
- •2.5. Способы организации файловой структуры
- •2.6. Манипулирование файловой структурой
- •3. Управление памятью
- •3.1. Простое непрерывное распределение
- •3.2. Распределение с несколькими непрерывными разделами
- •3.2.1. Мультипрограммирование и разбиение на разделы
- •3.2.2. Разделы с фиксированными границами
- •3.2.3. Разделы с подвижными границами
- •3.2.4. Своппинг
- •3.3. Организация виртуальной памяти
- •3.3.1. Основные концепции виртуальной памяти
- •3.3.2. Страничная организация памяти
- •3.3.3. Сегментная организация памяти
- •3.3.4. Сегментно-страничная организация памяти
- •3.4. Управление виртуальной памятью
- •3.4.1. Алгоритмы выталкивания страниц
- •3.4.2. Подкачка страниц по запросу
- •3.4.3. Подкачка страниц с опережением
- •3.4.4. Освобождение страниц
- •3.4.5. Размер страниц
- •4. Управление процессами
- •4.1. Концепции процесса
- •4.1.1. Понятие последовательного процесса
- •4.1.2. Состояния процесса
- •4.1.3. Блок управления процессом
- •4.1.4. Планирование процессов
- •4.1.5. Обработка прерываний
- •4.2. Синхронизация параллельных процессов
- •4.2.1. Параллельная обработка
- •4.2.2. Взаимное исключение
- •4.2.3. Алгоритм Деккера
- •4.2.4. Аппаратная реализация взаимного исключения
- •4.2.5. Семафоры
- •4.2.6. Мониторы
- •4.2.7. Передача сообщений
- •4.3. Тупиковые ситуации
- •4.3.1. Условия возникновения дедлоков
- •4.3.2. Основные направления исследований по проблеме тупиков
- •4.3.3. Предотвращение тупиков
- •4.3.4. Обход дедлоков
- •4.3.5. Алгоритм банкира
- •4.3.6. Распознавание дедлоков
- •4.3.7. Восстановление после тупиков
- •5. Управление процессором
- •5.1. Диспетчеризация процессов
- •5.2. Приоритеты
- •5.3. Алгоритмы диспетчеризации с одной очередью
- •5.3.1. Алгоритм fcfs (первый пришедший обслуживается первым)
- •5.3.2. Алгоритм spn (кратчайший процесс - следующий)
- •5.3.3. Алгоритм srt (по наименьшему остающемуся времени)
- •5.3.4. Алгоритм hrrn (по наибольшему относительному времени ответа)
- •5.3.5. Алгоритм циклической диспетчеризации rr
- •5.3.6. Сравнение алгоритмов диспетчеризации с одной очередью
- •5.4. Многоуровневые очереди с обратными связями
- •6. Управление устройствами
- •6.1. Общая организация ввода-вывода
- •6.2. Методы управления периферийными устройствами
- •6.3. Действия по вводу-выводу
- •6.3.1. Буферизация : прочитать и записать
- •6.3.2. Блокирование : получить и поместить
- •6.3.3. Подготовка : открыть и закрыть
- •6.4. Управление магнитными дисками
- •6.4.1. Физическая структура магнитного диска
- •6.4.2. Физическая структура формата данных дискеты
- •6.4.3. Логическая структура магнитного диска
- •6.4.4. Планирование работы с магнитными дисками
- •Заключение
- •Список используемых источников
- •Оглавление
6.3.2. Блокирование : получить и поместить
Данные, пересылаемые с помощью операции ввода-вывода, сгруппированы в блоки, или физические записи, размер которых часто диктуется физическими характеристиками устройства, такими как ширина карты или длина дорожки. Данные, используемые в программе, группируются в логические записи в соответствии с потребностями программы. Физические записи совсем не обя-
заны иметь такую же длину, что и логические записи. Если же их длины совпадают, то программирование операций ввода-вывода упрощается, поэтому длина логической записи часто выбирается в соответствии с физической.
Однако такая простота может обернуться расточительным использованием других ресурсов, особенно при хранении во внешней памяти коротких логических записей. Во-первых, это вызывает неэффективное использование памяти. Если в качестве памяти используется магнитный носитель, то на записывающей поверхности есть промежутки между последовательными записями. На магнитной ленте, где промежутки специально вводятся для того, чтобы позволить разогнаться, а затем остановиться после чтения или записи, промежуток может занимать столько места, сколько требуется для записи 800 символов. Во-вторых, требуется дополнительное время при работе драйвера устройства, которому необходимо одно и то же время для обработки операции ввода-вывода независимо от того, передает он короткую или длинную запись. Очевидно, что для данного числа логических записей стоимость передачи за единицу времени одной записи выше, чем блока, состоящего из нескольких записей. Именно это и является причиной широкого использования блокирования. Число логических записей, расположенных в одной физической, называется коэффициентом блокирования. Например, можно хранить 360-символьные записи на диске, длина физической записи которого равна 7200, при этом коэффициент блокирования будет равен 20.
Действия, выполняемые при блокировании, очень просты, и их легко понять на примере, приведенном на рис. 6.4, для которого коэффициент блокирования равен 3. Каждый буфер имеет длину, равную длине физической записи. Когда программе необходимо переписать логическую запись в свою рабочую область, она выдает команду ПОЛУЧИТЬ. При выполнении этой команды подпрограмма блокирования сначала переписывает нужную запись, а затем проверяет, была ли эта запись последней в буфере. Если да, то буфер пуст, и подпрограмма блокирования выполняет команду ПРОЧИТАТЬ, чтобы заполнить буфер новой физической записью. Если коэффициент блокирования равен n, то выполнение каждой n команды ПОЛУЧИТЬ будет вызывать команду ПРОЧИТАТЬ. Получение промежуточных n -1 записей не вызывает обращения к диску. Перепись записи из рабочей области в буфер вывода выполняется командой ПОМЕСТИТЬ. Если после этого выходной буфер оказывается заполненным, то для передачи всей физической записи на устройство будет выполнена команда ЗАПИСАТЬ. Следовательно, программы используют команды ПОЛУЧИТЬ и ПОМЕСТИТЬ в качестве элементарных операций, которые работают с такими единицами данных, как логические записи. Выполнение команд ПРОЧИТАТЬ и ЗАПИСАТЬ, работающих с физической записью, осуществляется автоматически и скрыто от программиста.
Блокирование, конечно, требует накладных расходов. Для распаковки и упаковки логических записей в физическую необходимо время. Для хранения подпрограмм блокирования, выполняющих эти действия, необходима память. Более того, при коэффициенте блокирования n буфера должны быть в n раз больше, чем при отсутствии блокирования. Конечно, фактического копирования можно избежать, если использовать указатели на логические записи.
Буферизация порождает следующие сложности :
1. Если число записей не равно целому числу, умноженному на коэффициент блокирования, то в конце входного файла будет один частично не заполненный блок. Нужно предпринять специальные меры, чтобы не обрабатывать содержимое блока за концом файла. Аналогично, специального внимания требует запись последнего блока в выходной файл.
2. Иногда неудобно иметь целый коэффициент блокирования. Например, обстоятельства могут диктовать, чтобы длина логической записи была 2000, а физической записи - 5000. В этой ситуации каждая пятая логическая запись будет перекрывать границу между двумя блоками. Обработка таких записей требует специальных действий.
3. Часто длина логической записи является не фиксированной, а переменной. Это может приводить к использованию блоков переменной длины, к переменному коэффициенту блокирования, к неиспользованному пространству в буферах и к записям, перекрывающим границу между блоками.