Классификация программного обеспечения. Введение в системное программное обеспечение.
Выбери формат для чтения
Загружаем конспект в формате doc
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Лекции №1-2
Классификация программного обеспечения.
Введение в системное программное обеспечение.
Вопросы:
1. Классификация программного обеспечения.
1.1. Прикладные программы.
1.2. Специальное программное обеспечение информационных и управляющих систем.
1.3. Системное программное обеспечение
2. Классификация системного программного обеспечения
2.1. Управляющие системные программы.
2.2. Обрабатывающие системные программы.
2.3. Базовое ПО.
2.4. Сервисное ПО.
2.5. Группы системных программ.
3. Требования к системному программному обеспечению.
3.1. Необходимость использования специальных языков для создания СПО.
Традиционно программное обеспечение подразделяют на два класса:
1. 1. системное программное обеспечение (СПО) и
2. 2. прикладное (пользовательское)программное обеспечение (ППО)
Выделим еще один класс (скорее группу) программ - специальное программное обеспечение информационных и управляющих систем.
Прикладные программы предназначены для решения функциональных задач, они выполняют обработку информации различных предметных областей.
Это самый многочисленный класс программных продуктов.
К специальному программному обеспечению информационных и управляющих систем относятся
• программы (системы) управления базами данных;
• программы управления языком интерфейса информационных систем;
• программы сбора и предварительной обработки информации (в информационно-измерительных системах, например, бортовые системы).
ПО этого класса часто оказывается скрытым в составе драйверов оборудования или поставляется в виде библиотек функционального расширения языков программирования.
Поэтому часто такие ПО относят к системному программному обеспечению.
Мы будем считать ПО такого типа отдельным классом и в курсе “СПО” рассматривать не будем.
Система управления базами данных (СУБД) - это сложная программная система накопления и последующего манипулирования данными. Каждая СУБД предоставляет интерфейс с базой данных и может располагать средствами непосредственного доступа к последней ее пользователей.
С помощью языка описания данных создаются описания элементом и записей данных, а также взаимосвязей между ними. Для выполнения операция с базой данных (например, выборка или обновление) в прикладных программах используется язык манипулирования данными. Фактическая структура физического хранения данных известна только СУБД.
Системное программное обеспечение (System Software) - совокупность программ и программных комплексов для обеспечения работы компьютера и сетей ЭВМ.
СПО управляет ресурсами компьютерной системы и позволяет пользователям программировать в более выразительных языках, чем машинных язык компьютера. Состав СПО мало зависит от характера решаемых задач пользователя.
Системное программное обеспечение предназначено для:
• создания операционной среды функционирования других программ (другими словами, для организации выполнения программ);
• автоматизации разработки (создания) новых программ;
• обеспечения надежной и эффективной работы самого компьютера и вычислительной сети;
• проведения диагностики и профилактики аппаратуры компьютера и вычислительных сетей;
• выполнения вспомогательных технологических процессов (копирование, архивирование, восстановление файлов программ и баз данных и т.д.).
Данный класс программных продуктов тесно связан с типом компьютера и является его неотъемлемой частью.
Программные продукты данного класса в основном ориентированы на квалифицированных пользователей - профессионалов в компьютерной области: системного программиста, администратора сети, прикладного программиста, оператора.
Однако знание базовой технологии работы с этим классом программных продуктов требуется и конечным пользователям персонального компьютера, которые самостоятельно не только работают со своими программами, но и выполняют обслуживание компьютера, программ и данных.
Программные продукты данного класса носят общий характер применения, независимо от специфики предметной области.
К системным программным продуктам предъявляются высокие требования по надежности и технологичности работы, удобству и эффективности использования.
Классификация системного программного обеспечения
В СПО традиционно включают
• системные управляющие и
• системные обрабатывающие программы.
Управляющие системные программы организуют корректное функционирование всех устройств системы.
Основные системные функции управляющих программ -
• управление вычислительными процессами и вычислительными комплексами и
• работа с внутренними данными ОС.
Как правило, они находятся в основной памяти. Это резидентные программы, составляющие ядро ОС. Управляющие программы, которые загружаются в память непосредственно перед выполнением, называю транзитными (transitive).
В настоящее время системные управляющие программы поставляются фирмами-разработчиками и фирмами-дистрибьюторами в виде инсталляционных пакетов операционных систем и драйверов специальных устройств.
Обрабатывающие системные программы выполняются как специальные прикладные задачи, или приложения.
Эти программы поставляются чаще в виде дистрибутивных пакетов, включающих ПО
Замечание. В пакеты системных программ помимо основных программ, допускающих реконфигурацию, входят специальные настроечные программы, называемые программами инсталляции. МЫ будем создавать и такие программы.
Другая классификация
Часто Системное ПО компьютера подразделяют на БАЗОВОЕ и СЕРВИСНОЕ программное обеспечение.
БАЗОВОЕ программное обеспечение (base software) - минимальный набор программных средств, обеспечивающих работу компьютера.
К базовому программному обеспечению компьютера относятся
• операционные системы и драйверы в составе ОС;
• интерфейсные оболочки для взаимодействия пользователя с ОС (операционные оболочки) и программные среды;
• системы управления файлами.
Операционная система - совокупность программных средств, обеспечивающая управление аппаратной частью компьютера и прикладными программами, а также их взаимодействием между собой и пользователем.
Операционная система предназначена для управления выполнением пользовательских программ, планирования и управления вычислительными ресурсами ЭВМ.
Операционная система, с одной стороны, выступает как интерфейс между аппаратурой компьютера и пользователем с его задачами, с другой стороны, предназначена для эффективного использования ресурсов вычислительной системы и организации надежных вычислений.
Системы управления файлами предназначены для организации более удобного доступа к данным, организованным как файлы.
Вместо низкоуровневого доступа к данным с указанием конкретных физических адресов система управления файлами позволяет использовать логический доступ с указанием имени файла.
Любая система управления файлами не существует сама по себе - она разработана для работы в конкретной ОС и с конкретной файловой системой. То есть можно было бы систему управления файлами отнести к ОС.
Но в связи с тем, что
1) 1) ряд ОС позволяет работать с несколькими файловыми системами (либо с одной из нескольких, либо сразу с несколькими одновременно); а дополнительную файловую систему можно установить (т.е. они самостоятельны)
2) 2) простейшие ОС могут работать и без файловых систем;
системы управления файлами выделяются в отдельную группу системных программ.
Заметим, что часто в специальной литературе системы управления файлами относят все-таки к операционным системам.
СЕРВИСНОЕ программное обеспечение - программы и программные комплексы, которые расширяют возможности базового программного обеспечения и организуют более удобную среду работы пользователя.
Это набор сервисных, дополнительно устанавливаемых программ, которые можно классифицировать по функциональному признаку следующим образом:
• драйверы специфических и специальных устройств (те, которые не поставляются в составе ОС).
• программы диагностики работоспособности компьютера;
• антивирусные программы, обеспечивающие защиту компьютера, обнаружение и восстановление зараженных файлов;
• программы обслуживания дисков, обеспечивающие проверку качества поверхности магнитного диска, контроль сохранности файловой системы на логическом и физической уровнях, сжатие дисков, создание страховых копий дисков, резервирование данных на внешних носителях и др.;
• программы архивирования данных, которые обеспечивают процесс сжатия информации в файлах с целью уменьшения объема памяти для ее хранения;
• программы обслуживания сети.
Эти программы часто называются утилитами. (Заметим, что к антивирусным средствам этот термин обычно не применяется)
Утилиты - программы, служащие для выполнения вспомогательных операций обработки данных или обслуживания компьютеров (диагностики, тестирования аппаратных и программных средств, оптимизации использования дискового пространства, восстановления разрушенной на магнитном диске информации и т.п.).
Наибольшее распространение сегодня имеют комплекты утилит: Norton Utilities - фирма Symantec; Checkit PRO Deliuxe 2.0 - фирма Touch Stone; PC Tools for Windows 2.0; программа резервного копирования HP Colorado Backup for Windows 95.
Отдельно вспомним о такой группе системного ПО как системы программирования.
Это набор специализированных программных продуктов, которые являются инструментальны средствами разработчика. Программные продукты данного класса поддерживают все этапы процесса программирования, отладки и тестирования создаваемых программ.
Система программирования включает следующие программные компоненты:
• редактор текста;
• транслятор с соответствующего языка;
• компоновщик (редактор связей);
• отладчик;
• библиотеки подпрограмм.
Заметим, что любая система программирования может работать только в соответствующей ОС, под которую она и создана, однако при этом она может позволять разрабатывать программное обеспечение и под другие ОС.
Например, одна из популярных систем программирования на языке С/С++ от фирмы Watcom для OS/2 позволяет получать программы и для самой OS/2, и для DOS, и для Windows.
Редактор текста - это программа для ввода и модификации текста.
Трансляторы предназначены для преобразования программ, написанных на языках программирования, в программы на машинном языке. Программа, подготовленная на каком-либо языке программирования, называется исходным модулем. В качестве входной информации трансляторы применяют исходные модули и формируют в результате своей работы объектные модули, являющиеся входной информацией для редактора связей. Объектный модуль содержит текст программы на машинном языке и дополнительную информацию, обеспечивающую настройку модуля по месту его загрузки и объединение этого модуля с другими независимо оттранслированными модулями в единую программу.
Трансляторы делятся на два класса: компиляторы и интерпретаторы. Компиляторы переводят весь исходный модуль на машинный язык. Интерпретатор последовательно переводит на машинный язык и выполнят операторы исходного модуля
(У интерпретаторов два основных недостатка. Первый - низкая скорость работы интерпретируемых программ.)
Преимущество интерпретатора перед компилятором состоит в том, что программа пользователя имеет одно представление - в виде текста. При компиляции одна и та же программа имеет несколько представлений - в виде текста и в виде выполняемого файла.
Компоновщик, или редактор связей - системная обрабатывающая программа, редактирующая и объединяющая объектные (ранее оттраслированные) модули в единые загрузочные, готовые к выполнению программные модули. Загрузочный модуль может быть помещен ОС в основную память и выполнен.
Отладчик позволяет управлять процессом исполнения программы, является инструментом для поиска и исправления ошибок в программе. Базовый набор функций отладчика включает:
• пошаговое выполнение программы (режим трассировки) с отображением результатов,
• остановка в заранее определенных точках,
• возможность остановки в некотором месте программы при выполнении некоторого условия;
• изображение и изменение значений переменных.
Загрузчик - системная обрабатывающая программа, объединяющая основные функции редактора связей и программы выборки в одном пункте задания. Загрузчик помещает находящиеся в его входном наборе данных объектные и загрузочные модули в оперативную память, объединяет их в единую программу, корректирует перемещаемые адресные константы с учетом фактического адреса загрузки и передает управление в точку входа созданной программы.
Средства сетевого доступа обеспечивают обработку, передачу и хранение данных в сети.
Заметим, что чаще говорят о сетевых операционных системах, которые предоставляют пользователям различные виды сетевых служб (управление файлами, электронная почта, процессы управления сетью и др.)
Ключом к использованию этих ресурсов является сервер, специальная программа на компьютере, подключенному к сети, которая принимает запросы (или команды) и посылает ответы автоматически.
Программы, предназначенные для подачи запросов серверу, называются программами-клиентами. Сервер предназначен для их обслуживания. Клиент посылает запросы пользователя на сервер, используя стандартизированный формат, называемый протоколом. Ответ сервера содержит информацию, представленную в виде файла, содержащего данные того или иного формата.
Постоянно ведется разработка все новых программ-клиентов, предлагающих более удобные способы взаимодействия с сервером.
Пример. Приложения Netscape Navigator , Internet Explorer - программы- клиенты.
Таким образом, в системном ПО мы выделили пять групп системных программ:
• операционные системы;
• интерфейсные оболочки для взаимодействия пользователя с ОС (операционная оболочка) и программные среды;
• системы управления файлами;
• системы программирования;
• утилиты;
• средства сетевого доступа.
! Обратим внимание на то, что в ходе развития компьютерных систем наиболее используемые прикладные программы могут быть перенесены на уровень системных, что позволяет использовать их в различных приложениях. Например, средства управления диалоговым взаимодействием с пользователем в системных оболочках (типа Windows).
С другой стороны, наиболее распространенные и критические по времени системные функции были частично или полностью реализованы аппаратно. Например, средства управления многопрограммным защищенным режимом и средства управления мультимедиа-устройствами в процессорах фирмы Intel.
Требования к системному программному обеспечению
Системные программы должны удовлетворять следующим требованиям:
• прозрачность работы;
• гарантированная надежность выполнения в соответствии со спецификациями;
Функциональные требования называются спецификациями
• максимальная скорость выполнения;
• минимальные затраты на хранение машинных кодов;
• поддержка стандартных средств связи с прикладными программами.
Эффективность системных программ зависит от времени их создания и надежности исполняемого кода.
Требование эффективности системных программ вызывает необходимость использования специальных языков
• машинно-ориентированных типа языка Assembler и
• высокого уровня типа C или C++.
К типам данных этих языков отнесены указатели на данные различных типов или адреса данных и программных объектов.
Работа с большинством пакетов для разработки системного программного обеспечения предполагает знание и использование ассемблера для создания модулей и ассемблерных вставок.
Использованная литература
1. 1. Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение. - СПб.: Питер, 2001.
2. 2. Пустоваров В.И. Ассемблер: программирование и анализ корректности машинных программ: - К.: Издательская группа BHV, 2000
3. 3. Лекция №1 к курсу СППО (г. Саратов)
Лекция №3
Системы управления файлами.
Структура магнитного диска. Дисковые утилиты.
Вопросы:
1. 1. Понятия файловой системы и системы управления файлами.
2. 2. Структура магнитного диска
3. 3. Процесс загрузки ОС (кратко)
4. 4. Дисковые утилиты
• для просмотра и редактирования содержимого разделов FAT (DiskEdit)
• для разбиения диска на разделы (FDISK, Partiton Magic и др)
• менеджеры загрузки
Напомним, что одной из групп системного программного обеспечения являются системы управления файлами. К рассмотрению данной группы ПО мы и приступим.
Данные на диске хранятся в виде файлов. Файл - это именованная часть диска.
Для управления файлами предназначены системы управления файлами.
Возможность иметь дело с данными, хранящимися в файлах, на логическом уровне предоставляет файловая система. Именно файловая система определяет способ организации данных на каком-либо носителе данных.
Таким образом, файловая система - это набор спецификаций и соответствующее им программное обеспечение, которые отвечают за создание, уничтожение, организацию, чтение, запись, модификацию и перемещение файловой информации, а также за управление доступом к файлам и за управлением ресурсами, которые используются файлами.
Система управления файлами является основной подсистемой в абсолютном большинстве современных ОС.
С помощью системы управления файлами
• связываются по данным все системные обрабатывающие программы;
• решаются проблемы централизованного распределения дискового пространства и управления данными;
• предоставляются возможности пользователю по выполнению операций над файлами (создание и т.п.), по обмену данными между файлами и различными устройствами, по защите файлов от несанкционированного доступа.
В некоторых ОС может быть несколько систем управления файлами, что обеспечивает им возможность работать с несколькими файловыми системами.
Постараемся различать файловую систему и систему управления файлами.
Термин “файловая система” определяет принципы доступа к данным, организованным в файлы.
Термин “система управления файлами” относится к конкретной реализации файловой системы, т.е. это комплекс программных модулей, обеспечивающих работу с файлами в конкретной ОС.
Итак, для работы с файлами, организованными в соответствии с некоторой файловой системой, для каждой ОС должна быть разработана соответствующая система управления файлами. Эта система УФ будет работать только в той ОС, для которой она создана.
Например, всем известная файловая система FAT имеет множество реализаций как система управления файлами. Так, система, разработанная для первых ПК, называется FAT12 (раньше просто FAT). Затем ее усовершенствовали для работы с жесткими дисками большего объема, эта реализация называется FAT16. Так называется и система управления файлами ОС MS-DOS. Реализация с-мы управления файлами для OS/2 (основанной на принципах FAT) называется super-FAT (предоставляет возможность поддерживать для каждого файла расширенные атрибуты). Существуют системы управления файлами, организованными в соответствии с принципами FAT, и для Windows 95/98, Windows NT и т.д.
Мы будем изучать следующие файловые системы: FAT, VFAT, FAT32, HPFS, NTFS.
Но прежде необходимо рассмотреть специальные системные соглашения о структуре магнитного диска.
Структура магнитного диска
Информация на магнитных дисках размещается и передается блоками, которые называются секторами. Секторы расположены на дорожках диска (концентрические окружности).
Современный НЖМД содержит два или три диска.
Группа дорожек одного радиуса образует цилиндр.
Современные жесткие диски могут иметь несколько десятков тысяч цилиндров, на поверхности дискеты всего 80 цилиндров (дорожек).
Каждый сектор состоит из поля данных и поля служебной информации, ограничивающей и идентифицирующей его. РЕФЕРАТ - ДОКЛАД
В большинстве ОС размер сектора выбирается равным 512 байт.
Физический адрес сектора на диске определяется триадой [c-h-s], где c - номер цилиндра (cylinder), h - номер рабочей поверхности диска (магнитной головки, head), s - номер сектора на дорожке (sector).
В самом первом секторе на винчестере (по физическому адресу [0-0-1]) располагается главный загрузочный сектор.
В главном загрузочном секторе содержится главная загрузочная запись винчестера - Master Boot Record (MBR).
Формирование главной загрузочной записи происходит во время первоначальной установки компьютера и разделения его жесткого диска на разделы (логические диски).
! MBR обычно не зависит от ОС (на платформе Intel она используется для запуска любой из ОС).
Главная загрузочная запись - MBR - состоит из
• выполняемого кода - программы начальной загрузки (внесистемный загрузчик -
non-system bootstrap)
• и таблицы разделов, или таблицы разбиения диска (Disk Partition Table).
Главный загрузочный сектор заканчивается специальной сигнатурой АА55h (2 байта).
По наличию этой сигнатуры BIOS проверяет, что первый сектор был загружен успешно.
Сигнатура выбрана не случайно. Ее успешная проверка позволяет установить, что все линии передачи данных могут передавать и нули, и единицы.
Программа начальной загрузки предназначена для анализа (сканирования) таблицы разделов, выбора активного (Bootable) раздела, считывания в ОП загрузочной записи активного раздела (Boot Record) и передачи ему управления. 446 байт.
Жесткий диск может быть разбит на несколько разделов, которые в принципе затем могут использоваться либо одной, либо различными ОС.
!Итак.
На каждом разделе может быть организована своя файловая система.
Разделы диска могут быть двух типов:
• primary (первичный, простейший);
• extended (расширенный).
На диске обязательно должен быть по крайней мере один первичный раздел. Максимальное число первичных разделов равно 4. Если их несколько, то только один может быть активным. (Остальные для систем, использующих спецификации DOS, являются невидимыми.)
На одном жестком диске может быть только один расширенный раздел, который, в свою очередь, может быть разделен на большое количество подразделов - логических дисков.
Таким образом, расширенный раздел предназначен для увеличения количества разделов (>4, позволенных форматом MBR).
! Расширенный раздел не может быть активным.
Схема разделения жесткого диска на разделы (FAT)
В MS-DOS в первичном разделе может быть сформирован только один логический диск, а в расширенном - любое их количество.
Расширенный раздел DOS содержит вторичную запись MBR (secondary MBR, SMBR), в состав которой вместо таблицы разделов (остальные нули!) входит аналогичная таблица логического диска (LDT, logical disk table). Таблица LDT содержит 2 элемента (вместо 4). Первый описывает размещение и характеристики раздела (код 1 или 4), содержащего единственный логический диск, второй - указывает на следующую запись SMBR или содержит 0 в поле кода - означает последний логический диск.
Т.е. перед каждым логическим диском расположена SMBR.
Таким образом, если в расширенном разделе DOS создано К логических дисков, то он содержит К экземпляров SMBR, связанных в список. Каждый элемент этого списка описывает соответствующий логический диск и ссылается на следующий элемент списка.
В DiskEdit посмотреть SMBR - указать физический адрес, взятый из Partiton Table. Формат тот же, поэтому по смещ 1BEh располагается LDT. Можно просмотреть в форматном просмотре as Partition Table и найти физический адрес следующего.
! для DOS - в первичном разделе может быть создан один логический диск, в расширенном - несколько.
! Итак, расширенный раздел отличается от первичного еще и тем, что перед ним расположен сектор, содержащий таблицу LDT.
Таблица разделов содержит сведения о положении и характеристиках имеющихся на винчестере разделов. Она располагается в MBR по смещению Оx1ВЕ и занимает 64 байта.
Для описания каждого раздела отводится по 16 байт (16 * 4 = 64).
Рассмотрим формат элемента таблицы разделов.
Назначение
Длина
в байтах
Замечания
Флаг активности раздела
1
0 - не активен; 128 (80h) - активен
Номер головки начала раздела
1
Номер сектора и номер цилиндра загрузочного сектора раздела
2
15 6 5 0
Кодовый идентификатор ОС (System ID)
1 или 4 - первичный раздел DOS
5 - расширенный раздел
1
Указывает на принадлежность к той или иной ОС и установке на нем соответствующей файловой системы
Номер конца головки раздела
1
Номер сектора и номер цилиндра последнего сектора раздела
Относительный номер сектора начала раздела
4
*** см. ниже
Размер раздела в секторах
4
*** Относительный номер 0 соответствует [0-0-1]. При увеличении относительного номера сектора вначале увеличивается № сектора, затем № головки, затем № дорожки Þ относительный номер сектора можно вычислить по формуле
Rsec = (Cyl*Sect*Head) + (Head*Sect) + (Sect-1) , где Sect - №сектора на дорожке, Cyl - №дорожки, Head - № головки.
Процесс загрузки ОС (кратко)
Сразу после того, как включается питание компьютера, начинает работать процедура проверки POST (Power On Self Test). В ходе проверки определяется конфигурация компьютера, проверяется работоспособность основных подсистем. Процедура POST записана в микросхеме постоянного запоминающего устройства (ПЗУ), расположенного на системной плате компьютера. Часто ее называют системным загрузчиком.
Процедура начальной загрузки вызывается как программной прерывание (BIOS INT 19h).
Затем из CMOS-памяти считываются значения текущей даты и времени, конфигурация дисковой подсистемы.
Затем процедура определяет первое готовое устройство из списка разрешенных и доступных (гибкий или жесткий диск, CD-ROM, сетевой адаптер или другое устройство) и пытается загрузить с него в ОП главную программу загрузчик.
Необходимо заметить, что почти все современные системные платы и версии программы Setup позволяют изменить порядок загрузки компьютера.
Для жесткого диска - это программа-загрузчик из MBR. Повторим, что она анализирует таблицу разбиения диска, выбирает активный (Bootable) раздел и считывает загрузочную запись активного раздела (Boot Record). Эта (system bootstrap) загрузочная запись продолжает загрузку операционной системы. Она заключается просто в считывании с
диска необходимых файлов операционной системы и передачи им управления.
Заметим, что в случае загрузки с гибкого диска - программа-загрузчик, записанная в загрузочном секторе дискеты, аналогична загрузочной записи активного раздела. Таким образом, при загрузке с дискеты опускается этап анализа таблицы разбиения и поиска активного раздела.
Для ОС DOS считываютcя и загружаются в оперативную память файлы IO.SYS и MSDOS.SYS. Оба эти файла являются скрытыми системными файлами. Для операционных систем, совместимых с MS-DOS, эти имена могут отличаться. Например, в ОС IBM PC-DOS загружаются файлы IBMIO.COM и IBMSYS.COM. Для упрощения работы этой программы оба файла размещаются в определенных постоянных местах на дискете. Это избавляет программу загрузки от необходимости искать их в справочнике дискеты.
! Системная дискета отличается от обычной тем, что на ней в определенных местах находятся два системных файла IO.SYS и MSDOS.SYS. Важно помнить, что тем не менее загрузочная запись присутствует даже на несистемной дискете.
Затем считывается файл конфигурации CONFIG.SYS, если он есть. Анализируется его содержимое и загружаются указанные в нем драйверы. После этого с дискеты считывается командный процессор COMMAND.COM и управление передается ему. Командный процессор завершает загрузку операционной системы и выполняет команды, записанные в файле AUTOEXEC.BAT. После выполнения команд файла AUTOEXEC.BAT командный процессор ожидает ввода команд пользователя. Наличие файлов CONFIG.SYS и AUTOEXEC.BAT не обязательно.
Утилиты
Утилиты, позволяющие разбить диск на разделы, обычно называются FDISK (form или fixed disk) фирмы Microsoft.
Хотя есть и другие утилиты. Например, ADM фирмы MITAC. РЕФЕРАТ- ДОКЛАД
FDISK для MS-DOS позволяет сделать только один первичный раздел и один расширенный раздел. Расширенный раздел предлагается разделить на несколько логических дисков.
FDISK для OS/2 позволяет создавать несколько первичных разделов, причем их можно выделять даже с конца свободного дискового пространства (это удобно, например, если надо исключить из работы некоторый диапазон из-за дефектов)
Утилиты для просмотра и редактирования разделов диска.
Одной из самых известных и до сих пор достаточно часто используемых утилит является Disk Editor. Предназначена для просмотра и редактирования содержимого любой области диска. С ее помощью можно просмотреть и отредактировать любую системную область диска (и таблицу разделов, и другие структуры).
В последнее время появилось большое количество утилит, использующих графический интерфейс для представления разбиения диска на разделы. Одной из самых известных и мощных программ для работы с разделами жесткого диска является Partition Magic фирмы Power Quest.
Менеджеры загрузки РЕФЕРАТ - ДОКЛАД
Менеджеры загрузки (boot-менеджеры) предоставляют возможность пользователю выбрать среди нескольких установленных на компьютере ОС нужную и передают управление загрузчику выбранной ОС.
Существует большое количество таких менеджеров. Например,
System commander (должен располагаться в активном разделе с файловой системой FAT - это нельзя признать хорошим решением в наше время).
Boot-менеджер компании IBM, входящий в состав утилит OS/2. Установка Boot-менеджера осуществляется из программы FDISK.
Boot star. Один из последних менеджеров. Наиболее мощный. (Только для подготовленных пользователей)
BootMagic - входит в состав дисковой утилиты Partition Magic (позволяет установить новые ОС, а также выбрать Ос при загрузке компьютера)
Литература
1. 1. Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение. - СПб.: Питер, 2001.
2. А.В. Фролов, Г.В. Фролов. Осторожно: компьютерные вирусы. - М.: ДИАЛОГ-МИФИ, 1996.
Процесс загрузки ОС (Лекция № 4)
Замечание. Для конкретизации изложения рассмотрен процесс загрузки компьютера, оснащённого материнской платой, на которой установлен BIOS AWARD и Intel-совместимый микропроцессор, а в качестве ОС – Windows 98.
После нажатия кнопки Power источник питания выполняет самотестирование. Если все напряжения соответствуют номинальным, источник питания спустя 0,1...0,5 с выдаёт на материнскую плату сигнал PowerGood, а специальный триггер, вырабатывающий сигнал RESET, получив его, снимает сигнал сброса с соответствующего входа микропроцессора. Следует помнить, что сигнал RESET устанавливает сегментные регистры и указатель команд в следующие состояния (не используемые в реальном режиме биты не указываются): CS = FFFFh; IP = 0; DS = SS = ES = 0 и сбрасывает все биты управляющих регистров, а также обнуляет регистры арифметическо-логического устройства. Во время действия сигнала RESET все тристабильные буферные схемы переходят в высокоимпендансное состояние. С момента снятия этого сигнала микропроцессор начинает работу в реальном режиме и в течение примерно 7 циклов синхронизации приступает к выполнению инструкции, считываемой из ROM BIOS по адресу FFFF:0000. Размер области ROM BIOS от этого адреса до конца равен 16 байт, и в ней по указанному адресу записана команда перехода на реально исполняемый код BIOS. В этот момент процессор не может выполнять никакую другую последовательность команд, поскольку нигде в любой из областей памяти, кроме BIOS, её просто не существует. Последовательно выполняя команды этого кода, процессор реализует функцию начального самотестирования POST (Power-On Self Test). На данном этапе тестируются процессор, память и системные средства ввода/вывода, а также производится конфигурирование программно-управляемых аппаратных средств материнской платы. Часть конфигурирования выполняется однозначно, другая часть может определяться положением джамперов (перемычек или переключателей) системной платы, но ряд параметров возможно (а иногда и необходимо) устанавливать пользователю. Для этих целей служит утилита Setup, встроенная в код BIOS. Параметры конфигурирования, установленные с помощью этой утилиты, запоминаются в энергонезависимой памяти, питаемой от миниатюрной батарейки, размещённой на материнской плате. Часть из них всегда хранится в традиционной CMOS Memory, объединённой с часами и календарём RTC (Real Time Clock). Другая часть (в зависимости от фирмы-производителя) может помещаться и в энергонезависимую (например, флэш) память (NVRAM). Кроме этой части статически определяемых параметров, имеется область энергонезависимой памяти ESCD для поддержки динамического конфигурирования системы Plug and Play, которая может автоматически обновляться при каждой перезагрузке компьютера.
Утилита BIOS Setup имеет интерфейс в виде меню или отдельных окон, иногда даже с поддержкой мыши. Для входа в Setup во время выполнения POST появляется предложение нажать клавишу DEL. В других типах BIOS (в отличие от указанного выше) для этого может использоваться сочетание клавиш Ctrl+Alt+Esc, Ctrl+Esc, клавиша Esc, бывают и другие варианты (например, нажать клавишу F12 в те секунды, когда в правом верхнем углу экрана виден прямоугольник). В последнее время появились версии BIOS, в которых вход в Setup осуществляется нажатием клавиши F2, однако чаще клавиши F1 или F2 используются для вызова меню Setup, если POST обнаружит ошибку оборудования, которая может быть устранена сменой начальных установок. Для некоторых BIOS удержание клавиши INS во время POST позволяет установить настройки по умолчанию, отменяя все “ускорители”. Это бывает удобно для восстановления работоспособности компьютера после попыток его неудачного “разгона”. Выбранные установки сохраняются при выходе из Setup (по желанию пользователя) и начинают действовать с момента следующего выполнения POST.
При выполнении каждой подпрограммы POST записывает её сигнатуру (код) в диагностический регистр. Этот регистр физически должен располагаться на специальной плате диагностики (сигнатурном анализаторе, или так называемой POST-карте), устанавливаемой в слот системной шины при анализе неисправности. Такие POST-карты бывают в двух исполнениях: для шин ISA и PCI. На данной плате обязательно устанавливается двухразрядный семисегментный индикатор, высвечивающий содержимое регистра диагностики. Возможно также наличие двоичного индикатора адреса. В пространстве ввода/вывода регистр занимает один адрес, зависящий от архитектуры РС (версии BIOS). Например, для ISA, EISA – 80h; ISA Compaq – 84h; ISA-PS/2 – 90h; для некоторых моделей EISA – 300h; MCA-PS/2 – 680h. Имея в наличии подобный сигнатурный анализатор по индицируемым кодам, можно определить, на каком этапе остановился POST. Зная специфическую таблицу сигнатур для каждой версии BIOS, легко определить неисправность системной платы.
Перечислим в порядке выполнения основные тесты POST для BIOS AWARD V4.51 и их сигнатуры, высвечиваемые POST-картой на индикаторе регистра диагностики. Следует отметить, что далеко не все перечисленные ниже коды видны на индикаторе в процессе нормальной загрузки компьютера: некоторые высвечиваются лишь в том случае, если POST останавливается. Происходит это потому, что многие подпрограммы POST исполняются настолько быстро, что человеческий глаз не в состоянии уследить за индицируемым состоянием регистра диагностики, а некоторые коды появляются только при обнаружении неисправности. Для указанной версии BIOS первой исполняемой сигнатурой в последовательности POST является C0:
1. C0 – осуществляется программирование регистров микросхемы Host Bridge для установки следующих режимов:
• запрещается Internal и External Cache, а также операции с кэш-памятью;
• перед запретом Internal Cache очищается;
• Shadow RAM запрещается, вследствие чего происходит направление непосредственно к ROM циклов обращения к адресам расположения System BIOS. Эта процедура должна соответствовать конкретному чипсету;
• далее программируются РIIХ ресурсы: контроллер DMA, контроллер прерываний, таймер, блок RTC. При этом контроллер DMA переводится в пассивный режим.
1. 1. C1 – с помощью последовательных циклов запись/чтение определяется тип памяти, суммарный объём и размещение по строкам. И в соответствии с полученной информацией настраивается DRAM-контроллер. На этом же этапе процессор должен быть переключён в Protected Mode (защищённый режим).
2. 2. C3 – проверяются первые 256 кб памяти, которые в дальнейшем будут использованы как транзитный буфер, а также осуществляется распаковка и копирование System BIOS в DRAM.
3. 3. C6 – по специальному алгоритму определяется наличие, тип и параметры External Cache.
4. 4. CF – определяется тип процессора, а результат помещается в CMOS. Если по каким-либо причинам определение типа процессора закончилось неудачно, такая ошибка становится фатальной и система, а соответственно и выполнение POST, останавливается.
5. 5. 05 – осуществляется проверка и инициализация контроллера клавиатуры, однако на данный момент приём кодов нажатых клавиш ещё не возможен.
6. 6. 07 – проверяется функционирование CMOS и напряжение питания её батареи. Если фиксируется ошибка питания, выполнение POST не останавливается, однако BIOS запоминает этот факт. Ошибка при контрольной записи/чтении CMOS считается фатальной и POST останавливается на коде О7.
7. 7. BE – программируются конфигурационные регистры Host Bridge и PIIX значениями, взятыми из BIOS.
8. 8. 0A – генерируется таблица векторов прерываний, а также производится первичная настройка подсистемы управления питанием.
9. 9. 0B – проверяется контрольная сумма блока ячеек CMOS, а также, если BIOS поддерживает PnP, выполняется сканирование устройств ISA PnP и инициализация их параметров. Для PCI-устройств устанавливаются основные (стандартные) поля в блоке конфигурационных регистров.
10. 10. 0C – инициализируется блок переменных BIOS.
11. 11. 0D/0E – определяется наличие видеоадаптера путём проверки наличия сигнатуры 55АА по адресу начала Video BIOS (C0000:0000h). Если Video BIOS обнаружен и его контрольная сумма правильная, включается процедура инициализации видеоадаптера. С этого момента появляется изображение на экране монитора, высвечивается заставка видеоадаптера, инициализируется клавиатура. Далее по ходу POST тестируется контроллер DMA и контроллер прерываний.
12. 12. 30/31 – определяется объём Base Memory и External Memory, и с этого момента начинается отображаемый на экране тест оперативной памяти.
13. 13. 3D – инициализируется PS/2 mouse.
14. 14. 41 – производится инициализация подсистемы гибких дисков.
15. 15. 42 – выполняется программный сброс контроллера жёстких дисков. Если в Setup указан режим AUTO, производится детектирование устройств IDE, в противном случае параметры устройств берутся из CMOS. В соответствии с конфигурацией системы размаскируются прерывания IRQ14 и IRQ15.
16. 16. 45 – инициализируется сопроцессор FPU.
17. 17. 4E – настраивается клавиатура USB. На данном этапе становится возможен вход в CMOS Setup по нажатию клавиши DEL.
18. 18. 4F – осуществляется запрос на ввод пароля, если это предусмотрено установками CMOS Setup.
19. 19. 52 – производится поиск и инициализация ПЗУ дополнительных BIOS, а также картируется каждая из линий запросов прерывания PCI.
20. 20. 60 – если в Setup включён данный режим, устанавливается антивирусная защита BOOT Sector.
21. 21. 62 – осуществляется автоматический переход на зимнее или летнее время, для клавиатуры настраиваются состояние NumLock и режим автоповтора.
22. 22. 63 – корректируются блоки ESCD (только для PNP BIOS) и производится очистка ОЗУ.
23. 23. B0 – это состояние записывается в регистр сигнатурного анализатора только в случае наличия ошибок, например, при тесте Extended Memory. Если при работе в Protected Mode сбои отсутствуют, то POST не включает эту ветвь. При наличии страничных нарушений и других исключительных ситуаций управление будет передано на эту процедуру, она выведет код B0 в порт 80(84)h и остановится.
24. 24. FF – последний этап, на котором подводится итог тестирования – успешная инициализация аппаратных средств компьютера сопровождается одиночным звуковым сигналом, после чего осуществляется передача управления загрузчику BOOT-сектора.
Порядок поиска загрузочного диска на компьютерах x86 (FDD, жёсткие диски IDE и SCSI, устройства CD-ROM) задаёт BIOS. Современные BIOS позволяют переконфигурировать этот порядок, называемый последовательностью загрузки (boot sequence). Если при этом дисковод A: включён в последовательность загрузки первым и в нём находится дискета, BIOS попытается использовать эту дискету в качестве загрузочной. Если дискеты в дисководе нет, BIOS проверяет первый жёсткий диск, который к этому времени уже инициализировался, и выполняет команду INT19h. Процедура обработки прерывания INT19h для загрузки BOOT-сектора должна прочитать сектор с координатами Cylinder:0 Head:0 Sector:1 и поместить его по адресу 0000:7С00h, после чего осуществляется проверка, является ли диск загрузочным. Сектор MBR (Master Boot Record – главная загрузочная запись) на жёстком диске находится по тому же физическому адресу, что и BOOT-сектор на дискете (цилиндр 0, сторона 0, сектор 1).
Если при проверке загрузочный сектор не обнаружен, т.е. два последних байта этого сектора (его сигнатура) не равны 55ААh, вызывается прерывание INT18h. При этом на экране появляется предупреждающее сообщение, зависящее от производителя BIOS компьютера.
Сектор MBR записывается на жёсткий диск программой FDISK, поэтому если HDD был отформатирован на низком уровне, во всех его секторах находятся нули и, естественно, первый сектор не может содержать необходимой сигнатуры. Отсюда следует, что сообщения об ошибке будут выдаваться, если диск не разбивался на разделы (логические диски). Главная загрузочная запись обычно не зависит от операционной системы (на платформах Intel она используется для запуска любой из операционных систем). Код, содержащийся в главной загрузочной записи, сканирует таблицу разделов (partition table) в поисках активного системного раздела. Если в таблице разделов активный раздел не обнаружен или хотя бы один раздел содержит неправильную метку, а также если несколько разделов помечены как активные, выдаётся соответствующее сообщение об ошибке.
Код главной загрузочной записи определяет расположение загрузочного (активного) раздела, считывая таблицу разделов, расположенную в конце MBR. Если активный раздел найден, производится чтение его загрузочного сектора и определяется, является ли он действительно загрузочным. Попытка чтения может осуществляться до пяти раз, в противном случае выдаётся сообщение об ошибке, и система останавливается. Если загрузочный сектор найден, Master Boot Record передаёт управление коду загрузочного сектора в активном (загрузочном) разделе, который содержит загрузочную программу и таблицу параметров диска. Загрузочный сектор раздела просматривает блок параметров BIOS в поисках расположения корневого каталога, а затем копирует из него в память системный файл IO.SYS (который, по сути, является частью DOS и включает в себя функции файла MSDOS.SYS из предыдущей версии DOS) и передаёт ему управление. IO.SYS загружает драйверы некоторых устройств и выполняет ряд операций, связанных с загрузкой. Сначала IO.SYS считывает файл MSDOS.SYS. Нужно помнить, что этот файл не похож на одноимённые файлы из предыдущих версий DOS. В Windows 98 MSDOS.SYS является текстовым файлом, содержащим опции процедуры запуска. Затем загружается и отображается файл LOGO.SYS (стартовая заставка).
На следующем этапе IO.SYS считывает информацию из системного реестра, а также исполняет файлы CONFIG.SYS и AUTOEXEC.BAT (при их наличии в корневом каталоге). При этом загружаются драйверы устройств, работающих в реальном режиме работы процессора, выполняются некоторые системные установки. Ниже приводится неполный список возможных драйверов и программ, загружаемых на данном этапе.
DBLSPACE.BIN или DRVSPACE.BIN. Драйвер сжатия дисков.
HIMEM.SYS. Администратор верхней памяти в реальном режиме работы процессора.
IFSHLP.SYS. Оказывает содействие при загрузке VFAT и прочих файловых систем, поддерживающих Windows 98.
SETVER.EXE. Утилита, подменяющая номер версии операционной системы. Существуют программы, ориентированные на более ранние версии операционных систем и отказывающиеся функционировать под Windows 98. Благодаря SETVER.EXE подобной программе возвращается именно тот номер версии DOS, который её устраивает.
DOS=HIGH. Загружает DOS в область памяти HMA. Если в файле конфигурации CONFIG.SYS содержится инструкция для загрузки администратора отображаемой памяти EMM386.EXE, в эту строку добавляется параметр UMB, позволяющий EMM386.EXE использовать верхнюю память. Нужно помнить, что IO.SYS не загружает администратор EMM386.EXE автоматически. Поэтому, если планируется его использование, в файл CONFIG.SYS необходимо вставлять строку DEVICE=EMM386.EXE.
FILES=30. В этой строке определяется число создаваемых дескрипторов файла. Windows 98 не использует это параметр; он включён для совместимости с предыдущими версиями программ.
LASTDRIVE=Z. Здесь определяется последняя буква для логических дисков. Эта опция также введена для обратной совместимости и не используется Windows 98.
BUFFER=30. Определяет число создаваемых файловых буферов. Буферы файлов используются приложениями при вызовах подпрограмм ввода/вывода из файла IO.SYS.
STACKS=9,256. Этой записью определяется число кадров стека и размер каждого кадра.
FCBS=4. Данная команда задает число блоков управления файлом. Оба последних параметра применяются только для обратной совместимости.
На последнем этапе загружается и запускается файл WIN.COM. Он обращается к файлу VMM32.VXD. Если в компьютере установлен достаточный объём ОЗУ, то этот файл загружается в память, в противном случае организуется доступ к этому файлу на жёстком диске, что, естественно, увеличивает время загрузки. Загрузчик драйверов реального режима сравнивает копии виртуальных драйверов устройств (VxD) в папке Windows/System/VMM32 и файле VMM32.VXD. Если виртуальный драйвер устройства существует и в папке и в файле, копия виртуального драйвера “помечается” в файле VMM32.VXD как незагружаемая. Виртуальные драйверы устройств, не загруженные с помощью файла VMM32.VXD, загружаются из раздела [386 Enh] файла SYSTEM.INI папки Windows. Во время описанного процесса загрузчик драйверов виртуальных устройств реального режима постоянно проверяет правильность загрузки всех необходимых виртуальных драйверов устройств, а при появлении ошибки при загрузке нужного драйвера он пытается выполнить эту операцию ещё раз. После загрузки виртуальные драйверы устройств реального режима инициализируются, затем файл VMM32.VXD переключает процессор в защищённый режим, и начинается процесс инициализации виртуальных драйверов устройств согласно их параметру InitDevice. Процедура загрузки ОС заканчивается загрузкой файлов KRNL32.DLL, GDI.EXE, USER.EXE и EXPLORER.EXE. Если компьютер подключён к сети, то загружается сетевое окружение. Пользователю предлагается ввести имя и пароль для входа в сеть. Затем из системного реестра загружается конфигурация с параметрами, установленными по умолчанию. На последней фазе загрузке операционной системы производится обработка содержимого папки Startup (Автозагрузка) и запускаются указанные в ней программы. После этого ОС готова к работе.
Существует несколько стандартных способов, позволяющих видоизменить описанную выше процедуру запуска:
• при исполнении POST на этапе проверки памяти и инициализации загрузочных устройств нажать кнопку клавиатуры DEL для входа в программу Setup;
• вставить перед окончанием теста оборудования загрузочный диск (например, аварийный диск Windows 98);
• внести исправления в файл CONFIG.SYS;
• отредактировать файл AUTOEXEC.BAT.
Помимо них, Windows 98 предоставляет ряд менее очевидных методов для выполнения этой же задачи:
после завершения теста оборудования клавишей F8 вызвать меню Startup;
отредактировать инструкции запуска системы в файле MSDOS.SYS;
использовать один из перечисленных методов для “остановки” в режиме DOS, после чего запустить Windows из командной строки с набором необходимых ключей;
изменить содержимое папки Startup.
Источник
1. 1. Евгений КРЕЙДИЧ (старший инженер лаборатории перспективных исследований)
Лекция №5
Системы управления файлами.
Файловая система FAT. Файловые системы VFAT и FAT32.
Вопросы:
1. 1. Области логического диска
2. 2. Загрузочный сектор
3. 3. Таблица размещения файлов
4. 4. Корневой каталог
5. 5. Файловая система VFAT
6. 6. Файловая система FAT32
В файловой системе FAT дисковое пространство любого логического диска делится на две области:
• системную область и
• область данных.
Системная область создается и инициализируется при форматировании, а впоследствии обновляется при манипулировании файловой структурой.
Системная область состоит из следующих компонентов:
• загрузочного сектора, содержащего загрузочную запись (boot record);
• зарезервированных секторов (их может и не быть);
• таблицы размещения файлов (FAT, File Allocation Table);
• корневого каталога (Root directory, ROOT).
Эти компоненты расположены на диске друг за другом.
Область данных содержит файлы каталоги, подчиненные корневому.
В отличие от системной области, область данных доступна через пользовательский интерфейс DOS.
Загрузочный сектор
! Формирование загрузочной записи происходит при форматировании (например, FORMAT). Формат загрузочного сектора зависит от ОС и даже от версии.
Загрузочный сектор является самым первым на логическом диске. Он содержит загрузочную запись (boot record).
Загрузочная запись состоит из двух частей:
• блока параметров диска (disk parameter block) - часто наз. блоком параметров BIOS (BPB) или Extended BPB (для более старших версий ОС)
• программы начальной загрузки ОС (system bootstrap).
Первые два байта загрузочной записи - команда безусловного перехода на системный загрузчик - JMP 3Eh. В третьем байте - NOP (90h).
Далее - 8 байтовый системный идентификатор (информация о фирме-разработчике и версии ОС). Обратим внимание - ОС не используется.
Затем следует блок параметров диска, а после него - загрузчик ОС.
Блок параметров диска содержит следующую информацию
• размер сектора,
• число секторов в кластере,
• число зарезервированных секторов,
• количество копий FAT,
• максимальное количество элементов ROOT,
• количество секторов в таблице FAT,
• число секторов на дорожке,
• метку тома,
• имя файловой системы
• и другие параметры (байт-описатель среды по смещ 0Ah = F8H- ж.д. любой емкости; F0-дискета 1.44, 3.5’’).
Загрузочные записи различных операционных систем отличаются обычно структурой блока параметров. В некоторых есть и дополнительные поля.
Подробно мы познакомимся с загрузочной записью на лабораторных работах.
Между загрузочным сектором и FAT могут находиться зарезервированные секторы, которые являются служебными для файловой системы или не используются. Количество зарезервированных секторов определено в BPB. (В форматном просмотре - Reserved sectors at beginning - если =1, то это MBR)
Для просмотра и редактирования, а также сохранения и восстановления загрузочной записи можно использовать утилиту Disk Editor.
Таблица размещения файлов
Таблица размещения файлов (File Allocation Table - FAT) по сути является картой области данных.
Область данных разбивают на так называемые кластеры. Кластер - это один или несколько смежных секторов области данных. С другой стороны, кластер - это минимальная адресуемая единица дисковой памяти, выделяемая файлу. Т.е. файл или каталог занимает целое число кластеров. Для создания и записи на диск нового файла операционная система отводит для него несколько свободных кластеров диска. Эти кластеры не обязательно должны следовать друг за другом. Для каждого файла хранится список всех номеров кластеров, которые предоставлены данному файлу.
На дискетах кластер занимает один или два сектора, а на жестких дисках - в зависимости от объема раздела:
для разделов емкостью 16-127 Мбайт - 4 сектора в кластере (размер кластера - 2 Кбайта);
для разделов емкостью 128-255 Мбайт - 8 секторов в кластере (4 Кб);
для разделов емкостью 256-511 Мбайт - 16 секторов в кластере (8 Кб);
для разделов емкостью 512-1023 Мбайт - 32 сектора в кластере (16 Кб);
для разделов емкостью 1024-2047 Мбайт - 64 сектора в кластере (32 Кб).
Разбиение области данных на кластеры вместо использования секторов позволяет:
• уменьшить размер таблицы FAT;
• уменьшить фрагментацию файлов;
• сокращается длина цепочек файла Þ ускоряется доступ к файлу.
Однако слишком большой размер кластера ведет к неэффективному использованию области данных, особенно в случае большого количества маленьких файлов (ведь на каждый файл теряется в среднем полкластера).
В современных файловых системах (FAT32, HPFS, NTFS) эта проблема решается за счет ограничения размера кластера (максимум 4 Кбайта)
Каждый элемент таблицы FAT (12, 16 или 32 бит) соответствует одному кластеру диска и характеризует его состояние: свободен, занят или является сбойным кластером (bad cluster).
• Если кластер распределен какому-либо файлу (т.е., занят), то соответствующий элемент FAT содержит номер следующего кластера файла;
• последний кластер файла отмечается числом в диапазоне FF8h - FFFh (FFF8h - FFFFh);
• если кластер является свободным, он содержит нулевое значение 000h (0000h);
• кластер, непригодный для использования (сбойный), отмечается числом FF7h (FFF7h).
Таким образом, в таблице FAT кластеры, принадлежащие одному файлу связываются в цепочки.
Первый элемент FAT описывает среду загрузочного сектора. Его первый байт совпадает с байтом-описателем среды носителя данных (смещение 0Ah - см. табл.4) и равен 0F0h для гибкого магнитного 3,5 дм. диска или 0F8h для жесткого диска. Следующие 5 байт (7 байт) для 12-разрядного (16-разрядного) формата содержат значение 0FFh.
Таблица размещения файлов хранится сразу после загрузочной записи логического диска, ее точное расположение описано в специальном поле в загрузочном секторе.
Она хранится в двух идентичных экземплярах, которые следуют друг за другом. При разрушении первой копии таблицы используется вторая.
В связи с тем, что FAT используется очень интенсивно при доступе к диску, она обычно загружается в ОП (в буфера ввода/вывода или кэш) и остается там настолько долго, насколько это возможно.
Основной недостаток FAT - медленная работа с файлами. При создании файла работает правило - выделяется первый свободный кластер. Это ведет к фрагментации диска и сложным цепочкам файлов. Отсюда следует замедление работы с файлами.
Для просмотра и редактирования таблицы FAT можно использовать утилиту Disk Editor.
Корневой каталог ROOT
Подробная информация о самом файле хранится в другой структуре, которая называется корневым каталогом. Каждый логический диск имеет свой корневой каталог (ROOT, англ. - корень).
Корневой каталог описывает файлы и другие каталоги. Элементом каталога является дескриптор (описатель) файла.
Дескриптор каждого файла и каталога включает его
• имя (8 байт)
• расширение (3)
• дату создания или последней модификации (2)
• время создания или последней модификации (2)
• атрибуты (1) (архивный, атрибут каталога, атрибут тома, системный, скрытый, только для чтения)
• длину файла (для каталога - 0 ) (4)
• зарезервированное поле, которое не используется (10)
• номер первого кластера в цепочке кластеров, отведенных файлу или каталогу; получив этот номер, операционная система, обращаясь к таблице FAT, узнает и все остальные номера кластеров файла (2 байта).
Итак, пользователь запускает файл на выполнение. Операционная система ищет файл с нужным именем, просматривая описания файлов в текущем каталоге. Когда найден требуемый элемент в текущем каталоге, операционная система считывает номер первого кластера данного файла, а затем по таблице FAT определяет остальные номера кластеров. Данные из этих кластеров считываются в оперативную память, объединяясь в один непрерывный участок. Операционная система передает управление файлу, и программа начинает работать.
Для просмотра и редактирования корневого каталога ROOT можно также использовать утилиту Disk Editor.
Замечание. В последнее время объемы дисковых механизмов намного превысили максимально допустимый размер, приемлемый для FAT, - 8,4 Гбайт. Этот предел объясняется максимально возможными значениями в адресе сектора, для которого отводится всего 3 байта. Поэтому в подавляющем большинстве случаев при работе в среде Windows-систем FAT не используется (используют либо FAT32, либо NTFS).
Корпорация Microsoft рекомендует использовать FAT для разделов объемом 256 Мбайт и менее.
Файловая система VFAT
Файловая система VFAT (виртуальная FAT) впервые появилась в Windows for Workgroups 3.11 и была предназначена для файлового ввода/вывода в защищенном режиме.
Используется эта файловая система в Windows 95. Поддерживается она также и в Windows NT 4.
VFAT - это «родная» 32-разрядная файловая система Windows95. Ее контролирует драйвер VFAT.VXD.
Управляет различными файловыми системами и приложениями диспетчер устанавливаемых файловых систем - Installable File Systems Manager.
! VFAT использует 32-разрядный код для всех файловых операций, может использовать 32-разрядные драйверы защищенного режима.
НО, элементы таблицы размещения файлов остаются 12- или 16-разрядными, поэтому на диске используется та же структура данных (FAT). Т.е. формат таблицы VFAT такой же, как и формат FAT.
VFAT наряду с именами «8.3» поддерживает длинные имена файлов. (Часто говорят, что VFAT - это FAT с поддержкой длинных имен).
Существует специальный механизм преобразования длинных имен в короткие и наоборот.
Вы помните, что длина имени для DOS подчиняется правилу “8.3”, то есть, длина имени не должна превышать 8 символов, а расширения - 3. Главной особенностью файловой системы Windows 95 для пользователя является то, что максимальная длина имени файла в Windows 95 может достигать 256 символов, включая пробелы. Ограничением длины имени файла служит путь к файлу: суммарная длина пути и имени файла не может превышать 260 символов.
При создании файла в Windows95 ему присваивается сразу два имени - длинное и короткое (8.3). Короткое имя образуется из длинного путем удаления из него пробелов и символов / : * ? “ “< > I . Для восьмибуквенного имени файла используются первые шесть оставшихся символов длинного имени, символ “~“ (тильда) и порядковый номер. Для трехбуквенного расширения используются первые три символа после последней точки в длинном имени файла.
Например, короткие имена для файлов (в следующем порядке)
Article about Windows 95.DOS
Next article about Windows 95.DOS
Article about Windows NT.DOS
Microsoft office.HTML
Microsoft Windows. HTML
будут выглядеть так
ARTICL~1.DOC
NEXTAR~1.DOC
ARTICL~2.DOC
MICROS~1.HTM
MICROS~2.HTM
При этом в структуре ROOT, наряду с обычным дескриптором (называемым алиасным) для файла или каталога создаются дескрипторы специального вида, в которых и хранится длинное имя. Для специальных дескрипторов установлены атрибуты Read Only (только для чтения), System (системный), Hidden (скрытый), Volume Label (Метка Тома). Количество специальных дескрипторов зависит от длины имени.
Специальный дескриптор ссылается на кластер с номером О. Настоящий номер первого кластера, распределенного файлу или каталогу, находится в стандартном (алиасном) дескрипторе, расположенном непосредственно за специальными.
! Для томов VFAT нельзя пользоваться никакими утилитами, кроме утилит «понимающих» VFAT
Основной недостаток VFAT - большие потери на кластеризацию при больших размерах логического диска и ограничения на сам размер логического диска.
Файловая система FAT32
Это новая реализация идеи использования таблицы FAT.
FAT32 - это полностью самостоятельная 32-разрядная файловая система.
Впервые использовалась в Windows OSR2 (OEM Service Release 2).
В настоящее время FAT32 используется в Windows 98 и Windows ME.
Она содержит многочисленные усовершенствования и дополнения по сравнению с предыдущими реализациями FAT.
1. 1. Намного эффективнее расходует дисковое пространство за счет того, что использует кластеры меньшего размера (4 Кб) - подсчитано, что экономится до 15%.
2. 2. Имеет расширенную загрузочную запись, которая позволяет создавать копии критических структур данных Þ повышает устойчивость диска к нарушениям структур диска
3. 3. Может использовать резервную копию FAT вместо стандартной.
4. 4. Может перемещать корневой каталог, другими словами, корневой каталог может находиться в произвольном месте Þ снимает ограничение на размер корневого каталога (512 элементов, т.к. ROOT должен был занимать один кластер).
5. 5. Усовершенствована структура корневого каталога
Появились дополнительные поля:
• время создания (2)
• дата создания (2)
• дата последнего доступа (2)
• старшее слово номера начального кластера
• младшее слово номера начального кластера
• контрольная сумма
По-прежнему для длинного имени файла используется несколько дескрипторов.
! Для томов FAT32 нельзя пользоваться никакими утилитами, кроме утилит «понимающих» FAT32
Лекция №6
Системы управления файлами.
Файловая система HPFS
Вопросы:
1. 1. Файловая система HPFS
• Основные особенности HPFS
• Структура раздела HPFS
• Принцип размещения файлов
• Принципы хранения информации о расположении файлов
• Структура и размещение каталогов
• Надежность хранения данных в HPFS
2. 2. Система управления файлами HPFS.IFS
3. 3. Система управления файлами HPFS386.1FS
4. 4. Файловая система JFS
HPFS (High Performance File System) — высокопроизводительная файловая система.
HPFS впервые появилась в OS/2 1.2 и LAN Manager. (Кстати, HPFS была первой файловой системой, поддерживающей длинные имена.)
Перечислим основные особенности HPFS.
• Главное отличие - базовые принципы размещения файлов на диске и принципы хранения информации о местоположении файлов. Благодаря этим принципам HPFS имеет высокую производительность и отказоустойчивость, является надежной файловой системой.
• Дисковое пространство в HPFS выделяется не кластерами (как в FAT), а блоками. В современной реализации размер блока взят равным одному сектору, но в принципе он мог бы быть и иного размера. (По сути дела, блок — это и есть кластер, только кластер всегда равен одному сектору). Размещение файлов в таких небольших блоках позволяет более эффективно использовать пространство диска, так как непроизводительные потери свободного места составляют в среднем всего (полсектора) 256 байт на каждый файл. Вспомним, что чем больше размер кластера, тем больше места на диске расходуется напрасно.
• Система HPFS стремится расположить файл в смежных блоках, или, если такой возможности нет, разместить его на диске таким образом, чтобы экстенты (фрагменты) файла физически были как можно ближе друг к другу. Такой подход существенно уменьшает время позиционирования головок записи/чтения жесткого диска и время ожидания (задержка между установкой головки чтения/записи на нужную дорожку). Напомним, что в FAT файлу просто выделяется первый свободный кластер.
Экстенты (extent) — фрагменты файла, располагающиеся в смежных секторах диска. Файл имеет по крайней мере один экстент, если он не фрагментирован, а в противном случае — несколько экстентов.
• Используется метод сбалансированных двоичных деревьев для хранения и поиска информации о местонахождении файлов (каталоги хранятся в центре диска, кроме того, предусмотрена автоматическая сортировка каталогов), что существенно повышает производительность HPFS (в сравнении с FAT).
• В HPFS предусмотрены специальные расширенные атрибуты файлов, позволяющие управлять доступом к файлам и каталогам.
Расширенные атрибуты (extended attributes, EAs) позволяют хранить дополнительную информацию о файле. Например, каждому файлу может быть сопоставлено его уникальное графическое изображение (значок), описание файла, комментарий, сведения о владельце файла и т. д.
Cтруктура раздела HPFS
В начале раздела с установленной HPFS расположено три управляющих блока:
• загрузочный блок (boot block),
• дополнительный блок (super block) и
• запасной (резервный) блок (spare block).
Они занимают 18 секторов.
Все остальное дисковое пространство в HPFS разбито на части из смежных секторов - полосы (band - полоса, лента). Каждая полоса занимает на диске 8 Мбайт.
Каждая полоса и имеет свою собственную битовую карту распределения секторов. Битовая карта показывает, какие секторы данной полосы заняты, а какие — свободны. Каждому сектору полосы данных соответствует один бит в ее битовой карте. Если бит = 1, то сектор занят, если 0 - свободен.
Битовые карты двух полос располагаются на диске рядом, так же располагаются и сами полосы. То есть последовательность полос и карт выглядит как на рис.
! Обратим внимание на то, что такое расположение “полос” позволяет непрерывно разместить на жестком диске файл размером до 16 Мбайт и в то же время не удалять от самих файлов информацию об их местонахождении.
!Сравним с FAT. Там на весь диск только одна “битовая карта” (таблица FAT). И для работы с ней приходится перемещать головки чтения/записи в среднем через половину диска.
Именно для того, чтобы сократить время позиционирования головок чтения/записи жесткого диска в HPFS диск разбит на полосы.
Рассмотрим управляющие блоки.
Загрузочный блок (boot block)
Содержит имя тома, его серийный номер, блок параметров BIOS и программу начальной загрузки.
Программа начальной загрузки находит файл OS2LDR, считывает его в память и передает управление этой программе загрузки ОС, которая, в свою очередь, загружает с диска в память ядро OS/2 - OS2KRNL. И уже OS2KRIML с помощью сведений из файла CONFIG.SYS загружает в память все остальные необходимые программные модули и блоки данных.
Загрузочный блок располагается в секторах с 0 по 15.
Супер Блок (super block)
Содержит
• указатель на список битовых карт (bitmap block list). В этом списке перечислены все блоки на диске, в которых расположены битовые карты, используемые для обнаружения свободных секторов;
• указатель на список дефектных блоков (bad block list). Когда система обнаруживает поврежденный блок, он вносится в этот список и для хранения информации больше не используется;
• указатель на группу каталогов (directory band),
• указатель на файловый узел (F-node) корневого каталога,
• дату последней проверки раздела программой CHKDSK;
• информацию о размере полосы (в текущей реализации HPFS - 8 Мбайт).
Super block размещается в 16 секторе.
Резервный блок (spare block)
Содержит
• указатель на карту аварийного замещения (hotfix map или hotfix-areas);
• указатель на список свободных запасных блоков (directory emergency free block list);
• ряд системных флагов и дескрипторов.
Этот блок размещается в 17 секторе диска.
Резервный блок обеспечивает высокую отказоустойчивость файловой системы HPFS и позволяет восстанавливать поврежденные данные на диске.
Принцип размещения файлов
Экстенты (extent) — фрагменты файла, располагающиеся в смежных секторах диска. Файл имеет по крайней мере один экстент, если он не фрагментирован, а в противном случае — несколько экстентов.
Для сокращения времени позиционирования головок чтения/записи жесткого диска система HPFS стремится
1) 1) расположить файл в смежных блоках;
2) 2) если такой возможности нет, то разместить экстенты фрагментированного файла как можно ближе друг к другу,
Для этого HPFS использует статистику, а также старается условно резервировать хотя бы 4 килобайта места в конце файлов, которые растут.
Когда данные дописываются в существующий файл, HPFS сразу же резервирует как минимум 4 Кбайт непрерывного пространства на диске. Если же часть этого пространства не потребовалась, то после закрытия файла она высвобождается для дальнейшего использования. Если же файл не может быть увеличен без нарушения его непрерывности, HPFS опять-таки резервирует 4 Кбайт смежных блоков как можно ближе к основной части файла.
Очевидно, что степень фрагментации файлов на диске зависит как от числа файлов, расположенных на нем, их размеров и размеров самого диска, так и от характера и интенсивности самих дисковых операций. Незначительная фрагментация файлов практически не сказывается на быстродействии операций с файлами. Файлы, состоящие из двух-трех экстентов, практически не снижают производительность HPFS, так как эта файловая система следит за тем, чтобы области данных, принадлежащие одному и тому же файлу, располагались как можно ближе друг к другу.
Программы (утилиты) дефрагментации, имеющиеся для этой файловой системы, по умолчанию считают наличие двух-трех экстентов у файла нормой.
Например, программа HPFSOPT из набора утилит GammaTech по умолчанию не дефрагментирует файлы, состоящие из трех и менее экстентов, а файлы, которые имеют большее количестве экстентов, приводятся к 2 или 3 экстентам, если это возможно.
Практика показывает, что в среднем на диске имеется не более 2% файлов, имеющих три и более экстентов. Даже общее количество фрагментированных файлов, как правило, не превышает 3%. Такая ничтожная фрагментация оказывает пренебрежимо малое влияние на общую производительность системы.
Еще один способ уменьшения фрагментирования файлов — это расположение файлов, растущих навстречу друг другу, или файлов, открытых разными тредами или процессами, в разных полосах диска.
Принципы хранения информации о расположении файлов
Каждый файл и каталог диска имеет свой файловый узел F-Node. Это структура, в которой содержится информация о расположении файла и о его расширенных атрибутах.
Замечание. Файловая система FAT аналога файлового узла не имеет.
Каждый F-Node занимает один сектор и всегда располагается поблизости от своего файла или каталога (обычно — непосредственно перед файлом или каталогом). Объект F-Node содержит
• длину,
• первые 15 символов имени файла,
• специальную служебную информацию,
• статистику по доступу к файлу,
• расширенные атрибуты файла,
• список прав доступа (или только часть этого списка, если он очень большой); если расширенные атрибуты слишком велики для файлового узла, то в него записывается указатель на них.
• ассоциативную информацию о расположении и подчинении файла и т. д.
Если файл непрерывен, то его размещение на диске описывается двумя 32-битными числами. Первое число представляет собой указатель на первый блок файла, а второе — длину экстента (число следующих друг за другом блоков, принадлежащих файлу).
Замечание. Из этого следует, что максимальный объем диска может составлять (232-1)*512 = 2 Тбайта.
Если файл фрагментирован, то размещение его экстентов описывается в файловом узле дополнительными парами 32-битных чисел.
В файловом узле можно разместить информацию максимум о восьми экстентах файла. Если файл имеет больше экстентов, то в его файловый узел записывается указатель на блок размещения (allocation block), который может содержать до 40 указателей на экстенты или, по аналогии с блоком дерева каталогов, на другие блоки размещения.
Таким образом, двухуровневая структура блоков размещения может хранить информацию о 480 секторах, что позволяет работать с файлами размером до 7,68 Гбайт. На практике размер файла не может превышать 2 Гбайт, но это обусловлено текущей реализацией интерфейса прикладного программирования.
Структура и размещение каталогов
Для хранения каталогов используется полоса, находящаяся в центре диска.
Эта полоса называется directory band.
Если она полностью заполнена, HPFS начинает располагать каталоги файлов в других полосах.
Расположение этой информационной структуры в середине диска значительно сокращает среднее время позиционирования головок чтения/записи. Действительно, для перемещения головок чтения/записи из произвольного места диска в его центр требуется в два раза меньше времени, чем для перемещения к краю диска, где находится корневой каталог в случае файловой системы FAT. Уже только одно это обеспечивает более высокую производительность файловой системы HPFS по сравнению с FAT. Аналогичное замечание справедливо и для NTFS, которая тоже располагает свой master file table в начале дискового пространства, а не в его середине.
Однако существенно больший (по сравнению с размещением Directory Band в середине логического диска) вклад в производительность HPFS дает использование метода сбалансированных двоичных деревьев для хранения и поиска информации о местонахождении файлов.
Вспомним, что в файловой системе FAT каталог имеет линейную структуру, специальным образом не упорядоченную, поэтому при поиске файла требуется последовательно просматривать его с самого начала.
В HPFS структура каталога представляет собой сбалансированное дерево с записями, расположенными в алфавитном порядке.
Каждая запись, входящая в состав дерева, содержит
• атрибуты файла,
• указатель на соответствующий файловый узел,
• информацию о времени и дате создания файла, времени и дате последнего обновления и обращения,
• длине данных, содержащих расширенные атрибуты,
• счетчик обращений к файлу,
• длине имени файла
• само имя,
• и другую информацию.
Файловая система HPFS при поиске файла в каталоге просматривает только необходимые ветви двоичного дерева (В-Тгее). Такой метод во много раз эффективнее, чем последовательное чтение всех записей в каталоге, что имеет место в системе FAT.
Размер каждого из блоков, в терминах которых выделяются каталоги в текущей реализации HPFS, равен 2 Кбайт. Размер записи, описывающей файл, зависит от размера имени файла. Если имя занимает 13 байтов (для формата 8.3), то блок из 2 Кбайт вмещает до 40 описателей файлов. Блоки связаны друг с другом посредством списка.
Проблемы
При переименовании файлов может возникнуть так называемая перебалансировка дерева. Создание файла, переименование или стирание может приводить к каскадированию блоков каталогов. Фактически, переименование может потерпеть неудачу из-за недостатка дискового пространства, даже если файл непосредственно в размерах не увеличился. Во избежание этого “бедствия” HPFS поддерживает небольшой пул свободных блоков, которые могут использоваться при “аварии”. Эта операция может потребовать выделения дополнительных блоков на заполненном диске. Указатель на этот пул свободных блоков сохраняется в SpareBlock,
РЕЗЮМЕ
Принципы размещения файлов и каталогов на диске в HPFS:
• информация о местоположении файлов рассредоточена по всему диску, при этом записи каждого конкретного файла размещаются (по возможности) в смежных секторах и поблизости от данных об их местоположении;
• каталоги размещаются в середине дискового пространства;
• каталоги хранятся в виде бинарного сбалансированного дерева с записями, расположенными в алфавитном порядке.
Надежность хранения данных в HPFS
Любая файловая система должна обладать средствами исправления ошибок, возникающих при записи информации на диск. Система HPFS для этого использует механизм аварийного замещения (hotfix).
Если файловая система HPFS сталкивается с проблемой в процессе записи данных на диск, она выводит на экран соответствующее сообщение об ошибке. Затем HPFS сохраняет информацию, которая должна была быть записана в дефектный сектор, в одном из запасных секторов, заранее зарезервированных на этот случай. Список свободных запасных блоков хранится в резервном блоке HPFS. При обнаружении ошибки во время записи данных в нормальный блок HPFS выбирает один из свободных запасных блоков и сохраняет эти данные в нем. Затем файловая система обновляет карту аварийного замещения в резервном блоке.
Эта карта представляет собой просто пары двойных слов, каждое из которых является 32-битным номером сектора.
Первый номер указывает на дефектный сектор, а второй — на тот сектор среди имеющихся запасных секторов, который был выбран для его замены.
После замены дефектного сектора запасным карта аварийного замещения записывается на диск, и на экране появляется всплывающее окно, информирующее пользователя о произошедшей ошибке записи на диск. Каждый раз, когда система выполняет запись или чтение сектора диска, она просматривает карту аварийного замещения и подменяет все номера дефектных секторов номерами запасных секторов с соответствующими данными.
Следует заметить, что это преобразование номеров существенно не влияет на производительность системы, так как оно выполняется только при физическом обращении к диску, но не при чтении данных из дискового кэша.
Очистка карты аварийного замещения автоматически выполняется программой CHKDSK при проверке диска HPFS. Для каждого замещенного блока (сектора) программа CHKDSK выделяет новый сектор в наиболее подходящем для файла (которому принадлежат данные) месте жесткого диска. Затем программа перемещает данные из запасного блока в этот сектор и обновляет информацию о положении файла, что может потребовать новой балансировки дерева блоков размещения. После этого CHKDSK вносит поврежденный сектор в список дефектных блоков, который хранится в дополнительном блоке HPFS, и возвращает освобожденный сектор в список свободных запасных секторов резервного блока. Затем удаляет запись из карты аварийного замещения и записывает отредактированную карту на диск.
Все основные файловые объекты в HPFS, в том числе файловые узлы, блоки размещения и блоки каталогов, имеют уникальные 32-битные идентификаторы и указатели на свои родительские и дочерние блоки. Файловые узлы, кроме того, содержат сокращенное имя своего файла или каталога. Избыточность и взаимосвязь файловых структур HPFS позволяют программе CHKDSK полностью восстанавливать файловую структуру диска, последовательно анализируя все файловые узлы, блоки размещения и блоки каталогов. Руководствуясь собранной информацией, CHKDSK реконструирует файлы и каталоги, а затем заново создает битовые карты свободных секторов диска. Запуск программы CHKDSK следует осуществлять с соответствующими ключами. Так, например, один из вариантов работы этой программы позволяет найти и восстановить удаленные файлы.
Система управления файлами HPFS.IFS
HPFS относится к так называемым монтируемым файловым системам -IFS (installable file system - устанавливаемая, монтируемая система управления файлами). Это означает, что она не встроена в операционную систему, а добавляется к ней при необходимости.
Устанавливаемые файловые системы представляют собой специальные “драйверы” для доступа к разделам, отформатированным под другую файловую систему. Это очень удобный и мощный механизм добавления в ОС новых файловых систем и замены одной системы управления файлами на другую.
Сегодня, например, для OS/2 уже реально существуют IFS-модули для файловой системы VFAT, FAT32, Ext2FS (файловая система Linux), NTFS (правда, пока только для чтения). Для работы с данными на CD-ROM имеется CDFS.IFS. Есть и FTP.IFS, позволяющая монтировать ftp-архивы как локальные диски.
Файловая система HPFS устанавливается оператором IFS в файле CONFIG.SYS.
Этот оператор всегда помещается в первой строке данного конфигурационного файла. Пример.
IFS-E:\OS2\HPFS.IFS /САСНЕ:2048 /CRECL :4 /AUTOCHECK : CD
Здесь оператор IFS устанавливает файловую систему HPFS с кэшем в 2 Мбайт, длиной записи кэша в 8 Кбайт и автоматической процедурой проверки дисков С и D:
Замечание. Подробности установки параметров и возможные значения ключей имеются в HELP-файлах, устанавливаемых вместе с операционной системой OS/2 Warp (или см. в книге Гордеева, Молчанова “Системное программное обеспечение” на стр. 175.
Cистема управления файлами HPFS386.1FS
Это реализации HPFS для работы на серверах, функционирующих под управлением OS/2.
Ее принципиальное отличие от системы HPFS.IFS
• HPFS386.1FS позволяет (посредством более полного использования технологии расширенных атрибутов) организовать ограничения на доступ к файлам и каталогам с помощью соответствующих списков доступа — ACL (access control list). (Эта же технология используется в файловой системе NTFS).
• в системе HPFS386.1FS нет ограничений на объем памяти, выделяемой для кэширования файловых записей. Иными словами, при наличии достаточного объема оперативной памяти объем файлового кэша может быть в несколько десятков мегабайт, в то время как для обычной HPFS.IFS этот объем не может превышать 2 Мбайт, что по сегодняшним меркам безусловно мало.
• При установке режимов работы файлового кэша HPFS386.1PS есть возможность явным образом указать алгоритм кэширования.
Наиболее эффективным алгоритмом можно считать так называемый “элеваторный”, когда при записи данных из кэша на диск они предварительно упорядочиваются таким образом, чтобы минимизировать время, отводимое на позиционирование головок чтения/ записи. Головки чтения/записи при этом перемещаются от внешних цилиндров к внутренним и по ходу своего движения осуществляют запись и чтение данных в соответствии со специальным образом упорядочиваемым списком запросов на дисковые операции.
Пример записи строк в конфигурационном файле CONFIG.SYS, которые устанавливают систему HPFS386.1FS и определяют параметры работы ее подсистемы кэширования можно посмотреть в книге Гордеева, Молчанова “Системное программное обеспечение” на стр. 176-178
Файловая система JFS
Для серверной операционной системы OS/2 Warp 4.5 была создана новая журнализирующая файловая система JFS (Journaling file system).
Новая серверная ОС компании IBM под названием OS/2 WarpServer for e-Business вышла в 1999 г.
JFS имеет большую безопасность в структурах данных благодаря технике, разработанной для СУБД.
Работа с файловой системой происходит в режиме транзакций с ведением журнала транзакций. В случае системных сбоев есть возможность обработать журнал транзакций с целью внести или сбросить какие-либо изменения, произведенные во время системного сбоя.
В этой системе увеличена скорость восстановления файловой системы после сбоя.
Но, сохраняя целостность файловой системы, система управления файлами не гарантирует восстановление данных пользователя.
! Файловая система JFS обеспечивает самую высокую скорость работы с файлами из всех известных систем, созданных для ПК (это очень важно для серверной ОС).
Но, сохраняя целостность файловой системы, система управления файлами не гарантирует восстановление данных пользователя.
! Файловая система JFS обеспечивает самую высокую скорость работы с файлами из всех известных систем, созданных для ПК (это очень важно для серверной ОС).
Лекция №8
Системы управления файлами.
Файловая система ОС UNIX
Вопросы:
1. 1. Файловая система ОС UNIX
• Общие сведения
• Структура диска
• Блок начальной загрузки
• Суперблок
• Список свободных блоков
• Список свободных i-узлов
• Область индексных дескрипторов
• Адресация блоков
• Защита файла
• Организация каталогов
• Специальные файлы
• Утилиты=команды
2. Несколько слов о файловой системе ОС Linux
В мире UNIX существует несколко разных видов файловых систем со своей структурой внешней памяти. Наиболее известны традиционная файловая система UNIX System V (s5) и файловая система семейства UNIX BSD (ufs).
Мы будем рассматривать s5.
Файл в системе UNIX представляет собой множество символов с произвольным доступом.
Файл имеет такую структуру, которую налагает на него пользователь.
Файловая система Unix, это иерархическая, многопользовательская файловая система.
Файловая система имеет древовидную структуру. Вершинами (промежуточными узлами) дерева являются каталоги со ссылками на другие каталоги или файлы. Листья дерева соответствуют файлам или пустым каталогам.
Замечание. На самом деле файловая система Unix не является древообразной. Дело в том, что в системе имеется возможность нарушения иерархии в виде дерева, так как имеется возможность ассоциировать несколько имен с одним и тем же содержимым файла.
Структура диска
Диск разделен на блоки. Размер блока данных определяется при форматировании файловой системы командой mkfs и может быть установлен 512, 1024, 2048, 4096 или 8192 байтов.
Считаем по 512 байт (размер сектора).
Дисковое пространство делится на следующие области (см. рис.):
• загрузочный блок;
• управляющий суперблок;
• массив i-узлов;
• область для хранения содержимого (данных) файлов;
• совокупность свободных блоков (связанных в список);
Блок начальной загрузки
Суперблок
i - узел
. . .
i - узел
Данные
Замечание. Для файловой системы UFS - все это для группы цилиндров повторяется (кроме Boot-блока) + выделена специальная область для описания группы цилиндров
Блок начальной загрузки
Блок размещен в блоке №0. (Вспомним, что размещение этого блока в нулевом блоке системного устройства определяется аппаратурой, так как аппаратной загрузчик всегда обращается к нулевому блоку системного устройства. Это последний компонент файловой системы, который зависит от аппаратуры.)
Boot-блок содержит программу раскрутки, которая служит для первоначального запуска ОС UNIX. В файловых системах s5 реально используется boot-блок только корневой файловой системы. В дополнительных файловых системах эта область присутствует, но не используется.
Суперблок
Он содержит оперативную информацию о состоянии файловой системы, а также данные о параметрах настройки файловой системы.
В частности суперблок содержит следующую информацию
• количество i-узлов (индексных дескрипторов);
• размер раздела ???;
• список свободных блоков;
• список свободных i-узлов;
• и другое.
Обратим внимание! Свободное пространство на диске образует связанный список свободных блоков. Этот список хранится в суперблоке.
Элементами списка являются массивы из 50 элементов (если блок = 512 байт, то элемент = 16 бит):
• в элементах массива №№1-48 записаны номера свободных блоков пространства блоков файлов с 2 до 49.
• в №0 элементе содержится указатель на продолжение списка, а
• в последнем элементе (№49) содержится указатель на свободный элемент в массиве.
Если какому-то процессу для расширения файла требуется свободный блок, то система по указателю (на свободный элемент) выбирает элемент массива, и блок с №, хранящимся в данном элементе, предоставляется файлу. Если происходит сокращение файла, то высвободившиеся номера добавляются в массив свободных блоков и корректируется указатель на свободный элемент.
Так как размер массива — 50 элементов, то возможны две критические ситуации:
1. Когда мы освобождаем блоки файлов, а они не могут поместиться в этом массиве. В этом случае из файловой системы выбирается один свободный блок и заполненный полностью массив свободных блоков копируется в этот блок, после этого значение указателя на свободный элемент обнуляется, а в нулевой элемент массива, который находится в суперблоке, записывается номер блока, который система выбрали для копирования содержимого массива. В этот момент создается новый элемент списка свободных блоков (каждый по 50 элементов).
2. Когда содержимое элементов массива свободных блоков исчерпалось (в этом случае нулевой элемент массива равен нулю) Если этот элемент нулю не равен, то это означает, что существует продолжение массива. Это продолжение считывается в копию суперблока в оперативной памяти.
Список свободных i-узлов. Это буфер, состоящий из 100 элементов. В нем находится информация о 100 номерах i-узлов, которые свободны в данный момент.
! Суперблок всегда находится в ОЗУ
Þ все операции (освобождение и занятие блоков и i-узлов происходят в ОЗУ Þ минимизация обменов с диском.
Но! Если содержимое суперблока не будет записано на диск и выключено питание, то возникнут проблемы (несоответствие реального состояния файловой системы и содержимого суперблока). Но это уже требование к надежности аппаратуры системы.
Замечание. В файловых системах UFS для повышения устойчивости поддерживается несколько копий суперблока (по одной копии на группу цилиндров)
Область индексных дескрипторов
Это массив описаний файлов, называемых i-узлами (i-node).(64-х байтные ?)
Каждый индексный описатель (i-узел) файла содержит:
• Тип файла (файл/каталог/специальный файл/fifo/socket)
• Атрибуты (права доступа) - 10
• Идентификатор владельца файла
• Идентификатор группы-владельца файла
• Время создания файла
• Время модификации файла
• Время последнего доступа к файлу
• Длина файла
• Количество ссылок к данному i-узлу из различных каталогов
• Адреса блоков файла
! Обратите внимание. Здесь нет имени файла
Рассмотрим подробнее как организована адресация блоков, в которых размещен файл. Итак, в поле с адресами находятся номера первых 10 блоков файла.
Если файл превышает десять блоков, то начинает работать следующий механизм: 11-й элемент поля содержит номер блока, в котором размещены 128(256) ссылок на блоки данного файла. В том случае, если файл еще больше — то используется 12й элемент поля — он содержит номер блока, в котором содержится 128(256) номеров блоков, где каждый блок содержит 128(256) номеров блоков файловой системы. А если файл еще больше, то используется 13 элемент — где глубина вложенности списка увеличена еще на единицу.
Таким образом мы можем получить файл размером (10+128+1282+1283)*512.
Это можно представить в следующем виде:
Адрес 1-го блока файла
Адрес 2-го блока файла
...
Адрес 10-го блока файла
Адрес блока косвенной адресации (блока с 256 адресами блоков)
Адрес блока 2-й косвенной адресации (блока с 256 адресами блоков с адресами)
Адрес блока 3-й косвенной адресации (блока с адресами блоков с адресами блоков с адресами)
Защита файла
Теперь обратим внимание на идентификаторы владельца и группы и биты защиты.
В ОС Unix используется трехуровневая иерархия пользователей:
Первый уровень — все пользователи.
Второй уровень - группы пользователей. (Все пользователи подразделены на группы.
Третий уровень - конкретный пользователь (Группы состоят из реальных пользователей). В связи с этой трехуровневой организацией пользователей каждый файл обладает тремя атрибутами:
1) Владелец файла. Этот атрибут связан с одним конкретным пользователем, который автоматически назначается системой владельцем файла. Владельцем можно стать по умолчанию, создав файл, а также есть команда, которая позволяет менять владельца файла.
2) Защита доступа к файлу. Доступ к каждому файлу ограничивается по трем категориям:
· права владельца (что может делать владелец с этим файлом, в общем случае — не обязательно все, что угодно);
· права группы, которой принадлежит владелец файла. Владелец сюда не включается (например, файл может быть закрыт на чтение для владельца, а все остальные члены группы могут свободно читать из этого файла;
· все остальные пользователи системы;
По этим трем категориям регламентируются три действия: чтение из файла, запись в файл и исполнение файла (в мнемонике системы R,W,X, соответственно). В каждом файле по этим трем категориям определено — какой пользователь может читать, какой писать, а кто может запускать его в качестве процесса.
Организация каталогов
Каталог с точки зрения ОС — это обычный файл, в котором размещены данные о всех файлах, которые принадлежат каталогу.
Элемент каталога состоит из двух полей:
1) 1) номер i-узла (порядковый номер в массиве i-узлов)и
2) 2) имя файла:
Каждый каталог содержит два специальных имени: ‘.’ - сам каталог; ‘..’ - родительский каталог.
(Для корневого каталога родитель ссылается на него же самого.)
В общем случае, в каталоге могут неоднократно встречаться записи, ссылающиеся на один и тот же i-узел, но в каталоге не могут встречаться записи с одинаковыми именами. То есть с содержимым файла может быть связано произвольное количество имен. Это называется связыванием. Элемент каталога, относящийся к одному файлу называется связью.
Файлы существуют независимо от элементов каталогов, а связи в каталогах указывают действительно на физические файлы. Файл «исчезает» когда удаляется последняя связь, указывающая на него.
Итак, чтобы получить доступ к файлу по имени, операционная система
1. 1. находит это имя в каталоге, содержащем файл,
2. 2. получает номер i-узла файла,
3. 3. по номеру находит i- узел в области i-узлов,
4. 4. из i-узла получает адреса блоков, в которых расположены данные файла,
5. 5. по адресам блоков считывает блоки из области данных.
Монтирование файловой системы
От файловой системы не требуется, чтобы она вся целиком размещалась на том устройстве, где находится корень.
Запрос от системы mount (на установку носителей и т.п.) позволяет встраивать в иерархию файлов файлы на сменных томах.
Команда mount предназначена для подключения файловой системы, расположенной на некотором устройстве, таким образом, что ее содержимое заменяет собой содержимое заданного в команде каталога.
Команда mount имеет несколько опций, но обязательными аргументами стандартного ее использования являются:
имя файла блочного устройства и
имя каталога.
Для монтирования соответствующего тома обычно задают пустой каталог.
Команда umount выполняет обратную операцию - «отсоединяет» (размонтирует) файловую систему, после чего диск с данными можно физически извлечь из ситемы. Например, для записи данных на дискету необходимо ее смонтировать, а после работы - размонтировать.
Специальные файлы
Особенность - с каждым поддерживаемым системой устройством ассоциируется один или несколько специальных файлов. Специальные файлы обычно находятся в справочнике /dev. На специальные файлы могут указывать связи, как на обычные файлы.
Операции ввода/вывода для специальных файлов осуществляются так же, как для обычных дисковых файлов, только эти операции активизируют соответствующие устройства.
Например,
файл /dev/console - соответствует консольному терминалу.
Все, что выводится в файл /dev/console, будет просто появляться на экране терминала. При попытке чтения из файла /dev/console, вы будете получать (внимание!), не то, что нарисовано в данный момент на экране, а то, что вводится с клавиатуры.
Специальный файл /dev/rdsk/m197_c0d0s7 соответствует жесткому диску в целом
Файл /dev/dsk/m197_c0d0s соответствует его разделам.
«Если вы будете читать из этих файлов, то получите все байтики, как они лежат на жестком диске, с нулевого цилиндра и до последнего... А если вы в этот файл что-нибудь запишете, то получите (потом) богатый опыт по переформатированию и разметке жесткого диска.»
/dev/mem- файл, изображающий оперативную память.
/dev/audio- если записать в него файл звукового формата (*.wav, *.au, ...?) - то он будет озвучен динамиком компьютера, а команда cat /dev/audio будет принимать все, что произносится в микрофон.
! Файловая система UNIX позволяет сильно сократить количество реальных обменов с ВЗУ, причем эшелонированная буферизация в ОС Unix делает число этих обменов еще меньше.
Утилиты=команды
UNIX поддерживает многочисленные утилиты, позволяющие работать с файловой системой и доступные как команды командного интерпретатора.
Наиболее употребительные:
cp имя1 имя2 - копирование файла имя1 в файл имя2
rm имя1 - уничтожение файла имя1
mv имя1 имя2 - Рпереименование файла имя1 в файл имя2
mkdir имя - создание нового каталога
rmdir имя- уничтожение каталога
ls имя - выдача содержимого каталога
cat имя - выдача на экран содержимого файла
chown имя режим - изменение режима доступа к файлу
Несколько слов о файловой системе ОС Linux
Linux - UNIX-подобная ОС для ПК и рабочих станций.
Linux - свободно распространяемая версия UNIX (все компоненты, включая исходные тексты, распространяются с лицензией на свободное копирование и установку для неограниченного числа пользователей.
Linux поддерживает различные типы файловых систем.
Файловая система Ext2FS создана специально для Linux. РЕФЕРАТ-ДОКЛАД.
Поддерживает Minix-1 и Xenix.
Реализованы системы управления файлами на основе FAT (для обращения к файлам в разделах с FAT).
Поддерживает ISO-9660 CD-ROM.
Существуют системы управления файлами на томах с HPFS и NTFS (только на чтение).
Существуют системы управления файлами для доступа к FAT32.
Литература
1. 1. А.В. Гордеев, А.Ю. Молчанов «Системное программное обеспечение».
2. 2. Лекции Машечкина (ВМиК3.html)
3. 3. Специальные файлы UNIX.htm
4. 4. Основные понятия ОС UNIX и базовые системные вызовы.htm
5. 5. Unix, базовые принципы и особенности.htm
Материалы к Лекции №8А
Системы управления файлами.
Системы управления файлами на CD-дисках и DVD-дисках.
Вопросы:
1. 1. Структура компакт-дисков.
2. 2. DVD-диски (Digital Versatible Disk)
В отличие от магнитных дисков, имеющих дорожки в виде концентрических окружностей, компакт-диск содержит всего одну спиральную дорожку, которая может быть разбита на несколько логических.
Дорожка в свою очередь разделена на секторы.
Сектор состоит из 4 полей:
1) 1) поле синхронизации (идентифицирует начало сектора и устанавливает счетчик);
2) 2) поле заголовка (4 байта с адресом сектора и кодом данных -текст, аудио или графика и т.п.)
3) 3) поле данных (2 048 байтов)
4) 4) поле системы детектирования и исправления ошибок EDC/ECC (Error Detection Code and Error Correction Code)
Системная (инициирующая) дорожка на CD начинается со служебной области, необходимой для синхронизации между приводом и диском.
Далее расположена системная область, которая содержит сведения
• о структурировании диска
• каталоги данного тома с указателями или адресами других областей диска
DVD - это оптические диски с большой емкостью.
Первоначально DVD расшифровывалось как Digital Video Disk. Позже их стали использовать и для хранения программного обеспечения, фильмов и высококачественного звука. Поэтому расшифровку уточнили Digital Versatible Disk - универсальный цифровой диск.
Стандартный однослойный, односторонний диск DVD может хранить 4,7 Гб.
Двухслойный - по 8,5 Гб на каждой стороне.
Кроме того, DVD может быть двухсторонним - емкость до 17 Гб.
Помимо
1) 1) физических изменений (высокочастотный полупроводниковый лазер с меньшей длиной волны Þ можно использовать насечки меньшего размера)
2) 2) введен новый формат секторов,
3) 3) более надежный код коррекции ошибок
4) 4) улучшенная модуляция каналов
Þ все эти улучшения увеличивают плотность записи в 1.5 раза
Для записи данных используется технология MPEG2 (стандарт на сжатие).
К сведению. MPEG - формат сжатия звуковых и видео файлов.
Лекция №9
Режимы работы микропроцессора.
Организация памяти
Вопросы
1. Режимы работы микропроцессора
2. Организация памяти
• Модели использования оперативной памяти (сегментированная, страничная)
• Понятие о сегментированной модели памяти
• Понятие о страничной модели памяти
• Сегментно-страничный способ распределения памяти
3. Плоская модель памяти
Режимы работы микропроцессора
Реальный режим
Это режим работы первых 16-битовых микропроцессоров. Наличие его обусловлено тем, что необходимо обеспечить в новых моделях микропроцессоров функционирование программ, разработанных для старых моделей.
Защищенный режим (protected mode)
Означает, что параллельные вычисления могут быть защищены программно-аппаратным путем.
Позволяет полностью использовать все возможности, предоставляемые микропроцессором. Все современные многозадачные ОС работают в этом режиме.
Создан для работы нескольких независимых программ. Для обеспечения совместной работы нескольких задач необходимо защитить их от взаимного влияния, взаимодействие задач должно регулироваться.
Программы, разработанные для реального режима, не могут функционировать в защищенном режиме. (Физический адрес формируется по другим принципам.)
Режим виртуального 8086
Переход в этот режим возможен, если микропроцессор уже находится в защищенном режиме. Возможна одновременная работа нескольких программ разработанных для i8086. Возможно работа программ реального режима. Физический адрес формируется по правилам реального режима.
Организация памяти
Физическая память, к которой микропроцессов имеет доступ по шине адреса, называется оперативной памятью (или оперативным запоминающим устройством - ОЗУ).
ОП организована как последовательность байтов.
Каждому байту соответствует уникальный адрес (его номер), который называется физическим адресом.
! Физический диапазон значений адресов зависит от разрядности шины адреса микропроцессора.
Для i486 и Pentium он находится в диапазоне от 0 до 2**32-1 --- 4 Гбайт (32-разрядная шина адреса).
! Механизм управления памятью полностью аппаратный, т.е. программа сама не может сформировать физический адрес памяти на адресной шине.
Микропроцессор аппаратно поддерживает несколько моделей использования оперативной памяти:
• сегментированную модель
• страничную модель
Понятие о сегментированной модели памяти
Память для программы делится на непрерывные области памяти, называемые сегментами.
Сегменты - это логические элементы программы.
Сама программа может обращаться только к данным, которые находятся в этих сегментах.
Сегмент представляет собой независимый, поддерживаемый на аппаратном уровне блок памяти.
Сегментация - механизм адресации, обеспечивающий существование нескольких независимых адресных пространств как в пределах одной задачи, так и в системе в целом для защиты задач от взаимного влияния.
Замечание. Программист может либо самостоятельно разбивать программу на фрагменты (сегменты), либо автоматизировать этот процесс и возложить его на систему программирования.
Для микропроцессоров Intel принят особый подход к управлению памятью. Каждая программа в общем случае может состоять из любого количества сегментов, но непосредственный доступ она имеет только к 3 основным сегментам: кода, данных и стека и к дополнительным сегментам данных (всего 3).
Операционная система (! а не сама программа) размещает сегменты программы в ОП по определенным физическим адресам, а значения этих адресов записывает в определенные места, в зависимости от режима работы микропроцессора:
• в реальном режиме адреса помещаются непосредственно в сегментные регистры (cs, ds, ss, es, gs, fs);
• в защищенном режиме - в специальную системную дескрипторную таблицу (Элементом дескрипторной таблицы является дескриптор сегмента. Каждый сегмент имеет дескриптор сегмента - 8 байт. Существует три дескрипторные таблицы. Адрес каждой таблицы записывается в специальный системный регистр).
Для доступа к данным внутри сегмента обращение производится относительно начала сегмента линейно, т.е. начиная с 0 и заканчивая адресом, равным размеру сегмента. Этот адрес называется смещением (offset).
Таким образом, для обращения к конкретному физическому адресу ОП необходимо определить адрес начала сегмента и смещение внутри сегмента.
Физический адрес принято записывать парой этих значений, разделенных двоеточием - segment : offset
Например, 0040:001Ch; 0000:041Ch; 0020:021Ch; 0041:000Ch.
Каждый сегмент описывается дескриптором сегмента.
ОС строит для каждого исполняемого процесса соответствующую таблицу дескрипторов сегментов и при размещении каждого из сегментов в ОП или внешней памяти в дескрипторе отмечает его текущее местоположение (бит присутствия).
Дескриптор содержит поле адреса, с которого сегмент начинается и поле длины сегмента. Благодаря этому можно осуществлять контроль:
1) размещения сегментов без наложения друг на друга
2) обращается ли код исполняющейся задачи за пределы текущего сегмента.
В дескрипторе содержатся также данные о правах доступа к сегменту (запрет на модификацию, можно ли его предоставлять другой задаче) Þ защита.
Достоинства:
1) общий объем виртуальной памяти превосходит объем физической памяти
2) возможность размещать в памяти как можно больше задач (до определенного предела) Þ увеличивает загрузку системы и более эффективно используются ресурсы системы
Недостатки:
1) увеличивается время на доступ к искомой ячейке памяти, т.к. должны вначале прочитать дескриптор сегмента, а потом уже, используя его данные, можно вычислить физический адрес (для уменьшения этих потерь используется кэширование - дескрипторы, с которыми работа идет в данный момент размещаются в сверхоперативной памяти - в специальных регистрах процессора);
2) фрагментация;
3) потери памяти на размещение дескрипторных таблиц
4) потери процессорного времени на обработку дескрипторных таблиц.
!Сегментированная модель памяти поддерживается и в реальном, и в защищенном режимах работы микропроцессора.
Понятие о страничной модели памяти
Это надстройка над сегментной моделью.
ОП делится на блоки фиксированного размера 4 Кб (должно быть число, кратное степени двойки, чтобы операции сложения можно было бы заменить на операции конкатенации).
Каждый такой блок называется страницей.
Их число 1.048.576 Þ 4 Гб адресуемой памяти.
Основное применение этой модели связано с организацией виртуальной памяти.
Для того, чтобы использовать для работы программ пространство памяти большее, чем объем физической памяти используется механизм виртуальной памяти.
Суть его заключается в том, что операционная система предоставляет возможность по обмену страницами памяти с жестким диском. В случае, если программа требует памяти больше, чем объем физической памяти, редко используемые страницы памяти записываются на жесткий диск в специальный файл виртуальной памяти (файл обмена, или страничный файл, или файл подкачки, чаще swap-файлом, подчеркивая, что страницы этого файла замещают друг друга в ОП).
Замечание. В некоторых ОС выгруженные страницы располагаются не в файле, а в специальном разделе диска, например, в ОС UNIX есть специальный раздел, но могут использоваться и файлы, если не достаточно объема раздела.
В настоящее время файл подкачки может динамически изменять свой размер в зависимости от потребностей системы.
Для i486 и Pentium размер возможной виртуальной памяти может достигать 4 Тб (терабайт).
Обратим внимание на то, что программа также разбивается на фрагменты - страницы. Все фрагменты программы одинаковой длины, кроме последней страницы.
Говорят, что память разбивается на физические страницы, а программа - на виртуальные страницы.
Трансляция (отображение) виртуального адресного пространства задачи на физическую память осуществляется с помощью таблицы страниц.
Для каждой текущей задачи создается таблица страниц.
Диспетчер памяти для каждой страницы формирует соответствующий дескриптор. Дескриптор содержит так называемый бит присутствия.
Если он = 1, это означает, что данная страница сейчас размещена в ОП.
Если он = 0, то страница расположена во внешней памяти.
Защита страничной памяти основана на контроле уровня доступа к каждой странице.
Каждая страница снабжается кодом уровня доступа (только чтение; чтение и запись; только выполнение). При работе со страницей сравнивается значение кода разрешенного уровня доступа с фактически требуемым. При несовпадении операции с разрешенной - работа программы прерывается.
! Страничная модель памяти поддерживается только в защищенном режиме работы микропроцессора.
Основное достоинство страничного способа распределения памяти -
минимально возможная фрагментация (эффективное распределение памяти).
Недостатки:
1) потери памяти на размещение таблиц страниц
2) потери процессорного времени на обработку таблиц страниц (диспетчер памяти).
3) Программы разбиваются на страницы случайно, без учета логических взаимосвязей, имеющихся в коде Þ межстраничные переходы осуществляются чаще, чем межсегментные + трудности в организации разделения программных модулей между выполняющими процессами
Чтобы избежать недостатка №3 был предложен сегментно-страничный способ распределения памяти.
Сегментно-страничный способ распределения памяти
Программа разбивается на сегменты.
Адрес, по-прежнему, состоит из двух частей - сегмент + смещение.
Но смещение относительно начала сегмента может состоять из двух полей: виртуальной страницы и индекса.
Для доступа к памяти необходимо:
1) вычислить адрес дескриптора сегмента и причитать его;
2) вычислить адрес элемента таблицы страниц этого сегмента и извлечь из памяти необходимый элемент;
3) к номеру (адресу) физической страницы приписать номер (адрес) ячейки в странице.
Недостаток: Задержка в доступе к памяти (в три раза больше, чем при прямой адресации).
Чтобы избежать этого вводится кэширование (кэш строится по ассоциативному принципу).
Плоская модель памяти
Если считать, что задача состоит из одного сегмента, который, в свою очередь, разбит на страницы, то фактически мы получаем только один страничный механизм работы с виртуальной памятью.
Этот подход называется плоской памятью.
Достоинства:
• При использовании плоской модели памяти упрощается создание и ОС, и систем программирования.
• уменьшаются расходы памяти на поддержку системных информационных структур
В абсолютном большинстве современных 32-разрядных ОС (для микропроцессоров Intel) используется плоская модель памяти.
Лекция №10
Защищенный режим работы микропроцессора
Вопросы
1. Основные характеристики реального режима.
2. Ключевые моменты защищенного режима.
3. Системные регистры микропроцессора
• регистры управления
• регистры управления памятью (системных адресов)
• регистры отладки
Впервые защищенный режим появился в микропроцессоре i80286 фирмы Intel. Именно этот режим позволяет полностью использовать все возможности, предоставляемые микропроцессором.
Все современные многозадачные операционные системы работают только в этом режиме. Поэтому для понимания всех процессов, происходящих в компьютере во время работы многозадачной операционной системы, необходимо знать основы функционирования микропроцессора в защищенном режиме.
Мы подробно рассмотрим архитектуру микропроцессора в защищенном режиме и основные правила программирования этого режима.
Вспомним основные характеристики реального режима.
Любой современный микропроцессор, находясь в реальном режиме, очень мало отличается от старого доброго i8086. Это лишь его более быстрый аналог с увеличенным (до 32 бит) размером всех регистров, кроме сегментных. Чтобы получить доступ ко всем остальным архитектурным и функциональным новшествам микропроцессора, необходимо перейти в защищенный режим.
В реальном режиме работы микропроцессора
• объем адресуемой памяти - 1 Мб (=2**20, у них 20-разрядная шина адреса)
• поддерживается выполнение всего одной программы Þ нет потребности в организации защиты программ от взаимного влияния
• поддерживается сегментированная модель памяти
• сегмент имеет длину не более 64 Кбайт
• адрес сегмента располагается в одном из сегментных регистров
• отсутствуют аппаратные средства контроля доступа к сегменту Þ любая программа может обратиться к любому адресу в памяти.
Формирование физического адреса происходит по правилам реального режима:
для определения физического адреса команды содержимое сегментного регистра CS умножается на 16 за счет добавления справа (к младшим битам) четырех нулей, после чего к полученному значению прибавляется содержимое указателя команд (регистр IP). Получается двадцатибитовое значение (20-разрядная шина адреса).
Теперь рассмотрим ключевые моменты защищенного режима.
В защищенном режиме изменились принцы работы микропроцессора с памятью.
Память по-прежнему является сегментированной, но изменяются функции и номенклатура программно-аппаратных компонентов, участвующих в сегментации.
Вспомним, что прежде всего режим должен обеспечивать многозадачность. Для обеспечения совместной работы нескольких задач необходимо защитить их от взаимного влияния, а также регулировать взаимодействие между ними в случае необходимости.
Для решения этих проблем сегментам присваиваются определенные атрибуты, такие, что часть контроля за доступом к сегментам можно переложить на сам микропроцессор.
Любой сегмент памяти в защищенном режиме описывается дескриптором сегмента.
Дескриптор сегмента имеет размер 8 байт и содержит следующие атрибуты:
• расположение сегмента в памяти;
• размер сегмента;
• уровень привилегий — определяет права данного сегмента относительно других сегментов;
• тип доступа — определяет назначение сегмента;
• и другие.
Обратим внимание, что в защищенном режиме микропроцессор поддерживает два типа защиты — по привилегиям и доступу к памяти. В отличие от реального режима в защищенном режиме программа уже не может запросто обратиться по любому физическому адресу памяти. Для этого она должна иметь определенные полномочия и удовлетворять ряду требований.
Все дескрипторы собираются вместе в одну из 3 дескрипторных таблиц. В какую именно таблицу должен быть помещен дескриптор, определяется его назначением. Адрес, по которому размещаются эти дескрипторные таблицы, может быть любым; он хранится в специально предназначенном для этого адреса системном регистре.
! Формирование физического адреса происходит по правилам защищенного режима, поэтому программы, созданные для реального режима функционировать в защищенном не могут.
Адреса задаются 32-битовыми значениями. Возможна страничная трансляция адресов.
Системные регистры микропроцессора
Эти регистры обеспечивают работу защищенного режима. Их также можно рассматривать как часть архитектуры микропроцессора, которая намеренно оставлена видимой для того, чтобы квалифицированный системный программист мог выполнить самые низкоуровневые операции.
Системные регистры можно разделить на три группы:
• четыре регистра управления;
• четыре регистра системных адресов;
• восемь регистров отладки.
!
Большинство из системных регистров программно доступны.
Регистры управления
В группу регистров управления входят 4 регистра: сгО, сг1, сг2, сгЗ.
Эти регистры предназначены для общего управления системой (определяют режимы работы микропроцессора). Они 32-битовые.
Регистры управления доступны только программам с уровнем привилегий 0.
Хотя микропроцессор имеет четыре регистра управления, доступными являются только три из них; исключается сг1, функции которого пока не определены (он зарезервирован для будущего использования).
Регистр сг0 содержит системные флаги, управляющие режимами работы микропроцессора и отражающие его состояние глобально, независимо от конкретных выполняющихся задач.
Регистр сг0 используется при страничной модели организации памяти.
Назначение системных флагов:
• ре (Protect Enable), бит 0 — разрешение защищенного режима работы.
• Состояние этого флага показывает, в каком из двух режимов — реальном (ре=0) или защищенном (ре=1) - работает микропроцессор в данный момент времени.
• mp (Math Present), бит 1 — наличие сопроцессора. Всегда 1.
• ts (Task Switched), бит 3 — переключение задач. Процессор автоматически устанавливает этот бит при переключении на выполнение другой задачи;
• am (Alignment Mask), бит 18 — маска выравнивания. Этот бит разрешает (am =1) или запрещает (am = 0) контроль выравнивания;
• cd (Cache Disable), бит 30 — запрещение кэш-памяти. С помощью этого бита можно запретить (cd = 1) или разрешить (cd = 0) использование внутренней кэш-памяти (кэш-памяти первого уровня);
• pg (PaGing), бит 31 — разрешение (pg = 1) или запрещение (pg = 0) страничного преобразования.
Регистр сг2 используется при страничной организации оперативной памяти для регистрации ситуации, когда текущая команда обратилась по адресу, содержащемуся в странице памяти, отсутствующей в данный момент времени в памяти.
В такой ситуации в микропроцессоре возникает исключительная ситуация 14, и линейный 32-битный адрес команды, вызвавшей это исключение, записывается в регистр сг2. Имея эту информацию, обработчик исключения 14 определяет нужную страницу, осуществляет ее подкачку в память и возобновляет нормальную работу программы.
Регистр сгЗ также используется при страничной организации памяти. Это так называемый регистр каталога страниц первого уровня. Он содержит 20-битный физический базовый адрес каталога страниц текущей задачи.
Этот каталог содержит 1024 32-битных дескриптора, каждый из которых содержит адрес таблицы страниц второго уровня. В свою очередь, каждая из таблиц страниц второго уровня содержит 1024 32-битных дескриптора, адресующих страничные кадры в памяти. Размер страничного кадра — 4 Кбайт.
Регистры системных адресов (регистры управления памятью)
Они предназначены для защиты программ и данных в мультизадачном режиме работы микропроцессора.
При работе в защищенном режиме микропроцессора адресное пространство делится:
• на глобальное — общее для всех задач;
• локальное — отдельное для каждой задачи.
Этим разделением и объясняется то, что в архитектуре микропроцессора присутствуют следующие системные регистры:
• регистр таблицы глобальных дескрипторов gdtr (Global Descriptor Table Register) имеет размер 48 бит и содержит
1) 1) базовый адрес глобальной дескрипторной таблицы GDT (32-битовый)
2) 2) и предел - размер (в байтах) таблицы GDT (16-бит);
• регистр таблицы локальных дескрипторов ldtr (Local Descriptor Table Register) имеет размер 16 бит и содержит указатель на локальную таблицу сегментов текущей задачи.
• регистр таблицы дескрипторов прерываний idtr (Interrupt Descriptor Table Register) имеет размер 48 бит и содержит
1) базовый адрес дескрипторной таблицы прерываний IDT (32-битовый)
2) предел - размер (в байтах) таблицы GDT (16-бит);
• регистр задачи tr (Task Register) (16-битовый) указывает на дескриптор в таблице GDT, позволяющий получить доступ к дескриптору текущей задачи - этот дескриптор описывает текущий сегмент состояния задачи (TSS — Task Segment Status). Этот сегмент создается для каждой задачи в системе. Основное назначение сегментов TSS — сохранять текущее состояние задачи в момент переключения на другую задачу.
Регистры отладки
Эти регистры предназначены для аппаратной отладки. Средства аппаратной отладки впервые появились в микропроцессоре i486. Аппаратно микропроцессор содержит 8 регистров отладки, но реально из них используются только 6.
Регистры dr0, dr1, dr2, dr3 имеют разрядность 32 бит и предназначены для задания линейных адресов четырех точек прерывания. Используемый при этом механизм следующий: любой формируемый текущей программой адрес сравнивается с адресами в регистрах dr0.. .dr3, и при совпадении генерируется исключение отладки 1.
Регистр dг6 называется регистром состояния отладки. Биты этого регистра устанавливаются в соответствии с причинами, которые вызвали возникновение последнего исключения 1. Перечислим эти биты и их назначение:
b0 — если этот бит=1, то последнее исключение (прерывание) возникло в результате достижения контрольной точки, определенной в регистре dr0;
b1 — аналогично b0, но для контрольной точки в регистре dr1;
b2 — аналогично b0, но для контрольной точки в регистре dr2;
b3 — аналогично b0, но для контрольной точки в регистре dr3;
bd (бит 13) служит для защиты регистров отладки;
bs (бит 14) = 1, если исключение 1 было вызвано состоянием флага tf = 1 в регистре eflags;
bt (бит 15) = 1, если исключение 1 было вызвано переключением на задачу с установленным битом ловушки в TSS t = 1.
Все остальные биты в этом регистре заполняются нулями. Обработчик исключения 1 по содержимому dr6 должен определить причину, по которой произошло исключение, и выполнить необходимые действия.
Регистр dг7 называется регистром управления отладкой. В нем для каждого из четырех регистров контрольных точек отладки имеются поля, с помощью которых можно уточнить следующие условия, при которых следует сгенерировать прерывание:
• место регистрации контрольной точки — только в текущей задаче или в любой задаче. Соответствующие биты занимают младшие восемь бит регистра dг7 (по два бита на каждую контрольную точку (фактически, точку прерывания), задаваемую регистрами dr0, dr1, dr2, dr3). Первый бит из каждой пары — это так называемое локальное разрешение, его установка говорит о том, что точка прерывания действует, если она находится в пределах адресного пространства текущей задачи. Второй бит в каждой паре определяет глобальное разрешение, которое говорит о том, что данная контрольная точка действует в пределах адресных пространств всех задач, находящихся в системе;
• тип доступа, по которому инициируется прерывание: только при выборке команды, при записи или при записи/чтении данных. Биты, определяющие природу возникновения прерывания, локализуются в старшей части данного регистра.
Лекция №11
Защищенный режим работы микропроцессора
(продолжение)
Вопросы:
1. Повторение ключевых моментов
2. Поддержка сегментированной модели памяти
• Дескрипторные таблицы
• Формат селектора сегмента (сегментного регистра)
• Формат дескриптора сегмента
3. Поддержка страничной модели памяти
• Таблицы страниц
• Формат дескриптора страницы
4. Переход микропроцессора в защищенный режим
Структуры данных защищенного режима
Повторение ключевых моментов
Мы уже отмечали, что физический адрес в защищенном режиме вычисляется по правилам, отличным от реального режима.
Кроме того, в защищенном режиме любой запрос к памяти как со стороны операционной системы, так и со стороны прикладных программ должен быть санкционирован. Микропроцессор аппаратно контролирует доступ программ к любому адресу в оперативной памяти.
! В защищенном режиме всегда действует сегментный способ организации распределения памяти. Кроме того, может быть включен и страничный механизм (страничная трансляция).
Поддержка сегментированной модели памяти
Дескрипторные таблицы
Микропроцессор аппаратно поддерживает три типа дескрипторных таблиц:
• глобальная дескрипторная таблица (GDT);
• локальная дескрипторная таблица (LDT);
• таблица дескрипторов прерываний (IDT).
1. Таблица GDT (Global Descriptor Table) — глобальная дескрипторная таблица. Это основная общесистемная таблица, к которой допускается обращение со стороны программ, обладающих достаточными привилегиями. Расположение таблицы GDT в памяти произвольно; оно локализуется с помощью специального регистра gdtr (48 бит). В таблице GDT могут содержаться следующие типы дескрипторов:
• дескрипторы сегментов кодов программ;
• дескрипторы сегментов данных программ;
• дескрипторы стековых сегментов программ;
• дескрипторы TSS (Task Segment Status) — специальные системные объекты, называемые сегментами состояния задач;
• дескрипторы для таблиц LDT;
• шлюзы вызова;
• шлюзы задач.
2. Таблица LDT (Local Descriptor Table) — локальная дескрипторная таблица. Для любой задачи в системе может быть создана своя дескрипторная таблица подобно общесистемной GDT. Для связи между таблицами GDT и LDT в таблице GDT создается дескриптор, описывающий область памяти, в которой находится LDT. Расположение таблицы LDT в памяти также произвольно и локализуется с помощью специального регистра ldtr (16 бит). В таблице LDT могут содержаться следующие типы дескрипторов:
• дескрипторы сегментов кодов программ;
• дескрипторы сегментов данных программ;
• дескрипторы стековых сегментов программ;
• шлюзы вызова;
• шлюзы задач.
3. Таблица IDT (Interrupt Descriptor Table) — дескрипторная таблица прерываний. Данная таблица также является общесистемной и содержит дескрипторы специального типа, которые определяют местоположение программ обработчиков всех видов прерываний. В качестве аналогии можно привести таблицу векторов прерываний реального режима. Расположение таблицы IDT в памяти произвольно и локализуется с помощью специального регистра idtr (48 бит). Элементы данной таблицы называются шлюзами. Отметим, что эти шлюзы бывают трех типов:
• шлюзы задач;
• шлюзы прерываний;
• шлюзы ловушек.
Каждая из дескрипторных таблиц может содержать до 8192 (213) дескрипторов.
Формат селектора сегмента
В защищенном режиме иначе интерпретируется содержимое сегментных регистров.
Теперь в них содержатся не адреса начала сегмента, а номер соответствующего сегмента (индекс, или селектор) в таблице дескрипторов сегментов. Поэтому теперь сегментные регистры называются селекторами сегментов.
Каждый регистр разбивается на три поля:
• индекс (старшие 13 битов) - Index. Определяет номер сегмента (индекс) в соответствующей таблице дескрипторов.
• индикатор таблицы сегментов - TI (бит 2). Определяет в глобальной или локальной таблице находится дескриптор сегмента: TI=0 - в глобальной, TI=1 - в локальной.
• Уровень привилегий (биты 0 и 1). Указывает запрашиваемый уровень привилегий.
Формат дескриптора сегмента
Каждый сегмент описывается соответствующим дескриптором сегмента.
Структурно дескриптор сегмента представляет собой 8-байтовую структуру.
И состоит из следующих полей:
Номер байта в дескрипторе
Количество бит в поле
Символическое
обозначение
Назначение и содержание полей дескриптора
0...1
16
limit_l
Младшие биты 0...15 20-разрядного поля предела сегмента, который определяет размер сегмента в единицах, определяемых битом гранулярности g
2...4
23
base_l
Биты О...23 32-разрядной базы сегмента, которая определяет значение линейного адреса начала сегмента в памяти
5
8
AR
Байт, поля которого определяют права доступа к сегменту
6
0...3
limit_2
Старшие биты 16...19 20-разрядного предела сегмента
7
8
Обратим внимание на следующее
• в защищенном режиме размер сегмента не фиксирован, его расположение можно задать в пределах 4 Гбайт.
• поля, определяющие размер сегмента и его начальный (базовый) адрес разорваны, в целях совместимости со старыми микропроцессорами
дело в том, что защищенный режим впервые появился в микропроцессоре i80286. Этот микропроцессор имел 24-разрядную адресную шину и, соответственно, мог адресовать в защищенном режиме до 16 Мбайт оперативной памяти. Для этого ему достаточно было иметь в дескрипторе поле базового адреса 24 бита и поле размера сегмента 16 бит. После появления микропроцессора i80386 с 32-разрядной шиной команд и данных в целях совместимости программ разработчики не стали изменять формат дескриптора, а просто использовали свободные поля. Внутри микропроцессора эти поля объединены. Внешне же они остались разделены, и при программировании с этим приходится мириться.
• размер сегмента в защищенном режиме может достигать 4 Гбайт, то есть занимать все возможное физическое пространство памяти.
Как это возможно, если суммарный размер поля размера сегмента всего 20 бит, что соответствует величине 1 Мбайт? Секрет скрыт в поле гранулярности — бит G. Если бит G=0, то значение в поле размера сегмента означает размер сегмента в байтах, а если G=1, то в страницах. Размер страницы составляет 4 Кбайт. Нетрудно подсчитать, что когда максимальное значение поля размера сегмента составляет Ofrfffh, то это соответствует 1 М страниц, что и соответствует величине 1 М * 4 Кб = 4 Гб.
Таким образом, первый тип защиты - по уровню доступа - реализуется в защищенном режиме благодаря тому, что информация о базовом адресе сегмента и его размере выведена на уровень микропроцессора Þ это позволяет аппаратно контролировать работу программ с памятью и предотвращать обращения по несуществующим адресам либо по адресам, находящимся вне предела, разрешенного полем размера сегмента (limit).
Другой тип защиты - по привилегиям - заключается в том, что сегменты неравноправны в правах доступа к ним. Суть этого механизма защиты по привилегиям заключается в том, что конкретный сегмент может находиться на одном из четырех уровней привилегированности с номерами 0, 1, 2 и 3. Самым привилегированным является уровень 0. Существует ряд ограничений на взаимодействие сегментов с различными уровнями привилегий.
Информация о правах доступа к сегменту содержится в специальном байте AR дескриптора.
Формат байта AR дескриптора сегмента
Номер бита в Символическое Назначение и содержимое
байте AR обозначение
О А Бит доступа (Accessed) к сегменту. Устанавливается аппаратно при обращении к сегменту
1 R Для сегментов кода — это бит доступа по чтению (Readable); определяет, возможно ли чтение из сегмента кода при осуществлении замены префикса сегмента:
О — чтение из сегмента запрещено;
1 — чтение из сегмента разрешено
W Для сегментов данных — это бит записи:
О — модификация данных в сегменте запрещена;
1 — модификация данных в сегменте разрешена
2 С Для сегментов кода — это бит подчинения (Conforming):
1 — подчиненный сегмент кода;
О — обычный сегмент кода;
ED Для многозадачного режима определяет особенности смены значения текущего
уровня привилегий. Для сегментов данных — это бит расширения вниз (Expand
Down); служит для различения сегментов стека и данных, а также определяет
трактовку поля limit:
О — сегмент данных;
1 — сегмент стека
3 I Бит предназначения (Intending):
О — сегмент данных или стека;
1 — сегмент кода
4 S Если S-1 — то это бит сегмента (Segment). Для любых сегментов в памяти равен 1. Назначение и порядок использования сегмента уточняется битами С и R;
если = 0 — то это бит системный (System). Такое состояние бита S говорит о том, что данный дескриптор описывает специальный системный объект, который может и не быть сегментом в памяти
5...6 dpl Поле уровня привилегий сегмента (Descriptor Privilege Level).
Содержит численное значение в диапазоне от О до 3 привилегированности
сегмента
7 Р Бит присутствия (Present):
О — сегмента нет в оперативной памяти в данный момент;
1 — сегмент находится в оперативной памяти в данный момент
Наиболее важные поля байта AR — это
1) 1) dpl (2 бита)
2) 2) биты R/W, C/ED и I, которые вместе определяют тип сегмента.
Поле dpl — часть механизма защиты по привилегиям. Содержит значение 0.. 3 привилегированности сегмента.
Тип сегмента определяется тремя битами. Это поле определяет целевое назначение сегмента.
Рассмотрим назначение некоторых комбинаций этих битов.
Комбинации битов Назначение сегмента
000 Сегмент данных, только для чтения
001 Сегмент данных с разрешением чтения и записи
010 Не определена
011 Сегмент стека с разрешением чтения и записи
100 Сегмент кода с разрешением только выполнения
101 Сегмент кода с разрешением выполнения и чтения из него
110 Подчиненный сегмент кода с разрешением выполнения
111 Подчиненный сегмент кода с разрешением выполнения и чтения из него
Замечание. Возможны два принципиально разных вида сегментов: данных и кода. Сегмент стека является разновидностью сегмента данных, но с особой трактовкой поля размера сегмента. Это объясняется спецификой использования стека (он растет в направлении младших адресов памяти). Таким образом, видно, что поле типа ограничивает использование объявленных сегментов. В частности, программные сегменты не могут быть модифицированы без применения специальных приемов. Доступ к сегменту данных также может быть ограничен только на чтение.
Поддержка страничной модели памяти
Вспомним, при страничной организации ОП делится на блоки (страницы) фиксированного размера 4 Кб (число, кратное степени двойки, Þ операции сложения можно заменить на операции конкатенации).
Диспетчер памяти для каждой страницы формирует соответствующий дескриптор. Дескрипторы страниц собираются в таблицы.
Таблицы страниц
Есть два типа таблиц страниц:
1. 1. Таблица каталогов таблиц страниц (PDE - page directiry entry)
2. 2. Таблица страниц (PTE - page table entry)
Каждая таблица состоит из 1024 (2**10) элементов. Элементами таблиц являются дескрипторы страниц. Размер одного дескриптора - 4б. Þ Þ для хранения одной таблицы необходима одна страница памяти.
Говорят, что осуществляется двухшаговая страничная трансляция адресов.
Рассмотрим составляющие этого механизма.
Для текущей задачи создается одна таблица PDE и одна или более страниц PTE.
Все страницы текущей задачи описаны в таблицах страниц PTE - page table entry.
Одна таблица PTE состоит из 1024 (2**10) элементов - дескрипторов страниц Þ одна таблица страниц описывает пространство памяти в 4 Мб.
Если задаче недостаточно памяти в 4 МБ, создается несколько таблиц PTE.
Пусть текущая задача использует 50 Мб памяти (например, графический редактор) Þ для описания этой памяти надо иметь 14 таблиц PTE.
Для таблиц PTE текущей задачи создается таблица PDE. В ней каждый дескриптор указывает местонахождение одной таблицы PTE. Таблица PDE также состоит из 1024 (2**10) элементов. (Остальные дескрипторы не используются.)
Обратим внимание, что для описания 50 Мб памяти одной задачи требуется 15 страниц = 60Кб памяти (такие потери считаются приемлемыми).
Формат дескриптора страницы
Каждая страница описывается дескриптором (32 бита).
Старшие 20 битов - номер страницы. По существу, это адрес страницы, т.к. приписывание в качестве младших разрядов 12 нулей приводит к получению начального адреса страницы;
! Количество битов, отводимое под номер страницы, определяет объем возможной ОП, которой может пользоваться программа.
• старшие 10 битов определяют номер (индекс) таблицы страниц PTE в таблице PDE
• младшие 10 битов - номер (индекс) дескриптора страницы в таблице PTE (а из этого дескриптора уже выбирается номер физической страницы).
Остальные биты
• (0): present - самый младший (нулевой) бит - так наз. бит присутствия. If present=0, то страница отсутствует в ОП Þ прерывание с передачей управления специальной программе, которая должна загрузить отсутствующую страницу;
• (1): read/write - для защиты памяти
• (2): User/supervisor - для защиты памяти
• (3,4) - нулевые
• (5): access - бит обращения, показывает, что к странице осуществлялся доступ
• (6): dirty - «грязный» бит - отмечает, что данную страницу модифицировали и при замещении ее следующей необходимо сохранить во внешней памяти
• (7,8) - нулевые
• (9,10,11) - зарезервированы для разработки системными программистами подсистемы организации виртуальной памяти
Переход микропроцессора в защищенный режим
Вспомним кратко процесс загрузки ОС и подчеркнем момент перехода в защищенный режим.
Сразу после включения питания или нажатия кнопки сброса микропроцессор начинает свою работу в реальном режиме. В этом режиме он производит действия по тестированию аппаратуры компьютера. После успешного завершения тестирования микропроцессор выполняет начальную загрузку системы, используя программу начальной загрузки, хранящейся на нулевой дорожке диска. Программа начальной загрузки считывает с диска программу инициализации операционной системы и передает ей управление. Действие этой программы зависит от того, в каком режиме работы микропроцессора будет осуществляться дальнейшее функционирование системы. Если в реальном режиме, то операционная система формирует среду и структуры данных для работы в этом режиме. Если же загружаемая операционная система собирается дальше работать в защищенном режиме, то она должна в него специальным образом перейти.
Но прежде чем сделать это, операционная система формирует системные структуры данных (в частности, рассмотренные нами дескрипторные таблицы) для работы в защищенном режиме. Затем может быть осуществлен переход в защищенный режим и выполнение дальнейших действий.
Лекция №12
Система прерываний 32-разрядных микропроцессоров i80x86.
Работа системы прерываний в реальном режиме
Вопросы
1. 1. Понятие прерывания
2. 2. Классификация прерываний
3. 3. Система прерываний.
• Аппаратные средства
• Программные средства системы прерываний
• Таблица векторов прерываний
4. 4. Обработка прерывания в реальном режиме
Прерывание означает временное прекращение основного процесса вычислений для выполнения некоторых запланированных или незапланированных действий, вызываемых работой аппаратуры или программы.
Т.е. это процесс, временно переключающий микропроцессор на выполнение другой программы с последующим возвратом к прерванной программе.
Нажимая клавишу на клавиатуре, мы инициируем немедленный вызов программы, которая распознает клавишу, заносит ее код в буфер клавиатуры, из которого он считывается другой программой. Т.е. на некоторое время микропроцессор прерывает выполнение текущей программы и переключается на программу обработки прерывания, так наз. обработчик прерывания. После того, как обработчик прерывания завершит свою работу, прерванная программа продолжит выполнение с точки, где было приостановлено ее выполнение.
Адрес программы-обработчика прерывания вычисляется по таблице векторов прерываний.
Механизм прерываний поддерживается на аппаратном уровне.
Классификация прерываний
В зависимости от источника, прерывания делятся на
• аппаратные - возникают как реакция микропроцессора на физический сигнал от некоторого устройства (клавиатура, системные часы, клавиатура, жесткий диск и т.д.), по времени возникновения эти прерывания асинхронны, т.е. происходят в случайные моменты времени;
• программные - вызываются искусственно с помощью соответствующей команды из программы (int), предназначены для выполнения некоторых действий операционной системы, являются синхронными;
• исключения - являются реакцией микропроцессора на нестандартную ситуацию, возникшую внутри микропроцессора во время выполнения некоторой команды программы (деление на ноль, прерывание по флагу TF (трассировка)).
Общая классификация прерываний
• внешние - вызываются внешними по отношению к микропроцессору событиями
(по существу - это группа аппаратных прерываний) Вложенных прерываний нет!
• внутренние - возникают внутри микропроцессора во время вычислительного процесса (по существу - это исключительные ситуации и программные прерывания).
Внешние прерывания возникают по сигналу какого-нибудь внешнего устройства.
Внешние прерывания подразделяются на немаскируемые и маскируемые.
В связи с тем, что существуют два специальных внешних сигнала среди входных сигналов процессора, при помощи которых можно прервать выполнение текущей программы и тем самым переключить работу центрального процессора. Это сигналы NMI (no mask interrupt, немаскируемое прерывание) и INTR (interrupt request, запрос на прерывание).
Маскируемые прерывания генерируются контроллером прерываний по заявке определенных периферийных устройств. Контроллер прерываний (выполнен в виде специальной микросхемы i8259A) поддерживает восемь уровней (линий) приоритета; к каждому уровню “привязано” одно периферийное устройство. Именно маскируемые прерывания часто называют аппаратными прерываниями.
В ПК, начиная с IBM PC AT, построенных на базе микропроцессора i80286, используются два контроллера прерываний i8259A; они соединяются последовательно каскадным образом, что увеличивает количество внешних источников прерываний до 15 (каждая по 8).
Обратим внимание. Микросхема i8259А является программируемой.
Немаскируемые прерывания (говорят, что оно одно, т.к. подается на вывод микропроцессора NMI) инициируют источники, требующие безотлагательного вмешательства со стороны микропроцессора.
! В реальном и защищенном режиме работы микропроцессора обработка прерываний осуществляется принципиально разными методами.
Система прерываний. Аппаратные и программные средства системы прерываний
Система прерываний - это совокупность программных и аппаратных средств, реализующих механизм прерываний.
К аппаратным средствам системы прерываний относятся:
• выводы микропроцессора - на них формируются сигналы, извещающие микропроцессор либо о том, что некоторое внешнее устройство «просит уделить ему внимание» (INTR), либо о том, что требуется безотлагательная обработка некоторого события или катастрофическая ошибка (NMI)
• INTR - вывод для входного сигнала запроса на прерывание,
• NMI - вывод для входного сигнала немаскируемого прерывания
• INTA - вывод для выходного сигнала подтверждения получения сигнала прерывания микропроцессором (этот сигнал поступает на одноименный вход микросхемы конроллера 8259А;
• программируемый контроллер прерываний 8259А (предназначен для фиксирования сигналов прерываний от восьми различных внешних устройств; он выполнен в виде микросхемы; обычно используют две последовательно соединенные микросхемы, поэтому кол-во возможных источников внешних прерываний до 15 плюс одно немаскируемое прер.; именно он формирует номер вектора прерывания и выдает его шину данных);
• внешние устройства (таймер, клавиатура, магнитные диски и т.п.)
К программным средствам системы прерываний Реального режима относятся:
• таблица векторов прерываний.
Занимает первый килобайт ОП (адреса 00000h-003FFh).
Она содержит адреса (векторы - «векторы», т.к. два значения для указания адреса) обработчиков прерываний и состоит из 256 (0..255) элементов по 4 байта каждый:
- 2 байта - новое значение для регистра IP
- 2 байта - новое значение для регистра CS.
Расположение таблицы векторов прерываний в процессорах i80286 и старше определяется значением регистра IDTR.
Таблица векторов прерываний инициализируется при запуске системы, но в принципе может быть изменена и перемещена.
Каждый вектор имеет свой номер и называется номером прерывания.
• два флага в регистре флагов flags/eflags:
• IF (Interrupt Flag) - флаг прерывания. Предназначен для маскирования (запрещения) аппаратных прерываний. Если IF=1, микропроцессор обрабатывает внешние прерывания, если = 0, то игнорирует;
• TF(Trace Flag) - флаг трассировки. Если он=1, то микропроцессор переходит в режим покомандной работы. В этом режиме в микропроцессоре генерируется внутреннее прерывание с номером 1;
• машинные команды микропроцессора: int, into (прерывание по переполнению), iret, cli, sti
Обработка прерывания в реальном режиме
производится в три этапа:
1) 1) прекращение выполнения текущей программы;
Должно произойти так, чтобы потом вернуться и продолжить работу. Для этого необходимо сохранить содержимое регистров, так как они являются ресурсами, разделяемыми между программами.
Обязательными для сохранения являются регистры cs, ip, flags (пара CS:IP содержит адрес команды, с которой необходимо начать выполнение после возврата, flags - состояние флагов после выполнения последней команды прерванной программы).
!!! Эти регистры сохраняются микропроцессором автоматически. Сохранение остальных регистров - должно обеспечиваться программистом !!!
Наиболее удобным местом хранения регистров является стек.
После сохранения регистров в стеке микропроцессор сбрасывает бит флага IF (т.е.=0) (!!! В стеке при этом записан регистр flags с еще установленным IF!!!) Этим предотвращается возможность возникновения вложенных внешних прерываний и порча регистров исходной программы вследствие неконтролируемых действий со стороны программы - обработчика вложенного прерывания. После того как необходимые действия по сохранению контекста завершены, обработчик аппаратного прерывания может разрешить вложенные прерывания командой sti.
2) 2) переход к выполнению и выполнение программы обработки прерывания;
Здесь определяется источник прерывания и вызывается соответствующий обработчик прерывания.
В реальном режиме микропроцессора допускается 256 источников - по кол-ву элементов таблицы векторов прерываний.
Структура элемента:
• 2 байта - значение смещения начала программы-обработчика прерывания от начала кодового сегмента
• 2 байта - значение базового адреса сегмента, в котором находится программа-обработчик.
Как определить адрес, по которому находится вектор прерывания с номером N ?
смещение эл-та таблицы векторов прерываний = N * 4
Полный размер таблицы ? 4*256=1024
Итак на втором этапе микропроцессор
1. 1. По номеру источника прерывания определяет смещение в таблице векторов прерываний
2. 2. Помещает первые два байта в регистр IP
3. 3. Помещает вторые два байта в регистр CS
4. 4. Передыет управление по адресу CS:IP
Далее выполняется сама программа обработки прерывания.
(Она тоже может быть прервана поступлением запроса от более приоритетного источника. Все источники прерывания имеют приоритеты.)
3) возврат управления прерванной программе.
Необходимо привести стек в состояние, в котором он был сразу после передачи управления данной процедуре. Для этого программист должен указать необходимые действия по восстановлению регистров и очистке стека. !! Этот участок необходимо защитить от возможного искажения содержимого регистров (в результате появления аппаратного прерывания) с помощью команды cli.
Последние команды в в обработчике прерывания - sti, iret
sti - разрешить аппаратные прерывания (устанавливает флаг IF=1, не имеет операндов).
iret - извлечь последовательно три слова из стека и поместить их соответственно в регистры ip, cs, flags.
Лекция №13
Система прерываний 32-разрядных микропроцессоров i80x86.
Работа системы прерываний в защищенном режиме
Вопросы
1. 1. Отличия работы системы прерываний в защищенном режиме
2. 2. Классификация прерываний в защищенном режиме
3. 3. Таблица дескрипторов прерываний IDT
4. 4. Обобщенная схема обработки прерывания в защищенном режиме
5. 5. Шлюз ловушки
6. 6. Шлюз прерывания
7. 7. Шлюз задачи
8. 8. Резюме
Обработка прерываний в защищенном режиме отличается от обработки в реальном режиме так же сильно, как и защищенный режим отличается от реального.
Потому что:
1. 1. В защищенном режиме немного изменено распределение номеров векторов прерываний. (Можно самостоятельно посмотреть по таблицам, например, в книге Аssembler Юрова, Хорошенко на стр. 439-441)
2. 2. Принципиально иным является механизм обработки прерываний.
Классификация прерываний в защищенном режиме
Прерывания и исключения можно разделить на несколько групп:
1. 1. сбой;
2. 2. ловушка;
3. 3. аварийное завершение.
Это деление производится в соответствии со следующими признаками:
• какая информация сохраняется о месте возникновения прерывания (исключения)?
• возможно ли возобновление прерванной программы?
Исходя из этих признаков, можно дать следующие характеристики вышеперечисленным группам:
Сбой (ошибка) — прерывание или исключение, при возникновении которого в стек записываются значения регистров cs: ip, указывающие на команду, вызвавшую данное прерывание. Это позволяет, получив доступ к сегменту кода, исправить ошибочную команду в обработчике прерывания и, вернув управление программе, фактически осуществить ее рестарт (вспомните, что в реальном режиме при возникновении прерывания в стеке всегда запоминается адрес команды, следующей за той, которая вызвала это прерывание).
Ловушка — прерывание или исключение, при возникновении которого в стек записываются значения регистров cs: ip, указывающие на команду, следующую за командой, вызвавшей данное прерывание.
Так же, как и в случае ошибок возможен рестарт программы. Для этого необходимо лишь исправить в обработчике прерывания соответствующие код или данные, послужившие источником ошибки. После этого перед возвратом управления нужно скорректировать значение ip в стеке на длину команды, вызвавшей данное прерывание.
Механизм ловушек похож на механизм прерываний в реальном режиме, хотя не во всем. Здесь есть один тонкий момент. Если прерывание типа ловушки возникло в команде передачи управления jmp, то содержимое пары cs: ip в стеке будет отражать результат этого перехода, то есть соответствовать команде назначения.
Аварийное завершение — прерывание, при котором информация о месте его возникновения недоступна или неполна и поэтому рестарт практически невозможен, если только данная ситуация не была запланирована заранее.
Þ соответствующие программы-обработчики ошибок, ловушек и аварий будут отличаться алгоритмами работы.
Микропроцессор жестко определяет, какие прерывания являются ошибками, ловушками и авариями.
Замечания.
Для некоторых номеров прерываний в реальном режиме возможны 2 источника прерывания (развитие микропроцессоров).
Некоторые прерывания при своем возникновении дополнительно генерируют и записывают в стек так называемый код ошибки. Этот код может впоследствии использоваться для установления источника прерывания. Код ошибки записывается в стек вслед за содержимым регистров eflags, cs и eip.
Þ можно распознать истинный источник прерывания (если есть неоднозначность).
Таблица дескрипторов прерываний IDT
Вместо таблицы векторов прерываний система прерываний имеет дело с таблицей дескрипторов прерываний (IDT, interrupt descriptor table)
Таблица IDT связывает каждый вектор прерывания с дескриптором процедуры или задачи, которая будет обрабатывать это прерывание.
Элементами таблицы IDT являются дескрипторы - Размер дескриптора = 8 байтам.
(Т.е. формат таблицы IDT подобен формату GDT и LDT.)
Дескрипторы в таблице прерываний обычно называются шлюзами (иногда коммутаторами).
Шлюзы предназначены для указания точки входа в программу обработки прерывания.
В дескрипторной таблице прерываний IDT могут содержаться шлюзы трех типов:
• шлюз ловушки;
• шлюз прерывания;
• шлюз задачи.
Физически микропроцессор отличает шлюзы по содержимому полей.
Особенности таблицы IDT:
• нулевой дескриптор используется для описания шлюза для программы обработки исключительной ситуации 0 (ошибка деления);
(в таблице GDT отсутствует)
• дескрипторы в таблице IDT строго упорядочены в соответствии с номерами прерываний.
В таблицах GDT и LDT порядок описания дескрипторов роли не играет, хотя и допускается наличие некоторых соглашений по их упорядоченности;
• размерность таблицы IDT — не более 256 элементов размером по восемь байт, по числу возможных источников прерываний.
В отдельных случаях есть смысл описывать все 256 дескрипторов этой таблицы, формируя для неиспользуемых номеров прерываний шлюзы-заглушки. Это позволит корректно обрабатывать все прерывания, даже если они и не планируются к использованию в данной задаче. Если этого не сделать, то при незапланированном прерывании с номером, превышающим пределы IDT для данной задачи, будет возникать исключительная ситуация общей защиты (с номером 13 (ODh)).
Адрес и длина таблицы IDT содержатся в регистре idtr.
Заметим, что в реальном режиме регистр idtr также содержит адрес таблицы прерываний, но при этом каждый вектор занимает 4 байта и содержит 32-разрядный адрес в формате CS:IP. Начальное значение этого регистра равно нулю, но внего можно занести и другое значение.
!Þ Возможно произвольное размещение в памяти этой таблицы не только в защищенном режиме, но и реальном.
В защищенном режиме произвести загрузку регистра idtr может только код с максимальным уровнем привилегий.
!
Доступ к таблице IDT со стороны пользовательских (прикладных) программ невозможен.
Обобщенная схема обработки прерывания в защищенном режиме
При возникновении прерывания от источника с номером п микропроцессор, находясь в защищенном режиме, выполняет следующие действия:
1. Определяет местонахождение таблицы IDT, адрес и размер которой содержится в регистре idtr.
2. Складывает значение адреса, по которому размещена IDT, и значение n*8. По данному смещению в таблице IDT должен находиться 8-байтовый дескриптор, определяющий местоположение процедуры обработки прерывания.
3. 3. Переключается на процедуру обработки прерывания.
Шлюз ловушки
Формат шлюза ловушки —
offset_2
p
dpl
1 1 1 1
000
не используется
63 47 39 36 32
indicator
offset_1
31 15 0
Offset_1, offset_2 - первая и вторая половины смещения в сегменте
indicator - Селектор, указывающий на дескриптор в LDT или GDT
000 - Постоянное значение
type - 1111 - Тип шлюза — ловушка
dpl - Определение минимального уровня привилегий задачи, которая может передать управление обработчику прерываний через данный шлюз (обычно dpl = 112)
p - Бит присутствия (0 или 1)
Когда возникает прерывание и его вектор выбирает в таблице IDT дескриптор шлюза с типом ловушки, микропроцессор сохраняет в стеке информацию о месте, где он прервал работу текущей программы. После этого он передает управление в соответствии с полями indicator и offset.
Поле indicator представляет селектор одной из таблиц, GDT или LDT, в зависимости от состояния бита TI в нем.
Поле offset определяет смещение в сегменте кода. Этот сегмент кода описывается дескриптором, на который указывает селектор в поле indicator.
После того как управление было передано обработчику прерывания, он выполняет свою работу до тех пор, пока не встретит команду iret. Эта команда восстанавливает из стека состояние регистров eflags, cs и eip на момент возникновения прерывания, и работа приостановленной программы продолжается.
! При подготовке выхода из программы обработки прерывания имейте в виду, что команда iret ничего не знает о возможности наличия в стеке кода ошибки, поэтому для корректного возврата управления не забудьте при необходимости предварительно удалить командой pop код ошибки из стека.
Шлюз прерывания
Шлюз прерывания отличается только полем типа = 1110.
При возникновении прерывания, которому соответствует шлюз прерывания, микропроцессор выполняет те же действия, что и для шлюза ловушки, но с одним важным отличием:
при передаче управления обработчику прерывания через шлюз прерывания, микропроцессор сбрасывает флаг прерывания в регистре eflags в 0, запрещая тем самым обработку аппаратных прерываний. Этот факт имеет важное значение для программирования обработчиков аппаратных и программных прерываний.
Совет. Если у вас есть сомнение в том, какой из шлюзов - прерывания или ловушки - использовать — применяйте шлюз прерывания.
Шлюз задачи
Шлюз задачи отличается
1) поле типа = 1110
2) поле indicator вместо селектора сегмента кода указывает на дескриптор сегмента состояния задачи (TSS).
Осуществляется переход на новую задачу, которая будет осуществлять обработку прерывания. Задача является частью механизма многозадачности. Т.е. производится переключение задач. (Текущее состояние прерываемой задачи аппаратно сохраняется в ее собственном TSS.)
Для каждой задачи определяется сегмент состояния задачи TSS (Task Segment Status) со строго определенной структурой. В этом сегменте есть поля для сохранения всех регистров общего назначения, некоторых системных регистров и другой информации. Всю совокупность этой информации называют контекстом задачи. Этот сегмент описывается, подобно другим сегментам, дескриптором в таблице GDT или LDT.
Если с помощью некоторого селектора обратиться к такому дескриптору, то микропроцессор осуществит переключение на соответствующую задачу. Подобные переключения могут, в частности, осуществляться операционной системой, поддерживающей многозадачность, в соответствии с некоторой дисциплиной разделения времени между задачами. Переключение задач может производиться обычными командами межсегментной передачи управления либо по возникновению прерывания при переходе к обработчику прерывания через шлюз задачи.
РЕЗЮМЕ
Шлюзы ловушки и прерывания с помощью полей indicator и offset определяют адрес, по которому находится точка входа в программу обработки прерывания.
Шлюз задачи предназначен для реализации принципиально иного перехода к обработчику прерываний — с использованием механизма переключения задач.
! Обратим внимание, разработчики современных ОС редко используют шлюз задачи, т.к. переключение на другую задачу требует существенно больших затрат времени, а полное сохранение всех рабочих регистров часто не требуется. Таким образом, используются чаще всего шлюзы прерываний.
Материал к лекции
«Архитектура операционных систем
Основные принципы построения операционных систем»
(по Таненбауму)
Среди множества принципов, которые используются при построении ОС, перечислим несколько наиболее важных
Принцип модульности
Под модулем в общем случае понимают функционально законченный элемент системы, выполненный в соответствии с принятыми межмодульными интерфейсами.
По своему определению модуль предполагает возможность без труда заменить его на другой при наличии заданных интерфейсов.
Способы обособления составных частей ОС в отдельные модули могут существенно различаться, но чаще всего разделение происходит именно по функциональному признаку. В значительной степени разделение системы на модули определяется используемым методом проектирования ОС (снизу вверх или наоборот).
Мы говорим о системных программных модулях (они являются программными ресурсами и могут быть распределены между выполняющимися процессами).
Программные модули могут быть однократно и многократно используемыми.
Однократно используемыми назвают такие модули, которые могут быть правильно выполнены только один раз. Т.е. в процессе выполнения они могут испортить себя (повреждается часть кода или исходные данные). Очевидно, что они являются неделимыми ресурсами. Эти модули обычно используются на этапе загрузки ОС (файлы на системном диске, в которых записаны эти модули при этом не портятся, поэтому могут быть использованы при следующих запусках).
Многократно используемые программные модули делятся на
• привилегированные,
• повторно входимые и
• реентерабельные модули.
Привилегированные работают в привилегированном режиме (т.е. при отключенной системе прерываний). Таким образом, никакие внешние события не могут нарушить порядок их выполнения). Эти модули являются попеременно разделяемым ресурсом.
Непривилегированные модули – это обычные программные модули, которые могут быть прерваны во время своей работы.
(В общем случае их нельзя считать разделяемыми, так как после прерывания выполнения такого модуля, исполняемого в рамках одного процесса, запусить его еще раз по требованию другого процесса, то промежуточные результаты прерванных вычислений могут быть потерянными.
Противоположны им реентерабельные модули (reenterable – допускающий повторное обращение).
Они допускают повторное многократное прерывание своего исполнения и повторный запуск.
Для этого они создаются таким образом, чтобы было обеспечено сохранение промежуточных вычислений и возврат с прерванной точки. Это может быть реализовано двумя способами: с помощью статических и динамических методов выделения памяти под сохраняемые значения.
Чаще используется динамический метод.
С помощью обращения из системной привилегированной секции осуществляется запрос на получение в системной области памяти блока ячеек, необходимого для размещения текущих данных. При этом на вершину стека помещается указатель на начало выделенной области и ее объем. Теперь включается система прерываний (завершилась привилегированная част модуля). Поэтому возможно прерывание во время выполнения основной части модуля. Если прерывание не возникает, то после завершения основной части модуля выполняется запрос на освобождение блока системной области памяти. Если возникает прерывание и другой процесс обращается к этому же самому реентерабельному модулю, для нового процесса вновь заказывается новый блок памяти и на вершину стека записывается новый указатель.
При статическом способе выделения памяти заранее для фиксированного числа процессов резервируются области памяти, в которых будут располагаться переменные реентерабельных модулей. Для каждого процесса – своя область.
Чаще всего такими процессами являются процессы ввода\вывода и речь идет о реентерабельных драйверах, которые могут управлять параллельно несколькими однотипными устройствами).
Существуют еще и повторно входимые (re-entrance) модули. Они также допускают многократное паралльное использование, но в отличие от реентерабельных, их нельзя прерывать. Они состоят из привилегированных секций и повторное обращение к ним возможно только после завершения какой-нибудь из секций. Другими словами, в повторно входимых модулях четко предопределены все допустимые точки входа.
Заметим, что повторно входимые модули встречаются чаще, чем реентерабельные.
Принцип модульности отражает технологические и эксплуатационные свойства системы. Наибольший эффект от его использования достижим в случае, когда принцип распространен одновременно на операционную систему, прикладные программы и аппаратуру.
Принцип функциональной избирательности
В ОС выделяется некоторая часть важных модулей, которые должны постоянно находиться в оперативной памяти для более эффективной организации вычислительного процесса. Эту часть в ОС называют ядром, так как это действительно основа системы.
При формировании состава ядра требуется учитывать два противоречивых требования.
1) В состав ядра должны войти наиболее часто используемые системные модули.
2) Количество модулей должно быть таковым, чтобы объем памяти, занимаемый ядром, был бы не слишком большим.
В состав ядра, как правило, входят модули
• по управлению системой прерываний,
• средства по переводу программ из состояния счета в состояние ожидания, готовности и обратно,
• средства по распределению таких основных ресурсов, как оперативная память и процессор.
Помимо программных модулей, входящих в состав ядра и постоянно располагающихся в оперативной памяти, может быть много других системных программных модулей, которые получают название транзитных. Транзитные программные модули загружаются в оперативную память только при необходимости и в случае отсутствия свободного пространства могут быть замещены другими транзитными модулями.
Принцип генерируемости ОС
Основное положение этого принципа определяет такой способ исходного представления центральной системной управляющей программы ОС (ее ядра и основных компонентов, которые должны постоянно находиться в оперативной памяти), который позволял бы настраивать эту системную супервизорную часть, исходя из конкретной конфигурации конкретного вычислительного комплекса и круга решаемых задач.
Эта процедура проводится редко, перед достаточно протяженным периодом эксплуатации ОС.
Процесс генерации осуществляется с помощью специальной программы-генератора и соответствующего входного языка для этой программы, позволяющего описывать программные возможности системы и конфигурацию машины. В результате генерации получается полная версия ОС. Сгенерированная версия ОС представляет собой совокупность системных наборов модулей и данных.
Упомянутый раньше принцип модульности положительно проявляется при генерации ОС. Он существенно упрощает настройку ОС на требуемую конфигурацию вычислительной системы.
В наши дни при использовании персональных компьютеров с принципом генерируемости ОС можно столкнуться разве что только при работе с Linux. В этой UNIX-системе имеется возможность не только использовать какое-либо готовое ядро ОС, но и самому сгенерировать (скомпилировать) такое ядро, которое будет оптимальным для данного конкретного персонального компьютера и решаемых на нем задач. Кроме генерации ядра в Linux имеется возможность указать и набор подгружаемых драйверов и служб, то есть часть функций может реализовываться модулями, непосредственно входящими в ядро системы, а часть — модулями, имеющими статус подгружаемых, транзитных.
В остальных современных распространенных ОС для персональных компьютеров конфигурирование ОС под соответствующий состав оборудования осуществляется на этапе инсталляции, а потом состав драйверов и изменение некоторых параметров ОС может быть осуществлено посредством редактирования конфигурационного файла.
Принцип функциональной избыточности
Этот принцип учитывает возможность проведения одной и той же работы различными средствами.
В состав ОС может входить несколько типов мониторов (модулей супервизора, управляющих тем или другим видом ресурса), различные средства организации коммуникаций между вычислительными процессами.
Наличие нескольких типов мониторов, нескольких систем управления файлами позволяет пользователям быстро и наиболее адекватно адаптировать ОС к определенной конфигурации вычислительной системы, обеспечить максимально эффективную загрузку технических средств при решении конкретного класса задач, получить максимальную производительность при решении заданного класса задач.
Принцип виртуализации
Построение виртуальных ресурсов, их распределение и использование теперь используется практически в любой ОС. Этот принцип позволяет представить структуру системы в виде определенного набора планировщиков процессов и распределителей ресурсов (мониторов) и использовать единую централизованную схему распределения ресурсов.
Наиболее естественным и законченным проявлением концепции виртуальности является понятие виртуальной машины. По сути, любая операционная система, являясь средством распределения ресурсов и организуя по определенным правилам управление процессами, скрывает от пользователя и его приложений реальные аппаратные и иные ресурсы, заменяя их некоторой абстракцией. В результате пользователи видят и используют виртуальную машину как некое устройство, способное воспринимать их программы, написанные на определенном языке программирования, выполнять их и выдавать результаты. При таком языковом представлении пользователя совершенно не интересует реальная конфигурация вычислительной системы, способы эффективного использования ее компонентов и подсистем. Он мыслит и работает с машиной в терминах используемого им языка и тех ресурсов, которые ему предоставляются в рамках виртуальной машины.
Чаще виртуальная машина, предоставляемая пользователю, воспроизводит архитектуру реальной машины, но архитектурные элементы в таком представлении выступают с новыми или улучшенными характеристиками, часто упрощающими работу с системой. Характеристики могут быть произвольными, но чаще всего пользователи желают иметь собственную «идеальную» по архитектурным характеристикам машину в следующем составе:
• единообразная по логике работы память (виртуальная) практически неограниченного объема. Среднее время доступа соизмеримо со значением этого параметра оперативной памяти. Организация работы с информацией в такой памяти производится в терминах обработки данных — в терминах работы с сегментами данных на уровне выбранного пользователем языка программирования;
• произвольное количество процессоров (виртуальных), способных работать параллельно и взаимодействовать во время работы. Способы управления процессорами, в том числе синхронизация и информационные взаимодействия, реализованы и доступны пользователям на уровне используемого языка в терминах управления процессами;
• произвольное количество внешних устройств (виртуальных), способных работать с памятью виртуальной машины параллельно или последовательно, асинхронно или синхронно по отношению к работе того или иного виртуального процессора, которые инициируют работу этих устройств. Информация, передаваемая или хранимая на виртуальных устройствах, не ограничена допустимыми размерами. Доступ к такой информации осуществляется на основе либо последовательного, либо прямого способа доступа в терминах соответствующей системы управления файлами. Предусмотрено расширение информационных структур данных, хранимых на виртуальных устройствах.
Степень приближения к «идеальной» виртуальной машине может быть большей или меньшей в каждом конкретном случае. Чем больше виртуальная машина, реализуемая средствами ОС на базе конкретной аппаратуры, приближена к «идеальной» по характеристикам машине и, следовательно, чем больше ее архитектурно-логические характеристики отличны от реально существующих, тем больше степень виртуальности у полученной пользователем машины.
Одним из аспектов виртуализации является организация возможности выполнения в данной ОС приложений, которые разрабатывались для других ОС. Другими словами, речь идет об организации нескольких операционных сред.
Реализация этого принципа позволяет такой ОС иметь очень сильное преимущество перед аналогичными ОС, не имеющими такой возможности.
Примером реализации принципа виртуализации может служить VDM-машина (virtual DOS machine) — защищенная подсистема, предоставляющая полную среду MS-DOS и консоль для выполнения MS-DOS приложений. Одновременно может выполняться практически произвольное число VDM-сессий. Такие VDM-машины имеются и в системах Microsoft Windows, и в OS/2.
Принцип независимости программ от внешних устройств
Этот принцип реализуется сейчас в подавляющем большинстве ОС общего применения. Мы уже говорили о нем, рассматривая принципы организации ввода/ вывода. Пожалуй, впервые наиболее последовательно данный принцип был реализован в ОС UNIX. Реализован он и в большинстве современных ОС для ПК. Напомним, этот принцип заключается в том, что связь программ с конкретными устройствами производится не на уровне трансляции программы, а в период планирования ее исполнения. В результате перекомпиляция при работе программы с новым устройством, на котором располагаются данные, не требуется.
Принцип позволяет одинаково осуществлять операции управления внешними устройствами независимо от их конкретных физических характеристик. Например, программе, содержащей операции обработки последовательного набора данных, безразлично, на каком носителе эти данные будут располагаться. Смена носителя и данных, размещаемых на них (при неизменности структурных характеристик данных), не принесет каких-либо изменений в программу, если в системе реализован принцип независимости.
Принцип совместимости
Одним из аспектов совместимости является способность ОС выполнять программы, написанные для других ОС или для более ранних версий данной операционной системы, а также для другой аппаратной платформы.
Необходимо разделять вопросы двоичной совместимости и совместимости на уровне исходных текстов приложений. Двоичная совместимость достигается в том случае, когда можно взять исполняемую программу и запустить ее на выполнение на другой ОС. Для этого необходимы: совместимость на уровне команд процессора, совместимость на уровне системных вызовов и даже на уровне библиотечных вызовов, если они являются динамически связываемыми.
Совместимость на уровне исходных текстов требует наличия соответствующего транслятора в составе системного программного обеспечения, а также совместимости на уровне библиотек и системных вызовов. При этом необходима перекомпиляция имеющихся исходных текстов в новый выполняемый модуль.
Гораздо сложнее достичь двоичной совместимости между процессорами, основанными на разных архитектурах. Для того чтобы один компьютер выполнял программы другого (например, программу для ПК типа IBM PC желательно выполнить на ПК типа Macintosh фирмы Apple), этот компьютер должен работать с машинными командами, которые ему изначально непонятны. В таком случае процессор типа 680x0 (или PowerPC) на Мае должен исполнять двоичный код, предназначенный для процессора 180x86. Процессор 80x86 имеет свои собственные дешифратор команд, регистры и внутреннюю архитектуру. Процессор 680x0 не понимает двоичный код 80x86, поэтому он должен выбрать каждую команду, декодировать ее, чтобы определить, для чего она предназначена, а затем выполнить эквивалентную подпрограмму, написанную для 680x0. Так как к тому же у 680x0 нет в точности таких же регистров, флагов и внутреннего арифметико-логического устройства, как в 80x86, он должен имитировать все эти элементы с использованием своих регистров или памяти. И он должен тщательно воспроизводить результаты каждой команды, что требует специально написанных подпрограмм для 680x0, гарантирующих, что состояние эмулируемых регистров и флагов после выполнения каждой команды будет в точности таким же, как и на реальном 80x86. Выходом в таких случаях является использование так называемых прикладных сред или эмуляторов. Учитывая, что основную часть программы, как правило, составляют вызовы библиотечных функций, прикладная среда имитирует библиотечные функции целиком, используя заранее написанную библиотеку функций аналогичного назначения, а остальные команды эмулирует каждую по отдельности.
Одним из средств обеспечения совместимости программных и пользовательских интерфейсов является соответствие стандартам POSIX. Использование стандарта POSIX позволяет создавать программы в стиле UNIX, которые впоследствии могут легко переноситься из одной системы в другую.
Принцип открытой и наращиваемой ОС
Открытая ОС доступна для анализа как пользователям, так и системным специалистам, обслуживающим вычислительную систему. Наращиваемая (модифицируемая, развиваемая) ОС позволяет не только использовать возможности генерации, но и вводить в ее состав новые модули, совершенствовать существующие и т. д. Другими словами, необходимо, чтобы можно было легко внести дополнения и изменения, если это потребуется, и не нарушить целостность системы. Прекрасные возможности для расширения предоставляет подход к структурированию ОС по типу клиент—сервер с использованием микроядерной технологии. В соответствии с этим подходом ОС строится как совокупность привилегированной управляющей программы и набора непривилегированных услуг — «серверов». Основная часть ОС остается неизменной и в то же время могут быть добавлены новые серверы или улучшены старые.
Этот принцип иногда трактуют как расширяемость системы.
К открытым ОС, прежде всего, следует отнести UNIX-системы и, естественно, ОС Linux.
Принцип мобильности (переносимости)
Операционная система относительно легко должна переноситься с процессора одного типа на процессор другого типа и с аппаратной платформы (которая включает наряду с типом процессора и способ организации всей аппаратуры компьютера, иначе говоря, архитектуру вычислительной системы) одного типа на аппаратную платформу другого типа. Заметим, что принцип переносимости очень близок принципу совместимости, хотя это и не одно и то же.
Написание переносимой ОС аналогично написанию любого переносимого кода — нужно следовать некоторым правилам. Во-первых, большая часть ОС должна быть написана на языке, который имеется на всех системах, на которые планируется в дальнейшем ее переносить. Это, прежде всего, означает, что ОС должна быть написана на языке высокого уровня, предпочтительно стандартизованном, например на языке С. Программа, написанная на ассемблере, не является в общем случае переносимой. Во-вторых, важно минимизировать или, если возможно, исключить те части кода, которые непосредственно взаимодействуют с аппаратными средствами. Зависимость от аппаратуры может иметь много форм. Некоторые очевидные формы зависимости включают прямое манипулирование регистрами и другими аппаратными средствами. Наконец, если аппаратно-зависимый код не может быть полностью исключен, то он должен быть изолирован в нескольких хорошо локализуемых модулях. Аппаратно-зависимый код не должен быть распределен по всей системе. Например, можно спрятать аппаратно-зави-симую структуру в программно задаваемые данные абстрактного типа. Другие модули системы будут работать с этими данными, а не с аппаратурой, используя набор некоторых функций. Когда ОС переносится, то изменяются только эти данные и функции, которые ими манипулируют.
Введение стандартов POSIX преследовало цель обеспечить переносимость создаваемого программного обеспечения.
Принцип обеспечения безопасности вычислений
Обеспечение безопасности при выполнении вычислений является желательным свойством для любой многопользовательской системы. Правила безопасности определяют такие свойства, как защита ресурсов одного пользователя от других и установление квот по ресурсам для предотвращения захвата одним пользователем всех системных ресурсов (таких, как память).
Обеспечение защиты информации от несанкционированного доступа является обязательной функцией сетевых операционных систем.
Лекция №
Сетевые операционные системы
Сетевые и распределенные ОС
Термин "сетевая ОС"
Функциональные компоненты сетевой ОС
Сетевые службы и сетевые сервисы
Подходы к построению сетевых ОС
Одноранговые и серверные сетевые ОС
ОС компьютерной сети во многом аналогична ОС автономного компьютера.
Компьютерная сеть – это набор компьютеров, связанных коммуникационной системой и снабженных соответствующим ПО, позволяющим пользователям сети получать доступ к ресурсам этого набора компьютеров.
Компьютерная сеть позволяет пользователю работать со своим компьютером как с автономным и добавляет к этому возможность доступа к информационным и аппаратным ресурсам других компьютеров.
Сетевая ОС играет роль интерфейса, экранирующего от пользователя все детали низкоуровневых программно-аппаратных средств сети.
В зависимости от того, какой виртуальный образ создает ОС для того, чтобы подменить им реальную аппаратуру компьютерной сети, различают
• Сетевые ОС
• Распределенные ОС.
Пользователь сетевой ОС всегда помнит, что он имеет дело с сетевыми ресурсами.
Он всегда знает, где хранятся его файлы, знает, на какой машине выполняется его задание.
В идеальном случае сетевая ОС должна представить пользователю сетевые ресурсы в виде ресурсов единой централизованной виртуальной машины. Такие ОС называют распределенными ОС.
Распределенная ОС, распределяя работы по различным машинам системы, заставляет набор сетевых машин работать как виртуальный унифицированный процессор. Пользователь такой ОС, вообще говоря, не знает, на какой машине выполняется его задание.
Таким образом, распределенная ОС является единой ОС в масштабах вычислительной системы. Каждый компьютер сети, работающий под управлением распределенной ОС, выполняет часть функций этой ОС.
В настоящее время практически все сетевые ОС еще очень далеки от истинной распределенности.
Сетевая ОС может рассматривается как набор ОС отдельных компьютеров, составляющих сеть, причем на разных компьютерах сети могут выполняться одинаковые или разные ОС. Каждая из этих ОС принимает независимые решения о создании и завершении своих собственных процессов и управлении локальными ресурсами. Но также и включает взаимно согласованный набор коммуникационных протоколов для организации взаимодействия процессов, выполняющихся на разных компьютерах сети, и разделения ресурсов компьютеров между пользователями сети.
С другой стороны, если ОС отдельного компьютера позволяет ему работать в сети, т.е. предоставлять свои ресурсы в общее пользование и потреблять ресурсы других компьютеров, то такая ОС отдельного компьютера также называется сетевой ОС.
Итак, термин сетевая ОС используется в двух значениях: 1) как совокупность ОС всех компьютеров сети, 2) ОС отдельного компьютера, способного работать в сети.
Функциональные компоненты сетевой ОС
• Средства управления локальными ресурсами
(реализуют функции ОС автономного компьютера)
• Сетевые средства:
◦ Серверная часть ОС (средства для предоставления локальных ресурсов и услуг в общее пользование)
◦ Клиентская часть ОС (средства запроса доступа к удаленным ресурсам и услугам)
◦ Транспортные средства ОС (совместно с коммуникационной системой обеспечивают передачу сообщений между компьютерами):
▪ формируют сообщения,
▪ разбивают сообщения на части (пакеты, кадры),
▪ преобразуют имена компьютеров в числовые адреса,
▪ организуют надежную доставку сообщений,
▪ определяют маршрут в сложной сети и др.
Правила взаимодействия компьютеров при передачи сообщений по сети фиксируются в коммуникационных протоколах (Ethernet, Token Ring, IP, IPX и др)
Основные функции клиентской части
• способность отличить запрос к удаленному файлу от запроса к локальному файлу, т.е. клиентская часть ОС сама распознает и перенаправляет (redirect) запрос к удаленной машине ( клиентскую часть часто называют редиректором);
• Преобразование форматов запросов к ресурсам:
принимает запросы от приложений на доступ к сетевым ресурсам в форме, принятой в локальной части ОС. Выполняет преобразование запроса в соответствии с требованиями серверной части ОС, работающей на компьютере, где расположен требуемый ресурс. Принимает ответы от серверной части и преобразует их в локальный формат.
Сетевые службы и сетевые сервисы
Совокупность серверной и клиентской частей ОС, предоставляющих доступ к конкретному типу ресурса компьютера через сеть, наз. сетевой службой.
Например, клиентская и серверная части ОС, которые совместно обеспечивают доступ через сеть к файловой системе компьютера, образуют файловую службу.
Услуги, которые сетевая служба предоставляет пользователям сети, наз. сетевым сервисом.
Каждая служба связана с определенным типом сетевых ресурсов и определенным способом доступа к этим ресурсам.
Например,
служба печати обеспечивает доступ к разделяемым принтерам и предоставляет сервис печати;
почтовая служба предоставляет доступ к информационному ресурсу сети -электронным письмам.
Способом доступа отличается, например, служба удаленного доступа – она предоставляет пользователям доступ ко всем ресурсам сети через коммутируемые телефонные каналы.
Среди сетевых служб выделяются
• службы, ориентированные на пользователя
• службы, ориентированные на администратора.
Службы, ориентированные на администратора, используются для организации работы сети.
Например,
служба каталогов (централизованная справочная служба), предназначенная для для ведения базы данных обо всех пользователях сети, в некоторых системах – и для базы программных и аппаратных компонентов сети (например, NDS компании Novell; StreetTalk компании Banyan);
служба мониторинга сети позволяет захватывать и анализировать сетевой трафик;
служба безопасности (частьюее является логический вход с проверкой пароля);
служба резервного копирования и архивирования.
Сетевая служба может быть представлена в ОС либо обеими (клиентской и серверной) частями, либо только одной из них.
Подходы к построению сетевых ОС
Различаются глубиной внедрения сетевых служб в ОС:
• сетевые службы глубоко встроены в ОС;
• сетевые службы объединены в виде некоторого набора – оболочки;
• сетевые службы производятся и поставляются в виде отдельного продукта.
Первоначально сетевые ОС представляли собой совокупность уже существующей локальной ОС и надстроенной над ней сетевой оболочки.
Современные сетевые ОС (более эффективный подход) с самого начала проектируются специально для работы в сети. Сетевые функции глубоко встраиваются в основные модули системы логическая стройность ОС, простота эксплуатации и модификации, высокая производительность, отсутствует избыточность.
Например, сетевая ОС LAN Manager является надстройкой над локальной ОС OS/2.
ОС со встроенными сетевыми службами – Windows NT, все версии UNIX, NetWare, OS/2 Warp.
Другой вариант сетевых служб – объединение их в виде некоторого набора (оболочки). В этом случае все службы должны быть согласованы между собой, т.е. могут обращаться друг к другу, могут иметь в своем составе общие компоненты (например, общую подсистему аутентификации).
Оболочка представляет собой самостоятельный программный продукт.
Примеры – LAN Server, LAN Manager.
Сетевые оболочки подразделяются на клиентские и серверные.
Оболочка, которая преимущественно содержит клиентские части сетевых служб, наз. клиентской. Пример – типичным набором ПО рабочей станции в сети NetWare является система MS-DOS с установленной над ней клиентской оболочкой NetWare, состоящей из клиентских частей файловой службы, службы печати и компонента, поддерживающего пользовательский интерфейс.
Серверная оболочка ориентирована на выполнение серверных функций. Примеры: – LAN Server, LAN Manager, NetWare for UNIX, File and Print Services for NetWare.
Серверная оболочка как минимум содержит серверные компоненты двух основных системных служб – файловой и службы печати (NetWare for UNIX, File and Print Services for NetWare). Некоторые оболочки содержат настолько широкий набор сетевых служб, что их наз. сетевыми ОС (LAN Server, LAN Manager).
Заметим, что термин “сетевая ОС” приобретает еще одно значение – набор сетевых служб.
Третий способ реализации сетевой службы – в виде отдельного продукта.
Примеры:
сервер удаленного управления WinFrame (компании Citrix), предназначен для работы в среде Windows NT. Он дополняет возможности встроенного в Windows NT сервера удаленного доступа Remote Access Server;
программный продукт NetWare Connect – служба удаленного доступа для NetWare.
Одноранговые и серверные сетевые ОС
Компьютер в сети может выступать в трех разных ролях:
• роль выделенного сервера сети (исключительно обслуживание запросов других компьютеров);
• роль клиентского узла (обращается с запросами к ресурсам другой машины);
• одноранговый узел – это компьютер, совмещающий функции клиента и сервера.
Сеть может быть построена по одной из следующих схем:
• сеть на основе одноранговых узлов – одноранговая сеть;
• сеть на основе клиентов и серверов – сеть с выделенными серверами;
• сеть, включающая узлы всех типов, - гибридная сеть.
(Каждая из этих схем обладает своими достоинствами и недостатками, определяющими их области применения.)
В одноранговых сетях все компьютеры равны в возможностях доступа к ресурсам друг друга. Пользователь может объявить ресурс своего компьютера разделяемым, после чего другие пользователи могут его использовать. На всех компьютерах устанавливается такая ОС, которая предоставляет всем компьютерам сети потенциально равные возможности.
Сетевые ОС такого типа наз. одноранговыми ОС.
Очевидно, что одноранговые ОC должны включать и серверные, и клиентские компоненты сетевых служб.
Примеры одноранговых ОС: LANtastic, Personal Ware, Windows for Workgroups, Windows NT Workstation, Windows 95/98.
При потенциальном равноправии всех компьютеров одноранговой сети часто возникает функциональная несимметричность.
С одной стороны, некоторые пользователи не предоставляют ресурсы в совместное пользование, т.е. серверные компоненты их ОС не активизируются. С другой стороны, администратор может закрепить за некоторыми компьютерами только функции по обслуживанию запросов, превратив их в серверы.
В такой конфигурации одноранговые сети становятся похожими на сети с выделенными серверами.
Но это только внешняя схожесть. Остается существенное внутреннее различие.
Т.к. изначально специализация ОС не зависит от роли компьютера. Изменение роли достигается только за счет того, что функции серверной или клиентской частей просто не используются.
Заметим, что одноранговые сети проще в организации и эксплуатации. Поэтому по такой схеме организуется работа в небольших сетях (10-20 компьютеров).
В сетях с выделенными серверами используются варианты сетевых ОС, которые оптимизированы для работы в роли серверов, которые наз. серверными ОС. Пользовательские компьютеры в этих сетях работают под управлением клиентских ОС.
В состав многих серверных ОС включаются все компоненты, позволяющие использовать их в качестве универсального сервера и даже в качестве клиентской ОС. Такие серверные ОС снабжаются развитым графическим пользовательским интерфейсом и поддерживают универсальный API. Это сближет их с одноранговыми ОС.
Отличия серверных ОС:
• поддержка мощных аппаратных платформ, в том числе мультипроцессорных;
• поддержка большого числа одновременно выполняемых процессов и сетевых соединений;
• включение в состав ОС компонентов централизованного администрирования сети (например, справочной службы или службы аутентификации и авторизации пользователей сети);
• более широкий набор сетевых служб.
Клиентские ОС организованы проще. Разработчики клиентских Ос уделяют особое внимание пользовательскому интерфейсу и клиентским частям сетевых служб.
Наиболее простые клиентские ОС поддерживают только базовые сетевые службы – обычно файловую службу и службу печати.
Многие компании, разрабатывающие сетевые ОС, выпускают два варианта одной и той же ОС. Один вариант предназначен для работы в качестве серверной ОС, другой – в качестве клиентской.
Эти варианты чаще всего основаны на одном и том же базовом коде, но отличаются набором служб и утилит, а также параметрами конфигурации, некоторые из которых устанавливаются по умолчанию и не поддаются изменению.
Например, ОС Windows NT выпускается в варианте для рабочей станции - Windows NT Workstation - и в варианте для выделенного сервера - Windows NT Server. Оба эти варианта включают клиентские и серверные части многих сетевых служб.
Так, ОС Windows NT Workstation кроме выполнения функций сетевого клиента может предоставлять файловый сервис, сервис печати, сервис удаленного доступа и другие сервисы модет служить основой для одноранговой сети.
ОС Windows NT Server содержит все необходимые средства, которые позволяют использовать компьютер под ее управлением в качестве клиентской рабочей станции. Кроме того, она имеет такой же развитый графический интерфейс, как и Windows NT Workstation, что позволяет использовать эти ОС для работы пользователя или администратора.
Однако, вариант Windows NT Server поддерживает более широкий набор функций, большее количество одновременных соединений с клиентами, централизованное управление сетью, более развитые средства защиты.
Лекция №
Сетевые службы
Сетевые файловые системы
Вопросы реализации сетевой файловой системы
Распределение клиентов и серверов по компьютерам
Размещение клиентов и серверов в операционной системе
Схема реализации файлового сервера
Кэширование
Репликация
Практически все современные ОС являются сетевыми, т.е. позволяют пользователям получать доступ, как к локальным ресурсам, так и к ресурсам других компьютеров, подключенных к сети.
При работе в сети ОС опираются на функции ОС по управлению локальными ресурсами. Сетевые службы реализуют специфические функции по организации совместной работы пользователей сети.
Сетевые файловые системы
Функцией файловой системы является хранение программ и данных и предоставление доступа к ним по мере необходимости.
Распределенная файловая система поддерживается одним или более компьютерами, хранящими файлы.
Компьютер, который позволяет пользователям сети получать доступ к своим файлам, обычно называют файловым сервером.
Программу, которая работает на этом компьютере и обеспечивает совокупность услуг по доступу к файлам и каталогам на удаленном компьютере, также называют файловым сервером.
Файловые серверы обычно содержат иерархические файловые системы.
Во многих сетевых файловых системах клиентский компьютер может подсоединять и монтировать эти файловые системы к своим локальным файловым системам, обеспечивая удобный доступ к удаленным каталогам и файлам.
В распределенной ОС пользователи не знают как реализована файловая система. Они не знают количество файловых серверов, их месторасположение и функции. Современные сетевые файловые системы еще не полностью соответствуют идеалу распределенности. В большинстве ОС пользователь должен явно указать имя файлового сервера при доступе к его ресурсам. В настоящее время продолжается работа по созданию истинно распределенных сетевых файловых систем. Экспериментальные ОС – Amoeba, Mach, Chorus (более прозрачные).
Сетевая файловая система в общем случае включает следующие элементы:
• Локальная файловая система;
• Интерфейс локальной файловой системы;
• Сервер сетевой файловой системы;
• Клиент сетевой файловой системы;
• Интерфейс сетевой файловой системы;
• Протокол клиент-сервер сетевой файловой системы.
Клиенты сетевой файловой системы – это программы, которые работают на компьютерах, подключенных к сети, и обслуживают запросы приложений на доступ к файлам, хранящимся на удаленном компьютере. Например, Windows Explorer, UNIX shell и другие пользовательские программы.
Клиент сетевой файловой системы передает по сети запросы серверу сетевой файловой системы, работающему на удаленном компьютере. Сервер, получив запрос, выполняет его самостоятельно, либо (более распространенный вариант) передает запрос локальной файловой системе. Ответ передается в обратном направлении.
Приложения обращаются к клиенту сетевой файловой системы, используя определенный программный интерфейс - интерфейс сетевой файловой системы. Его стараются сделать более похожим на интерфейс локальной файловой системы для прозрачности.
Клиент и сервер сетевой файловой системы взаимодействуют друг с другом по сети по определенному протоколу.
Например, сетевой файловой службой в ОС семейства Windows используется протокол SMB (Server Message Block). Его последние расширенные версии получили название Common Internet File System, CIFS. Как и все протоколы файловых служб, он работает на прикладном уровне модели OSI, используя различные транспортные протоколы для передачи свои сообщений (NetBIOS, его более поздняя реализация NetBEUI, TCP/UDP, IPX).
Основной протокол доступа к файлам и принтерам сетевой ОС NetWare компании Novell – NCP (NetWare Control Protocol).
В различных вариантах ОС семейства UNIX популярен протокол NFS – протокол сетевой файловой системы NFS (Network File System) компании Sun Microsystems.
Замечание. Для одной и той же локальной файловой системы могут существовать различные протоколы сетевой файловой системы. Например, к NTFS можно получить доступ с помощью протоколов SMB, NCP, NFS.
С другой стороны, с помощью одного протокола может реализовываться удаленный доступ к различным локальным файловым системам. Например, протокол SMB используется для доступа к FAT, NTFS, HPFS.
Вопросы реализации сетевой файловой системы
Распределение клиентов и серверов по компьютерам
• Во многих файловых системах (NFS, файловых системах Windows 95/98/NT) на всех компьютерах сети работает одно и то же базовое ПО, включающее и клиентскую, и серверную части. Так что любой компьютер может предложить услуги файловой службы. Администратору ОС достаточно объявить имена выбранных каталогов разделяемыми (экспортируемыми в терминах NFS), чтобы другие компьютеры имели к ним доступ.
• В некоторых случаях выпускается серверная версия ОС, которая использует то же ПО файловой службы, но позволяет обслуживать одновременно большее число пользователей (по сравнению с файловым сервером для клиентских компьютеров) за счет выделения файловому серверу большего количества ресурсов (в основном ОП).
• Иногда файловый сервер – это специализированный компонент серверной ОС, отсутствующий в клиентских компьютерах (сетевая ОС NetWare).
Размещение клиентов и серверов в операционной системе
• Файловый сервер и клиент обычно являются модулями ядра ОС, работающими в привилегированном режиме повышение эффективности работы.
В современных ОС эти компоненты оформляются как высокоуровневые драйверы, работающие в составе подсистемы ввода-вывода.
Эффективность работы при этом повышается за счет прямого доступа ко всем внутренним модулям ОС без выполнения дополнительных операций и смены пользовательского режима на привелигированный.
• В некоторых случаях файловый сервер и клиенты оформляются как модули, работающие в пользовательском режиме:
• в ранних сетевых файловых системах,
• в файловых серверах ОС, основанных на микроядерной архитектуре (обусловлено общим подходом).
На практике такая архитектура применяется редко, т.к. снижается производительность файлового сервера.
Схема реализации файлового сервера
Файловый сервер может быть реализован по одной из двух схем:
1. с запоминанием данных о последовательности файловых операций клиента – stateful;
2. без запоминания таких данных – по схеме stateless.
Сервер stateless: клиент посылает запрос на сервер, сервер его выполняет, отсылает ответ, а затем удаляет из своих внутренних таблиц всю информацию о запросе. Таким образом, между запросами на сервере не хранится никакой текущей информации о состоянии клиента.
Сервер stateful, открывая файлы, должен запоминать, какие файлы открыл каждый пользователь в своей внутренней системной таблице. В системной таблице (таблице открытых файлов) хранятся дескриптор файла (идентификатор), значение указателя на текущую позицию в файле, режим файла. Обычно при открытии файла клиентскому приложению возвращается по сети дескриптор файла.
Рис. Сервер stateful
Клиент файловой службы с сервером stateless должен самостоятельно поддерживать таблицы открытых фалов:
Рис. Сервер stateless
Преимущества серверов stateless:
• отказоустойчивы;
• не поддерживают в протоколе обмена с клиентами вызовы open/close;
• меньше памяти сервера расходуется на таблицы;
• нет ограничений на число открытых файлов;
• отказ клиента не создает проблем для сервера.
серверы stateful:
• более короткие сообщения при запросах;
• лучше производительность;
• возможно опережающее чтение;
• возможна блокировка файлов.
Для сервера stateless каждый запрос должен содержать исчерпывающую информацию, необходимую серверу для выполнения требуемой операции (полное имя файла, смещение в файле и т.п.). Очевидно, что эта информация увеличивает длину сообщения и время, которое тратит сервер на локальное открытие файла всякий раз, когда над ним производится очередная операция чтения или записи.
Сервер stateless является более отказоустойчивым, чем сервер stateful. Т.к. при отказе сервера stateful теряются все его таблицы, и после перезагрузки неизвестно, какие файлы открыл каждый пользователь.
Платой за отказоустойчивость может быть скорость работы сервера, т.к. ему приходится выполнять больше операций с файлами.
Кроме того, применение серверов stateless затрудняет реализацию блокировок файлов, так как информацию о блокировке файла одним из пользователей необходимо запоминать на всех клиентах файлового сервера.
Кэширование
Скорость доступа к файлам, хранящимся на дисках, существенно повышает кэширование данных.
(Дисковый кэш – подсистема буферизации).
В сетевых файловых системах кэширование не только повышает скорость доступа к удаленным данным, но улучшает масштабируемость и надежность файловой системы.
Схемы кэширования, применяемые в сетевых файловых системах, отличаются решениями по трем ключевым вопросам:
• месту расположения кэша (память сервера, диск клиента, память клиента);
• способу распространения модификаций;
В сети может существовать несколько копий одного и того же файла, хранящихся в кэшах клиентов. Необходимо, чтобы модификации одной копии своевременно распространялись на все остальные копии.
Один из путей решения этой проблемы – алгоритм сквозной записи (в системах UNIX). Когда кэшируемый элемент (файл или блок) модифицируется, новое значение записывается в кэш и одновременно посылается на сервер для обновления главной копии файла. В этом случае другой процесс, читающий этот файл, получает самую последнюю копию.
Другой путь – алгоритм отложенной записи: вместо того, чтобы выполнять запись на сервер, клиент просто помечает, что файл изменен. Примерно каждые 30 сек. Все изменения в файлах собтраются вместе и отсылаются на сервер за один прием. (Одна большая запись для сетевого обмена более эффективна, чем много коротких.)
И еще один алгоритм – запись по закрытию, в соответствии с которым запись файла на сервер производится только после закрытия файла.
• проверке достоверности кэша.
Очевидно, что данные в кэше одного клиента становятся недостоверными, когда данные, модифицированные другим клиентом, переносятся в главную копию файла.
необходимо проверять, являются ли данные в кэше клиента достоверными. В противном случае данные должны быть повторно считаны с сервера.
Существуют два подхода к решению этой проблемы
1. инициирование проверки клиентом (клиент связывается с сервером и проверяет, соответствуют ли данные в его кэше данным главной копии файла на сервере);
2. инициирование проверки сервером (клиент, открывающий файл, посылает сообщение серверу о режиме – чтение или запись. Если файл открыт для чтения, то все другие процессы могут его открыть только для чтения. Если файл открыт для записи, то все другие виды доступа запрещены. (UNIX)
Репликация
Репликация – тиражирование.
Репликация подразумевает существование нескольких копий одного и того же файла (реплик), каждая из которых хранится на отдельном файловом сервере, при этом обеспечивается автоматическое согласование данных в копиях файла. О существовании реплик известно всем компьютерам сети.
За счет репликации
1. увеличивается надежность (при отказе одного сервера файл остается доступным на другом);
2. снижается нагрузка на файловые серверы (за счет распределения нагрузки между несколькими серверами, т.к. клиенты могут обращаться к данным реплицированного файла на ближайший файловый сервер).
Репликация поддерживается сетевой файловой системой в качестве одной из услуг для клиентов. Иногда репликацией занимается отдельная файловая служба.
Ключевым вопросом, связанным с репликацией, является прозрачность.
В одних системах пользователи полностью осведомлены о том, что их файлы реплицируются и вовлечены в управление репликацией.
В других системах – репликация выполняется полностью автоматически. Система при этом наз. репликационно прозрачной.
Прозрачность репликации зависит от двух факторов:
• используемой схемы именования реплик;
• степени вовлеченности пользователя в управление репликацией.
Именование реплик.
Система именования, которая отображает имя файла на его сетевой идентификатор, однозначно определяющий место хранения файлов, позволяет реализовать прозрачность доступа к реплицируемому файлу.
Реализуется такая схема следующим образом.
Используется централизованная справочная служба, которая позволяет хранить отображения имен файлов на их сетевые идентификаторы (например, IP-адреса серверов). Файлу присваивается имя, не содержащее старшей части, соответствующей имени компьютера. В справочной службе этому имени соответствует несколько идентификаторов, указывающих на серверы, хранящие реплики файла. При обращении к файлу приложение использует имя, а справочная система возвращает ему один из идентификаторов, указывающий на сервер, хранящий реплику.
Схема реализуется просто для неизменяемых файлов (реплики всегда идентичны).
Для реализации полностью прозрачного доступа к изменяемым реплицируемым файлам требуется ведение базы, хранящей сведения о том, какие из реплик содержат последнюю версию данных, а какие еще не обновлены.
В современных сетевых файловых системах реализована схема именования, при которой требуется явное указание имени сервера при обращении к файлу, т.е. непрозрачная система репликации.
Управление репликацией.
Под управлением репликацией подразумевается определение количества реплик и выбор серверов для хранения каждой реплики.
В прозрачной системе репликации такие решения принимаются автоматически при создании файла на основе правил стратегии репликации, определенных заранее администратором системы – неявная репликация. Приложение не указывает место размещения файла. Файловая система самостоятельно выбирает сервер для размещения первой реплики файла. Затем в фоновом режиме система создает еще несколько реплик файла.
В непрозрачной системе решения принимаются с участием пользователя, который создает файлы, или разработчика приложения, если приложение создает файлы, - явная репликация. Для каждой реплики явно указывается сервер. Впоследствии при желании можно удалить реплику.
Согласование реплик
Это один из наиболее важных вопросов при разработке системы репликации.
Когда данные в одной из реплик модифицируются, необходимо распространить модификацию на другие реплики.
Существует несколько способов обеспечения согласованности реплик:
• Чтение любой – запись во все (UNIX). Чтение выполняется из любой копии. При записи в файл все реплики блокируются, выполняется запись в каждую копию, блокировка снимается. Недостаток – нельзя произвести запись в файлы на неработоспособных серверах.
• Запись в доступные. Чтение выполняется из любой копии. Любой сервер, хранящий реплику файла, после перезагрузки должен соединиться с другим сервером и получить обновленную реплику.
• Первичная реплика. Запись разрешается только в одну реплику, называемую первичной. Все остальные наз. вторичными. Из вторичных можно только читать. После модификации первичной, все серверы с вторичными репликами должны связаться с сервером, хранящим первичную, и получить обновления. Недостаток – низкая надежность (при отказе первичного сервера невозможны модификации файла).
• Кворум. Обобщение предыдущих подходов.
Пусть в сети существует n реплик некоторого файла.
Алгоритм основан на том, что при модификации файла изменения записываются в w реплик, а при чтении файла клиент производит обязательное обращение к r репликам. Значения выбираются так, чтобы w+r>n. При модификации файла наращивается номер версии реплики. Если при записи реплики имеют разные версии, то выбирается максимальное значениеверсии для наращивания и присваивания всем репликам. При чтении клиент имеет возможность сначала проверить версию каждой реплики, выбрать старшую и читать данные из нее.
При выполнении условия w+r>n среди любых выбранных произвольным образом r реплик всегда найдется хотя бы одна из w реплик, в которую записаны последние обновления.
Файловая служба имеет две различные части:
1. собственно файловую службу (операции над отдельными файлами: чтение, запись, добавление);
2. службу каталогов файловой системы (создание каталогов, добавление и удаление файлов из каталогов и т.п.).
Лекция №
Служба каталогов
Понятие. Назначение
Большая компьютерная сеть нуждается в централизованном хранении как можно более полной справочной информации
• о пользователях сети (именах для входа в систему, паролях, правах доступа к ресурсам и т.д.);
• о компонентах сети (серверах, клиентских компьютерах, маршрутизаторах, шлюзах и т.д.);
• о ресурсах сети (томах файловых систем, принтерах и т.д.).
Перечислим наиболее важные задачи, требующие наличия в сети централизованной базы справочной информации:
1. Аутентификация пользователей (в сети должны храниться учетные записи пользователей, содержащие имена и пароли);
2. Поддержка прозрачности доступа ко многим сетевым ресурсам (должны храниться имена ресурсов и отображения имен на числовые идентификаторы, позволяющие найти ресурс в сети (например, IP-адреса).
3. Электронная почта. (Для этой службы желательна единая для сети справочная служба, хранящая почтовые имена пользователей).
4. Поддержка средств управления качеством обслуживания трафиком (требуются сведения обо всех пользователях и приложениях системы, их требованиях к параметрам качества обслуживания трафика, сведения обо всех сетевых устройствах (маршрутизаторах, коммутаторах, шлюзах и т.п.).
5. Организация распределенных приложений существенно упрощается, если имеется база с информацией об имеющихся программных модулях-объектах и их расположении на серверах сети.
6. Идентификация сообщений об аварийных событиях и поиск причин в системе автоматизированного управления сетью (в базе хранятся информация о составе сети и ее связях: топология сети, характеристики сетевых элементов таких как маршрутизаторы, коммутаторы, серверы, клиенты).
В сетевых операционных системах для хранения справочной информации используется Централизованная база справочной информации - так называемая служба каталогов (Directory Services).
Служба каталогов
• хранит информацию обо всех пользователях и ресурсах сети в виде объектов с атрибутами;
• позволяет отражать взаимосвязи между хранимыми объектами (принадлежность пользователей к определенной группе, вхождение нескольких узлов в одну подсеть, коммуникационные связи между подсетями и т.п.);
• позволяет выполнять над хранимыми объектами набор базовых операций (добавление, удаление объекта, включение объекта в другой объект, чтение, модификация атрибутов объекта).
Обычно над службой каталогов строятся различные сетевые приложения, которые используют информацию службы для решения конкретных задач.
Долгое время сети работали (а многие сети и сейчас работают) без централизованной базы справочной информации.
При этом работа сети достаточно эффективно организовывается на основе частных (локальных) баз справочной информации. Они обычно представлены текстовыми файлами либо таблицами, хранящимися в теле приложения. Например, в ОС UNIX для хранения данных об именах и паролях пользователей одного компьютера традиционно используется файл passwd. Имена адресатов электронной почты также можно хранить в локальном файле клиентского компьютера.
Однако это эффективно только для небольших сетей и средних размеров.
Для крупных сетей отдельные локальные базы справочной информации неэффективны, так как большое число справочных служб приводит к дублированию больших объемов информации и усложняет администрирование и управление сетью.
Например, в Windows NT имеется пять различных типов справочных баз данных.
Главный справочник домена хранит информацию о пользователях для организации логического входа в сеть.
Существует справочник электронной почты, который, кстати, может содержать информацию о тех же пользователях.
Еще три базы поддерживают разрешение адресов.
Очевидно, что разнообразие справочных служб усложняет жизнь администратора (учетные данные необходимо вводить в несколько баз данных), приводит к дополнительным ошибкам.
В Windows 2000 большая часть справочной информации о системе может храниться службой Active Directory - единой централизованной службой, использующей распределенную базу данных и интегрированной со службой имен DNS.
Принципы организации
Служба каталогов обычно строится на основе модели клиент-сервер: серверы хранят базу справочной информации. Клиенты используют эту информацию.
Большинство хороших служб каталогов имеют распределенную структуру, включающую большое количество серверов. Для клиентов такая структура, как правило, прозрачна.
Реализация справочной службы как локальной базы данных, хранящейся в виде одной копии на одном из серверов сети неприемлема для большой системы, в первую очередь, по причине низкой производительности (большое количество запросов к одному серверу) и низкой надежности (единственная копия данных) такого решения.
Поэтому справочная информация реализуется в виде распределенных баз данных. Разделение данных между несколькими серверами снижает нагрузку на каждый сервер, надежность при этом достигается за счет наличия нескольких реплик каждой части базы. Кроме того, для каждой части можно назначить своего администратора с правами доступа только к своей порции данных.
Существуют два популярных стандарта для служб каталогов.
1. Стандарт Х.500. Определяет функции, организацию справочной службы и протокол доступа к ней.
2. Стандарт LDAP (Light-weight Directory Access Protocol). Определяет упрощенный по сравнению с первым стандартом протокол доступа к службе каталогов. Является стандартом де-факто в качестве протокола доступа клиентов к ресурсам справочной службы.
Существует также несколько реализаций служб каталогов для сетевых ОС.
Наибольшее распространение получила служба NDS компании Novell (была разработана в 1993 г. для сетевой ОС NetWare 4.0, сегодня реализована также и для Windows NT/2000).
Компанией Microsoft разработана служба Active Directory для Windows 2000.
Обе службы поддерживают протокол доступа LDAP. Могут работать в очень крупных сетях благодаря своей распределенности.
Служба каталогов NDS
Служба каталогов NDS (NetWare Directory Services) - это глобальная справочная служба, опирающаяся на распределенную объектно-ориентированную базу данных сетевых ресурсов. Многоуровневая база данных содержит информацию обо всех пользователях, группах пользователей, принтерах, томах и компьютерах. ОС использует информацию NDS для обеспечения доступа к этим ресурсам.
Служба NDS характеризуется:
• распределенностью (информация хранится на различных серверах по частям, называемым разделами упрощает администрирование, быстрый доступ за счет обращения к ближайшему серверу);
• реплицируемостью (можно создать неограниченное количество реплик каждого раздела отказоустойчивость);
• прозрачностью (от пользователя не требуется знание физического расположения объектов, так как служба автоматически создает связи между программными и аппаратными компонентами);
• глобальностью (после процедуры глобально логического входа (global login) пользователь получает доступ к ресурсам всей сети, а не только одного сервера).
Для хранения информации используется логическая структура, называемая деревом каталогов (корень и ветви), которая содержит объекты двух типов:
• объекты-контейнеры (содержат другие объекты, предназначены для упорядочивания других объектов): [страна], организация, отдел или подразделение;
• объекты-листья (используются для представления конечных сетевых ресурсов, таких как компьютеры, серверы, тома, принтеры, пользователи, группы пользователей).
Заметим, что служба NDS не обеспечивает управление файловой системой. Файлы и каталоги не являются объектами службы. Для связи между файловой системой и NDS используется объект-том.
Служба NDS предоставляет средства для поиска объектом в базе. Можно делать запросы, типичные для баз данных.
Служба NDS определяет права доступа одних объектов к другим. С каждым объектом связан список управления доступом, в котором определяются права доступа к данному объекту со стороны других объектов.
Управление вводом/выводом
Материалы к лекции
По книге А.В. Гордеев, А.Ю. Молчанов "Системное программное обеспечение"
Необходимость обеспечить программам возможность осуществлять обмен данными с внешними устройствами и при этом не включать в каждую двоичную программу соответствующий двоичный код, осуществляющий собственно управление устройствами ввода/вывода, привела разработчиков к созданию системного программного обеспечения и, в частности, самих операционных систем.
Программирование задач управления вводом/выводом является наиболее сложным и трудоемким, требующим очень высокой квалификации. Поэтому код, позволяющий осуществлять операции ввода/вывода, стали оформлять в виде системных библиотечных процедур; потом его стали включать не в системы программирования, а в операционную систему с тем, чтобы в каждую отдельно взятую программу его не вставлять, а только позволить обращаться к такому коду. Системы программирования стали генерировать обращения к этому системному коду ввода/вывода и осуществлять только подготовку к собственно операциям ввода/вывода, то есть автоматизировать преобразование данных к соответствующему формату, понятному устройствам, избавляя прикладных программистов от этой сложной и трудоемкой работы. Другими словами, системы программирования вставляют в машинный код необходимые библиотечные подпрограммы ввода/вывода и обращения к тем системным программным модулям, которые, собственно, и управляют операциями обмена между оперативной памятью и внешними устройствами.
Таким образом, управление вводом/выводом — это одна из основных функций любой ОС.
С одной стороны, в организации ввода/вывода в различных ОС много общего. С другой стороны, реализация ввода/вывода в ОС так сильно отличается от системы к системе, что очень нелегко выделить и описать именно основные принципы реализации этих функций. Проблема усугубляется еще тем, что в большинстве ныне используемых систем эти моменты вообще, как правило, подробно не описаны, и исключение по этому вопросу касается только системы Linux, для которой имеются комментированные исходные тексты. Детально описываются функции API, реализующие ввод/вывод.
Мы рассмотрим только основные идеи и концепции.
Основные понятия и концепции организации ввода/вывода в ОС
Ввод/вывод считается одной из самых сложных областей проектирования операционных систем, в которой сложно применить общий подход из-за изобилия частных методов.
Сложность возникает из-за огромного числа устройств ввода/вывода разнообразной природы, которые должна поддерживать ОС. При этом перед создателями ОС встает очень непростая задача — не только обеспечить эффективное управление устройствами ввода/вывода, но и создать удобный и эффективный виртуальный интерфейс устройств ввода/вывода, позволяющий прикладным программистам просто считывать или сохранять данные, не обращая внимание на специфику устройств и проблемы распределения устройств между выполняющимися задачами. Система ввода/вывода, способная объединить в одной модели широкий набор устройств, должна быть универсальной. Она должна учитывать потребности существующих устройств, от простой мыши до клавиатур, принтеров, графических дисплеев, дисковых накопителей, компакт-дисков и даже сетей. С другой стороны, необходимо обеспечить доступ к устройствам ввода/вывода для множества параллельно выполняющихся задач, причем так, чтобы они как можно меньше мешали друг другу.
Поэтому самым главным является следующий принцип: любые операции по управлению вводом/выводом объявляются привилегированными и могут выполняться только кодом самой ОС. Для обеспечения этого принципа в большинстве процессоров даже вводятся режимы пользователя и супервизора. Как правило, в режиме супервизора выполнение команд ввода/вывода разрешено, а в пользовательском режиме — запрещено. Использование команд ввода/вывода в пользовательском режиме вызывает исключение и управление через механизм прерываний передается коду ОС. Хотя возможны и более сложные системы, в которых в ряде случаев пользовательским программам разрешено непосредственное выполнение команд ввода/вывода.
Еще раз подчеркнем, что, прежде всего, мы говорим о мультипрограммных ОС, для которых существует проблема разделения ресурсов.
Одним из основных видов ресурсов являются устройства ввода/вывода и соответствующее программное обеспечение, с помощью которого осуществляется управление обменом данными между внешними устройствами и оперативной памятью. Помимо разделяемых устройств ввода/вывода (эти устройства допускают разделение посредством механизма доступа) существуют неразделяемые устройства. Примерами разделяемого устройства могут служить накопитель на магнитных дисках, устройство для чтения компакт-дисков. Это устройства с прямым доступом. Примеры неразделяемых устройств — принтер, накопитель на магнитных лентах. Это устройства с последовательным доступом. Операционные системы должны управлять и теми и другими устройствами, предоставляя возможность параллельно выполняющимся задачам использовать различные устройства ввода/вывода.
Можно назвать три основные причины, по которым нельзя разрешать каждой отдельной пользовательской программе обращаться к внешним устройствам непосредственно:
1. Необходимость разрешать возможные конфликты доступа к устройствам ввода/вывода. Например, две параллельно выполняющиеся программы пытаются вывести на печать результаты своей работы. Если не предусмотреть внешнее управление устройством печати, то в результате мы можем получить абсолютно нечитаемый текст, так как каждая программа будет время от времени выводить свои данные, которые будут перемежаться данными другой программы. Другой пример: ситуация, когда одной программе необходимо прочитать данные с некоторого сектора магнитного диска, а другой — записать результаты в другой сектор того же накопителя. Если операции ввода/вывода не будут отслеживаться каким-то третьим (внешним) процессом-арбитром, то после позиционирования магнитной головки для первого запроса может тут же появиться команда позиционирования головки для второй задачи, и обе операции ввода/вывода не смогут быть выполнены корректно.
2. Желание увеличить эффективность использования этих ресурсов. Например, у накопителя на магнитных дисках время подвода головки чтения/записи к необходимой дорожке и обращение к определенному сектору может значительно (до тысячи раз) превышать время пересылки данных. В результате, если задачи по очереди обращаются к цилиндрам, далеко отстоящим друг от друга, то полезная работа, выполняемая накопителем, может быть существенно снижена.
3. Ошибки в программах ввода/вывода могут привести к краху всех вычислительных процессов, ибо часть операций ввода/вывода осуществляется для самой операционной системы. В ряде ОС системный ввод/вывод имеет существенно более высокие привилегии, чем ввод/вывод задач пользователя. Поэтому системный код, управляющий операциями ввода/вывода, очень тщательно отлаживается и оптимизируется для повышения надежности вычислений и эффективности использования оборудования.
Итак, управление вводом/выводом осуществляется операционной системой, компонентом, который чаще всего называют супервизором ввода/вывода.
В перечень основных задач, возлагаемых на супервизор, входят следующие:
• супервизор ввода/вывода получает запросы на ввод/вывод от прикладных задач и от программных модулей самой операционной системы. Эти запросы проверяются на корректность, и если запрос выполнен по спецификациям и не содержит ошибок, он обрабатывается дальше, в противном случае пользователю (задаче) выдается соответствующее диагностическое сообщение о недействительности (некорректности) запроса;
• супервизор ввода/вывода вызывает соответствующие распределители каналов и контроллеров, планирует ввод/вывод (определяет очередность предоставления устройств ввода/вывода задачам, затребовавшим их). Запрос на ввод/ вывод либо тут же выполняется, либо ставится в очередь на выполнение;
• супервизор ввода/вывода инициирует операции ввода/вывода (передает управление соответствующим драйверам) и в случае управления вводом/выводом с использованием прерываний предоставляет процессор диспетчеру задач с тем, чтобы передать его первой задаче, стоящей в очереди на выполнение;
• при получении сигналов прерываний от устройств ввода/вывода супервизор идентифицирует их и передает управление соответствующей программе обработки прерывания (как правило, на секцию продолжения драйвера);
• супервизор ввода/вывода осуществляет передачу сообщений об ошибках, если таковые происходят в процессе управления операциями ввода/вывода;
• супервизор ввода/вывода посылает сообщения о завершении операции ввода/вывода запросившему эту операцию процессу и снимает его с состояния ожидания ввода/вывода, если процесс ожидал завершения операции.
В случае если устройство ввода/вывода является инициативным*, управление со стороны супервизора ввода/вывода будет заключаться в активизации соответствующего вычислительного процесса (перевод его в состояние готовности к выполнению).
Инициативным называют такое устройство (обычно это датчики, внешнее устройство, а не устройство ввода/вывода), по сигналу прерывания от которого запускается соответствующая ему программа. Такая программа, с одной стороны, не является драйвером, и управлять операциями обмена данными нет необходимости. Но, с другой стороны, запуск такой программы осуществляется именно по событиям, связанным с генерацией устройством ввода/вывода соответствующего сигнала. Разница между драйверами, работающими по прерываниям, и инициативными программами заключается в статусе этих программных модулей. Драйвер является компонентом операционной системы и часто выполняется не как вычислительный процесс, а как системный объект, а инициативная программа является обычным вычислительным процессом, только его запуск осуществляется по инициативе внешнего устройства.
Таким образом, прикладные программы (а в общем случае — все обрабатывающие программы) не могут непосредственно связываться с устройствами ввода/ вывода независимо от использования устройств (монопольно или совместно). Установив соответствующие значения параметров в запросе на ввод/вывод, определяющих требуемую операцию и количество потребляемых ресурсов, они могут передать управление супервизору ввода/вывода, который и запускает необходимые логические и физические операции.
Упомянутый выше запрос на ввод/вывод должен удовлетворять требованиям API той операционной системы, в среде которой выполняется приложение. Параметры, указываемые в запросах на ввод/вывод, передаются не только в вызывающих последовательностях, создаваемых по спецификациям API, но и как данные, хранящиеся в соответствующих системных таблицах. Все параметры, которые будут стоять в вызывающей последовательности, поставляются компилятором и отражают требования программиста и постоянные сведения об операционной системе и архитектуре компьютера в целом. Переменные сведения о вычислительной системе (ее конфигурация, состав оборудования, состав и особенности системного программного обеспечения) содержатся в специальных системных таблицах. Процессору, каналам прямого доступа в память, контроллерам необходимо передавать конкретную двоичную информацию, с помощью которой и осуществляется управление оборудованием. Эта конкретная двоичная информация в виде кодов и данных часто готовится с помощью препроцессоров, но часть ее хранится в системных таблицах.
Режимы управления вводом/выводом
Имеются два основных режима ввода/вывода:
◦ режим обмена с опросом готовности устройства ввода/вывода и
◦ режим обмена с прерываниями.
Пусть для простоты управление вводом/выводом осуществляет центральный процессор.
(В этом случае, часто говорят о наличии программного канала обмена данными между внешними устройством и оперативной памятью, в отличие от канала прямого доступа к памяти, при котором управление вводом/выводом осуществляет специальное дополнительное оборудование).
Центральный процессор посылает устройству управления команду выполнить некоторое действие устройству ввода/вывода. Последнее исполняет команду, транслируя сигналы, понятные центральному устройству и устройству управления в сигналы, понятные устройству ввода/вывода. Но быстродействие устройства ввода/вывода намного меньше быстродействия центрального процессора (порой, на несколько порядков). Поэтому сигнал готовности (транслируемый или генерируемый устройством управления и сигнализирующий процессору о том, что команда ввода/вывода выполнена, и можно выдать новую команду для продолжения обмена данными) приходится очень долго ожидать, постоянно опрашивая соответствующую линию интерфейса на наличие или отсутствие нужного сигнала. Посылать новую команду, не дождавшись сигнала готовности, сообщающего об исполнении предыдущей команды, бессмысленно. В режиме опроса готовности драйвер, управляющий процессом обмена данными с внешним устройством, как раз и выполняет в цикле команду “проверить наличие сигнала готовности”. До тех пор пока сигнал готовности не появится, драйвер ничего другого не делает. При этом, естественно, нерационально используется время центрального процессора. Гораздо выгоднее, выдав команду ввода/ вывода, на время забыть об устройстве ввода/вывода и перейти на выполнение другой программы. А появление сигнала готовности трактовать как запрос на прерывание от устройства ввода/вывода. Именно эти сигналы готовности и являются сигналами запроса на прерывание.
Режим обмена с прерываниями по своей сути является режимом асинхронного управления. Для того чтобы не потерять связь с устройством (после того, как процессор выдал очередную команду по управлению обменом данными и переключился на выполнение других программ), может быть запущен отсчет времени, в течение которого устройство обязательно должно выполнить команду и выдать таки сигнал запроса на прерывание. Максимальный интервал времени, в течение которого устройство ввода/вывода или его контроллер должны выдать сигнал запроса на прерывание, часто называют уставкой тайм-аута. Если это время истекло после выдачи устройству очередной команды, а устройство так и не ответило, то делается вывод о том, что связь с устройством потеряна, и управлять им больше нет возможности. Пользователь и/или задача получают соответствующее диагностическое сообщение.
Драйверы, работающие в режиме прерываний, представляют собой сложный комплекс программных модулей и могут иметь несколько секций: секцию запуска, одну или несколько секций продолжения и секцию завершения.
Секция запуска инициирует операцию ввода/вывода. Эта секция запускается для включения устройства ввода/вывода либо просто для инициации очередной операции ввода/вывода.
Секция продолжения (их может быть несколько, если алгоритм управления обменом данными сложный и требуется несколько прерываний для выполнения одной логической операции) осуществляет основную работу по передаче данных. Секция продолжения, собственно говоря, и является основным обработчиком прерывания. Используемый интерфейс может потребовать для управления вводом/выводом несколько последовательностей управляющих команд, а сигнал прерывания у устройства, как правило, только один. Поэтому после выполнения очередной секции прерывания супервизор прерываний при следующем сигнале готовности должен передать управление другой секции. Это делается за счет изменения адреса обработки прерывания после выполнения очередной секции, если же имеется только одна секция прерываний, то она сама передает управление тому или иному модулю обработки.
Секция завершения обычно выключает устройство ввода/вывода либо просто завершает операцию.
Управление операциями ввода/вывода в режиме прерываний требует больших усилий со стороны системных программистов — такие программы создавать сложнее, чем те, что работают в режиме опроса готовности. Примером тому может служить ситуация с драйверами, обеспечивающими печать. Так, в ОС Windows (и Windows 9x, и Windows NT) драйвер печати через параллельный порт работает не в режиме с прерываниями, как это сделано в других ОС, а в режиме опроса готовности, что приводит к 100%-й загрузке центрального процессора на все время печати. При этом, естественно, выполняются и другие задачи, запущенные на исполнение, но исключительно за счет того, что ОС Windows реализует вытесняющую мультизадачность и время от времени прерывает процесс управления печатью и передает центральный процессор остальным задачам.
Закрепление устройств, общие устройства ввода/вывода
Многие устройства не допускают совместного использования. Прежде всего, это устройства с последовательным доступом. Такие устройства могут стать закрепленными, то есть быть предоставленными некоторому вычислительному процессу на все время жизни этого процесса. Однако это приводит к тому, что вычислительные процессы часто не могут выполняться параллельно — они ожидают освобождения устройств ввода/вывода. Для организации использования многими параллельно выполняющимися задачами устройств ввода/вывода, которые не могут быть разделяемыми, вводится понятие виртуальных устройств. Использование принципа виртуализации позволяет повысить эффективность вычислительной системы.
Вообще говоря, понятие виртуального устройства шире, нежели использование этого термина для обозначения спулинга (SPOOLing — simultaneous peripheral operation on-line, то есть имитация работы с устройством в режиме “он-лайн”). Главная задача спулинга — создать видимость параллельного разделения устройства ввода/вывода с последовательным доступом, которое фактически должно использоваться только монопольно и быть закрепленным. Например, мы уже говорили, что в случае, когда несколько приложений должны выводить на печать результаты своей работы, если разрешить каждому такому приложению печатать строку по первому же требованию, то это приведет к потоку строк, не представляющих никакой ценности. Однако можно каждому вычислительному процессу предоставлять не реальный, а виртуальный принтер и поток выводимых символов (или управляющих кодов для их печати) сначала направлять в специальный файл (спул-файл, spool-file)на магнитном диске. Затем, по окончании виртуальной печати, в соответствии с принятой дисциплиной обслуживания и приоритетами приложений выводить содержимое спул-файла на принтер. Системный процесс, который управляет спул-файлом, называется спулером (spool-reader или spool-writer).
Основные системные таблицы ввода/вывода
Каждая ОС имеет свои таблицы ввода/вывода, их состав (количество и назначение каждой таблицы) может сильно отличаться. В некоторых ОС вместо таблиц создаются списки, хотя использование статических структур данных для организации ввода/вывода, как правило, приводит к большему быстродействию. Здесь очень трудно вычленить общие составляющие, тем более что подробной документации на эту тему крайне мало, только если воспользоваться материалами ныне устаревших ОС. Тем не менее, попытаемся это сделать, опираясь на идеи семейства простых, но эффективных ОС реального времени, разработанных фирмой Hewlett-Packard для своих мини-компьютеров.
Исходя из принципа управления вводом/выводом через супервизор ОС и учитывая, что драйверы устройств ввода/вывода используют механизм прерываний для установления обратной связи центральной части с внешними устройствами, можно сделать вывод о необходимости создания по крайней мере трех системных таблиц.
Первая таблица (или список) содержит информацию обо всех устройствах ввода/вывода, подключенных к вычислительной системе. Назовем ее условно таблицей оборудования (equipment table), а каждый элемент этой таблицы пусть называется UCB (unit control block, блок управления устройством ввода/вывода). Каждый элемент UCB таблицы оборудования, как правило, содержит следующую информацию об устройстве:
• тип устройства, его конкретная модель, символическое имя и характеристики устройства;
• как это устройство подключено (через какой интерфейс, к какому разъему, какие порты и линия запроса прерывания используются и т. д.);
• номер и адрес канала (и подканала), если такие используются для управления устройством;
• указание на драйвер, который должен управлять этим устройством, адрес секции запуска и секции продолжения драйвера;
• информация о том, используется или нет буферирование при обмене данными с этим устройством, “имя” (или просто адрес) буфера, если такой выделяется из системной области памяти;
• уставка тайм-аута и ячейки для счетчика тайм-аута;
• состояние устройства;
• поле указателя для связи задач, ожидающих устройство, и, возможно, много еще каких сведений.
Поясним перечисленное.
Поскольку во многих ОС драйверы могут обладать свойством реентерабельности (напомним, это означает, что один и тот же экземпляр программного модуля может обеспечить параллельное обслуживание сразу нескольких однотипных устройств), то в элементе UCB должна храниться либо непосредственно сама информация о текущем состоянии устройства и сами переменные для реентерабельной обработки, либо указание на место, где такая информация может быть найдена. Наконец, важнейшим компонентом элемента таблицы оборудования является указатель на дескриптор той задачи, которая сейчас использует данное устройство. Если устройство свободно, то поле указателя будет иметь нулевое значение. Если же устройство уже занято и рассматриваемый указатель не нулевой, то новые запросы к устройству фиксируются посредством образования списка из дескрипторов тех задач, которые сейчас ожидают данное устройство.
Вторая таблица предназначена для реализации еще одного принципа виртуализации устройств ввода/вывода — независимости от устройства. Желательно, чтобы программист не был озабочен учетом конкретных параметров (и/или возможностей) того или иного устройства ввода/вывода, которое установлено (или не установлено) в компьютер. Для него должны быть важны только самые общие возможности, характерные для данного класса устройств ввода/вывода, которыми он желает воспользоваться. Например, принтер должен уметь выводить (печатать) символы или графическое изображение. А накопитель на магнитных дисках — считывать или записывать по указанному адресу (в координатах cylinder-head-sector) порцию данных. Хотя чаще всего программист и не использует прямую адресацию при работе с магнитными дисками, а работает на уровне файловой системы. Однако в таком случае уже разработчики файловой системы не должны зависеть от того, накопитель какого конкретного типа и модели, а также какого производителя используется в данном конкретном компьютере (например, HDD IBM DTLA 307030, WDAC 450AA или какой-нибудь еще). Важным должен быть только сам факт существования накопителя, имеющего некоторое количество цилиндров, головок чтения/записи и секторов на дорожке магнитного диска. Упомянутые значения количества цилиндров, головок и секторов должны быть взяты из элемента таблицы оборудования. При этом для программиста также не должно иметь значения, каким образом то или иное устройство подключено к вычислительной системе, а не только какая конкретная модель устройства используется. Поэтому в запросе на ввод/вывод программист указывает именно логическое имя устройства. Действительное устройство, которое сопоставляется виртуальному (логическому), выбирается супервизором с помощью таблицы, о которой мы сейчас говорим. Итак, способ подключения устройства, его конкретная модель и соответствующий ей драйвер содержатся в уже рассмотренной таблице оборудования. Но для того, чтобы связать некоторое виртуальное устройство, использованное программистом при создании приложения с системной таблицей, отображающей информацию о том, какое конкретно устройство и каким образом подключено к компьютеру, используется вторая системная таблица. Назовем ее условно таблицей описания виртуальных логических устройств (DRT, device reference table).
Назначение этой второй таблицы — установление связи между виртуальными (логическими) устройствами и реальными устройствами, описанными посредством первой таблицы оборудования. Другими словами, вторая таблица позволяет супервизору перенаправить запрос на ввод/вывод из приложения на те программные модули и структуры данных, которые (или адреса которых) хранятся в соответствующем элементе первой таблицы. Во многих многопользовательских системах такая таблица не одна, а несколько: одна общая и по одной — на каждого пользователя, что позволяет строить необходимые связи между логическими (символьными) именами устройств и реальными физическими устройствами, которые имеются в системе.
Третья таблица необходима для организации обратной связи между центральной частью и устройствами ввода/вывода. Это таблица прерываний, которая указывает для каждого сигнала запроса на прерывание тот элемент UCB, который сопоставлен данному устройству, подключенному так, что оно использует настоящую линию (сигнал) прерывания. Как системная таблица ввода/вывода, таблица прерываний может в явном виде и не присутствовать. В принципе можно сразу из основной таблицы прерываний попадать на программу обработки (драйвер), имеющей связи с элементом UCB. Важно наличие связи между сигналами прерываний и таблицей оборудования.
В современных сложных ОС имеется гораздо больше системных таблиц или списков, используемых для организации процессами управления операциями ввода/вывода. Например, одной из возможных и часто реализуемых информационных структур, сопровождающих практически каждый запрос на ввод/вывод, является блок управления данными (data control block, DCB). Назначение этого DCB — подключение препроцессоров к процессу подготовки данных на ввод/вывод, то есть учет конкретных технических характеристик и используемых преобразований. Это необходимо для того, чтобы имеющееся устройство получало не какие-то непонятные ему коды либо форматы данных, которые не соответствуют режиму его работы, а коды, созданные специально под данное устройство и используемый в настоящий момент формат представления данных.
Теперь с учетом изложенных принципов и таблиц рассмотрим процесс управления вводом/выводом.
Запрос на операцию ввода/вывода от выполняющейся программы поступает на супервизор. Тот проверяет системный вызов на соответствие принятым спецификациям и в случае ошибки возвращает задаче соответствующее сообщение. Если же запрос корректен, то он перенаправляется в супервизор ввода/вывода. Последний по логическому (виртуальному) имени с помощью таблицы DRT находит соответствующий элемент UCB в таблице оборудования. Если устройство уже занято, то описатель задачи, запрос которой сейчас обрабатывается супервизором ввода/вывода, помещается в список задач, ожидающих настоящее устройство. Если же устройство свободно, то супервизор ввода/вывода определяет из UCB тип устройства и при необходимости запускает препроцессор, позволяющий получить последовательность управляющих кодов и данных, которую сможет правильно понять и отработать устройство. Когда “программа” управления операцией ввода/вывода будет готова, супервизор ввода/вывода передаст управление соответствующему драйверу на секцию запуска. Драйвер инициализирует операцию управления, обнуляет счетчик тайм-аута и возвращает управление супервизору (диспетчеру задач) с тем, чтобы он поставил на процессор готовую к исполнению задачу. Система работает своим чередом, но когда устройство ввода/вывода отработает посланную ему команду, оно выставляет сигнал запроса на прерывания, по которому через таблицу прерываний управление передается на секцию продолжения. Получив новую команду, устройство вновь начинает ее обрабатывать, а управление процессором опять передается диспетчеру задач, и процессор продолжает полезную работу. Таким образом, получается параллельная обработка задач, на фоне которой процессор осуществляет управление операциями ввода/вывода.
Очевидно, что если имеются специальные аппаратные средства для управления вводом/выводом, снимающие эту работу с центрального процессора (речь идет и каналах прямого доступа к памяти), то в функции центрального процессора будут по-прежнему входить все только что рассмотренные шаги, за исключением последнего — непосредственного управления операциями ввода/вывода. В случае использования каналов прямого доступа к памяти последние исполняют соответствующие канальные программы и разгружают центральный процессор, избавляя его от непосредственного управления обменом данными между памятью и внешними устройствами.
При описании этой схемы мы не стали затрагивать вопросы распределения каналов, контроллеров и собственно самих устройств. Также были опущены детали получения канальных программ.
Синхронный и асинхронный ввод/вывод
Задача, выдавшая запрос на операцию ввода/вывода, переводится супервизором в состояние ожидания завершения заказанной операции. Когда супервизор получает от секции завершения сообщение о том, что операция завершилась, он переводит задачу в состояние готовности к выполнению, и она продолжает свою работу. Эта ситуация соответствует синхронному вводу/выводу. Синхронный ввод/вывод является стандартным для большинства ОС. Чтобы увеличить скорость выполнения приложений, было предложено при необходимости использовать асинхронный ввод/вывод.
Простейшим вариантом асинхронного вывода является так называемый буферированный вывод данных на внешнее устройство, при котором данные из приложения передаются не непосредственно на устройство ввода/вывода, а в специальный системный буфер. В этом случае логически операция вывода для приложения считается выполненной сразу же, и задача может не ожидать окончания действительного процесса передачи данных на устройство. Процессом реального вывода данных из системного буфера занимается супервизор ввода/ вывода. Естественно, что выделением буфера из системной области памяти занимается специальный системный процесс по указанию супервизора ввода/вывода. Итак, для рассмотренного случая вывод будет асинхронным, если, во-первых, в запросе на ввод/вывод было указано на необходимость буферирования данных, а во-вторых, если устройство ввода/вывода допускает такие асинхронные операции и это отмечено в UCB.
Можно организовать и асинхронный ввод данных. Однако для этого необходимо не только выделить область памяти для временного хранения считываемых с устройства данных и связать выделенный буфер с задачей, заказавшей операцию, но и сам запрос на операцию ввода/вывода разбить на две части (на два запроса). В первом запросе указывается операция на считывание данных, подобно тому как это делается при синхронном вводе/выводе. Однако тип (код) запроса используется другой, и в запросе указывается еще по крайней мере один дополнительный параметр — имя (код) того системного объекта, которое получает задача в ответ на запрос и которое идентифицирует выделенный буфер. Получив имя буфера (будем этот системный объект условно называть таким образом, хотя в различных ОС для его обозначения используются и другие термины, например — класс), задача продолжает свою работу. Здесь очень важно подчеркнуть, что в результате запроса на асинхронный ввод данных задача не переводится супервизором ввода/вывода в состояние ожидания завершения операции ввода/ вывода, а остается в состоянии выполнения или в состоянии готовности к выполнению. Через некоторое время, выполнив необходимый код, который был определен программистом, задача выдает второй запрос на завершение операции ввода/вывода. В этом втором запросе к тому же устройству, который, естественно, имеет другой код (или имя запроса), задача указывает имя системного объекта (буфера для асинхронного ввода данных) и в случае успешного завершения операции считывания данных тут же получает их из системного буфера. Если же данные еще не успели до конца переписаться с внешнего устройства в системный буфер, супервизор ввода/вывода переводит задачу в состояние ожидания завершения операции ввода/вывода, и далее все напоминает обычный синхронный ввод данных.
Обычно асинхронный ввод/вывод предоставляется в большинстве мультипрограммных ОС, особенно если ОС поддерживает мультизадачность с помощью механизма тредов. Однако если асинхронный ввод/вывод в явном виде отсутствует, его идеи можно реализовать самому, организовав для вывода данных самостоятельный поток.
Аппаратуру ввода/вывода можно рассматривать как совокупность аппаратурных процессоров, которые способны работать параллельно относительно друг друга, а также относительно центрального процессора (процессоров). На таких “процессорах” выполняются так называемые внешние процессы. Например, для внешнего устройства (устройства ввода/вывода) внешний процесс может представлять собой совокупность операций, обеспечивающих перевод печатающей головки, продвижение бумаги на одну позицию, смену цвета чернил или печать каких-то символов. Внешние процессы, используя аппаратуру ввода/вывода, взаимодействуют как между собой, так и с обычными “программными” процессами, выполняющимися на центральном процессоре. Важным при этом является то обстоятельство, что скорости выполнения внешних процессов будут существенно (порой, на порядок или больше) отличаться от скорости выполнения обычных (внутренних) процессов. Для своей нормальной работы внешние и внутренние процессы обязательно должны синхронизироваться. Для сглаживания эффекта сильного несоответствия скоростей между внутренними и внешними процессами используют упомянутое выше буферирование. Таким образом, можно говорить о системе параллельных взаимодействующих процессов.
Буферы являются критическим ресурсом в отношении внутренних (программных) и внешних процессов, которые при параллельном своем развитии информационно взаимодействуют. Через буфер (буферы) данные либо посылаются от некоторого процесса к адресуемому внешнему (операция вывода данных на внешнее устройство), либо от внешнего процесса передаются некоторому программному процессу (операция считывания данных). Введение буферирования как средства информационного взаимодействия выдвигает проблему управления этими системными буферами, которая решается средствами супервизорной части ОС. При этом на супервизор возлагаются задачи не только по выделению и освобождению буферов в системной области памяти, но и синхронизации процессов в соответствии с состоянием операций по заполнению пли освобождению буферов, а также их ожидания, если свободных буферов в наличии нет, а запрос на ввод/вывод требует буферирования. Обычно супервизор ввода/вывода для решения перечисленных задач использует стандартные средства синхронизации, принятые в данной ОС. Поэтому если ОС имеет развитые средства для решения проблем параллельного выполнения взаимодействующих приложений и задач, то, как правило, она реализует и асинхронный ввод/вывод.
Кэширование операций ввода/вывода
при работе с накопителями на магнитных дисках
Накопители на магнитных дисках обладают крайне низкой скоростью по сравнению с быстродействием центральной части компьютера. Разница в быстродействии отличается на несколько порядков. Например, современные процессоры за один такт работы, а они работают уже с частотами в 1 ГГц и более, могут выполнять по две операции. Таким образом, время выполнения операции (с позиции внешнего наблюдателя, не видящего конвейеризации при выполнении машинных команд, благодаря которой производительность возрастает в несколько раз) может составлять 0,5 не (!). В то же время переход магнитной головки с дорожки на дорожку составляет несколько миллисекунд. Такие же временные интервалы имеют место и при ожидании, пока под головкой чтения/ записи не окажется нужный сектор данных. Как известно, в современных приводах средняя длительность на чтение случайным образом выбранного сектора данных составляет около 20 мс, что существенно медленнее, чем выборка команды или операнда из оперативной памяти и уж тем более из кэша. Правда, после этого данные читаются большим пакетом (сектор, как мы уже говорили, имеет размер в 512 байтов, а при операциях с диском часто читается или записывается сразу несколько секторов). Таким образом, средняя скорость работы процессора с оперативной памятью на 2-3 порядка выше, чем средняя скорость передачи данных из внешней памяти на магнитных дисках в оперативную память.
Для того чтобы сгладить такое сильное несоответствие в производительности основных подсистем, используется буферирование и/или кэширование данных. Простейшим вариантом ускорения дисковых операций чтения данных можно считать использование двойного буферирования. Его суть заключается в том, что пока в один буфер заносятся данные с магнитного диска, из второго буфера ранее считанные данные могут быть прочитаны и переданы запросившей их задаче. Аналогичный процесс происходит и при записи данных. Буферирование используется во всех операционных системах, но помимо буферирования применяется и кэширование. Кэширование исключительно полезно в том случае, когда программа неоднократно читает с диска одни и те же данные. После того как они один раз будут помещены в кэш, обращений к диску больше не потребуется и скорость работы программы значительно возрастет.
Если не вдаваться в подробности, то под кэшем можно понимать некий пул буферов, которыми мы управляем с помощью соответствующего системного процесса. Если мы считываем какое-то множество секторов, содержащих записи того или иного файла, то эти данные, пройдя через кэш, там остаются (до тех пор, пока другие секторы не заменят эти буферы). Если впоследствии потребуется повторное чтение, то данные могут быть извлечены непосредственно из оперативной памяти без фактического обращения к диску. Ускорить можно и операции записи: данные помещаются в кэш, и для запросившей эту операцию задачи можно считать, что они уже фактически и записаны. Задача может продолжить свое выполнение, а системные внешние процессы через некоторое время запишут данные на диск. Это называется операцией отложенной записи (lazy write, “ленивая запись”). Если отложенная запись отключена, только одна задача может записывать на диск свои данные. Остальные приложения должны ждать своей очереди. Это ожидание подвергает информацию риску не меньшему (если не большему), чем отложенная запись, которая к тому же и более эффективна по скорости работы с диском.
Интервал времени, после которого данные будут фактически записываться, с одной стороны, желательно выбрать больше, поскольку если потребуется еще раз прочитать эти данные, то они уже и так фактически находятся в кэше. И после модификации эти данные опять же помещаются в быстродействующий кэш. С другой стороны, для большей надежности данные желательно поскорее отправить во внешнюю память, поскольку она энергонезависима и в случае какой-нибудь аварии (например, нарушения питания) данные в оперативной памяти пропадут, в то время как на магнитном диске они с большой вероятностью останутся в безопасности. Количество буферов, составляющих кэш, ограничено, поэтому возникает ситуация, когда вновь прочитанные или записываемые новые секторы данных должны будут заменить данные в этих буферах. Возможно использование различных дисциплин, в соответствии с которыми будет назначен какой-либо буфер под вновь затребованную операцию кэширования.
Кэширование дисковых операций может быть существенно улучшено за счет введения техники упреждающего чтения (read ahead). Она основана на чтении с диска гораздо большего количества данных, чем на самом деле запросила операционная система или приложение. Когда некоторой программе требуется считать с диска только один сектор, программа кэширования читает еще и несколько дополнительных блоков данных. А операции последовательного чтения нескольких секторов фактически несущественно замедляют операцию чтения затребованного сектора с данными. Поэтому, если программа вновь обратится к диску, вероятность того, что нужные ей данные уже находятся в кэше, достаточно высока. Поскольку передача данных из одной области памяти в другую происходит во много раз быстрее, чем чтение их с диска, кэширование существенно сокращает время выполнения операций с файлами.
Итак, путь информации от диска к прикладной программе пролегает как через буфер, так и через файловый кэш. Когда приложение запрашивает с диска данные, программа кэширования перехватывает этот запрос и читает вместе с необходимыми секторами еще и несколько дополнительных. Затем она помещает в буфер требующуюся задаче информацию и ставит об этом в известность операционную систему. Операционная система сообщает задаче, что ее запрос выполнен и данные с диска находятся в буфере. При следующем обращении приложения к диску программа кэширования прежде всего проверяет, не находятся ли уже в памяти затребованные данные. Если это так, то она копирует их в буфер; если же их в кэше нет, то запрос на чтение диска передается операционной системе. Когда задача изменяет данные в буфере, они копируются в кэш.
В ряде ОС имеется возможность указать в явном виде параметры кэширования, в то время как в других за эти параметры отвечает сама ОС. Так, например, в системе Windows NT нет возможности в явном виде управлять ни объемом файлового кэша, ни параметрами кэширования. В системах Windows 95/98 такая возможность уже имеется, но она представляет не слишком богатый выбор. Фактически мы можем указать только объем памяти, отводимый для кэширования, и объем порции данных (буфер или chunk), из которых набирается кэш. В файле System.ini есть возможность в секции [VCACHE] прописать, например, следующие значения:
[vcache]
MinFileCache=4096
MaxFileCache-32768
ChunkSize=512
Здесь указано, что минимально под кэширование данных зарезервировано 4 Мбайт оперативной памяти, максимальный объем кэша может достигать 32 Мбайт, а размер данных, которыми манипулирует менеджер кэша, равен одному сектору.
В других ОС можно указывать больше параметров, определяющих работу подсистемы кэширования.
Помимо описанных действий ОС может выполнять и работу по оптимизации перемещения головок чтения/записи данных, связанного с выполнением запросов от параллельно выполняющихся задач. Время, необходимое на получение данных с магнитного диска, складывается из времени перемещения магнитной головки на требуемый цилиндр и времени ожидания заданного сектора; временем считывания найденного сектора и затратами на передачу этих данных в оперативную память мы можем пренебречь. Таким образом, основные затраты времени уходят на поиск данных. В мультипрограммных ОС при выполнении многих задач запросы на чтение и запись данных могут идти таким потоком, что при их обслуживании образуется очередь. Если выполнять эти запросы в порядке поступления их в очередь, то вследствие случайного характера обращений к тому или иному сектору магнитного диска мы можем иметь значительные потери времени на поиск данных. Напрашивается очевидное решение: поскольку выполнение переупорядочивания запросов с целью минимизации затрат времени на поиск данных можно выполнить очень быстро (практически этим временем можно пренебречь, учитывая разницу в быстродействии центральной части и устройств ввода/вывода), то необходимо найти метод, позволяющий перестраивать очередь запросов оптимальным образом. Изучение этой проблемы позволило найти наиболее эффективные дисциплины планирования.
Перечислим известные дисциплины, в соответствии с которыми можно перестраивать очередь запросов на операции чтения/записи данных:
• SSTF (shortest seek time — first) — с наименьшим временем поиска — первым. В соответствии с этой дисциплиной при позиционировании магнитных головок следующим выбирается запрос, для которого необходимо минимальное перемещение с цилиндра на цилиндр, даже если этот запрос не был первым в очереди на ввод/вывод. Однако для этой дисциплины характерна резкая дискриминация определенных запросов, а ведь они могут идти от высокоприоритетных задач. Обращения к диску проявляют тенденцию концентрироваться, в результате чего запросы на обращение к самым внешним и самым внутренним дорожкам могут обслуживаться существенно дольше и нет никакой гарантии обслуживания. Достоинством такой дисциплины является максимально возможная пропускная способность дисковой подсистемы.
• Scan (сканирование). По этой дисциплине головки перемещаются то в одном, то в другом “привилегированном” направлении, обслуживая “по пути” подходящие запросы. Если при перемещении головок чтения/записи более нет попутных запросов, то движение начинается в обратном направлении.
• Next-Step Scan — отличается от предыдущей дисциплины тем, что на каждом проходе обслуживаются только запросы, которые уже существовали на момент начала прохода. Новые запросы, появляющиеся в процессе перемещения головок чтения/записи, формируют новую очередь запросов, причем таким образом, чтобы их можно было оптимально обслужить на обратном ходу.
• C-Scan (циклическое сканирование). По этой дисциплине головки перемещаются циклически с самой наружной дорожки к внутренним, по пути обслуживая имеющиеся запросы, после чего вновь переносятся к наружным цилиндрам. Эту дисциплину иногда реализуют таким образом, чтобы запросы, поступающие во время текущего прямого хода головок, обслуживались не попутно, а при следующем ходе, что позволяет исключить дискриминацию запросов к самым крайним цилиндрам; она характеризуется очень малой дисперсией времени ожидания обслуживания [28]. Эту дисциплину обслуживания часто называют “элеваторной”.