Uploaded by Ирина Моисеенко

Снимок экрана 2024—01—25 в 12.17.40

advertisement
Министерство образования и науки Российской Федерации
НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ СТРОИТЕЛЬНЫЙ УНИВЕРСИТЕТ
Н.А. Иванов
СИСТЕМНОЕ АДМИНИСТРИРОВАНИЕ
ПЕРСОНАЛЬНОГО КОМПЬЮТЕРА
Курс лекций
2-е издание (электронное)
Москва
2017
УДК 621.398
ББК 32973
И20
Рецензент:
кандидат технических наук С.Н. Петрова,
профессор кафедры информационных систем,
технологий и автоматизации в строительстве НИУ МГСУ;
кандидат технических наук А.И. Коников,
доцент кафедры информатики РЭУ им. Г.В. Плеханова
И20
Иванов, Николай Александрович.
Системное администрирование персонального компьютера
[Электронный ресурс] : Курс лекций / Н.А. Иванов ; М-во
образования и науки Росс. Федерации, Моск. гос. строит. ун-т. —
2-е изд. (эл.). — Электрон. текстовые дан. (1 файл pdf : 170 с.). —
Москва : Издательство МИСИ—МГСУ, 2017. — Систем. требования: Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран 10".
I
7 -5-72 4-1 20-5
одробно рассмотрены вопросы системного администрирования
персонального компьютера. Изло ены основные сведения об организации ввода/вывода в современны вы ислительны система .
Рассмотрены теорети еские основы организации файловы систем и
практи еские примеры и реализации.
ля обу аю и ся по направлению 0 .0 .01 Информатика и вы ислительная те ника (бакалавриат).
УДК
К
ерива ивное лек ронное и дание на основе еча но о и дани Системное
администрирование персонального компьютера : курс лекций / Н.А. Иванов ; М-во образования и науки Росс. Федерации, Моск. гос. строит. ун-т.—
Москва : Издательство МИСИ—МГСУ, 2014. — 1 с.
I
7 -5- 72 4-0 51-4.
В соответствии со ст
и
ГК РФ ри устранении о рани ений установ енн
те ни ески и средства и за ит авторски рав равооб адате в раве требоват
от нару ите я воз е ения уб тков и и в
ат ко енсации
I
7 -5-72 4-1 20-5
© ФГБОУ ВПО «МГСУ», 2014
Введение
Дисциплина «Системное администрирование» относится к вариативной части профессионального цикла дисциплин основной образовательной программы направления 230100 «Информатика и вычислительная техника». Дисциплина
является обязательной к изучению.
Целью изучения курса «Системное администрирование» является формирование у будущих специалистов в области проектирования, создания и эксплуатации информационных систем профессионального мышления и приобретение
навыков решения основных задач системного администрирования.
В результате изучения дисциплины студенты должны з н а т ь:
– основные задачи системного администрирования;
– принципы организации ввода/вывода и управление вводом/выводомв современных ОС;
– логическую и физическую организацию различных файловых систем;
– принципы обеспечения безопасности в ОС.
– принципы работы архиваторов;
– принципы организации мультизагрузочных вычислительных систем;
– основы виртуализации в вычислительных системах;
– классификацию системного программного обеспечения.
Должны у м е т ь:
– выбирать (обосновывая свой выбор) то или иное программное средство;
– расширяющее возможности операционной системы, в зависимости от решаемых задач;
– пользоваться различными утилитами по настройке ОС;
– администрировать ОС персонального компьютера;
– организовывать работу нескольких пользователей на одном компьютере;
– сравнивать и оценивать различные методы дефрагментации дисковых
накопителей;
– применять известные методы и средства поддержки информационной безопасности в компьютерных системах;
– проводить сравнительный анализ, выбирать методы и средства, оценивать
уровень защиты информационных ресурсов в прикладных системах.
Должны в л а д е т ь:
– навыками настройки операционной системы в соответствии с предъявляемыми требованиями;
– установкой и настройкой дополнительного программного обеспечения,
направленного на решение задач администрирования в вычислительной
системе;
– построением программных систем, использующих сервисы и механизмы
безопасности, протоколы аутентификации.
Полученные знания и умения необходимы при последующем изучении ряда
профильных дисциплин таких, как «Корпоративные информационные системы
и технологии», «Защита информации», «Информационное обеспечение систем
автоматизации проектирования».
3
1. Общие сведения о системном администрировании
«Системное администрирование — не роскошь,
а объективная необходимость!»
1.1. Что такое системное администрирование?
Сегодня уже невозможно представить себе работу предприятия без
компьютерной техники, совокупность которой является определенной
вычислительной системой, предназначенной для решения самых разнообразных задач.
Как правило, вычислительная система состоит из следующих
компонентов:
– вычислительное оборудование;
– коммутационное оборудование;
– вспомогательное инженерно-техническое оборудование;
– каналы связи;
– прикладное программное обеспечение (ППО);
– системное программное обеспечение (СПО).
Системное администрирование — это процесс управления, технического обслуживания и проведения других технических и административных
мероприятий, направленных на поддержание вычислительной системы в
рабочем состоянии.
При сложности и многообразии компьютерной техники заниматься
системным администрированием может только специалист, обладающий необходимыми знаниями и навыками.
Системное администрирование на предприятиях может быть организовано по одному из двух вариантов: первый — нанять системного администратора в штат; второй — пользоваться услугами сторонней организации, специализирующейся на подобных работах. Жизнь показывает,
что все больше предприятий отдают предпочтение второму варианту в
силу его экономичности. Особенно удобным является абонентское обслуживание предприятия, так как этот вариант сотрудничества с одной
стороны, гарантирует заказчику постоянство в обслуживании техники
«одними руками», а с другой дает возможность исполнителю планировать свои работы, что положительно влияет на качество работ.
Системное администрирование включает следующий комплекс
услуг:
– выбор, установка и настройка операционных систем и различного
системного программного обеспечения;
– подбор оборудования, инсталляция и настройка локальных компьютерных сетей;
– обучение персонала заказчика, связанного с обслуживанием компьютерной техники;
– другие услуги, связанные с эксплуатацией информационных
систем.
4
1.2. Кто такой системный администратор?
Начнем с самого обычного определения:
Системный администратор — это специалист, который отвечает
за работоспособность компьютерного оборудования (серверов, сетевых
устройств, персональных компьютеров, принтеров, факсов, сканеров, копиров) и системного программного обеспечения.
Из приведенного выше определения следует, что системный администратор имеет дело только с «железом» и софтом. Однако в реальной
жизни одним из важнейших факторов, влияющих на деятельность системного администратора, является пользователь. Удобство и бесперебойность работы пользователя часто служит критерием эффективности
системного администрирования в организации.
Поэтому уточним определение.
Системный администратор занимается обслуживанием пользователей
в области компьютерной техники и системного программного обеспечения и
отвечает за работоспособность всех элементов вычислительной системы.
1.2.1. Описание профессии
Общие должностные обязанности системного администратора, как
специалиста, включают: обеспечение штатной работы компьютерной
техники, операционных систем, системных программ и контроль за
уровнем информационной безопасности.
Условно системных администраторов можно разделить на четыре
категории:
– администратор WEB-сервера — занимается установкой, настройкой и обслуживанием программного обеспечения WEB-серверов;
– администратор баз данных — управляет базами данных через СУБД;
– администратор сети — в его обязанности входят разработка и обслуживание сетей, обеспечение безопасности передачи данных
во внутренней сети компании и при взаимодействии с внешними
сетями;
– администратор безопасности сети — отвечает за информационную
безопасность данных компании.
Виды деятельности:
– установка и конфигурирование необходимых операционных систем;
– установка и конфигурирование необходимых обновлений для операционной системы и используемых программ;
– резервное копирование данных, их проверка и уничтожение в случае надобности;
– установка и настройка дополнительного аппаратного и программного обеспечения;
– администрирование пользовательских учетных записей;
– контроль за уровнем информационной безопасности;
– планирование и проведение работ по расширению структуры сети;
5
– работа с технической документацией.
Места работы:
– IT-компании;
– IT-отделы и департаменты средних и крупных компаний;
– отделы технической поддержки пользователей или клиентов;
– любые другие компании, пользующиеся в своей работе компьютером и Интернетом.
Профессиональные навыки:
– знания в области ИТ;
– технический английский язык
1.2.2. Что должен уметь системный администратор?
Не секрет, что в любой профессии есть несколько составляющих,
знание которых и наличие практических навыков определяют уровень
специалиста в той или иной отрасли.
Одна из таких составляющих — техническая, она относится собственно к предмету той деятельности, которую выполняет сотрудник. Для
системного администратора — это познания в области устройства оборудования, вычислительных сетей, операционных систем и системного
программного обеспечения, баз данных, умение внятно формулировать
техническую проблему, пользоваться многочисленными источниками
информации (книги, журналы, доски объявлений и другие ресурсы в
Интернете) для поиска решения проблемы.
Но все большее значение приобретает другая сторона деятельности
администратора — функциональная.
Необходимо организовать работу таким образом, чтобы:
1) проблемы и перебои в компьютерном обеспечении сотрудников
компании свести к минимуму;
2) потребности в изменениях (замена устаревшего оборудования,
получение новых прав и полномочий, приобретение и установка
нового ПО) удовлетворялись в срок и с минимальными затратами
как стоимостными, так и временными;
3) смена версий ПО и замена оборудования не приводили к проблемам, упомянутым в п.1;
4) в случае локальных проблем (отказ винчестера ПК) или глобальных аварий (отказ серверов или сетевых устройств, отключение
электропитания, пожар) сотрудники компании могли бы продолжать работу;
5) отчеты, которые ложатся на столы руководителей, содержали бы
достоверные и непротиворечивые данные;
6) сотрудники компании активно использовали хотя бы некоторые возможности средств автоматизации делопроизводства и
документооборота.
6
Рассматривая системное администрирование в таком ключе, легко
понять, что область деятельности здесь чрезвычайно широка, и расти
профессионально в ней можно практически бесконечно. Что касается
карьерного роста, то чаще всего — это один из двух вариантов: системный администратор может вырасти до начальника отдела информационных технологий либо возглавить собственную компанию.
1.2.3. Системный администратор и современный рынок труда
По данным агентств по подбору персонала, «в роли системного администратора работодатель видит открытого к общению, ответственного, внимательного, способного работать в коллективе мужчину до 35 лет
с высшим техническим образованием, аналитическим складом ума и системным подходом к работе, владеющего техническим английским языком. Это должен быть человек, не только прекрасно разбирающийся в
«железе», но и способный быстро ориентироваться в различных областях
знаний, так или иначе связанных с системным администрированием».
Необходимо отметить, что работодателю иногда не нужен человек
с большим опытом работы, так как есть возможность повысить квалификацию по ходу работы. Такая практика распространена в компаниях,
работающих в сфере информационных технологий. Ряд работодателей
придерживается противоположенной точки зрения, желая, чтобы их будущий системный администратор был обладателем различных сертификатов, свидетельствующих о его высоком профессиональном уровне в
области администрирования серверных продуктов для различных аппаратных платформ и ОС.
Многие работодатели обращают внимание на опыт работы в сфере
системного администрирования, хотя из практики известно, что опыт
работы совсем не гарантирует высокую квалификацию соискателя.
Большое внимание при приеме на работу обращают на способность и
желание к обучению, навыки практической работы.
Профессия системного администратора изначально считается «мужской». Связано это с тем, что системными администраторами чаще всего
становятся инженеры, в круг обязанностей которых входит черновая работа по прокладке локальной сети. Число женщин, работающих в должности системного администратора, несопоставимо с числом мужчин,
выбравших эту профессию. Однако появление новых беспроводных технологий может в ближайшее время изменить ситуацию.
В описание вакансии при поиске кандидата на должность системного
администратора в перечень основных задач специалиста обычно включают следующее: установка и конфигурирование нового аппаратного и
программного обеспечения, управление пользовательскими учетными
записями, разработка и реализация политики информационной безопасности компании, устранение неполадок в системе, подготовка и сохранение резервных копий данных.
7
Одной из проблем в работе системного администратора является проблема общения с пользователями. Системный администратор должен
уметь, общаясь с большим количеством людей, спокойно выслушивать
их и без раздражения устранять имеющиеся проблемы. Кроме того, системный администратор непременно должен отличаться «отказоустойчивостью в критических ситуациях».
Немаловажен и психологический момент, связанный с доступом системного администратора к компьютеру любого сотрудника. Вот что по
этому поводу пишет Алексей Гой [ 21], системный администратор офиса
компании «Домотехника» (штат — 160 чел.): «Конечно, никому не нравится, что сисадмины могут в любой момент посмотреть личную почту
и файлы, но тут никуда не денешься. В принципе, все зависит от самого
сисадмина. Если он не закрывается с умным видом в коморке и не пугает
пользователей бегающим курсором без их ведома и угрозами «а что это за
фотографии я видел у тебя в компьютере?», то людям будет спокойней,
когда они знают, что, даже имея всеобщий доступ, сисадмин не полезет
без спроса в личную жизнь».
По наблюдениям сотрудников агентств по подбору персонала, главная
ошибка работодателя — желание совместить в одном человеке и программиста, и системного администратора. В настоящее время есть еще немало
организаций, в которых системный администратор полностью удовлетворяет или должен удовлетворять приведенному ранее определению.
Такому системному администратору приходится совмещать множество
обязанностей, а поддерживать все IT-хозяйство на должном техническом
и функциональном уровне крайне сложно.
К счастью, область информационных технологий (ИТ) развивается
стремительно и идет заметный переход от натурального хозяйства к разделению труда: появляются отдельные, для многих пока непривычные, профессии, из которых наиболее близко к системному администратору стоят
технический эксперт, специалист по ИТ-безопасности, сервис-инженер,
специалист по обслуживанию пользователей и оператор (диспетчер) центра поддержки. В связи с этим при поиске кандидата на место системного
администратора необходимо четко определить функциональные обязанности будущего сотрудника. Как показывает практика, в крупных компаниях многочисленные задачи, связанные с обеспечением безотказной
работы вычислительной системы, делятся между несколькими сотрудниками — системными администраторами, каждый из которых решает
строго определенный круг задач. Например, администрирование рабочих
станций, администрирование вычислительной сети, администрирование
пользователей и т.д.
Размер заработной платы системного администратора зависит от опыта и знаний претендента и задач, которые перед ним стоят. Немаловажным
при обсуждении размера заработной является размер компании, число
8
поддерживаемых администратором рабочих мест, состав и состояние аппаратных средств.
Помимо прочего, работодатели мотивируют системных администраторов не только материально, но и с помощью всевозможных бонусов и
социальных пакетов. Традиционно системные администраторы очень любят свободный график. Некоторым специалистам гораздо проще управлять работой офиса удаленно, хотя такой режим работы подходит только
для небольших компаний. По словам одного из опытных системных администраторов, «если сисадмина поставить в жесткие рамки, но при этом
дать ему большую зарплату, то вовсе не факт, что он останется только из-за
материальной выгоды, предпочтя вознаграждение свободному графику».
1.3. Основные задачи системного администратора
Ниже приводится перечень задач, решение которых обычно возлагается на системных администраторов. Совсем не обязательно, чтобы эти
функции выполнял один сотрудник. Как отмечалось ранее, эта работа
может быть распределена среди нескольких администраторов. Но в этом
случае обязательным является наличие главного администратора — сотрудника, который понимал бы все поставленные задачи и обеспечивал
их выполнение другими людьми.
1.3.1. Выбор и установка операционной системы
Как известно, операционная система (ОС) компьютера представляет собой комплекс взаимосвязанных программ, который действует как
интерфейс между приложениями и пользователями с одной стороны, и
аппаратурой компьютера с другой. При выборе операционной системы
необходимо прежде всего учитывать, какие задачи будет выполнять компьютер, на который система устанавливается. Если компьютер будет использоваться в качестве выделенного сервера, то на выбор ОС могут повлиять технические требования. Если же компьютер будет выступать в
роли рабочей станции, то важнейшими факторами, которые нужно учитывать при выборе ОС, будут число пользователей, разделяющих один
компьютер, и уровень их компьютерной подготовки.
1.3.2. Подключение и удаление пользователей
Создание учетных записей для новых пользователей и удаление учетных записей тех пользователей, которые уже уволены, является одной из
задач системного администратора. Процесс добавления пользователей в
систему можно автоматизировать, но решения, от которых зависят добавление и работа нового пользователя, должен принимать системный
администратор. При удалении учетной записи пользователя необходимо
удалить все файлы и каталоги, связанные с этой учетной записью, что
позволит освободить место на диске и как следствие иногда повысить
производительность системы.
9
1.3.3. Подключение и удаление аппаратных средств
В случае приобретения новых аппаратных средств или подключения
уже имеющихся аппаратных средств к другой машине систему нужно
сконфигурировать таким образом, чтобы она распознала и использовала эти средства. В ряде случаев для корректной работы нового оборудования требуется установить специальные системные программные
средства — драйверы, используя которые ОС сможет получить доступ
к аппаратному обеспечению. Изменение конфигурации, связанное с
подключением нового оборудования, может быть как простой задачей
(например, подключение устройства печати), так и достаточно сложной
(например, подключение сканера).
1.3.4. Резервное копирование
Выполнение резервного копирования является одной из наиболее
важных задач системных администраторов. Процедура резервного копирования довольно утомительна и занимает много времени, но выполнять ее необходимо. Ее можно автоматизировать или поручить подчиненным, но все равно системный администратор обязан убедиться в
том, что резервное копирование выполнено правильно и по графику.
1.3.5. Инсталляция новых программных средств
Приобретение нового программного обеспечения порождает две
задачи: ПО нужно инсталлировать и протестировать. Если программы
работают нормально, необходимо уведомить пользователей об их наличии и сообщить, как к ним обратиться. При инсталляции локального
программного обеспечения следует придерживаться простого правила:
ПО нужно инсталлировать туда, где его можно будет легко отличить от
программных средств, поставляемых в составе операционной системы.
Такой подход значительно упрощает задачу расширения операционной
системы, поскольку исчезает опасность уничтожения локального программного обеспечения в ходе подобного расширения.
1.3.6. Мониторинг системы
Среди задач системного администратора есть задачи, которые требуется выполнять ежедневно. Например, проверка правильности
функционирования электронной почты и телеконференций, просмотр
регистрационных файлов на предмет наличия ранних признаков неисправностей, контроль за подключением локальных сетей, контроль за
наличием системных ресурсов.
1.3.7. Поиск неисправностей
Различные операционные системы и аппаратные средства, на которых они работают, время от времени выходят из строя. Задача администратора – диагностировать сбои в системе и в случае необходимости
10
вызвать технических специалистов. Как правило, найти неисправность
бывает намного сложнее, чем устранить ее.
1.3.8. Ведение локальной документации
Настраивая конфигурацию под конкретные требования, администратор вскоре обнаруживает, что она значительно отличается от конфигурации, описанной в документации (базовой конфигурации). Поэтому системный администратор должен документировать все инсталлируемые
программные средства, не входящие в стандартный комплект поставки,
документировать разводку кабелей, вести записи по обслуживанию всех
аппаратных средств, регистрировать состояние резервных копий, документировать локальные процедуры и правила работы с системой.
1.3.9. Контроль защиты
Системный администратор должен реализовывать стратегию защиты
и периодически проверять, не нарушена ли защита системы. В системах
с низким уровнем безопасности эта процедура может быть сведена всего
к нескольким текущим проверкам на предмет несанкционированного
доступа. В системах с высоким уровнем безопасности обычно применяется сложная структура ловушек и программ контроля.
1.3.10. Оказание помощи пользователям
Задача «оказание помощи пользователям в решении различных проблем» редко включается в должностную инструкцию системного администратора, однако выполнение подобного рода обязанностей занимает
значительную часть рабочего времени последнего. При этом работа с
пользователями должна быть построена так, чтобы уровень их компьютерной подготовки возрастал с решением тех или иных проблем, а деятельность системного администратора сокращала число потенциальных
обращений пользователей.
1.4. Системное администрирование
и системное программное обеспечение
Системное программное обеспечение (СПО) является частью программного обеспечения вычислительной системы, знать и уметь настраивать которое должен системный администратор. СПО состоит из модулей, как правило, использующихся всеми прикладными программами
или для обслуживания вычислительной системы в целом.
Системное программное обеспечение предназначено:
● для создания операционной среды функционирования других
программ;
● автоматизации разработки (создания) новых программ;
● обеспечения надежной и эффективной работы самого компьютера и вычислительной сети;
11
● проведения диагностики и профилактики аппаратуры компьютера и вычислительных сетей;
● выполнения вспомогательных технологических процессов (копирование, архивирование, восстановление файлов программ и баз
данных и т.д.).
Системное программное обеспечение может быть разделено на пять
групп:
1. Операционные системы.
2. Системы управления файлами.
3. Интерфейсные оболочки для взаимодействия пользователя с ОС и
программные среды.
4. Системы программирования.
5. Утилиты.
Напомним, что под операционной системой обычно понимают комплекс управляющих и обрабатывающих программ, который, с одной
стороны, выступает как интерфейс между аппаратурой компьютера и
пользователем с его задачами, а с другой — предназначен для наиболее
эффективного использования ресурсов вычислительной системы и организации надежных вычислений. Ни один вид программного обеспечения вычислительной системы, кроме ОС, не имеет непосредственного
доступа к аппаратуре компьютера.
Назначение систем управления файлами — организация более удобного доступа к данным, представленным в виде файлов. Благодаря таким системам вместо низкоуровневого доступа к данным с указанием
конкретных физических адресов нужной записи используется логический доступ с указанием имени файла и записи в нем. Выделение этого вида системного программного обеспечения в отдельную категорию
связано с тем, что в последние годы многие ОС позволяют работать с несколькими различными файловыми системами. Процедура добавления
дополнительной файловой системы получила название «монтирование
файловой системы».
Для удобства взаимодействия с ОС могут использоваться дополнительные интерфейсные оболочки, назначение которых — расширить
возможности по управлению ОС. В качестве примера можно назвать
различные варианты графического интерфейса X Window в UNIXподобных ОС.
Некоторые операционные системы могут поддерживать выполнение
программ, разработанных для других ОС, путем создания соответствующих операционных сред, организуемых в рамках отдельных виртуальных машин. Для решения этой же задачи используются эмуляторы, позволяющие смоделировать в одной операционной системе какую-либо
другую ОС. Таким образом, термин «операционная среда» означает соответствующий интерфейс, необходимый программам для обращения к
ОС с целью получить определенный сервис.
12
Основными элементами системы программирования являются
транслятор с соответствующего языка программирования, библиотеки
подпрограмм, компоновщики, отладчики, загрузчики. Любая система
программирования может работать только под управлением операционной системы, под которую она создана.
Утилиты представляют собой специальные системные программы,
с помощью которых можно обслуживать либо операционную систему,
либо вычислительную систему. Важно понимать, что утилиты могут
правильно работать только в соответствующей операционной системе.
Состав утилит в той или иной вычислительной системе может быть весьма разнообразным. Набор утилит прежде всего определяется набором
задач, решаемых на компьютере, и составом пользователей, решающих
эти задачи. Ряд утилит устанавливается практически на любой компьютер. К таким программам можно отнести антивирусное ПО, средства архивации, файловые менеджеры. Другие утилиты, являющиеся
по сути своей инструментами системного администратора, могут быть
установлены на его компьютере или на рабочих станциях пользователей
для решения каких-либо задач, связанных с обеспечением работоспособности и поддержки пользователя. К таким средствам СПО можно
отнести средства удаленного доступа, средства контроля и мониторинга
системы, средства резервного копирования и аварийного восстановления системы.
2. Управление вводом/выводом в операционных
системах
Основной идеей, реализация которой на практике привела к созданию системного программного обеспечения, было желание предоставить прикладным программам средства обмена данными с устройствами
ввода/вывода, не требующие непосредственного включения в каждую
программу фрагментов кода, управляющего внешними устройствами.
Сначала код, реализующий операции ввода/вывода, стали оформлять в
виде системных библиотечных процедур, а затем вообще удалили из систем программирования и включили непосредственно в операционную
систему. Такой подход позволил прикладным программам обращаться
к коду, обрабатывающему ввод/вывод, с помощью системных вызовов.
Управление вводом/выводом стало одной из основных частей системного программного обеспечения, эффективно использовать которую должен уметь системный администратор.
2.1. Основные концепции организации ввода/вывода
в операционных системах
Управление операциями ввода/вывода считается одним из самых
важных и в то же время одним из сложных разделов процесса разработки операционной системы. Сложность объясняется наличием большого
числа различных по типу и назначению устройств ввода/вывода, работу
которых должна поддерживать операционная система. Разработчикам
операционной системы необходимо решить трудную задачу — организовать эффективное управление различными внешними устройствами,
обеспечив удобный и эффективный виртуальный интерфейс устройств
ввода/вывода, дающий возможность прикладным программистам легко
считывать или сохранять данные, не обращая внимания на особенности
отдельных устройств и проблемы распределения устройств между выполняющимися процессами. Система ввода/вывода должна быть универсальной, объединяющей в одной модели все разнообразие внешних
устройств от простой мыши и клавиатур до принтеров, графических дисплеев, дисковых накопителей и даже сетей. В то же время важно обеспечить доступ к внешним устройствам для множества параллельно выполняющихся процессов, сведя к минимуму вероятность возникновения
проблем, связанных с использованием последними устройств ввода/
вывода.
Таким образом, при проектировании подсистемы управления вводом/выводомопределяющим становится следующий принцип: любые
операции по управлению вводом/выводомобъявляются привилегированными и могут выполняться только кодом самой операционной системы. Для
реализации этого принципа на практике в большинстве современных
процессоров вводятся два режима работы: режим пользователя и режим
14
супервизора. Второй режим часто называют привилегированным режимом
или режимом ядра. Одной из особенностей указанных режимов является
то, что в режиме супервизора выполнение команд ввода/вывода разрешено, а в пользовательском режиме — запрещено. Обращение к командам ввода/вывода в прикладных программах вызывает прерывание, и
управление через механизм прерываний передается коду операционной
системы.
В учебнике А.В. Гордеева [3] названы три основные причины, по которым нельзя разрешать каждой отдельной пользовательской программе обращаться к внешним устройствам непосредственно:
1. Необходимость разрешать возможные конфликты в доступе к
устройствам ввода/вывода. Например, пусть две параллельно выполняющиеся программы пытаются вывести на печать результаты своей работы. Если не предусмотреть внешнего управления устройством печати,
то в результате можно получить абсолютно нечитаемый текст, так как
каждая программа будет время от времени выводить свои данные, перемежающиеся с данными от другой программы. Еще один пример: одной
программе необходимо прочитать данные с одного сектора магнитного диска, а другой — записать результаты в другой сектор того же накопителя. Если операции ввода/вывода не будут отслеживаться каким-то
третьим (внешним) процессом-арбитром, то после позиционирования
магнитной головки для первой задачи может тут же прийти команда позиционирования головки для второй задачи, и обе операции ввода/вывода не смогут выполниться корректно.
2. Желание увеличить эффективность использования ресурсов ввода/
вывода. Например, у накопителя на магнитных дисках время подвода
головки чтения/записи к необходимой дорожке и время обращения к
определенному сектору могут значительно (до тысячи раз) превышать
время пересылки данных. В результате, если задачи по очереди обращаются к цилиндрам, далеко отстоящим друг от друга, то полезность работы, выполняемой накопителем, может быть существенно снижена.
3. Необходимость избавить программы ввода/вывода от ошибок.
Ошибки в программах ввода/вывода могут привести к краху всех вычислительных процессов, ибо часть операций ввода/вывода требуются
самой операционной системе. В ряде операционных систем системный
ввод/вывод имеет существенно более высокие привилегии, чем ввод/
вывод задач пользователя. Поэтому системный код, управляющий операциями ввода/вывода, очень тщательно отлаживается и оптимизируется для повышения надежности вычислений и эффективности использования оборудования.
Управление вводом/выводомобеспечивает модуль операционной системы, который часто называют супервизором ввода/вывода. К основным
задачам супервизора ввода/вывода относятся [4]:
15
1. Супервизор ввода/вывода получает запросы на ввод/вывод от прикладных задач или от программных модулей самой операционной системы. Эти запросы проверяются на корректность и, если они соответствуют спецификациям и не содержат ошибок, то обрабатываются дальше.
В противном случае прикладной задаче выдается соответствующее диагностическое сообщение о некорректности запроса.
2. Супервизор ввода/вывода планирует ввод/вывод, определяя очередность предоставления устройств ввода/вывода задачам, затребовавшим эти устройства. При этом запрос на ввод/вывод либо тут же выполняется, либо ставится в очередь на выполнение.
3. Супервизор ввода/вывода инициирует операции ввода/вывода,
передавая управление соответствующим драйверам, и в случае управления вводом/выводомс использованием прерываний передает диспетчеру задач право выделить процессор наиболее привилегированной задаче, стоящей в очереди на выполнение.
4. При получении запросов на прерывание от внешних устройств супервизор ввода/вывода обрабатывает эти запросы и передает управление соответствующим программам обработки прерываний.
5. Супервизор ввода/вывода осуществляет передачу сообщений об
ошибках, если таковые выявляются в процессе управления операциями
ввода/вывода.
6. Супервизор ввода/вывода посылает сообщения о завершении операции ввода/вывода запросившей эту операцию прикладной программе
и сбрасывает признак состояния ожидания ввода/вывода, если программа ожидала завершения операции.
Таким образом, прикладные программы не могут непосредственно
связываться с устройствами ввода/вывода. Однако, программа может,
установив соответствующие значения параметров в запросе на ввод/вывод, определяющие требуемую операцию и количество потребляемых
ресурсов, обратиться к супервизору ввода/вывода, который и запускает
необходимые логические и физические операции.
Запрос на ввод/вывод оформляется в виде системного вызова с учетом требований интерфейса прикладного программирования той операционной системы, в среде которой выполняется приложение. Важно
отметить, что параметры, указываемые в запросах на ввод/вывод, передаются не только в вызывающих последовательностях, создаваемых по
спецификациям API, но и как данные, помещаемые в соответствующие
системные таблицы.
2.2. Режимы управления вводом/выводом
В современных операционных системах применяются два режима
ввода/вывода: режим обмена с опросом готовности устройства ввода/
вывода (рис. 2.1) и режим обмена с прерываниями.
Рассмотрим оба режима подробнее.
16
Оперативная память
Данные
Команда
ввода/вывода
Центральный
процессор
или процессор
ввода/вывода
Устройство
управления
устройством
ввода/вывода
Устройство
ввода/вывода
Сигнал
готовности
Рис. 2.1. Управление вводом/выводом с опросом готовности
Для простоты рассмотрения будем считать, что управление вводом/
выводомвыполняет центральный процессор. Такой вариант реализации
ввода/вывода принято называть поддержкой программного канала обмена данными между внешним устройством и оперативной памятью.
Режим обмена с опросом готовности устройства ввода/вывода
Итак, пусть центральный процессор посылает устройству управления команду, требующую, чтобы определенное внешнее устройство выполнило некоторое действие. Например, если речь идет об управлении
дисководом, то это может быть команда на включение двигателя или команда, связанная с позиционированием магнитных головок. Устройство
управления внешним устройством (УУВУ) исполняет команду, преобразуя сигналы, понятные ему и центральному процессору, в сигналы,
понятные внешнему устройству. После выполнения команды внешнее
устройство выдает сигнал готовности, который сообщает процессору о
том, что можно передавать очередную команду для продолжения обмена данными. Из-за того, что быстродействие внешнего устройства на
несколько порядков ниже быстродействия центрального процессора,
последнему приходится долго ожидать сигнала готовности, постоянно
опрашивая соответствующую линию интерфейса на наличие или отсутствие этого сигнала. Длительное ожидание связано с тем, что нет смысла
отправлять внешнему устройству очередную команду, не дождавшись
ответа об исполнении предыдущей команды. В режиме опроса готовности процессор, обрабатывая код драйвера, управляющего процессом
обмена данными с ВУ, как раз и выполняет в цикле команду «проверить
наличие сигнала готовности», нерационально расходуя процессорное
время, которое можно было бы потратить на решение других задач.
17
Режим обмена с прерываниями
Гораздо выгоднее, выдав команду ввода/вывода, поручить внешнему устройству самостоятельно выполнять необходимые действия или
передать контроль за выполнением этой операции от центрального процессора какому-либо специализированному устройству. В этом случае
можно переключить процессор на решение другой задачи, а появление
сигнала о завершении операции ввода/вывода трактовать как запрос на
прерывание от внешнего устройства.
Режим обмена с прерываниями реализует режим асинхронного
управления вводом-вывлдом. Центральный процессор посылает устройству управления команду, требующую, чтобы определенное внешнее
устройство выполнило некоторое действие, и на время забывает об этом
устройстве, перейдя на обработку другой программы. Выполнив операцию ввода/вывода, внешнее устройство через систему прерываний выдает запрос на прерывание работы процессора. Именно такой запрос и
является сигналом готовности устройства ввода/вывода.
Для того чтобы процессор, выдав внешнему устройству очередную
команду на прием или передачу данных, не потерял этого устройства
после переключения на выполнение других программ, может быть запущен отсчет времени, в течение которого устройство обязательно
должно выполнить команду и прислать сигнал запроса на прерывание.
Максимальный интервал времени, в течение которого внешнее устройство или его контроллер должен выдать сигнал запроса на прерывание,
принято называть тайм-аутом. Если после выдачи устройству очередной команды прошло больше времени, чем было указано в тайм-ауте,
а устройство так и не ответило, то делается вывод о том, что связь с
устройством утеряна и им больше невозможно управлять. Задача, запросившая утерянную операцию ввода/вывода, получают соответствующее
диагностическое сообщение.
В учебнике А. В. Гордеева [3] дано достаточно подробное описание
действий драйвера, работающего в режиме прерываний. Драйвер, представляющий собой сложный комплекс программных модулей, рассматривается как набор, имеющий несколько секций: секцию запуска, одну
или несколько секций продолжения и секцию завершения.
«Секция запуска инициирует операцию ввода/вывода. Эта секция запускается для включения устройства ввода/вывода или просто для инициализации очередной операции ввода/вывода.
Секция продолжения (их может быть несколько, если алгоритм управления обменом данными сложный и требуется несколько прерываний
для выполнения одной логической операции) осуществляет основную
работу по передаче данных. Эта секция, собственно говоря, и является основным обработчиком прерывания. Поскольку используемый интерфейс может потребовать для управления вводом/выводом несколько последовательностей управляющих команд, а сигнал прерывания у
18
устройства, как правило, только один, то после выполнения очередной
секции прерывания супервизор прерываний при следующем сигнале готовности должен передать управление другой секции. Это делается путем изменения адреса обработки прерывания после выполнения очередной секции, а если имеется только одна секция продолжения, она сама
передает управление в ту или иную часть кода подпрограммы обработки
прерывания.
Секция завершения обычно выключает устройство ввода/вывода или
просто завершает операцию» [3].
А.В. Гордеев отмечает, что «управление операциями ввода/вывода в
режиме прерываний требует значительных усилий со стороны системных программистов — такие программы создавать сложнее» [3]. В качестве примера приводится ситуация с драйверами печати в операционных системах Windows. В обеих ветвях этой ОС (Windows 9x и Windows
NT соответственно) печать через параллельный порт осуществлялась не
в режиме с прерываниями (как это сделано в ОС других производителей)
а в режиме опроса готовности, что приводило к 100%-ной загрузке центрального процессора на все время печати. Выполнение других задач, запущенных на исполнение, осуществлялось исключительно за счет того,
что упомянутые операционные системы поддерживают вытесняющую
мультизадачность, время от времени прерывая процесс управления печатью и передавая центральный процессор остальным задачам.
2.3. Основные системные таблицы ввода/вывода
Для контроля выполнения операций ввода/вывода и учета состояния всех ресурсов, занятых в процессе передачи данных, операционная
система должна иметь соответствующие информационные структуры.
Такие информационные структуры, называемые таблицами ввода/вывода, отображают следующую информацию:
1. Перечень устройств ввода/вывода с указанием интерфейсов для их
подключения.
2. Перечень аппаратных ресурсы, закрепленных за имеющимися в
системе устройствами ввода/вывода.
3. Закрепленные за устройствами ввода/вывода логические имена,
используемые вычислительными процессами при инициализации операций ввода/вывода.
4. Адреса областей памяти для размещения кодов драйверов
устройств ввода/вывода и для хранения рабочих переменных, определяющих работу с этими устройствами.
5. Адреса областей памяти для хранения информации о текущем состоянии устройства ввода/вывода и параметрах, определяющих режимы
работы устройства.
6. Сведения о процессе, за которым закреплено устройство в текущий момент.
19
7. Адреса областей памяти, содержащих данные, получаемые при
операциях ввода данных и выводимые на устройство при операциях вывода данных.
Каждая операционная система создает и поддерживает свои таблицы
ввода/вывода. У разных ОС число и назначение таблиц может сильно
отличаться. В некоторых операционных системах вместо таблиц создаются списки, требующие меньше памяти для своего хранения по сравнению с обычными таблицами. Однако использование статических
структур данных для организации ввода/вывода, как правило, приводит
к более высокому быстродействию.
Принимая во внимание тот факт, что управление операциями ввода/
вывода осуществляется через супервизор операционной системы и что
драйверы внешних устройств используют механизм прерываний для организации обратной связи между центральным процессором и устройствами ввода/вывода, можно предположить наличие по крайней мере
трех системных таблиц. А.В. Гордеев в своем учебнике [3] дает подробное описание каждой из таблиц и рассматривает их взаимосвязь при выполнении операций ввода/вывода:
«Первая таблица содержит информацию обо всех устройствах ввода/вывода, подключенных к вычислительной системе. Эту таблицу
называют таблицей оборудования (equipment table), а каждый элемент
этой таблицы пусть называется UCB (Unit Control Block — блок управления устройством ввода/вывода). Каждый элемент UCB таблицы
оборудования, как правило, содержит следующую информацию об
устройстве:
● тип устройства, его конкретная модель, символическое имя и характеристики устройства;
● способ подключения устройства (через какой интерфейс, к какому разъему, какие порты и линия запроса прерывания используются и т. д.);
● номер и адрес канала (и подканала), если такие используются для
управления устройством;
● информация о драйвере, который должен управлять этим устройством, адреса секции запуска и секции продолжения драйвера;
● информация о том, используется или нет буферизация при обмене данными с устройством, «имя» (или просто адрес) буфера, если
такой выделяется из системной области памяти;
● установка тайм-аута и ячейки для счетчика тайм-аута;
● состояние устройства;
● поле указателя для связи задач, ожидающих устройство.
Поясним перечисленное. Поскольку во многих операционных системах драйверы могут обладать свойством реентерабельности, то есть
один и тот же экземпляр драйвера может обеспечить параллельное обслуживание сразу нескольких однотипных устройств, то в элементе UCB
20
должна храниться либо непосредственно сама информация о текущем
состоянии устройства и сами переменные для реентерабельной обработки, либо указание на место, где такая информация может быть найдена.
Наконец, важнейшим компонентом элемента таблицы оборудования
является указатель на дескриптор той задачи, которая в настоящий момент использует данное устройство. Если устройство свободно, то поле
указателя будет иметь нулевое значение. Если устройство уже занято и
рассматриваемый указатель не нулевой, то новые запросы к устройству
фиксируются посредством образования списка из дескрипторов задач,
ожидающих данное устройство.
Вторая таблица предназначена для воплощения еще одного принципа виртуализации устройств ввода/вывода — принципа независимости от устройства. Желательно, чтобы программисту не приходилось
учитывать конкретные параметры (и/или возможности) того или иного
устройства ввода/вывода, которое установлено (или не установлено)
в компьютер. Для него должны быть важными только самые общие
возможности, характерные для данного класса устройств. Например,
не важно, какого типа и модели накопитель используется в данном
компьютере и кто является его производителем. Важным должен быть
только сам факт существования накопителя, имеющего некоторое количество цилиндров, головок чтения — записи и секторов на дорожке
магнитного диска. Упомянутые значения количества цилиндров, головок и секторов должны быть взяты из элемента таблицы оборудования...
В запросе на ввод/вывод программист указывает именно логическое
имя устройства. Действительное устройство, которое сопоставляется
виртуальным (логическим), выбирается супервизором с помощью описываемой таблицы.
Но для того, чтобы связать некоторое виртуальное устройство, использованное программистом, с системной таблицей, отображающей
информацию о том, какое конкретно устройство и каким образом подключено к компьютеру, требуется вторая системная таблица. Назовем ее
условно таблицей виртуальных логических устройств (Device Reference
Table, DRT). Назначение этой второй таблицы — установление связи между виртуальными (логическими) устройствами и реальными
устройствами, описанными посредством первой таблицы (таблицы оборудования). Другими словами, вторая таблица позволяет супервизору
перенаправить запрос на ввод/вывод из приложения в те программные
модули и структуры данных, которые (или адреса которых) хранятся в
соответствующем элементе первой таблицы. В многопользовательских
системах таких таблиц несколько: одна общая и по одной на каждого
пользователя, что позволяет строить необходимые связи между логическими устройствами (символьными именами устройств) и реальными
физическими устройствами, которые имеются в системе.
21
Наконец, третья таблица — таблица прерываний — необходима для
организации обратной связи между центральной частью и устройствами
ввода/вывода. Эта таблица указывает для каждого сигнала запроса на прерывание тот элемент UCB, который сопоставлен с данным устройством.
Каждое устройство либо имеет свою линию запроса на прерывание, либо
разделяет линию запроса на прерывание с другими устройствами, но при
этом имеется механизм второго уровня адресации устройств ввода/вывода. Таким образом, таблица прерываний отображает связи между сигналами запроса на прерывания и самими устройствами ввода/вывода».
Взаимосвязи между описанными таблицами изображены на рис. 2.2.
Рис. 2.2. Взаимодействие системных таблиц ввода/вывода
Рассмотрим процесс управления вводом/выводом с учетом изложенных
принципов и описанных выше таблиц (рис. 2.3).
Рис. 2.3. Процесс управления вводом/выводом
22
Программа, для дальнейшего выполнения которой требуется выполнить операцию ввода/вывода, направляет соответствующий запрос
супервизору задач (шаг 1). Этот запрос оформляется в виде системного
вызова конкретной функции API. Вызов сопровождается некоторыми
параметрами, уточняющими требуемую операцию. Супервизор ввода/
вывода проверяет системный вызов на соответствие принятым в операционной системе спецификациям и в случае ошибки возвращает задаче соответствующее сообщение (шаг 1-1). Если же запрос корректен,
то супервизор ввода/вывода по логическому (виртуальному) имени с помощью таблицы DRT (шаг 2) находит соответствующий элемент UCB в
таблице оборудования (шаг 2-1).
Если устройство уже занято, то номер дескриптора задачи, запрос которой обрабатывается супервизором ввода/вывода, помещается в дескриптор
устройства в список задач, ожидающих это устройство. Если же устройство
свободно, то супервизор ввода/вывода определяет из UCB тип устройства
и при необходимости запускает препроцессор (шаг 3), позволяющий получить последовательность управляющих кодов и данных, которую сможет правильно понять и отработать устройство (шаг 3). Когда «программа»
управления операцией ввода/вывода, созданная предпроцессором ввода/
вывода, будет готова (шаг 3-1), супервизор ввода/вывода передает управление соответствующему драйверу на секцию запуска (шаг 4). Драйвер инициализирует операцию управления (шаг 5), обнуляет счетчик тайм-аута и
передает управление диспетчеру задач (шаг 5-1) с тем, чтобы он поставил на
процессор готовую к исполнению задачу. Система работает своим чередом,
но когда устройство ввода/вывода отработает посланную ему команду, оно
выставляет сигнал запроса на прерывание (шаг 6), по которому через таблицу прерываний управление передается на секцию продолжения (шаг 6-1).
Получив новую команду, внешнее устройство вновь начинает ее обрабатывать (шаг 7), а управление процессором снова передается диспетчеру задач (шаг 7-1), и процессор продолжает выполнять полезную работу. Таким
образом, получается параллельная обработка задач, на фоне которой процессор осуществляет управление операциями ввода/вывода. Очевидно, что
если имеются специальные аппаратные средства для управления вводом/
выводом(речь идет о каналах прямого доступа к памяти), которые позволяют
освободить центральный процессор от этой работы, то в функции центрального процессора будут по-прежнему входить все только что рассмотренные
шаги, за исключением последнего — непосредственного управления операциями ввода/вывода. В случае использования каналов прямого доступа
в память последние исполняют соответствующие канальные программы и
освобождают центральный процессор от непосредственного управления обменом данными между памятью и внешними устройствами.
3. Организация внешней памяти
на магнитных дисках
3.1. Диски, разделы, секторы, кластеры
Основным типом устройств, которые используются в современных
вычислительных системах для хранения файлов, являются дисковые накопители. Эти устройства предназначены для считывания и записи данных на гибкие и жесткие магнитные диски (винчестеры). Современный
жесткий магнитный диск состоит из группы круглых пластин, обычно
изготовленных из металла или стекла, на одну или обе поверхности
которых нанесен слой магнитного материала. Такую группу пластин
принято называть пакетом магнитных дисков (рис. 3.1). Покрытые магниточувствительным слоем стороны пластин размечены на тонкие концентрические кольца — дорожки (traks), в которых хранятся данные.
Число дорожек может быть различным для разных устройств и зависит
от типа диска. Ближайшая к внешнему краю дорожка имеет номер 0, номера остальных увеличиваются по мере приближения к центру диска.
Пакет дисков закрепляется на общей оси — шпинделе, вращающейся с определенной скоростью. Скорость вращения шпинделя влияет на
время доступа к данным и среднюю скорость передачи данных. В настоящее время выпускаются магнитные диски со следующими стандартными скоростями вращения: 4200, 5400 и 7200 (ноутбуки); 5400, 5900, 7200
Рис. 3.1. Схема устройства жесткого диска
24
и 10 000 (персональные компьютеры); 10 000 и 15 000 об/мин (серверы и
высокопроизводительные рабочие станции).
Для считывания двоичных данных с магнитной дорожки или записи
их на магнитную дорожку используется специальная деталь — головка.
Головки перемещаются над поверхностью диска с одной дорожки на
другую. Изменяя уровень намагниченности отдельных участков дорожки, головка выполняет запись данных на диск. При считывании данных
головка, попадая в поле, создаваемое участком магнитного покрытия,
формирует электрический сигнал, так как является проводником, находящимся в магнитном поле. Этот сигнал соответствующим образом обрабатывается и передается далее по интерфейсу.
Обычно все магнитные головки закреплены на едином перемещающем механизме, называемом коромысло, подвижном относительно магнитных дисков, и двигаются синхронно. Поэтому, когда головка фиксируется на заданной дорожке одной поверхности, все остальные головки
останавливаются над дорожками с такими же номерами. Множество
дорожек одного радиуса на всех поверхностях всех пластин пакета называется цилиндром {cylinder). Дорожки разбиваются на фрагменты,
называемые секторами (sectors) или блоками (blocks). Для каждой
вычислительной системы сектор имеет фиксированный размер, выражающийся степенью числа два. В большинстве современных систем
размер сектора составляет 512 байт. Число секторов на каждой дорожке
одинаково, а плотность записи данных в секторах увеличивается по мере
приближения к центру, то есть по мере уменьшения радиуса дорожки.
Сектор представляет собой наименьшую адресуемую единицу обмена
данными между магнитным диском и оперативной памятью. При выполнении операций чтения и записи данных контроллер диска для поиска нужного сектора использует все составляющие адреса сектора: номер цилиндра, номер поверхности (головки) и номер сектора.
Так как прикладной программе в общем случае нужно некоторое
количество байтов, некратное размеру сектора, то типичная операция
чтения осуществляет считывание нескольких секторов, содержащих
требуемую информацию, и одного или двух секторов, содержащих как
требуемые, так и избыточные данные (рис. 3.2).
При работе с дисковой подсистемой каждая операционная система, как правило, использует собственную единицу распределения дискового пространства, называемую кластером (Windows) или блоком
(OS/2, UNIX). При создании файла место на диске ему выделяется целым
числом принятых в системе единиц распределения, что приводит к неэффективному использованию дискового пространства. Например, если
файл имеет размер 2560 байт, а размер кластера в файловой системе определен в 1024 байта, то файлу будет выделено на диске 3 кластера. Из практики известно, что средние потери дискового пространства составляют
половину единицы распределения дискового пространства на файл.
25
Рис. 3.2. Избыточное считывание данных при обмене с диском
Практическому использованию любого магнитного диска предшествуют две процедуры форматирования: физического или низкоуровневого и высокоуровневого или логического. Дорожки и секторы
создаются в результате выполнения процедуры низкоуровневого форматирования диска, в ходе которого для определения границ блоков на
диск записывается идентификационная информация. Низкоуровневый
формат диска не зависит от типа операционной системы, которая этот
диск будет использовать. Логическое форматирование используется
для установки на диск или часть диска конкретной файловой системы.
При высокоуровневом форматировании определяется тип и размер единицы распределения дискового пространства и на диск записывается
информация, необходимая для работы файловой системы, в том числе
информация о доступном и неиспользуемом пространстве, о границах
областей, отведенных под файлы и каталоги, информация о поврежденных областях. Кроме того, на диск записывается загрузчик операционной системы — небольшая программа, которая начинает процесс
инициализации операционной системы после включения питания или
рестарта компьютера.
Прежде чем диск будет отформатирован под определенную файловую
систему, он должен быть размечен (иногда говорят «разбит») на разделы.
Раздел представляет собой непрерывную часть физического диска, которую операционная система предоставляет пользователю как самостоятельное логическое устройство. Применительно к разделу диска могут
быть использованы названия «логический диск», «логический раздел»,
«том». Использование логических устройств воплощает в жизнь принцип виртуализации, в результате которой пользователь работает с логическим диском так, как если бы это был отдельный физический диск.
26
Различные операционные системы для персональных компьютеров используют единое для всех ОС представление о разделах, но создают на
основе этого представления логическое устройство, специфическое для
каждой отдельно взятой ОС. Важно отметить, что на каждом логическом
устройстве может создаваться только одна файловая система.
В частном случае, когда все дисковое пространство отведено под
единственный раздел, логическое устройство соответствует физическому устройству в целом. Если диск размечен на несколько разделов, то
каждому из этих разделов может быть поставлено в соответствие отдельное логическое устройство. Логическое устройство может быть создано
и на базе нескольких разделов, причем эти разделы не обязательно должны принадлежать одному физическому устройству. Объединение нескольких разделов в единое логическое устройство может выполняться
разными способами и преследовать разные цели, основные из которых:
увеличение общего объема логического раздела, повышение производительности и отказоустойчивости. Примерами организации совместной
работы нескольких дисковых разделов являются так называемые RAIDмассивы, подробнее о которых будет сказано далее.
Файловые системы, установленные на разные логические устройства,
могут быть различны. Пример разметки физического диска на несколько логических устройств представлен на рис. 3.3. Из рисунка видно, что
диск разбит на три раздела, на каждом из которых установлена одна из
двух файловых систем: NTFS (разделы С и Е) или FAT (раздел D).
Все разделы одного диска имеют одинаковый размер физического
блока, определенный для данного диска в результате низкоуровневого
форматирования. В то же время каждое из логических устройств может
иметь свою собственную единицу распределения дискового пространства, зависящую от файловой системы, под которую был отформатирован тот или иной логический раздел.
Рис. 3.3. Пример разметки диска на разделы
27
Операционная система может поддерживать разные статусы разделов, особым образом отмечая разделы, с которых может быть загружена
операционная система, разделы, на которых располагаются системные
каталоги и файлы, и разделы, в которых можно только устанавливать
приложения и хранить файлы данных. Один из разделов диска помечается как активный. Именно из этого раздела считывается загрузчик операционной системы.
3.2. Способы размещения файлов на диске
Одной из существенных характеристик файловой системы является
физическая организация файла или способ размещения файла на диске,
свойственный данной файловой системе.
Прежде чем рассмотреть возможные способы выделения дискового
пространства, определим критерии эффективности физической организации файлов. Таковыми являются:
● скорость доступа к данным;
● объем адресной информации файла;
● степень фрагментации дискового пространства, выделяемого под
один файл;
● максимально возможный размер файла.
Значения перечисленных критериев различны для разных файловых
систем и часто один из них является доминирующим при выборе файловой системы.
В ходе развития ОС были проработаны и использованы на практике четыре основных метода выделения файлу дискового пространства.
Рассмотрим каждый из них подробнее.
3.2.1. Выделение непрерывной последовательностью блоков
Непрерывное размещение — простейший вариант физической организации (рис. 3.4, а), когда файлу предоставляется непрерывный участок дисковой памяти, размер которого кратен принятой в файловой системе единице распределения дискового пространства. Основным достоинством этого
метода является высокая скорость доступа, так как временные затраты на
поиск и считывание файла минимальны. Также минимален объем адресной информации — достаточно хранить только адрес первой единицы распределения дискового пространства и число выделенных единиц. При описанной физической организации максимально возможный размер файла
теоретически ограничен только размером раздела. Однако этот вариант
имеет существенные недостатки, которые затрудняют его применимость
на практике, несмотря на всю его логическую простоту. Авторы учебника
«Сетевые операционные системы» [15] В.Г. Олифер и Н.А. Олифер, так, в
частности описывают возникающие при использовании рассматриваемого
метода недостатки:
«При более пристальном рассмотрении оказывается, что реализовать эту схему не так уж просто. Действительно, какого размера должна
быть непрерывная область, выделяемая файлу, если файл при каждой
28
Рис. 3.4. Физическая организация файла: а — непрерывное размещение; б — связанный список кластеров; в — связанный список индексов; г — перечень номеров кластеров
модификации может увеличить свой размер? Еще более серьезной
проблемой является фрагментация. Спустя некоторое время после создания файловой системы в результате выполнения многочисленных
операций создания и удаления файлов пространство диска неминуемо превращается в набор чередующихся областей, включающее значительное число свободных областей небольшого размера. Как всегда
бывает при фрагментации, суммарный объем свободной памяти может
быть очень большим, а выбрать место для размещения файла целиком
невозможно. Поэтому на практике используются методы, в которых
файл размещается в нескольких несмежных областях диска».
Конечно, можно предложить использовать механизм дефрагментации свободного дискового пространства для устранения описанных
выше проблем. Действительно, после дефрагментации все свободное
дисковое пространство будет представлять собой один непрерывный
участок, что снимает проблему поиска подходящего места для размещения файла. Однако операцию дефрагментации придется проводить
после каждой операции записи, изменяющей размер файла. Потери
времени на проведение таких действий во много раз будут превосходить время поиска и считывания файла, что сводит на нет основное
достоинство рассматриваемого метода.
3.2.2. Связный список блоков/кластеров
Второй способ физической организации — размещение файла в виде
связанного списка кластеров дисковой памяти (рис. 3.4, б). В этом случае подлежащая хранению адресная информация минимальна: расположение файла может быть задано одним числом — номером первого
кластера. Сведения о местоположении на диске оставшейся части файла
описываются однонаправленным связанным списком, каждый элемент
которого наряду с данными файла хранит еще и указатель на следующий кластер. В отличие от предыдущего способа каждый новый кластер
может быть присоединен к цепочке кластеров какого-либо файла, сле29
довательно, фрагментация на уровне кластеров отсутствует. Файл может
изменять свой размер во время своего существования, наращивая число
кластеров. Недостатком является сложность реализации доступа к произвольно заданному месту файла — чтобы прочитать пятый по порядку
кластер файла, необходимо последовательно прочитать четыре первых
кластера, прослеживая цепочку номеров кластеров. Еще один недостаток — низкая надежность. Наличие дефектного блока в списке приводит
к потере информации в остаточной части файла и потенциально к потере дискового пространства, отведенного под этот файл. Кроме того,
при этом способе количество данных файла, содержащихся в одном
кластере, не равно степени двойки (одно слово израсходовано на номер
следующего кластера), а многие программы читают данные кластерами,
размер которых равен степени двойки.
3.2.3. Связный список с использованием индекса
Использование внешнего связанного списка номеров кластеров
(рис. 3.4, в), хранящих данные файла, является некоторой модификацией предыдущего метода. Файлу также выделяется память в виде связанного списка кластеров. Номер первого кластера запоминается в записи каталога, где хранятся характеристики этого файла. Оставшаяся
адресная информация хранится отдельно от кластеров файла в специальной системной области диска, представляющей собой таблицу, каждая строка которой хранит специальный объект — индекс. В MS-DOS
и ряде других ОС, включая ранние версии Windows вплоть до Windows
ME, эта таблица носит название таблица размещения файлов (File
Allocation Table) или FAT. Пока диск пуст, все индексы имеют нулевое
значение. Когда некоторый кластер N выделяется некоторому файлу,
информация о занятом кластере сохраняется в зависимости от того, о
каком кластере файла идет речь. Если это первый кластер файла, его
номер записывается в специальное поле записи каталога для этого
файла. Во всех остальных случаях индекс предыдущего кластера файла
принимает значение N, указывая на вновь назначенный кластер. В индекс с номером N записывается специальное значение, являющееся
признаком того, что данный кластер — последний кластер файла. При
таком способе распределения дискового пространства сохраняются
все достоинства предыдущего способа: минимальность адресной информации и отсутствие проблем при изменении размера файла. Кроме
того, данный способ обладает дополнительными преимуществами.
Во-первых, для доступа к произвольному кластеру файла не требуется
последовательно считывать его кластеры, достаточно прочитать только секторы диска, содержащие таблицу индексов, отсчитать нужное
количество кластеров файла по цепочке и определить номер нужного
кластера. Во-вторых, кластер под файл выделяется целиком, а значит
объем данных в кластере равен степени двойки. Минусом рассматриваемого способа является необходимость размещения в оперативной
памяти довольно большой таблицы, хранящей значения индексов.
30
3.2.4. Перечисление номеров блоков
Четвертый и последний метод выделения файлу дискового пространства
состоит в последовательном назначении файлу свободных блоков с одновременным запоминанием номеров выделенных блоков в специальной маленькой таблице, называемой индексным узлом или индексным дескриптором (рис 3.4, г). Каждый файл имеет свой собственный индексный узел,
который содержит адреса блоков данных соответствующего файла. Запись
в директории, относящаяся к файлу, содержит адрес индексного блока.
По мере заполнения файла указатели на блоки диска в индексном узле принимают осмысленные значения. Индексирование поддерживает прямой
доступ к данным файла. Первые несколько адресов блоков файла хранятся непосредственно в индексном узле. Следовательно, для файлов малого
размера индексный узел хранит всю необходимую адресную информацию,
которая копируется с диска в память, в момент открытия файла; в результате при работе с такими файлами обеспечивается высокая производительность. Для больших файлов один из адресов индексного узла указывает на
блок косвенной адресации, который содержит адреса дополнительных блоков диска. Если этого недостаточно, используется блок двойной косвенной
адресации, который содержит адреса блоков косвенной адресации. Если и
этого недостаточно, используют блок тройной косвенной адресации. Эта
схема используется в файловых системах s5 и ufs операционной системы
Unix и в некоторых файловых системах Unix-подобных операционных систем, в частности в файловых системах ext2-ext4 ОС Linux. Такой подход
позволяет при относительно небольшом размере индексного дескриптора,
поддерживать работу с файлами, размер которых может меняться от нескольких байт до нескольких десятков гигабайт.
3.3. Учет свободного и занятого дискового пространства
В современных ОС используется несколько способов учета свободного и занятого дискового пространства, из которых чаще всего применяются два: метод битовой карты и метод связанных списков.
Метод битовой карты
В основе этого метода лежит использование специального системного объекта — битовой карты (bit map). Каждому биту этой карты соответствует одна единица распределения дискового пространства. Бит
принимает значение 1, если соответствующий участок диска свободен,
и 0 — если участок диска уже выделен какому-либо файлу.
Главное преимущество этого метода состоит в том, что он относительно прост и эффективен при нахождении первого свободного блока или оценки размера свободной памяти в соответствующем битовой
карте участке диска. Многие компьютеры имеют инструкции манипулирования битами, которые могут быть использованы для этой цели.
Например, компьютеры семейств Intel и Motorola имеют инструкции, с
31
помощью которых можно легко локализовать первый единичный бит в
двоичном слове.
Описываемый метод учета свободных блоков используется в файловых системах для ОС компьютеров Macintosh компании Apple. Такой
же подход использован в файловой системе HPFS операционной
системы OS/2.
К сожалению, этот метод эффективен, только в случае, когда битовая карта помещается в оперативной памяти целиком, что возможно для
относительно небольших дисков. Например, для диска размером 512 Гб
при использовании в качестве единицы распределения дискового пространства кластера размером 4 Кб для учета свободной и занятой памяти
потребуется таблица размером 128 Мб.
Метод связанных списков
Метод предполагает, что информация о свободных участках дисковой памяти хранится в дескрипторах, образующих связанный список.
Указатель на начало этого списка хранится в специальной системной
переменной. Данные списка постоянно отображаются в оперативную
память для повышения скорости поиска свободной памяти. К сожалению, рассматриваемый метод обладает серьезным недостатком: для
построения полного списка требуется выполнить много обращений к
памяти. Однако на практике нужно, как правило, найти только первый
свободный блок.
Иногда прибегают к модификации подхода связного списка, организуя хранение адресов n свободных блоков в первом свободном блоке.
Первые из этих n-1 блоков действительно используются для хранения
адресов свободных участков памяти, n-ый блок содержит адреса других
n блоков, хранящих информацию о свободной памяти по описанному
выше принципу. Именно так решается задача учета свободных блоков в
файловых системах для Unix и Linux.
3.4. Проблема размера единицы распределения
дискового пространства
Размер единицы распределения дискового пространства или логического блока играет важную роль. В некоторых системах (UNIX) он
может быть задан при форматировании раздела при установке той или
иной файловой системы. Оба крайних варианта — небольшой размер
блока и большой размер блока — имеют свои недостатки.
Небольшой размер блока приводит к тому, что каждый файл содержит много блоков. Чтение блока осуществляется с задержками на поиск
и вращение, что ведет к медленному считыванию файла.
Блоки больших размеров обеспечивают более высокую скорость
обмена с диском, но вследствие внутренней фрагментации (каждый
файл занимает целое число блоков, и в среднем половина последнего
32
Рис. 3.5. Определение оптимального размера блока
блока пропадает) снижается эффективность использования дискового
пространства.
Проведенные исследования показали, что большинство файлов имеет небольшой размер (в UNIX приблизительно 85% файлов имеют размер менее 8 Кб и 48% — менее 1Кб) [6].
На рис. 3.5 изображены две линии: убывающая линия показывает
степень утилизации (полезного использования емкости) диска в процентах с возрастанием размера блока; возрастающая линия — скорость
считывания информации. Они пересекаются в районе примерно 3К.
На практике размер блока выбирают кратным степени числа 2. В большинстве современных файловых систем (ext3, FAT32, NTFS) размер
блока равен 512б, 1К, 2К или 4К.
4. Логическая организация файловой системы
Одной из основных задач операционной системы является предоставление удобств пользователю при работе с данными, хранящимися
на дисках. Для этого ОС подменяет физическую структуру хранящихся данных некоторой удобной для пользователя логической моделью.
Логическая модель файловой системы материализуется в виде дерева каталогов, выводимого на экран такими утилитами, как Norton Commander
или Windows Explorer, в символьных составных именах файлов, в командах работы с файлами. Базовым элементом этой модели является файл,
который так же, как и файловая система в целом, может характеризоваться как логической, так и физической структурой.
4.1. Цели и задачи файловой системы
Файл — это именованная область внешней памяти, в которую можно
записывать и из которой можно считывать данные. Файлы хранятся в
памяти, независящей от энергопитания, обычно на магнитных дисках.
Однако нет правил без исключения. Одним из таких исключений является так называемый электронный диск, когда в оперативной памяти
создается структура, имитирующая файловую систему.
Основные цели использования файла перечислены ниже.
1. Долговременное и надежное хранение информации. Долговременность достигается за счет использования запоминающих устройств,
не зависящих от питания, а высокая надежность определяется средствами защиты доступа к файлам и общей организацией программного кода
ОС, при которой сбои аппаратуры чаще всего не разрушают информацию, хранящуюся в файлах.
2. Совместное использование информации. Файлы обеспечивают
естественный и легкий способ разделения информации между приложениями и пользователями за счет наличия понятного человеку символьного имени, постоянства хранимой информации и расположения файла.
Пользователь должен иметь удобные средства работы с файлами, включая каталоги-справочники, объединяющие файлы в группы, средства поиска файлов по признакам, набор команд для создания, модификации и
удаления файлов. Файл может быть создан одним пользователем, а затем
использоваться совсем другим пользователем, при этом создатель файла
или администратор могут определить права доступа к нему других пользователей. Эти цели реализуются в ОС файловой системой.
Файловая система (ФС) — это часть операционной системы, включающая:
● совокупность всех файлов на диске;
● наборы структур данных, используемых для управления файлами,
такие, например, как каталоги файлов, дескрипторы файлов, таблицы распределения свободного и занятого пространства на диске;
● комплекс системных программных средств, реализующих различные операции над файлами, такие как создание, уничтожение, чтение, запись, именование и поиск файлов.
34
Файловая система позволяет программам обходиться набором достаточно простых операций для выполнения действий над некоторым абстрактным объектом, представляющим файл. При этом программистам
не нужно иметь дело с деталями действительного расположения данных
на диске, буферизацией данных и другими низкоуровневыми проблемами передачи данных с долговременного запоминающего устройства. Все
эти функции файловая система берет на себя. Файловая система распределяет дисковую память, поддерживает именование файлов, отображает
имена файлов в соответствующие адреса во внешней памяти, обеспечивает доступ к данным, поддерживает разделение, защиту и восстановление файлов.
Таким образом, файловая система играет роль промежуточного
слоя, экранирующего все сложности физической организации долговременного хранилища данных, и создающего для программ более
простую логическую модель этого хранилища, а также предоставляя
им набор удобных в использовании команд для манипулирования
файлами.
Задачи, решаемые ФС, зависят от способа организации вычислительного процесса в целом. Самый простой тип — это ФС в однопользовательских и однопрограммных ОС, к числу которых относится, например MS-DOS. Основные функции такой ФС следующие:
● именование файлов;
● программный интерфейс для приложений;
● отображение логической модели файловой системы на физическую организацию хранилища данных;
● устойчивость файловой системы к сбоям питания, ошибкам аппаратных и программных средств.
Задачи ФС усложняются в операционных однопользовательских
мультипрограммных ОС, которые, хотя и предназначены для работы
одного пользователя, но дают ему возможность запускать одновременно несколько процессов. Одной из первых ОС этого типа стала
OS/2. К перечисленным выше задачам добавляется новая задача совместного доступа к файлу из нескольких процессов. Файл в этом случае
является разделяемым ресурсом, а значит, файловая система должна решать весь комплекс проблем, связанных с такими ресурсами.
В частности, в ФС должны быть предусмотрены средства блокировки
файла и его частей, предотвращения гонок, исключения тупиков, согласования копий.
В многопользовательских системах появляется еще одна задача: защита файлов одного пользователя от несанкционированного доступа другого пользователя.
Еще более сложными становятся функции файловой системы, которая работает в составе сетевой операционной системы.
35
4.2. Типы файлов
Файловые системы поддерживают несколько функционально различных типов файлов, в число которых, как правило, входят обычные
файлы, файлы-каталоги, специальные файлы, именованные конвейеры/каналы, отображаемые в память файлы и другие.
Обычные файлы (или просто файлы), содержат информацию произвольного характера, которую заносит в них пользователь или которая
образуется в результате работы системных и пользовательских программ.
Большинство современных операционных систем (например, UNIX,
Windows, OS/2) никак не ограничивает и не контролирует содержимое
и структуру обычного файла. Содержание обычного файла определяется
приложением, которое с ним работает. Например, текстовый редактор
создает текстовые файлы, состоящие из строк символов, представленных в каком-либо коде. Это могут быть документы, исходные тексты
программ и т. п. Текстовые файлы можно прочитать на экране и распечатать на принтере. Двоичные файлы не используют коды символов,
они часто имеют сложную внутреннюю структуру, например исполняемый код программы или архивный файл. Все операционные системы
должны уметь распознавать хотя бы один тип файлов — их собственные
исполняемые файлы.
Каталоги — это особый тип файлов, которые содержат системную
справочную информацию о наборе файлов, сгруппированных пользователями
по какому-либо неформальному признаку (например, в одну группу объединяются файлы, содержащие документы одного договора, или файлы,
составляющие один программный пакет). Во многих операционных системах в каталог могут входить файлы любых типов, в том числе другие
каталоги, за счет чего образуется древовидная структура, удобная для поиска. Каталоги устанавливают соответствие между именами файлов и их
характеристиками, используемыми файловой системой для управления
файлами. В число таких характеристик входит, в частности, информация (или указатель на другую структуру, содержащую эти данные) о типе
файла и расположении его на диске, правах доступа к файлу и датах его
создания и модификации. Во всех остальных отношениях каталоги рассматриваются файловой системой как обычные файлы.
Специальные файлы — это фиктивные файлы, ассоциированные с
устройствами ввода/вывода, которые используются для унификации
механизма доступа к файлам и внешним устройствам. Специальные
файлы позволяют пользователю выполнять операции ввода/вывода посредством обычных команд записи в файл или чтения из файла. Эти
команды обрабатываются сначала программами файловой системы, а
затем на некотором этапе выполнения запроса преобразуются операционной системой в команды управления соответствующим устройством.
36
Современные файловые системы поддерживают и другие типы файлов, такие как символьные связи, именованные конвейеры, отображаемые в память файлы. Они будут рассмотрены позже.
4.3. Иерархическая структура файловой системы
Пользователи обращаются к файлам по именам. Однако способности человеческой памяти ограничивают количество имен объектов,
к которым пользователь может обращаться по имени. Иерархическая
организация пространства имен позволяет значительно расширить эти
границы. Именно поэтому большинство файловых систем имеет иерархическую структуру, в которой уровни создаются за счет того, что каталог более низкого уровня может входить в каталог более высокого уровня (рис. 4.1).
Граф, описывающий иерархию каталогов, может быть деревом или
сетью.
Каталоги образуют дерево, если файлу разрешено входить только в
один каталог (рис. 4.1, б), и сеть — если файл может входить сразу в несколько каталогов (рис. 4.1, в). Например, в MS-DOS и Windows каталоги
образуют древовидную структуру, а в UNIX — сетевую. В древовидной
структуре каждый файл является листом. Каталог самого верхнего уровня называется корневым каталогом, или корнем (root).
Рис. 4.1. Иерархия файловых систем
37
При такой организации пользователь освобожден от запоминания
имен всех файлов, ему достаточно примерно представлять, к какой группе может быть отнесен тот или иной файл, чтобы путем последовательного просмотра каталогов найти его. Иерархическая структура удобна
для многопользовательской работы: каждый пользователь со своими
файлами локализуется в своем каталоге или поддереве каталогов, и вместе с тем все файлы в системе логически связаны.
Частным случаем иерархической структуры является одноуровневая
организация, когда все файлы входят в один каталог (рис. 4.1, а).
4.4. Имена файлов
Все типы файлов имеют символьные имена. В иерархически организованных файловых системах обычно используются три типа имен файлов: простые, составные и относительные.
Простое, или короткое, символьное имя идентифицирует файл в пределах одного каталога. Простые имена присваивают файлам пользователи и программисты, при этом они должны учитывать ограничения ОС
как на номенклатуру символов, так и на длину имени. До сравнительно
недавнего времени эти границы были весьма узкими. Так, в популярной
файловой системе FAT длина имен ограничивались схемой 8.3 (8 символов — собственно имя, 3 символа — расширение имени), а в файловой
системе s5, поддерживаемой многими версиями ОС UNIX, простое символьное имя не могло содержать более 14 символов. Однако пользователю гораздо удобнее работать с длинными именами, поскольку они позволяют дать файлам легко запоминающиеся названия, ясно говорящие
о том, что содержится в этом файле. Поэтому современные файловые
системы, а также усовершенствованные варианты уже существовавших
файловых систем, как правило, поддерживают длинные простые символьные имена файлов. Например, в файловых системах NTFS и FAT32,
входящих в состав операционной системы Windows NT, имя файла может содержать до 255 символов.
Примеры простых имен файлов и каталогов:
guest_ins.doc
task-book.exe
приложение на русском языке.doc
installable filesystem manager.doc
В иерархических файловых системах разным файлам разрешено
иметь одинаковые простые символьные имена при условии, что они
принадлежат разным каталогам. То есть здесь работает схема «много
файлов — одно простое имя». Для однозначной идентификации файла в
таких системах используется так называемое полное имя.
Полное имя представляет собой цепочку простых символьных имен всех
каталогов, через которые проходит путь от корня до данного файла. Таким
образом, полное имя является составным, в котором простые имена от38
делены друг от друга принятым в ОС разделителем. Часто в качестве разделителя используется прямой или обратный слеш, при этом принято не
указывать имя корневого каталога. На рис. 4.1, б два файла имеют простое
имя main.exe, однако их составные имена /depart/main.ехе и /user/anna/
main.exe различаются.
В древовидной файловой системе между файлом и его полным именем
имеется взаимно однозначное соответствие «один файл — одно полное
имя». В файловых системах, имеющих сетевую структуру, файл может входить в несколько каталогов, а значит, иметь несколько полных имен; здесь
справедливо соответствие «один файл — много полных имен». В обоих случаях файл однозначно идентифицируется полным именем.
Файл может быть идентифицирован также относительным именем.
Относительное имя файла определяется через понятие «текущий каталог».
Для каждого пользователя в каждый момент времени один из каталогов
файловой системы является текущим, причем этот каталог выбирается самим пользователем по команде ОС. Файловая система фиксирует
имя текущего каталога, чтобы затем использовать его как дополнение к
относительным именам для образования полного имени файла. При использовании относительных имен пользователь идентифицирует файл
цепочкой имен каталогов, через которые проходит маршрут от текущего
каталога до данного файла. Например, если текущим каталогом является
каталог /user, то относительное имя файла /user/anna/main.exe выглядит
следующим образом: anna/main.exe.
В некоторых операционных системах разрешено присваивать одному и тому же файлу несколько простых имен, которые можно интерпретировать как псевдонимы. В этом случае так же, как в системе с сетевой
структурой, устанавливается соответствие «один файл — много полных
имен», так как каждому простому имени файла соответствует по крайней мере одно полное имя.
Поэтому, хотя полное имя однозначно определяет файл, операционной системе проще работать с файлом, если между файлами и их именами имеется взаимно однозначное соответствие. С этой целью она присваивает файлу уникальное имя, так что справедливо соотношение «один
файл — одно уникальное имя». Уникальное имя существует наряду с одним или несколькими символьными именами, присваиваемыми файлу
пользователями или приложениями. Уникальное имя представляет собой числовой идентификатор и предназначено только для операционной
системы. Примером такого уникального имени файла является номер
индексного дескриптора в системе UNIX.
4.5. Монтирование файловых систем
В общем случае вычислительная система может иметь несколько дисковых устройств. Даже типичный персональный компьютер обычно имеет один накопитель на жестком диске, один накопитель на гибких дисках и накопитель для компакт-дисков. Мощные же компьютеры, как
39
правило, оснащены большим количеством дисковых накопителей, на
которые устанавливаются пакеты дисков. Более того, даже одно физическое устройство с помощью средств операционной системы может быть
представлено в виде нескольких логических устройств, в частности путем
разбиения дискового пространства на разделы. Возникает вопрос, каким
образом организовать хранение файлов в системе, имеющей несколько
устройств внешней памяти?
Первое решение состоит в том, что на каждом из устройств размещается автономная файловая система, то есть файлы, находящиеся на этом
устройстве, описываются деревом каталогов, никак не связанным с деревьями каталогов на других устройствах. В таком случае для однозначной
идентификации файла пользователь наряду с составным символьным
именем файла должен указывать идентификатор логического устройства.
Примером такого автономного существования файловых систем является операционная система MS-DOS, в которой полное имя файла включает буквенный идентификатор логического диска. Так, при обращении
к файлу, расположенному на диске А, пользователь должен указать имя
этого диска: A:\privat\letter\uni\let1.doc.
Другим вариантом является такая организация хранения файлов, при
которой пользователю предоставляется возможность объединять файловые системы, находящиеся на разных устройствах, в единую файловую
систему, описываемую единым деревом каталогов. Такая операция называется монтированием. Рассмотрим, как осуществляется эта операция на
примере ОС UNIX.
Рис. 4.2. Две файловые системы до монтирования
40
Среди всех имеющихся в системе логических дисковых устройств операционная система выделяет одно устройство, называемое системным.
Пусть имеются две файловые системы, расположенные на разных логических дисках (рис. 4.2), причем один из дисков является системным.
Файловая система, расположенная на системном диске, назначается
корневой. Для связи иерархий файлов в корневой файловой системе выбирается некоторый существующий каталог, в данном примере — каталог
man. После выполнения монтирования выбранный каталог man становится корневым каталогом второй файловой системы. Через этот каталог
монтируемая файловая система подсоединяется как поддерево к общему
дереву (рис. 4.3).
После монтирования общей файловой системы для пользователя нет
логической разницы между корневой и смонтированной файловыми системами, в частности, именование файлов производится так же, как если
бы она с самого начала была единой.
4.6. Атрибуты файлов
Понятие «файл» включает не только хранимые им данные и имя, но и
атрибуты. Атрибуты — это информация, описывающая свойства файла.
Примеры возможных атрибутов файла:
● тип файла (обычный файл, каталог, специальный файл и т. п.);
● владелец файла;
● создатель файла;
● пароль для доступа к файлу;
● информация о разрешенных операциях доступа к файлу;
● время создания, последнего доступа и последнего изменения;
● текущий размер файла;
● максимальный размер файла;
Рис. 4.3. Общая файловая система после монтирования
41
● признак «только для чтения»;
● признак «скрытый файл»;
● признак «системный файл»;
● признак «архивный файл»;
● признак «двоичный/символьный»;
● признак «временный» (удалить после завершения процесса);
● признак блокировки;
● длина записи в файле;
● указатель на ключевое поле в записи;
● длина ключа.
Набор атрибутов файла определяется спецификой файловой системы:
в файловых системах разного типа для характеристики файлов могут использоваться разные наборы атрибутов. Например, в файловых системах,
поддерживающих неструктурированные файлы, нет необходимости использовать три последних атрибута в приведенном списке, связанных со
структуризацией файла. В однопользовательской ОС в наборе атрибутов
отсутствуют характеристики, имеющие отношение к пользователям и защите, а именно: владелец файла, создатель файла, пароль для доступа к
файлу, информация о разрешенном доступе к файлу.
Пользователь может получать доступ к атрибутам, используя средства,
предоставленные для этих целей файловой системой. Обычно разрешается читать значения любых атрибутов, а изменять — только некоторые.
Например, пользователь может изменить права доступа к файлу (при условии, что он обладает необходимыми для этого полномочиями), но изменять
дату создания или текущий размер файла ему не разрешается.
Значения атрибутов файлов могут непосредственно содержаться в каталогах, как это сделано в файловой системе MS-DOS (рис. 4.4, а). На рисунке представлена структура записи в каталоге, содержащая простое символьное имя и атрибуты файла. Здесь буквами обозначены признаки файла:
R — только для чтения, А — архивный, Н — скрытый, S — системный.
Рис. 4.4. Структура каталогов: а — структура записи каталога MS-DOS
(32 байта); б — структура записи каталога ОС UNIX
42
Другим вариантом является размещение атрибутов в специальных таблицах, когда в каталогах содержатся только ссылки на эти таблицы. Такой
подход реализован, например, в файловой системе ufs ОС UNIX, где структура каталога очень простая. Запись о каждом файле содержит короткое
символьное имя файла и указатель на индексный дескриптор файла, так
называется в ufs таблица, в которой сосредоточены значения атрибутов
файла (рис. 4.4, б).
В том и другом вариантах каталоги обеспечивают связь между именами
файлов и собственно файлами. Однако подход, когда имя файла отделено
от его атрибутов, делает систему более гибкой. Например, файл может быть
легко включен сразу в несколько каталогов. Записи об этом файле в разных
каталогах могут содержать разные простые имена, но в поле ссылки будет
указан один и тот же номер индексного дескриптора.
4.7. Логическая организация файла
Вопросы логической организации файлов подробно обсуждаются практически в каждом учебнике или учебном пособии, в той или иной мере
затрагивающем теоретические и практические аспекты работы с файловыми системами [3; 4; 5; 15; 19]. В общем случае данные, содержащиеся в
файле, имеют некую логическую структуру. Эта структура является базой
при разработке программы, предназначенной для обработки этих данных.
Например, чтобы текст мог быть правильно выведен на экран, программа
должна иметь возможность выделить отдельные слова, строки, абзацы и т. д.
Признаками, отделяющими один структурный элемент от другого, могут
служить определенные кодовые последовательности или просто известные
программе значения смещений этих структурных элементов относительно
начала файла. Поддержание структуры данных может быть либо целиком
возложено на приложение, либо в той или иной степени эту работу может
взять на себя файловая система.
В первом случае, когда все действия, связанные со структуризацией и
интерпретацией содержимого файла целиком относятся к ведению приложения, файл представляется ФС неструктурированной последовательностью данных. Приложение формулирует запросы к файловой системе на
ввод/вывод, используя общие для всех приложений системные средства,
например, указывая смещение от начала файла и количество байт, которые необходимо считать или записать. Поступивший к приложению поток
байт интерпретируется в соответствии с заложенной в программе логикой.
Например, компилятор генерирует, а редактор связей воспринимает вполне определенный формат объектного модуля программы. При этом формат
файла, в котором хранится объектный модуль, известен только этим программам. Подчеркнем, что интерпретация данных никак не связана с действительным способом их хранения в файловой системе.
Модель файла, в соответствии с которой содержимое файла представляется неструктурированной последовательностью (потоком) байт, стала популярной вместе с ОС UNIX, а теперь она широко используется в большин43
стве современных ОС, в том числе в MS-DOS, Windows NT/2000, NetWare.
Неструктурированная модель файла позволяет легко организовать разделение файла между несколькими приложениями: разные приложения могут
по-своему структурировать и интерпретировать данные, содержащиеся в
файле.
Другая модель файла, которая применялась в ОС OS/360, DEC RSX и
VMS, а в настоящее время используется достаточно редко, — это структурированный файл. В этом случае поддержание структуры файла поручается
файловой системе. Файловая система видит файл как упорядоченную последовательность логических записей. Приложение может обращаться к ФС
с запросами на ввод/вывод на уровне записей, например «считать запись 25
из файла FILE.DOC». ФС должна обладать информацией о структуре файла, достаточной для того, чтобы выделить любую запись. ФС предоставляет
приложению доступ к записи, а вся дальнейшая обработка данных, содержащихся в этой записи, выполняется приложением. Развитием этого подхода
стали системы управления базами данных (СУБД), которые поддерживают
не только сложную структуру данных, но и взаимосвязи между ними.
Логическая запись является наименьшим элементом данных, которым может оперировать программист при организации обмена с внешним
устройством. Даже если физический обмен с устройством осуществляется
большими единицами, операционная система должна обеспечивать программисту доступ к отдельной логической записи.
Файловая система может использовать два способа доступа к логическим записям: читать или записывать логические записи последовательно
(последовательный доступ) или позиционировать файл на запись с указанным номером (прямой доступ).
Очевидно, что ОС не может поддерживать все возможные способы структурирования данных в файле; поэтому в тех ОС, в которых вообще существует
поддержка логической структуризации файлов, она существует для небольшого числа широко распространенных схем логической организации файла.
К числу таких способов структуризации относится представление данных в виде записей, длина которых фиксирована в пределах файла (рис.
4.5, а). В таком случае доступ к n-ой записи осуществляется либо путем
последовательного чтения (n-1) предшествующих записей, либо прямо по
адресу, вычисленному по ее порядковому номеру. Например, если L — длина записи, то начальный адрес n-ой записи равен Lxn. Заметим, что при такой логической организации размер записи фиксирован в пределах файла,
а записи в различных файлах, принадлежащих одной и той же файловой
системе, могут иметь различный размер.
Другой способ структуризации состоит в представлении данных в виде
последовательности записей, размер которых изменяется в пределах одного
файла. Если расположить значения длин записей так, как это показано на
рис. 4.5, б, то для поиска нужной записи система должна последовательно
считать все предшествующие записи. Вычислить адрес нужной записи по ее
номеру при такой логической организации файла невозможно, следовательно, не может быть применен более эффективный метод прямого доступа.
44
Файлы, доступ к записям которых осуществляется последовательно, по номерам позиций, называются неиндексированными, или
последовательными.
Другим типом файлов являются индексированные файлы, они допускают более быстрый прямой доступ к отдельной логической записи.
В индексированном файле (рис. 4.5, в) записи имеют одно или более ключевых (индексных) полей и могут адресоваться путем указания значений этих полей. Для быстрого поиска данных в индексированном файле
предусматривается специальная индексная таблица, в которой значениям ключевых полей ставится в соответствие адрес внешней памяти. Этот
адрес может указывать либо непосредственно на искомую запись, либо на
некоторую область внешней памяти, занимаемую несколькими записями, в число которых входит искомая запись. В последнем случае говорят,
что файл имеет индексно -последовательную организацию, так как поиск
включает два этапа: прямой доступ по индексу к указанной области диска,
а затем последовательный просмотр записей в указанной области. Ведение
индексных таблиц берет на себя файловая система. Понятно, что записи в
индексированных файлах могут иметь произвольную длину.
Рис. 4.5. Способы логической организации файлов
Все сказанное выше в большей степени относится к обычным файлам,
которые могут быть как структурированными, так и неструктурированными. Что касается других типов файлов, то они обладают определенной
структурой, известной файловой системе. Например, файловая система
должна понимать структуру данных, хранящихся в файле-каталоге или
файле типа «символьная связь».
5. Файловая система FAT
FAT (англ. File Allocation Table — «таблица размещения файлов») —
классическая архитектура файловой системы, которая из-за своей простоты все еще широко используется для флеш-накопителей.
Разработана Биллом Гейтсом и Марком МакДональдом (англ.) в
1976—1977 годах. Использовалась в качестве основной файловой системы в операционных системах семейств DOS и Windows 9х.
5.1. Структура файловой системы FAT
Логический раздел, отформатированный под файловую систему FAT
(рис. 5.1), состоит из следующих областей:
● загрузочный сектор содержит программу начальной загрузки операционной системы. Вид этой программы зависит от типа операционной системы, которая будет загружаться из этого раздела;
● основная копия FAT содержит информацию о размещении файлов и каталогов на диске;
● резервная копия FAT;
● корневой каталог занимает фиксированную область размером в
32 сектора (16 Кб), что позволяет хранить 512 записей о файлах и
каталогах, так как каждая запись каталога состоит из 32 байтов;
● область данных предназначена для размещения всех файлов и
всех каталогов, кроме корневого каталога.
Файловая система FAT поддерживает всего два типа файлов: обычный файл и каталог. Файловая система распределяет память только из
области данных, причем использует в качестве минимальной единицы
Рис. 5.1. Структура файловой системы FAT
46
дискового пространства кластер. Кластер представляет собой последовательность смежных секторов диска, число которых кратно степени
числа 2. Для хранения данных файла отводится целое число кластеров
(минимум один). Таким образом, например, если размер файла составляет 40 байт, а размер кластера 4 кбайт, реально занят информацией файла будет лишь 1 % отведенного для него места.
Для уменьшения потерь из-за фрагментации желательно кластеры
делать небольшими, а для сокращения объема адресной информации
и повышения скорости обмена наоборот — чем больше, тем лучше.
При форматировании диска под файловую систему FAT обычно выбирается компромиссное решение, при котором размеры кластеров выбираются из диапазона от 1 до 128 секторов, или от 512 байт до 64 Кбайт в
зависимости от размера раздела.
Таблица FAT (как основная копия, так и резервная) состоит из массива индексных указателей, количество которых равно количеству кластеров области данных. Между кластерами и индексными указателями
имеется взаимно однозначное соответствие — нулевой указатель соответствует нулевому кластеру и т. д.
Индексный указатель может принимать следующие значения, характеризующие состояние связанного с ним кластера:
● кластер свободен (не используется);
● кластер используется файлом и не является последним кластером
файла; в этом случае индексный указатель содержит номер следующего кластера файла;
● последний кластер файла;
● дефектный кластер;
● резервный кластер.
5.2. Функционирование файловой системы FAT
Таблица FAT является общей для всех файлов раздела. В исходном
состоянии (после форматирования) все кластеры раздела свободны и
все индексные указатели (кроме тех, которые соответствуют резервным
и дефектным блокам) принимают значение «кластер свободен».
При размещении файла ОС просматривает FAT, начиная с начала, и
ищет первый свободный индексный указатель. После его обнаружения
в поле записи каталога «номер первого кластера» фиксируется номер
этого указателя. В кластер с этим номером записываются данные файла,
он становится первым кластером файла. Если файл умещается в одном
кластере, то в указатель, соответствующий данному кластеру, заносится специальное значение «последний кластер файла». Если же размер
файла больше одного кластера, то ОС продолжает просмотр FAT и ищет
следующий указатель на свободный кластер. После его обнаружения в
предыдущий указатель заносится номер этого кластера, который теперь
становится следующим кластером файла. Процесс повторяется до тех
47
пор, пока не будут размещены все данные файла. Таким образом, создается связный список всех кластеров файла.
В начальный период после форматирования файлы будут размещаться в последовательных кластерах области данных, однако после определенного количества удалений файлов кластеры одного файла окажутся
в произвольных местах области данных, чередуясь с кластерами других
файлов (рис. 5.2).
Рис. 5.2. Списки указателей файлов в FAT
5.3. Файловые системы FAT12, FAT16, FAT32
Очевидно, что разрядность индексного указателя должна быть такой,
чтобы в нем можно было задать максимальный номер кластера для диска определенного объема. Существует несколько разновидностей FAT,
отличающихся разрядностью индексных указателей, которая и используется в качестве условного обозначения: FAT12, FAT16 и FAT32. В файловой системе FAT12 используются 12-разрядные указатели, что позволяет поддерживать до 4096 кластеров в области данных диска, в FAT16
— 16-разрядные указатели для 65 536 кластеров и в FAT32 — 32-разрядные для более чем четырех миллиардов кластеров.
Форматирование FAT 12 обычно характерно только для небольших
дисков объемом не более 16 Мб, чтобы не использовать кластеры более 4 Кб. По этой же причине считается, что FAT 16 целесообразнее для
дисков с объемом не более 512 Мб, а для больших дисков лучше подходит
FAT32, позволяющая использовать кластеры 4 Кб при работе с дисками
объемом до 8 Гб, а для дисков большего объема использующая кластеры
размером 8, 16 и 32 Кб. Максимальный размер раздела FAT 16 ограничен
4 Гб, такой объем дает 65 536 кластеров по 64 Кб каждый, а максимальный
размер раздела FAT32 практически не ограничен — 232 кластера по 32 Кб.
48
Таблица FAT при фиксированной разрядности индексных указателей
имеет переменный размер, зависящий от объема области данных диска.
При удалении файла из файловой системы FAT в первый байт соответствующей записи каталога заносится специальный признак, свидетельствующий о том, что эта запись свободна, а во все индексные указатели файла заносится признак «кластер свободен». Остальные данные в
записи каталога, в том числе номер первого кластера файла, остаются нетронутыми, что оставляет шансы для восстановления ошибочно удаленного файла. Существует большое количество утилит для восстановления
удаленных файлов FAT, выводящих пользователю список имен удаленных
файлов с отсутствующим первым символом имени, затертым после освобождения записи. Очевидно, что надежно можно восстановить только
файлы, которые были расположены в последовательных кластерах диска,
так как при отсутствии связного списка выявить принадлежность произвольно расположенного кластера удаленному файлу невозможно (без анализа содержимого кластеров, выполняемого пользователем «вручную»).
Резервная копия FAT всегда синхронизируется с основной копией
при любых операциях с файлами, поэтому резервную копию нельзя использовать для отмены ошибочных действий пользователя, выглядевших с точки зрения системы вполне корректными. Резервная копия может быть полезна только в том случае, когда секторы основной памяти
оказываются физически поврежденными и не читаются.
Используемый в FAT метод хранения адресной информации о файлах не отличается большой надежностью — при разрыве списка индексных указателей в одном месте, например из-за сбоя в работе программного кода ОС по причине внешних электромагнитных помех, теряется
информация обо всех последующих кластерах файла.
5.4. Имена файлов в файловых системах FAT12, FAT16, FAT32
Файловые системы FAT12 и FAT16 оперировали с именами файлов,
состоящими из 11 символов по схеме «8.3».
Первые 8 символов образуют имя файла, последние 3 — образуют
расширение. Точка-разделитель добавляется на уровне операционной
системы и не хранится в поле имени. Если имя и расширение файла не
заполняют отведенное для них место, остальные байты имени заполняются пробелами. Имя и расширение файла могут содержать любую комбинацию букв, цифр или символов с ASCII-кодами свыше 127; специальные символы распределяются на три группы:
● разрешенные: ! # $ % & ( ) — @ ^ _ ` { } ~ ‘
● запрещенные: + , . ; = [ ]
● служебные: * ? < : > / \ | «
Служебные символы имеют особое значение в DOS и Windows и не
могут входить в состав имени файла. Знак «звездочка» (*) и вопросительный знак (?) являются метасимволами. Знаки двоеточие (:), прямая
49
наклонная черта (/), обратная наклонная черта (\) используются как
разделители в путях к файлам, остальные служебные и запрещенные
знаки являются управляющими в интерпретаторах командной строки
COMMAND.COM и cmd.exe.
В версии FAT16 для операционной системы Windows NT был введен
новый тип записи каталога — «длинное имя», что позволяет использовать
имена длиной до 255 символов, причем каждый символ длинного имени
хранится в двухбайтном формате Unicode. Имя по схеме «8.3», названное теперь «коротким» (не нужно путать его с простым именем файла,
также называемым иногда коротким), по-прежнему хранится в 11-байтовом поле имени файла в записи каталога, а длинное имя помещается
порциями по 13 символов в одну или несколько записей, следующих непосредственно за основной записью каталога. Каждый символ в формате Unicode кодируется двумя байтами, поэтому 13 символов занимают 26
байт, а оставшиеся 6 отведены под служебную информацию. Таким образом, у файла появляются два имени — короткое, для совместимости со
старыми приложениями, не понимающими длинных имен в Unicode, и
длинное, удобное в использовании имя. Файловая система FAT32 также
поддерживает короткие и длинные имена.
5.4.1. Состав записи каталога для имени файла в формате 8.3
Каждому файлу на любом диске соответствует 32-байт элемент каталога, содержащий имя файла, его атрибуты (скрытый, системный, только для чтения и т. д.), дату и время, а также прочую информацию.
На рис. 5.3 представлен элемент каталога в формате 8.3.
Первые 11 байт заняты 8-символьным именем файла и трехсимвольным расширением. В эти поля помещаются 8-разрядные ASCII-коды
соответствующих символов. Если длина имени менее восьми символов,
а расширение менее трех символов, то оставшаяся часть заполняется
Рис. 5.3. Элемент каталога для короткого имени
50
пробелами (код ASCII – 32). Следующий байт отводится под битовые
флажки — атрибуты файла. В последних 10 байт элемента каталога хранятся: дата и время создания или последнего изменения файла; номер
его начального кластера и длина файла в байтах. Номер начального кластера — это 16-бит значение, обозначающее первый кластер цепочки,
где записано содержание файла.
Перед тем, как прочитать или записать файл, ОС сверяется с соответствующей записью каталога, чтобы выяснить номер начального кластера.
Если под текущий файл отведено на диске более одного кластера, то номера остальных извлекаются из находящейся на диске структуры, именуемой таблицей размещения файлов, или FAT (file allocation table).
Информация о файлах корневого каталога размещается в некоторой
фиксированной специально для этого области на диске.
Подчиненные каталоги представляют собой особые файлы в записи
в каталоге высшего уровня, для которых четвертый бит байта атрибутов
указывает на то, что это подкаталоги. Размер области на диске, отведенной под элементы корневого каталога, фиксирован и задается при форматировании диска; он не может быть изменен без применения специального программного обеспечения. Именно по этой причине максимальное
число файлов и подкаталогов корневого каталога всегда ограничено (для
большинства жестких дисков — 512). Число же записей в подчиненных
каталогах, как, впрочем, и размер файлов для их описания, не ограничено. Единственный, влияющий на количество файлов и подкаталогов фактор — наличие свободного пространства на диске.
5.4.2. Организация хранения длинных имен файлов
Для решения проблемы использования длинных имен при соблюдении полной совместимости со старыми версиями прикладных программ,
подготовленными для DOS и Windows, разработчики Windows нашли оригинальное решение. Как правило, прикладные программы (за исключением специальных утилит, использующих для обращения к диску операции низкого уровня) обращаются к ОС за именами файлов и каталогов
не путем прямого считывания с диска соответствующих записей, а через
специальные, встроенные в ОС функции. В результате тестирования специалистами Microsoft обнаружено, что, если у некоторого элемента каталога установлена «нереальная» комбинация битов атрибутов («только для
чтения», «скрытый», «системный», «метка тома»), другими словами, если
байту атрибутов некоторого элемента каталога присвоить значение 0Fh,
тогда любые функции имеющиеся во всех существующих версиях DOS и
Windows, предшествующих Windows 95, не «заметят» такого элемента каталога, словно его нет.
В итоге для FAT под Windows 9x проблема была решена следующим
образом: для каждого файла и подкаталога имеются два имени: короткое,
«понятное» всем прикладным программам, и длинное — для тех программ,
в которых предусмотрена возможность работы с длинными именами.
51
Короткое имя генерируется файловой системой автоматически в
формате 8.3. Для создания коротких имен (псевдонимов) файлов используется следующий алгоритм:
1. Из длинного имени удалить все символы, недопустимые в именах
FAT, заменив их на знак «подчеркивание» (_).
2. Удалить точки в конце и начале имени. После этого удалить все
точки, находящиеся внутри имени кроме последней.
3. Обрезать строку, расположенную перед точкой, до 6 символов и
добавить в ее конец «~1».
4. Полученные буквы преобразовать в прописные. Если сгенерированное имя совпадает с уже существующим, то увеличить число в строке
«~1». Если существует еще одно имя, состоящее из тех же шести символов, то этот номер увеличивается на единицу. Расширение файла сохраняется прежним.
Длинные имена (LFN) хранятся в специально отформатированных
32-байтных записях, байт атрибутов у которых равен 0Fh. Для конкретного файла или подкаталога непосредственно перед единственной записью каталога с его именем в формате 8.3 находится группа из одной
или нескольких записей, представляющих длинное имя. Каждая такая
запись содержит часть длинного имени файла не более 13 символов, и
ОС составляет полное длинное имя из всех записей.
Какие из этого следуют выводы? Если файл с длинным именем записать на гибкий диск, а затем прочитать его на компьютере, работающем
под управлением DOS или Windows 3.x, то ОС распознает лишь короткое
имя файла и проигнорирует все записи каталога для длинного имени.
А поскольку в данном случае ОС «знает» лишь короткое имя, прикладная программа, запросившая у нее имя файла или подкаталога, не получит неожиданно длинное имя. Все великолепно сходится.
В результате прикладным программам для 16 разрядных систем
DOS и Windows, как и прежде, «видны» лишь короткие имена файлов,
поскольку в ответ на их запросы ОС передает имена файлов и подкаталогов в формате 8.3. Чтобы «добраться» до длинных имен, программа
должна обратиться к системным специальным функциям. Во всех прикладных программах для 32 разрядных версий Windows 9х эти функции
вызываются по умолчанию, поэтому они автоматически получают доступ к длинным именам.
На рис. 5.4 показана структура записи каталога дл длинного имени
файла.
Эти имена хранятся в формате Unicode, т. е. для каждого символа
выделяется 2 байт (в отличие от ASCII, где лишь 1 байт). Символы, из
которых состоит имя файла, распределяются по трем отдельным полям:
первое – длиной 10 байт (5 символов), второе — 12 байт (6 символов) и
третье — 4 байт (2 символа). В младших пяти битах первого байта записи
содержитс порядковый номер, указывающий позицию данной записи
каталога относительно остальных элементов, представляющих длинное
имя данного файла. Например, если для записи длинного имени требу52
Рис. 5.4. Элемент каталога для длинного имени. Символы, составляющие
имя файла, представлены в кодах Unicode, т. е. на каждый из них по 2 байта
ется три элемента каталога, то для первого из них порядковый номер будет равен 1, для второго — 2, для третьего — 3. Шестой бит первого байта
третьего элемента задается равным 1, что означает, что текущий элемент
— последний в цепочке.
Положение поля атрибутов в записях каталога как для длинных имен,
так и формата 8.3 одинаково. Объясняется это тем, что до тех пор пока
файловая система не ознакомится с содержимым байта атрибутов, она
не «знает», с каким типом записи она имеет дело в данный момент. Поле
с номером начального кластера также находится на прежнем месте, однако в записях каталога для длинных имен его значение всегда равно 0.
Поле с указанием типа также содержит 0. Байт с контрольной суммой
для длинного имени рассчитывается как остаток от деления на 256 суммы значений определенных полей соответствующей записи в каталоге
формата 8.3. В ОС семейства Windows 9х контрольная сумма используется для выявления «осиротевших» или испорченных записей в каталоге
для длинных имен.
Необходимо отметить, что формирование записи для длинного имени происходит даже в том случае, если оно достаточно коротко и годится
для формата 8.3, поскольку длинное имя учитывает регистры символов
имени, а для короткое — нет.
Файловые системы FAT12 и FAT16 получили большое распространение благодаря их применению в операционных системах MS-DOS и
Windows 3.x — самых массовых операционных системах первого десятилетия эры персональных компьютеров. По этой причине данные файловые
системы поддерживаются сегодня и другими ОС такими, как UNIX, OS/2,
семейство Windows NT, Windows 95/98. Однако из-за постоянно увеличивавшихся объемов жестких дисков, а также возраставших требований к
надежности, эти файловые системы были вытеснены как системой FAT32
для ОС Windows 9х, впервые появившейся в Windows 95 OSR2, так и файловыми системами других типов, прежде всего NTFS.
53
6. Файловая система HPFS
Файловая система HPFS (от англ. High Performance File System —
высокопроизводительная файловая система) впервые появилась в операционной системе OS/2. Разрабатывалась совместно специалистами
Microsoft и IBM на основе опыта IBM по созданию файловых систем
MVS, VM и виртуального метода доступа.
В Windows NT поддержка HPFS существовала до версии 3.51 включительно, хотя есть успешные прецеденты использования старого драйвера HPFS в Windows NT 4.0 и даже Windows 2000. Впоследствии Microsoft
отказалась от HPFS в пользу собственной файловой системы NTFS, при
разработке которой был учтен опыт создания HPFS.
HPFS является файловой системой для многозадачного режима работы, поддерживает длинные имена файлов и обеспечивает высокую
производительность при работе с дисками большого объема. Она, как и
FAT, имеет древовидную структуру каталогов, но в ней еще предусмотрены автоматическая сортировка каталогов и специальные расширенные
атрибуты, упрощающие обеспечение безопасности на файловом уровне и создание множественных имен. Расширенные атрибуты позволяют
хранить дополнительную информацию о файле. Например, с каждым
файлом может быть сопоставлено его индивидуальное графическое изображение (значок).
По сравнению с FAT HPFS обладает более высокой производительностью, надежностью, и эффективнее использует дисковое пространство.
Еще одна особенность заключается в том, что пространство, освобожденное стертым файлом, обычно используется не сразу и файл можно
восстановить.
Для реализации на практике указанных преимуществ в HPFS
используют:
– размещение каталогов в середине дискового пространства;
– метод бинарных сбалансированных деревьев, позволяющий ускорить поиск информации о файлах и каталогах;
– информацию о местоположении файловых записей, рассредоточенную по всему диску, при размещении самого файла (по возможности) в смежных секторах и вблизи от данных об их местоположении.
Прежде всего HPFS пытается расположить файл в смежных кластерах, а если такой возможности нет, поместить его таким образом, чтобы
фрагменты файла, расположенные в смежных секторах диска, физически были как можно ближе друг к другу. Это существенно сокращает
время позиционирования головок чтения/записи жесткого диска.
Все эти преимущества обусловлены структурой диска с файловой системой HPFS.
В начале диска расположено несколько управляющих блоков. Все
остальное дисковое пространство разбито на множество областей из
смежных секторов, называемых группой или полосой. В каждой области
54
располагаются сами файлы и служебная информация о свободных и занятых секторах в этой области. Каждая полоса занимает на диске 8 Мб
и имеет собственную битовую карту распределения секторов. Битовые
карты показывают, какие секторы полосы заняты, а какие свободны.
Каждому сектору полосы данных соответствует один бит в ее битовой
карте. Битовые карты двух полос располагаются на диске рядом, как и
сами полосы (рис. 6.1). Такое расположение полос и битовых карт позволяет непрерывно размещать на диске файл размером до 16 Мб минус
4 Кб, не отдаляя от самого файла информацию об его местонахождении.
Если бы на весь логический диск была только одна адресная структура
данных (как в FAT), то для работы с ней приходилось бы перемещать
головки чтения/записи в среднем через половину диска. Именно для исключения таких потерь диск в HPFS разделен на полосы.
Загру- ДополниРезервный Битовая
Битовая Битовая
Битовая
зочный тельный
Полоса 1 Полоса 2
Полоса 3 Полоса 4
блок
карта 1
карта 2 карта 3
карта 4
блок
блок
Рис. 6.1. Фрагмент структуры тома с файловой системой HPFS
Дисковое пространство в HPFS выделяется не кластерами, а секторами размером 512 байт. Размещение файлов в таких небольших блоках позволяет экономить дисковое пространство, сокращать потери в
среднем до 256 байт на файл. Для поддержки дисков большого объема в
HPFS под номер сектора отводится 4 байта (32 разряда), что позволяет
при размере сектора 512 байт работать с томами размером до 2Тбайт:
максимальный размер тома = 232 кластеров * 29 байтов = 241 байтов = 2Тбайта
Кроме полос с записями файлов и битовых карт, на томе (логическом
диске) HPFS имеются еще загрузочный блок, дополнительный блок и резервный блок.
Загрузочный блок содержит имя тома, его серийный номер, блок параметров BIOS и программу начальной загрузки. Блок параметров BIOS
содержит информацию о жестком диске — количестве цилиндров и головок диска, числе секторов на дорожке. Эта информация используется
программными модулями HPFS для поиска нужного сектора.
Дополнительном блок содержит указатель на список битовых карт.
В этом списке перечислены все блоки на диске, в которых расположены
битовые карты. В дополнительном блоке хранятся указатели на список
дефектных блоков и полосу каталогов, указатель на файловый узел корневого каталога, а также дата последней проверки раздела. В списке дефектных блоков перечислены все поврежденные секторы диска. Когда
операционная система обнаруживает поврежденный блок, он вносится
в этот список и для записи информации больше не используется. Еще в
дополнительном блоке содержится информация о размере полосы.
55
Резервный блок содержит указатель на карту аварийного замещения,
указатель на список свободных запасных блоков каталогов, используемых для операций на почти переполненном диске, и ряд системных
флагов и дескрипторов. Резервный блок обеспечивает высокую отказоустойчивость файловой системы HPFS, позволяя восстанавливать поврежденные данные.
Файлы и каталоги в HPFS базируются на файловом узле.
Файловый узел – это структура, содержащая информацию о расположении файла и о его расширенных атрибутах. Каждый файл и каталог
имеет свой файловый узел. Каждый файловый узел занимает один сектор и всегда располагается вблизи своего файла (обычно непосредственно перед файлом).
Файловый узел содержит размер файла и первые 15 символов имени файла, специальную служебную информацию, статистику доступа к
файлу, расширенные атрибуты файла и список управления доступом.
Сокращенное имя файла используется, когда файл с длинным именем копируется на диск с файловой системой FAT, не допускающей подобных имен. В этом случае используются первые восемь символов оригинального имени и первые три символа расширения. Если имя файла
содержит несколько точек, что допустимо в HPFS, то используются три
символа после последней из этих точек.
При записи файла на диск файловая система HPFS стремится избежать фрагментации файла. Если файл непрерывен, то его размещение
описывается двумя 32-разрядными числами. Первое число представляет
собой указатель на первый блок файла, а второе –число следующих друг
за другом блоков, принадлежащих файлу. Указанную пару чисел принято называть экстентом. Если файл фрагментирован, то размещение его
экстентов описывается дополнительными парами 32-разрядных чисел.
Фрагментация происходит, когда на диске нет непрерывного свободного участка, достаточного для размещения файла целиком. В этом случае
файл делится на несколько частей и располагается в разных местах диска. Файловая система HPFS старается поместить части фрагментированного файла как можно ближе друг к другу, для того чтобы сократить
время позиционирования головок чтения/записи при чтении файла с
жесткого диска. Файловая система также старается резервировать минимум 4 Кб в конце файлов, подлежащих изменению.
Пользовательская программа может указать размер файла при его
создании. В этом случае система сразу попытается выделить место под
файл так, чтобы он занимал как можно меньше экстентов. Если программа не сообщила размера файла, используется значение по умолчанию.
Фактически HPFS размещает файл, начиная выделение с наибольшего
непрерывного участка свободного пространства. В результате фрагментированными оказываются только файлы, длина которых увеличивалась
многократно или те, которые создавались при почти заполненном диске.
При нормальной работе файл редко занимает больше 3—4 экстентов.
56
В файловом узле можно поместить информацию о 8 экстентах файла.
Если их больше, то в файловый узел этого файла записывается указатель
на блок размещения, который может содержать до 40 указателей на экстенты или другие блоки размещения.
Большое значение для увеличения производительности HPFS имеет
метод сбалансированных двоичных деревьев, используемый для хранения
и поиска информации о местонахождении файлов. В файловой системе
FAT каталог имеет линейную неупорядоченную структуру и при поиске
файла необходимо последовательно просматривать его с самого начала.
В HPFS структура каталога представляет собой сбалансированное дерево с записями, расположенными в алфавитном порядке. Каждая запись
содержит атрибуты файла, указатель на соответствующий файловый
узел, информацию о времени и дате создания, последнего изменения и
обращения к файлу, о размере файла, счетчик обращения к файлу, информацию о длине имени файла и само имя, а также другую подобную
информацию. Таким образом, при поиске файла в каталоге просматриваются только необходимые ветви двоичного дерева. Записи каталога,
заведомо не относящиеся к искомому файлу, не рассматриваются.
При переименовании файлов может возникнуть проблема сбалансированности дерева. Попытка переименования может закончиться неудачей из-за недостатка дискового пространства, даже если файл в размере не увеличится. Для предотвращения этого HPFS имеет небольшой
пул свободных блоков, используемых при недостатке места. Указатель
на этот пул хранится в резервном блоке.
Файловая система HPFS для исправления ошибок, возникающих
при записи файлов на диск, использует механизм аварийного замещения. Информация, предназначенная для записи в сектор, оказавшийся
дефектным, сохраняется в одном из запасных секторов, заранее зарезервированных на этот случай. Их список хранится в резервном блоке
файловой системы. Затем происходит обновление карты аварийного
замещения. Она представляет собой пары 32-разрядных чисел. Первое
число такой пары указывает на дефектный сектор, а второе — на сектор,
его замещающий. Очистка карты аварийного замещения выполняется
программой CHKDISK при проверке тома HPFS. Для каждого замещенного блока (сектора) выделяется новый сектор в наиболее подходящем
месте. Данные записываются в этот сектор, и обновляется информация
о положении файла. Программа вносит поврежденный сектор в список
дефектных блоков и возвращает освобожденный сектор в список свободных запасных секторов резервного блока. После этого происходит
удаление записей из карты аварийного замещения.
7. Файловая система NTFS
Файловая система NTFS была разработана в качестве основной для
ОС Windows NT в начале 90-х годов с учетом опыта разработки файловых систем FAT и HPFS, а также других существовавших в то время файловых систем. Подробные сведения об этой файловой системе приведены в [1, 7, 8, 17] .
Основными отличительными свойствами NTFS являются:
● поддержка больших файлов и больших дисков объемом до 2 байтов;
● восстанавливаемость после сбоев и отказов программ и аппаратуры управления дисками;
● высокая скорость операций, в том числе и для больших дисков;
● низкий уровень фрагментации, в том числе и для больших дисков;
● гибкая структура, допускающая развитие за счет добавления новых типов записей и атрибутов файлов с сохранением совместимости с предыдущими версиями ФС;
● устойчивость к отказам дисковых накопителей;
● поддержка длинных символьных имен;
● контроль доступа к каталогам и отдельным файлам.
7.1. Структура тома NTFS
В отличие от разделов, отформатированных под FAT или HPFS, все
пространство тома NTFS представляет собой либо файл, либо часть
файла. Основой структуры тома NTFS является главная таблица файлов
(Master File Table, MFT), которая содержит по крайней мере одну запись
для каждого файла тома, включая одну запись для самой себя. Каждая
запись MFT имеет фиксированную длину, зависящую от объема диска,
— 1,2 или 4 Кб. Для большинства дисков, используемых сегодня, размер
записи MFT равен 2 Кб, который далее будем считать размером записи
по умолчанию.
Все файлы на томе NTFS идентифицируются номером файла, который определяется позицией файла в MFT. Этот способ идентификации
файла близок к способу, используемому в файловых системах s5 и ufs,
где файл однозначно идентифицируется номером его записи в области
индексных дескрипторов.
Весь том NTFS состоит из последовательности кластеров, что отличает эту файловую систему от рассмотренных ранее, где на кластеры
делилась только область данных. Порядковый номер кластера в томе
NTFS называется логическим номером кластера {Logical Cluster Number,
LCN). Файл NTFS также состоит из последовательности кластеров, при
этом порядковый номер кластера внутри файла называется виртуальным номером кластера (Virtual Cluster Number, VCN).
Базовая единица распределения дискового пространства для файловой
системы NTFS — непрерывная область кластеров, называемая отрезком.
58
Рис. 7.1. Структура тома NTFS
В качестве адреса отрезка NTFS использует логический номер его первого кластера, а также количество кластеров в отрезке k, то есть пара (LCN, k).
Таким образом, часть файла, помещенная в отрезок и начинающаяся с виртуального кластера VCN, характеризуется адресом, состоящим из трех чисел:
(VCN, LCN, k).
Для хранения номера кластера в NTFS используются 64-разрядные
указатели, что дает возможность поддерживать тома и файлы размером
до 264 кластеров; при размере кластера в 4 Кб это позволяет использовать
тома и файлы, состоящие из 64 миллиардов килобайт.
Структура тома NTFS показана на рис. 7.1 Загрузочный блок тома
NTFS располагается в начале тома, а его копия — в середине тома.
Загрузочный блок содержит стандартный блок параметров BIOS, количество блоков в томе, а также начальный логический номер кластера основной копии MFT и зеркальную копию MFT.
59
Далее располагается первый отрезок MFT, содержащий 16 стандартных, создаваемых при форматировании записей о системных файлах
NTFS. Назначение этих файлов, называемых метафайлами, описано в
показанной ниже табл. 7.1.
Таблица 7.1
Состав и назначение стандартных записей MFT
Номер
записи
Системный файл
0
Главная таблица файлов
1
Копия главной таблицы
файлов
2
Файл журнала
3
Том
4
5
Таблица определения
атрибутов
Индекс корневого
каталога
Имя файла
Назначение файла
Содержит полный список файлов
тома NTFS
Зеркальная копия первых трех
SMftMirr
записей MFT
Список транзакций, который
SLogFile используется для восстановления
файловой системы после сбоев
Имя тома, версия NTFS и другая
SVolume
информация о томе
Таблица имен, номеров и описаний
SAttrDef
атрибутов
$Mft
$.
Корневой каталог
6
Битовая карта кластеров
SBitmap
Разметка использованных
кластеров тома
7
Загрузочный сектор
раздела
SBoot
Адрес загрузочного сектора раздела
8
Файл плохих кластеров
SBadClus
Файл, содержащий список всех
обнаруженных на томе плохих
кластеров
9
Таблица квот
SQuota
Квоты используемого пространства
на диске для каждого пользователя
10
Таблица преобразования
регистра символов
SUpcase
Используется для преобразования
регистра символов для кодировки
Unicode
11-15
Записи зарезервированы
для будущего
использования
В NTFS файл целиком размещается в записи таблицы MFT, если это
позволяет его размер. В том случае, когда размер файла больше размера
записи MFT, в запись помещаются только некоторые атрибуты файла, а
остальная часть файла размещается в отдельном отрезке тома (или нескольких отрезках). Часть файла, размещаемая в записи MFT, называется резидентной частью, а остальные части — нерезидентными. Адресная
60
информация об отрезках, содержащих нерезидентные части файла, размещается в атрибутах резидентной части.
Некоторые системные файлы являются полностью резидентными, а
некоторые имеют и нерезидентные части, которые располагаются после
первого отрезка MFT. Нулевая запись MFT содержит описание самой
MFT, в том числе и такой важный атрибут, как адреса всех ее отрезков.
После форматирования MFT состоит из одного отрезка, но после создания первого несистемного файла для хранения его атрибутов требуется
еще один отрезок, так как изначально непрерывная последовательность
кластеров MFT уже завершена системными файлами.
Из приведенного описания видно, что сама таблица MFT рассматривается как файл, к которому применим метод размещения в томе в виде
набора произвольно расположенных нескольких отрезков.
7.2. Структура файлов и каталогов NTFS
Файлы NTFS
Каждый файл и каталог на томе NTFS состоит из набора атрибутов.
Важно отметить, что имя файла и его данные также рассматриваются
как атрибуты файла, то есть для NTFS у файла, кроме атрибутов, нет никаких других компонентов.
Каждый атрибут файла NTFS состоит из полей: тип атрибута, длина
атрибута, значение атрибута и, возможно, имя атрибута. Тип атрибута,
длина и имя образуют заголовок атрибута.
Имеется системный набор атрибутов, определяемых структурой тома
NTFS. Системные атрибуты имеют фиксированные имена и коды их
типа, а также определенный формат. Могут применяться также атрибуты, определяемые пользователями. Их имена, типы и форматы задаются
исключительно пользователем. Атрибуты файлов упорядочены по убыванию кода атрибута, причем атрибут одного и того же типа может повторяться несколько раз. Существуют два способа хранения атрибутов
файла — резидентное хранение в записях таблицы MFT и нерезидентное хранение вне ее, во внешних отрезках. Таким образом, резидентная
часть файла состоит из резидентных атрибутов, а нерезидентная — из
нерезидентных атрибутов. Сортировка может осуществляться только по
резидентным атрибутам.
Системный набор включает следующие атрибуты:
1. Attribute List (список атрибутов) — список атрибутов, из которых состоит файл, содержит ссылки на номер записи MFT, где расположен каждый атрибут; этот редко используемый атрибут нужен только
в том случае, если атрибуты файла не умещаются в основной записи и
занимают дополнительные записи MFT.
2. File Name (имя файла) — атрибут содержит длинное имя файла в
формате Unicode, а также номер входа в таблице MFT для родительского
каталога; если этот файл содержится в нескольких каталогах, то у него
61
будет несколько атрибутов типа File Name; этот атрибут всегда должен
быть резидентным.
3. MS-DOS Name (имя MS-DOS) — атрибут содержит имя файла в формате 8.3.
4. Version (версия) — атрибут содержит номер последней версии
файла.
5. Security Descriptor (дескриптор безопасности) — атрибут содержит информацию о защите файла: список прав доступа ACL (права
доступа к файлу рассматриваются ниже в разделе «Контроль доступа к
файлам») и поле аудита, которое определяет, какого рода операции над
этим файлом нужно регистрировать.
6. Volume Version (версия тома) — версия тома, используется только в системных файлах тома.
7. Volume Name (имя тома) — имя тома.
8. Data (данные) — содержит обычные данные файла.
9. MFT bitmap (битовая карта MFT) — атрибут содержит карту использования блоков на томе.
10. Index Root (корень индекса) — корень В-дерева, используемого
для поиска файлов в каталоге.
11. Index Allocation (размещение индекса) — нерезидентные части индексного списка В-дерева.
12. Standard Information (стандартная информация) — атрибут хранит всю остальную стандартную информацию о файле, которую
трудно связать с каким-либо из других атрибутов файла, например, время создания файла, время обновления и другие.
Файлы NTFS в зависимости от способа размещения делятся на небольшие, большие, очень большие и сверхбольшие.
Небольшие файлы (small). Если файл имеет небольшой размер, то
он может целиком располагаться внутри одной записи MFT, имеющей,
например, размер 2 Кбайт. Небольшие файлы NTFS состоят по крайней
мере из следующих атрибутов (рис. 7.2):
● стандартная информация (SI — standard information);
● имя файла (FN — file name);
● данные (Data);
● дескриптор безопасности (SD — security descriptor).
Из-за того что файл может иметь переменное количество атрибутов, а
также из-за переменного размера атрибутов нельзя наверняка утверждать,
что файл уместится внутри записи. Однако обычно файлы размером менее 1500 байт помещаются внутри записи MFT (размером 2 Кбайт).
Большие файлы (large). Если данные файла не помещаются в одну
запись МЕТ, то этот факт отражается в заголовке атрибута Data, который содержит признак того, что этот атрибут является нерезидентным,
то есть находится в отрезках вне таблицы MFT. В этом случае атрибут
Data содержит адресную информацию (LCN, VCN, k) каждого отрезка
данных (рис. 7.3).
62
Рис. 7.2. Небольшой файл NTFS
Рис. 7.3. Большой файл
Рис. 7.4. Очень большой файл
63
Очень большие файлы (huge). Если файл настолько велик, что его
атрибут данных, хранящий адреса нерезидентных отрезков данных, не
помещается в одной записи, то этот атрибут заносится в другую запись
MFT, а ссылка на такой атрибут помещается в основную запись файла
(рис. 7.4). Эта ссылка содержится в атрибуте Attribute List. Сам
атрибут данных по-прежнему содержит адреса нерезидентных отрезков
данных.
Сверхбольшие файлы (extremely huge). Для сверхбольших файлов в атрибуте Attribute List можно указать несколько атрибутов,
расположенных в дополнительных записях MFT (рис. 7.5). Кроме того,
можно использовать двойную косвенную адресацию, когда нерезидентный атрибут будет ссылаться на другие нерезидентные атрибуты, поэтому в NTFS не может быть атрибутов слишком большой длины.
Рис. 7.5. Сверхбольшой файл
64
Каталоги NTFS
Каждый каталог NTFS представляет собой один вход в таблицу MFT,
который содержит атрибут Index Root. Индекс содержит список файлов,
входящих в каталог. Индексы позволяют сортировать файлы для ускорения поиска, основанного на значении определенного атрибута. Обычно
в файловых системах файлы сортируются по имени. NTFS позволяет использовать для сортировки любой атрибут, если он хранится в резидентной форме.
Имеются две формы хранения списка файлов.
Небольшие каталоги (small indexes). Если количество файлов
в каталоге невелико, то список файлов может быть резидентным в записи в MFT, являющейся каталогом (рис. 7.6). Для резидентного хранения
списка используется единственный атрибут — Index Root. Список
файлов содержит значения атрибутов файла. По умолчанию — это имя
файла, а также номер записи MTF, содержащей начальную запись файла.
Рис. 7.6. Небольшой каталог
Большие каталоги (large indexes). По мере того как каталог растет, список файлов может потребовать нерезидентной формы хранения.
Однако начальная часть списка всегда остается резидентной в корневой
записи каталога в таблице MFT (рис. 7.7). Имена файлов резидентной
части списка файлов являются узлами так называемого В-дерева (двоичного дерева). Остальные части списка файлов размещаются вне MFT.
Для их поиска используется специальный атрибут Index Allocation, представляющий собой адреса отрезков, хранящих остальные части списка
файлов каталога. Одни части списков являются листьями дерева, другие
— промежуточными узлами, то есть содержат наряду с именами файлов
атрибут Index Allocation, указывающий на списки файлов более
низких уровней.
Узлы двоичного дерева делят весь список файлов на несколько групп.
Имя каждого файла-узла является именем последнего файла в соответствующей группе. Считается, что имена файлов сравниваются лексикографически, то есть сначала принимаются во внимание коды первых
символов двух сравниваемых имен. При этом имя считается меньшим,
если код его первого символа имеет меньшее арифметическое значение,
при равенстве кодов первых символов сравниваются коды вторых сим65
волов имен и т. д. Например, файл f1.ехе, являющийся первым узлом
двоичного дерева (см. рис.7.7) имеет имя, лексикографически большее
имен avia.exe, az.exe,..., emax.exe, образующих первую группу списка
имен каталога. Соответственно файл ltr.exe имеет наибольшее имя среди
всех имен второй группы, а все файлы с именами, большими ltr.exe, образуют третью и последнюю группу.
Поиск в каталоге уникального имени файла, которым в NTFS является номер основной записи о файле в MFT, по его символьному имени происходит следующим образом. Сначала искомое символьное имя
сравнивается с именем первого узла в резидентной части индекса. Если
искомое имя меньше, то это означает, что его нужно искать в первой нерезидентной группе, для чего из атрибута Index Allocation извлекается адрес отрезка (VCNj, LCNj ,Kj), хранящего имена файлов первой
группы. Среди имен этой группы поиск осуществляется прямым пере-
Рис. 7.7. Большой каталог
66
бором имен и сравнением до полного совпадения всех символов искомого имени с хранящимся в каталоге именем. При совпадении из каталога извлекается номер основной записи о файле в MFT и остальные
характеристики файла берутся уже оттуда.
Если же искомое имя больше имени первого узла резидентной части
индекса, то его сравнивают с именем второго узла, и если искомое имя
меньше, то описанная процедура применяется ко второй нерезидентной
группе имен.
В результате вместо перебора большого количества имен (в худшем
случае — всех имен каталога) выполняется сравнение с гораздо меньшим количеством имен узлов и имен в одной из групп каталога.
Если одна из групп каталога становится слишком большой, то ее также делят на группы, последние имена каждой новой группы оставляют
в исходном нерезидентном атрибуте Index Root, а все остальные имена новых групп переносят в новые нерезидентные атрибуты типа Index
Root (на рисунке этот случай не показан). К исходному нерезидентному атрибуту Index Root добавляется атрибут размещения индекса,
указывающий на отрезки индекса новых групп. Если теперь при поиске
искомого имени в нерезидентной части индекса первого уровня какоелибо сравнение показывает, что искомое имя меньше, чем одно из хранящихся там имен, то это говорит о том, что в данном атрибуте точного
сравнения имени уже быть не может и нужно перейти к подгруппе имен
следующего уровня дерева.
8. Отказоустойчивость файловых систем
Отказоустойчивые системы защищают данные, дублируя и размещая
их на различных физических носителях (например, на разных дисках).
Избыточность (redundancy) данных позволяет осуществлять к ним доступ даже в случае выхода из строя части системы.
Избыточность — общий отличительный признак большинства отказоустойчивых систем.
Тем не менее отказоустойчивые системы нельзя использовать как замену регулярного резервного копирования серверов и локальных жестких дисков. Тщательно спланированная стратегия резервного копирования является лучшей страховкой от потери или уничтожения данных.
Отказоустойчивые системы на основе массивов недорогих жестких
дисков (RAID) предлагают следующие варианты обеспечения избыточности данных:
— чередование дисков;
— зеркализацию дисков;
— замену секторов и др.
Типы отказоустойчивых систем стандартизованы и классифицируются по уровням: 0 — 5. Существует уровень 7 (c асинхронной архитектурой), но он является лишь фирменной маркой корпорации Storage
Computer, а не стандартом для других производителей. Storage Computer
не продает и не лицензирует архитектуру RAID 7, поэтому алгоритмы
функционирования этих устройств представляют конфиденциальную
информацию.
Эти уровни выступают как избыточные массивы недорогих дисков
(RAID). Они предлагают различные комбинации производительности, надежности и стоимости. Различные ОС обеспечивают поддержку
разных уровней. например, Microsoft Windows NT Server содержит программную поддержку технологии RAID (уровней 0, 1 и 5). Microsoft решила поддерживать избыточное чередование дисков уровня 5, проигнорировав уровни 2, 3 и 4, поскольку уровень 5 эволюционировал из этих
уровней и, следовательно, является самой последней и наиболее совершенной версией.
Рассмотрим подробнее основные виды RAID.
8.1. RAID 0. Дисковый массив без отказоустойчивости (Striped
Disk Array without Fault Tolerance)
Массив дисков без избыточного хранения данных (рис.8.1) или чередующийся набор. Информация разбивается на блоки, которые записываются на отдельные диски, что обеспечивает увеличение производительности. Данный способ хранения информации ненадежен (поломка
одного диска приводит к потере всей информации), поэтому уровнем
RAID как таковым не является. За счет возможности одновременного
68
Рис.8.1. Массив дисков без избыточного хранения данных
ввода/вывода с нескольких дисков RAID 0 обеспечивает максимальную
скорость передачи данных и максимальную эффективность использования дискового пространства, так как не требуется места для хранения
контрольных сумм. Реализация этого уровня очень проста. В основном
RAID 0 применяется в тех областях, где требуется быстрая передача
большого объема данных.
Преимущества:
— наивысшая производительность в приложениях, требующих интенсивной обработки запросов ввода/вывода и данных большого объема;
— простота реализации;
— низкая стоимость.
Недостатки:
— неотказоустойчивое решение;
— отказ одного диска влечет за собой потерю всех данных массива.
8.2. RAID 1. Дисковый массив с зеркалированием (mirroring)
Дисковый массив с дублированием информации, так называемая
схема с зеркалированием данных (рис. 8.2). В простейшем случае два
накопителя содержат одинаковую информацию и являются одним логическим диском. Тем самым обеспечивается самый высокий уровень
сохранности данных: при выходе из строя одного диска его функции
выполняет другой (что абсолютно прозрачно для пользователя). Кроме
того, этот уровень удваивает скорость считывания информации, так как
эта операция может выполняться одновременно с двух дисков.
Такая схема хранения информации используется в основном в тех
случаях, где «цена» безопасности данных намного выше стоимости реализации системы хранения. Но поскольку цены на диски все время
снижаются, RAID 1 становится все популярней. В серверах среднего
уровня, где объем хранимой информации не так велик, его применение
может быть вполне оправдано. RAID 1 прост в реализации, позволяет
создать отказоустойчивую систему всего из двух дисков, самый большой его минус — высокая стоимость.
69
Рис.8.2. Зеркальный набор
Преимущества:
— простота реализации;
— простота восстановления массива в случае отказа (копирование).
Недостатки:
— высокая стоимость — 100%-ная избыточность;
— невысокая скорость передачи данных.
8.3. RAID 2. Схема резервирования данных с использованием кода
Хэмминга (Hamming code) для коррекции ошибок
Запатентован компанией Thinking Machines. Поток данных разбивается на слова таким образом, что количество бит в слое равно количеству дисков и при записи слова каждый отдельный бит записывается
на свой диск. Для каждого слова вычисляется код коррекции ошибок,
который записывается на выделенные диски для хранения контрольной
информации. Их число равно количеству бит в слове контрольной суммы. Например, если слово состоит из четырех бит, то под контрольную
информацию отводится три диска. RAID 2 — один из немногих уровней,
позволяющих обнаруживать двойные ошибки и исправлять «на лету»
одиночные. При этом он является самым избыточным среди всех уровней с контролем четности. Такая схема хранения подходит для приложений, где требуется передача большого объема данных (за счет параллельного обращения к дискам), но неприменима для задач с большим
количеством запросов малого объема (за счет сравнительно большого
объема операций, который требуется для перераспределения данных);
RAID 2 относительно дорог, но при увеличении количества дисков стоимость реализации снижается. Эта схема хранения данных мало применяется, поскольку плохо справляется с большим количеством запросов, сложна в организации и имеет незначительные преимущества перед
уровнем RAID 3.
70
8.4. RAID 3. Отказоустойчивый массив с параллельным
вводом/выводом и диском контроля четности
Поток данных разбивается на блоки на уровне байт (хотя возможно
и на уровне бит) и записывается одновременно на все диски массива,
кроме диска, который выделен для хранения контрольных сумм, вычисляемых при записи данных. Поломка любого из дисков массива не
приводит к потере информации, которую можно восстановить вычислением операции «исключающее ИЛИ (XOR)», примененной к информации на оставшихся дисках. Этот уровень имеет намного меньшую избыточность, чем RAID 2, в схеме которого большинство дисков, хранящих
контрольную информацию, нужны для определения неисправного разряда. Как правило, RAID-контроллеры могут получить данные об ошибке с помощью механизмов отслеживания случайных сбоев (при помощи
расшифровки сигналов от дисков или дополнительного кодирования).
Благодаря разбиению данных на блоки RAID 3 имеет высокую производительность. При считывании информации не производится обращения
к диску с контрольными суммами (в случае отсутствия сбоя), что происходит всякий раз при операции записи. Поскольку при каждой операции ввода/вывода осуществляется обращение практически ко всем
дискам массива, одновременная обработка нескольких запросов невозможна. Этот уровень подходит для приложений с файлами большого
объема и малой частотой обращений (в основном это сфера мультимедиа). Применение только одного диска для хранения контрольной информации объясняется тем, что коэффициент использования дискового
пространства достаточно высок (и, следовательно, этот вариант имеет
— относительно низкую стоимость). Кроме того, достоинством RAID 3
является незначительное снижение производительности при сбое и
быстрое восстановление информации. Недостатком RAID 3 является
сложность его реализации.
8.5. RAID 4. Отказоустойчивый массив независимых дисков
с общим диском контроля четности
Этот массив во многом схож с уровнем RAID 3. Поток данных разделяется не на уровне байтов, а на уровне блоков, каждый из которых
записывается на отдельный диск. После записи группы блоков вычисляется контрольная сумма, которая записывается на выделенный для
этого диск. Благодаря большему, чем у RAID 3, размеру блока возможно
одновременное выполнение нескольких операций чтения. RAID 4 повышает производительность передачи файлов малого объема (за счет
распараллеливания операции считывания). Но поскольку при записи
должна изменяться контрольная сумма на выделенном диске, одновременное выполнение операций невозможно (налицо асимметричность
операций ввода и вывода). Этот уровень имеет все недостатки RAID 3 и
не обеспечивает преимущества в скорости при передаче данных большо71
го объема. Схема хранения разрабатывалась для приложений, в которых
данные изначально разбиты на небольшие блоки, поэтому нет необходимости разбивать их дополнительно. RAID 4 — неплохое решение для
файл-серверов, информация с которых в основном считывается и редко
записывается. Эта схема хранения данных имеет невысокую стоимость,
но ее реализация достаточно сложна, как и восстановление данных при
сбое.
8.6. RAID 5. Отказоустойчивый массив независимых дисков
с распределенной четностью
Отказоустойчивый массив независимых дисков с распределением
контрольных сумм или чередующийся массив с контролем четности (рис.
8.3). Самый распространенный уровень. Блоки данных и контрольные
суммы циклически записываются на все диски массива; отсутствует выделенный диск для хранения информации о четности: нет асимметричности конфигурации дисков.
В случае RAID 5 все диски массива имеют одинаковый размер,
но поодиночке для операционной системы они не видны. На уровне RAID-контроллера все диски объединяются в один большой диск.
Например, если три диска имеют размер 1 Гб, то фактически размер
массива составляет 2 Гб, 1 Гб отводится на контрольную информацию.
В случае добавления четвертого диска операционная система будет видеть 3 Гб, 1 Гб предназначен для хранения контрольных сумм. Самый
большой недостаток уровней RAID от 2-го до 4-го — это наличие отдельного (физического) диска, хранящего информацию о контрольной
сумме. Операции считывания не требуют обращения к этому диску,
и, как следствие, скорость их выполнения достаточно высока. Но при
каждой операции записи на диске изменяется информация, поэтому
схемы RAID 2—4 не позволяют проводить параллельных операций записи. RAID 5 не имеет этого недостатка, так как контрольные суммы
равномерно распределяются по всем дискам массива. Это позволяет
выполнять несколько операций считывания или записи одновременно.
Рис. 8.3. Чередующийся массив с контролем четности
72
Грамотная реализация этого уровня в случае массива из N дисков позволяет одновременно обрабатывать N/2 блоков данных. RAID 5 имеет достаточно высокую скорость записи/считывания (скорость чтения ниже,
чем у RAID 4) и малую избыточность, то есть он экономичен.
Преимущества:
— высокая скорость записи данных;
— достаточно высокая скорость чтения данных;
— высокая производительность при большой интенсивности запросов чтения/записи данных;
— малые накладные расходы для реализации избыточности.
Недостатки:
— низкая скорость чтения/записи данных малого объема при единичных запросах;
— очень низкая производительность при записи данных;
— достаточно сложная реализация;
— сложное восстановление данных.
8.7. RAID 10 (RAID 1+0). Отказоустойчивый массив
с дублированием и параллельной обработкой
Комбинация уровней 1 и 0 (рис. 8.4). Каждый физический диск уровня RAID 0 заменяется массивом RAID 1. Это обеспечивает высокую
передачу данных (сервер видит массив как RAID 0) и высокую их сохранность, но значительно ограничивает масштабирование, и коэффициент использования дискового пространства получается очень низким
— всего 25%.
Преимущества:
— очень высокая скорость записи данных при не менее высокой
надежности.
Недостатки:
— очень высокая стоимость;
— ограниченное масштабирование.
Рис.8.4. Массив с чередованием зеркал
73
8.8. Составные дисковые массивы
RAID 3+0 – массив нулевого уровня, роль дисков которого играют
массивы RAID 3, сочетает производительность RAID 0 и отказоустойчивость RAID 3. Поскольку в схеме RAID 3 дисковое пространство используется более рационально, чем в схеме RAID 1, то у массива RAID 3+0
коэффициент его использования выше, чем у RAID 1+0, и равен 40%.
Эта схема имеет ограниченное масштабирование.
RAID 5+0 — массив нулевого уровня, роль дисков которого играют
массивы RAID 5. Он объединяет отказоустойчивость и высокую производительность для приложений с большой интенсивностью запросов и
высокую скорость передачи данных. RAID 5+0 обладает высокой производительностью и стоимостью. Эта схема тоже имеет ограниченное
масштабирование. Возможен еще вариант RAID 5+3, когда физические
диски массива RAID 5 заменяются массивами RAID 3.
Итак, идея создания RAID-системы заключается в следующем, из набора обычных дисковых накопителей создается массив, который управляется специальным контроллером и определяется сервером как единый
логический диск большой емкости (как правило, физических дисков,
способных хранить такой объем информации, не существует). Высокое
быстродействие системы обеспечивается возможностью параллельного
выполнения нескольких операций вывода (ввода), а сохранность информации — ее дублированием или вычислением контрольных сумм.
Каждый уровень RAID имеет свои особенности, поэтому подходит для
выполнения только определенного круга задач. Существует несколько
способов реализации RAID-систем, рассмотрим их подробнее.
8.9. Реализация RAID-системы программным путем
Некоторые операционные системы, в частности Microsoft Windows
NT (2000) Server и Novell NetWare имеют встроенные программы для
реализации RAID-массивов (уровней 0, 1, 1+0 и даже 5). Самое большое преимущество такого способа построения RAID-систем — низкая
стоимость, так как не требуется никаких дополнительных аппаратных
средств. Для проведения всех операций (записи, считывания, вычисления контрольной суммы) программа использует ресурсы центрального
процессора, что значительно снижает производительность всей системы. Следует отметить, что центральный процессор оптимизирован для
работы с подсистемой памяти, а не периферийными устройствами.
Основной вклад в снижение общей производительности вносит обработка прерываний от дисков. RAID-системы, реализованные программным путем, работают значительно медленнее аппаратных и характеризуются минимальной надежностью, поскольку при выходе сервера из
строя возможна полная потеря всей информации. Кроме того, при замене неисправного диска, добавлении нового (в это время сервер, есте74
ственно, выключен) или изменении уровня RAID также теряются все
накопленные данные.
Чтобы повысить надежность, производительность и масштабирование RAID-систем, их строят на основе контроллеров, которые устанавливаются внутрь сервера (обычно они имеют PCI интерфейс). По этой
шине можно передавать данные со скоростью, вполне достаточной
для серверов начального и среднего уровней (максимальная пропускная способность 32-битной шины PCI — 132 Мб/с, 64-битной –264).
RAID-контроллеры значительно разгружают центральный процессор,
увеличивая производительность всей системы. Кроме того, наличие интегрированного кеша (до 128 Мб) повышает скорость работы дискового
массива. BIOS контроллеры и прилагаемые программы позволяют создавать RAID-массивы различных уровней, заменять и добавлять диски
без потери информации. Самые технологически совершенные контроллеры обеспечивают проведение так называемой «горячей» замены неисправного накопителя, то есть без приостановки работы сервера. В них
также реализована возможность удаленного управления и мониторинга
RAID-системы.
Большим недостатком внутренних контроллеров является их привязка к определенной платформе и операционной системе, подчас приходится сталкиваться с некорректной работой драйверов. Кроме того,
такие контроллеры имеют ограниченные возможности по построению
отказоустойчивых систем (в частности, это зависит от состояния сервера, выход которого из строя останавливает работу RAID-массива) и
масштабированию.
Внутренние контроллеры RAID-массивов значительно различаются
по своим характеристикам и стоимости. Их основные производители —
компании Mylex (безусловный лидер, поставляет до 80% всех контроллеров), AMI, Adaptec.
Рассмотрим несколько классов этих устройств.
Дисковые контроллеры с возможностью организации RAID-массивов
представляют собой стандартные дисковые контроллеры с несколько
расширенными функциональными возможностями. Они позволяют реализовывать самые простые RAID-системы (уровни 0, 1, 1+0), как правило, не имеют памяти для кеширования, их стоимость составляет до
200 долл. (недорогое решение для серверов начального уровня).
Низкоуровневые («0»-канальные) RAID-контроллеры обычно не имеют интегрированных SCSI-чипов и для работы используют RAID-порт
на материнской плате со встроенным дисковым SCSI-контроллером,
поддерживающим функции обмена данными с накопителями. Сам контроллер выполняет только вычисления, необходимые для корректного
функционирования RAID-массива, и кеширование данных (энергонезависимый кеш отсутствует). Эти устройства способны реализовывать следующие уровни RAID: 0; 1; 3; 5; 1+0; 3+0; 5+0, их стоимость составляет
75
около 300 долл. Преимущество таких контроллеров — отличное соотношение цена/производительность, главный их недостаток — привязка к
конкретному набору микросхем.
Высокоуровневые («1+»-канальные) RAID-контроллеры имеют
встроенный дисковый контроллер и выполняют все функции по вводу/выводу информации, ее кешированию и вычислению собственно
RAID-операций. Обычно они не имеют энергонезависимого кеша и не
так сильно зависят от набора микросхем материнской платы, имеют расширенные функциональные возможности, но стоят в 1,5—2 раза дороже
низкоуровневых контроллеров.
Полнофункциональные внутренние RAID-контроллеры имеют лучшие характеристики среди остальных классов внутренних контроллеров. Они обладают самыми производительными RISC-процессорами
и большим объемом энергонезависимой кеш-памяти, имеют до трех
высокоскоростных каналов, способных поддерживать до 15 дисков
каждый. Их интеллектуальный BIOS позволяет производить сложную
настройку RAID-массива независимо от установленной операционной
системы (поддерживаются следующие уровни RAID: 0; 1; 3; 5; 1+0; 3+0;
5+0). Высокие технические характеристики данных контроллеров являются причиной строгих требований, предъявляемых к модулям памяти,
покупаемым для увеличения объема кеша, и определяют относительно
высокую стоимость (до 2500 долл.).
9. Восстанавливаемые файловые системы
9.1. Причины нарушения целостности файловой системы
Восстанавливаемость файловой системы — это свойство, которое гарантирует, что в случае отказа питания или краха системы, когда все данные в оперативной памяти безвозвратно теряются, начатые файловые
операции будут либо успешно завершены, либо отменены безо всяких отрицательных последствий для работоспособности файловой системы.
Любая операция над файлом (создание, удаление, запись, чтение и т.
д.) может быть представлена в виде некоторой последовательности подопераций. Последствия сбоя питания или краха ОС зависят от того, какая операция ввода/вывода выполнялась в этот момент, в каком порядке
выполнялись подоперации, и до какой подоперации продвинулось выполнение операции к этому моменту.
Рассмотрим, например, последствия сбоя при удалении файла в файловой системе FAT. Для выполнения этой операции требуется пометить
как недействительную запись об этом файле в каталоге, а также обнулить
все элементы FAT, которые соответствуют кластерам удаляемого файла.
Предположим, что сбой питания произошел после того, как была объявлена недействительной запись в каталоге и обнулено несколько (но
не все) элементов FAT, занимаемых удаляемым файлом. В этом случае
после сбоя файловая система сможет продолжать нормальную работу,
за исключением того, что несколько последних кластеров удаленного
файла будут теперь «вечно» помечены занятыми. Хуже было, если бы
операция удаления начиналась с обнуления элементов FAT, а корректировка каталога происходила после. Тогда при возникновении сбоя
между этими подоперациями содержимое каталога не соответствовало
бы действительному состоянию файловой системы: файл как будто существует, а на самом деле его нет. Неисправленная запись в каталоге содержит адрес кластера, который уже объявлен свободным и может быть
назначен другому файлу, это может привести к разного рода коллизиям.
Некорректность файловой системы может возникать не только в результате насильственного прерывания операций ввода/вывода, выполняемых непосредственно с диском, но и в результате нарушения работы дискового кэша. Кэширование данных с диска предполагает, что в
течение некоторого времени результаты операций ввода/вывода никак
не сказываются на содержимом диска — все изменения происходят с копиями блоков диска, временно хранящихся в буферах оперативной памяти. В этих буферах оседают данные из пользовательских файлов и служебная информация файловой системы такая, как каталоги, индексные
дескрипторы, списки свободных, занятых и поврежденных блоков и т.п.
Для согласования содержимого кэша и диска время от времени выполняется запись всех модифицированных блоков, находящихся в
77
кэше, на диск. Выталкивание блоков на диск может выполняться либо
по инициативе менеджера дискового кэша, либо по инициативе приложения. Менеджер дискового кэша вытесняет блоки из кэша в следующих случаях:
– если необходимо освободить место в кэше для новых данных;
– если к менеджеру поступил запрос от какого-либо приложения или
модуля ОС на запись указанных в запросе блоков на диск;
– при выполнении регулярного, периодического сброса всех модифицированных блоков кэша на диск (как это происходит, например, в
результате работы системного вызова sync в ОС Unix).
Кроме того, в распоряжение приложений обычно предоставляются
средства, с помощью которых они могут запросить у подсистемы ввода/вывода операцию сквозной записи, при выполнении которой данные немедленно и практически одновременно записываются и на диск,
и в кэш.
Период полного сброса кэша на диск обычно выбирается весьма коротким — порядка 10—30 секунд. Однако все равно остается высокая
вероятность того, что при возникновении сбоя содержимое диска не в
полной мере будет соответствовать действительному состоянию файловой системы — копии некоторых блоков (с обновленным содержимым)
система может не успеть переписать на диск. Для восстановления некорректных файловых систем, использующих кэширование диска, в
операционных системах предусматриваются специальные утилиты, такие как fsck для файловых систем s5/uf, ScanDisk для FAT или Chkdsk
для файловой системы HPFS. Однако объем несоответствий может быть
настолько большим, что восстановление файловой системы после сбоя
с помощью стандартных системных средств становится невозможным.
9.2. Технология протоколирования транзакций
Проблемы, связанные с восстановлением файловой системы, могут
быть решены при помощи техники протоколирования транзакций, которая сводится к следующему. В системе должны быть определены транзакции — неделимые работы, которые не могут быть выполнены частично.
Они либо выполняются полностью, либо вообще не выполняются.
В файловых системах такими транзакциями являются операции ввода/
вывода, изменяющие содержимое файлов, каталогов или других системных
структур файловой системы (например, индексных дескрипторов ufs или
элементов FAT).
Пусть к файловой системе поступает запрос на выполнение той или
иной операции ввода/вывода. Эта операция включает несколько шагов,
связанных с созданием, уничтожением и/или модификацией объектов
файловой системы. Если все подоперации были благополучно завершены, то транзакция считается выполненной. Это действие называется фиксацией (commiting) транзакции. Если же одна или более подо78
пераций не выполнились из-за сбоя питания или краха ОС, тогда для
обеспечения целостности файловой системы все измененные в рамках
транзакции данные файловой системы должны быть возвращены точно в то состояние, в котором они находились до начала выполнения
транзакции.
Так, например, транзакцией может быть представлена операция
удаления файла. Действительно, для целостности файловой системы
необходимо, чтобы все требуемые при выполнении данной операции
изменения каталога и таблицы распределения дисковой памяти были
сделаны в полном объеме. Либо, если во время операции произошел
сбой, каталог и таблица распределения памяти должны быть приведены
в исходное состояние.
С другой стороны, в файловой системе существуют операции, которые не изменяют состояния файловой системы и которые вследствие
этого нет необходимости рассматривать как транзакции. Примерами таких операций являются: чтение файла, поиск файла на диске, просмотр
атрибутов файла.
Незавершенная операция с диском несет угрозу целостности файловой системы. Каким же образом файловая система может реализовать
свойство транзакций «все или ничего»? Очевидно, что решение в этом
случае может быть одно — необходимо протоколировать (запоминать)
все изменения, происходящие в рамках транзакции, чтобы на основе
этой информации в случае прерывания транзакции можно было отменить все уже выполненные подоперации, то есть сделать так называемый откат транзакции.
В файловых системах с кэшированием диска для восстановления системы после сбоя, кроме отката незавершенных транзакций, необходимо выполнить дополнительное действие — повторение зафиксированных транзакций. Когда происходит сбой по питанию или крах ОС, все
данные, находящиеся в оперативной памяти, теряются, в том числе и
модифицированные блоки данных, которые менеджер дискового кэша
не успел вытолкнуть на диск. Единственный способ восстановить утерянные изменения данных — повторить все завершенные транзакции,
которые участвовали в модификации этих блоков. Чтобы обеспечить
возможность повторения транзакций, система должна включать в протокол не только данные, которые могут быть использованы для отката
транзакции, но и данные, которые позволят в случае необходимости повторить всю транзакцию.
Для восстановления файловой системы используется упреждающее протоколирование транзакций. Оно заключается в том, что перед
изменением какого-либо блока данных на диске или в дисковом кэше
производится запись в специальный системный файл — журнал транзакций (log file). Указанная запись содержит информацию о том, какая
транзакция делает изменения, какой файл и блок изменяются и каковы
старое и новое значения изменяемого блока. Только после успешной регистрации всех подопераций в журнале делаются изменения в исходных
79
блоках. Если транзакция прерывается, то информация журнала регистрации используется для приведения файлов, каталогов и служебных
данных файловой системы в исходное состояние, то есть производится
откат. Если транзакция фиксируется, то и об этом делается запись в журнал регистрации, но и новые значения измененных данных сохраняются
в журнале еще некоторое время, чтобы сделать возможным повторение
транзакции, если это потребуется.
9.3. Восстанавливаемость файловой системы NTFS
Файловая система NTFS является восстанавливаемой файловой
системой, однако восстанавливаемость обеспечивается только для системной информации файловой системы, то есть каталогов, атрибутов
безопасности, битовой карты занятости кластеров и других системных
файлов. Сохранность данных пользовательских файлов, работа с которыми выполнялась в момент сбоя, в общем случае не гарантируется.
Для повышения производительности файловая система NTFS использует дисковый кэш, то есть все изменения файлов, каталогов и
управляющей информации выполняются сначала над копиями соответствующих блоков в буферах оперативной памяти и только спустя некоторое время переносятся на диск. Однако кэширование, как уже было
сказано, повышает риск разрушения файловой системы. В таких условиях NTFS обеспечивает отказоустойчивость с помощью технологии протоколирования транзакций и восстановления системных данных.
Пользовательские данные, которые в момент краха находились в дисковом кэше и не успели записаться на диск, в NTFS не восстанавливаются.
Журнал регистрации транзакций в NTFS делится на две части: область рестарта и область протоколирования (рис. 9.1).
Область рестарта содержит информацию о том, с какого места необходимо будет начать читать журнал транзакций для проведения процедуры восстановления системы после сбоя или краха ОС. Эта информация представляет собой указатель на определенную запись в области
Рис. 9.1. Журнал регистрации транзакций в NTFS
80
протоколирования. Для надежности в файле журнала регистрации хранятся две копии области рестарта.
Область протоколирования содержит записи обо всех изменениях
в системных данных файловой системы, произошедших в результате
выполнения транзакций в течение некоторого, достаточно большого
периода. Все записи идентифицируются логическим последовательным
номером LSN (Logical Sequence Number). Записи о подоперациях, принадлежащих одной транзакции, образуют связанный список: каждая последующая запись содержит номер предыдущей записи. Заполнение области протоколирования идет циклически: после исчерпания всей памяти,
отведенной под область протоколирования, новые записи помещаются
на место самых старых.
Существует несколько типов записей в журнале транзакций: запись
модификации, запись контрольной точки, запись фиксации транзакции, запись таблицы модификации, запись таблицы модифицированных страниц.
Запись модификации заносится в журнал транзакций относительно
каждой подоперации, которая модифицирует системные данные файловой системы. Эта запись состоит из двух частей: одна содержит информацию, необходимую системе для повторения этого действия, а другая
— информацию для его отмены. Информация о модификации хранится
в двух формах — в описаниях на физическом и на логическом уровне.
Логическое описание используется программным обеспечением уровня
приложений и формулируется в терминах операций, например, «выделить файловую запись в MFT» или «удалить имя из корневого индекса».
На нижнем уровне программного обеспечения, к которому относятся
модули самой NTFS, используется менее компактное, но более простое
физическое описание, сводящееся к указанию диапазона байт на диске, в
которые необходимо поместить определенные значения.
Пусть, например, регистрируется транзакция создания файла lotus.
doc, которая включает, как показано на рис. 9.1, три подоперации с LSN,
равными 202, 203 и 204 соответственно . Тогда в журнале будут сделаны
три записи модификации, содержимое которых на уровне логического
описания приведено в табл. 9.1.
Таблица 9.1
Пример содержимого записей модификации
Запись модификации
LSN-202
LSN-203
LSN-204
Информация для повторения
Информация для отката
транзакции
транзакции
Выделить и инициировать
Удалить запись о файле lotus.
запись для нового файла
doc из таблицы MFT
lotus.doc в таблице MFT
Добавить имя файла
Исключить имя файла
в индекс
из индекса
Установить биты 3—9
Обнулить биты 3—9 в
в битовой карте
битовой карте
81
Журнал транзакций, как и все остальные файлы, кэшируется в буферах оперативной памяти и периодически сбрасывается на диск.
NTFS все действия с журналом транзакций выполняет только путем
запросов к специальной службе LFS (Log File Service — служба журнала
транзакций). Эта служба размещает в журнале новые записи, сбрасывает
на диск все записи до некоторого заданного номера, считывает записи
в прямом и обратном порядке и выполняет некоторые другие действия
над записями журнала.
Прежде чем выполнить любую транзакцию NTFS вызывает службу
журнала транзакций LFS для регистрации всех подопераций в журнале транзакций. И только после этого описанные подоперации действительно выполняются над копиями блоков данных файловой системы,
находящимися в кэше. Когда все подоперации транзакции выполнены,
с помощью службы LFS транзакция фиксируется. Это выражается в том,
что в журнал заносится специальный вид записи — запись фиксации
транзакции.
Параллельно с регистрацией и выполнением транзакций происходит
процесс выталкивания блоков кэша на диск. Сброс на диск измененных
блоков выполняется в два этапа: сначала сбрасываются блоки журнала,
а потом — модифицированные блоки транзакций. Такой порядок реализуется следующим образом. Каждый раз, когда диспетчер кэша принимает решение о том, что определенные модифицированные блоки
(не обязательно все) должны быть вытеснены на диск, он сообщает об
этом службе LFS. В ответ на это сообщение LFS обращается к диспетчеру кэша с запросом о записи на диск всех измененных блоков журнала. После того, как блоки журнала сброшены на диск, сбрасываются на
диск модифицированные блоки транзакций, среди которых могут быть,
конечно, и блоки системных данных файловой системы.
Такая двухэтапная процедура сброса данных кэша на диск делает возможным восстановление файловой системы, если во время записи модифицированных блоков из кэша на диск произойдет сбой. Действительно,
какие бы неприятности ни произошли во время записи модифицированных блоков на диск, вся информация об изменениях, произведенных в
этих блоках, уже записана на диск в файл журнала транзакций. Заметим,
что все действия, которые были выполнены файловой системой в интервале между последним сбросом данных на диск и сбоем, отменяются
сами собой, поскольку все они проводятся только над блоками в кэше и
не вызывают никаких изменений содержимого диска.
Какие же дефекты может иметь файловая система после сбоя?
Во-первых, — это несогласованность системных данных, возникшая
в результате незавершенности транзакций, которые были начаты еще до
момента последнего сброса данных из кэша на диск.
На рис. 9.2 показана транзакция A, две подоперации которой a1 и
a2 были сделаны до сброса кэша, а еще две — a3 и a4 — после сброса
кэша. К моменту сбоя результаты первых двух подопераций могли быть
82
записаны на диск, в то время как изменения, вызванные подоперациями a3 и a4, отразились только на копиях блоков файловой системы в
кэше и были потеряны в результате сбоя. Чтобы устранить несогласованность, вызванную этой причиной, требуется сделать откат для всех
транзакций, незафиксированных к моменту последнего сброса кэша.
Для примера, изображенного на рис. 9.2, такими транзакциями являются транзакции A и C.
В каждый момент времени NTFS располагает списком, называемым
таблицей незавершенных транзакций. Для каждой незавершенной транзакции эта таблица содержит последовательный номер LSN последней по времени подоперации, выполненной в рамках данной транзакции. По этому номеру может быть найдена вся цепочка подопераций
транзакции.
Во-вторых, противоречия в файловой системе могут быть вызваны
потерей тех изменений, которые были сделаны транзакциями, завершившимися еще до сброса кэша, но которые не были записаны на диск
в ходе последнего сброса. На рис. 9.2 такой транзакцией может оказаться
транзакция B. Чтобы определить, какие завершенные транзакции надо
повторять, система ведет таблицу модифицированных страниц, находящихся в данный момент в кэше. В таблице для каждой модифицированной страницы указывается, какая транзакция вызвала эти изменения.
Повторение транзакций, которые имели дело со страницами, указанными в данном списке, гарантирует, что ни одно изменение не будет
потеряно.
Рис. 9.2. Пример протоколирования транзакций в NTFS
83
Таблицы модифицированных страниц и незавершенных транзакций
создаются NTFS на основании записей журнала транзакций и поддерживаются в оперативной памяти. Следует подчеркнуть, что обе эти таблицы
не добавляют новой информации в журнал транзакций, они лишь представляют информацию, содержащуюся в записях журнала, в концентрированном виде, более удобном для использования при восстановлении.
Содержимое описанных выше таблиц фиксируется в журнале транзакций во время выполнения операции «контрольная точка». Операция
выполняется каждые 5 секунд и включает следующие действия (рис. 9.3).
Сначала в области протоколирования журнала транзакций создаются две
записи — запись таблицы незавершенных транзакций и запись таблицы модифицированных страниц, содержащие копии соответствующих таблиц.
Затем номера этих записей включаются в запись контрольной точки, которая также создается в области протоколирования журнала транзакций.
Сделав запись, NTFS помещает ее номер LSN в область рестарта.
Заметим, что процессы создания контрольных точек и сброса блоков
данных из кэша на диск протекают асинхронно. Когда в результате сбоя
из оперативной памяти исчезает вся информация, в том числе из таблиц
незавершенных транзакций и модифицированных страниц, состояние
этих таблиц, хотя и несколько устаревшее, сохраняется на диске в файле
журнала транзакций. Кроме того, здесь же имеется несколько более поздних записей, которые были сделаны в период между сохранением таблиц
и сбросом кэша (на рис. 9.3 это записи М1, М2, М3). При восстановлении файловая система обрабатывает эти записи и вносит изменения в
таблицы незавершенных транзакций и модифицированных страниц, сохраненные в журнале. Так, например, если запись М1 является записью
фиксации транзакции, то соответствующая транзакция исключается из
таблицы незавершенных транзакций, а если это запись модификации, то
в таблицу модифицированных страниц заносится информация об еще одной странице.
Рис. 9.3. Пример отражения в журнале транзакций операции «контрольная точка»
84
9.4. Этапы процесса восстановления файловой системы
Процесс восстановления целостности файловой системы состоит из
трех основных этапов, на каждом из которых последовательно выполняется ряд шагов.
9.4.1. Проход анализа
При проходе анализа NTFS просматривает журнал транзакций в прямом направлении, начиная с последней операции контрольной точки,
чтобы найти записи модификации и обновить скопированные ранее в
память таблицы транзакций и измененных страниц.
Необходимо учитывать, что операция контрольной точки помещает
в журнал транзакций три записи, между которыми могут оказаться записи модификации (рис. 9.4). Поэтому NTFS должна приступить к сканированию с начала операции контрольной точки.
Рис. 9.4. Вариант заполнения журнала транзакций
при выполнения операции контрольной точки
Большинство записей модификации, расположенных в журнале
после начала операции контрольной точки, представляет собой изменение либо таблицы транзакций, либо таблицы измененных страниц.
Например, если запись модификации относится к фиксации транзакции, то транзакция, которую представляет данная запись, должна быть
удалена из таблицы транзакций. Аналогично, если запись модификации
относится к обновлению страницы, изменяющему структуру данных
файловой системы, нужно внести соответствующую поправку в таблицу
измененных страниц.
После того как таблицы в памяти приведены в актуальное состояние,
NTFS просматривает их, чтобы определить LSN самой старой записи
модификации, которая регистрирует операцию, не выполненную над
диском. Таблица транзакций содержит LSN незафиксированных (незавершенных) транзакций, а таблица измененных страниц — LSN записей, соответствующих модификациям кэша, не отраженным на диске.
LSN самой старой записи, найденной NTFS в этих двух таблицах, определяет, откуда начнется проход повтора. Однако, если последняя запись
контрольной точки окажется более ранней, NTFS начнет проход повтора именно с нее.
85
Рис. 9.5. Проход анализа
Таким образом, проход анализа (рис. 9.5) можно условно разбить на
следующие шаги:
1. Чтение области рестарта из файла журнала транзакций и определение номера самой последней по времени записи о контрольной точке.
2. Чтение записи контрольной точки и определение номеров записей таблицы незавершенных транзакций и таблицы модифицированных
страниц.
3. Чтение и корректировка таблиц незавершенных транзакций и модифицированных страниц на основании записей, сделанных в журнале
транзакций уже после сохранения таблиц в журнале, но еще до записи
журнала на диск.
9.4.2. Проход повтора
Ha проходе повтора NTFS сканирует журнал транзакций в прямом
направлении, начиная с LSN самой старой записи, которая была обнаружена на проходе анализа. Она ищет записи модификации, относящиеся к обновлению страницы и содержащие модификации тома, которые
были запротоколированы до сбоя системы, но не сброшены из кэша на
диск. NTFS повторяет эти обновления в кэше.
Когда NTFS достигает конца журнала транзакций, она уже обновила кэш необходимыми модификациями тома, и подсистема отложенной
записи, принадлежащая диспетчеру кэша, может начать переписывать
содержимое кэша на диск в фоновом режиме.
Таким образом, проход повтора (рис. 9.6) можно условно разбить на
следующие шаги:
1. Анализ таблицы незавершенных транзакций, определение номера самой поздней подоперации, выполненной в рамках незавершенной
транзакции. Анализ таблицы модифицированных страниц, определение
номера самой ранней записи модификации страницы.
Рис. 9.6. Проход повтора
86
2. Чтение журнала транзакций в прямом направлении, начиная с
самой ранней записи модификации, найденной при анализе таблицы
модифицированных страниц. При этом система выполняет повторение
завершенных транзакций, в результате которого устраняются все несоответствия файловой системы, вызванные потерями модифицированных страниц в кэше во время сбоя или краха операционной системы.
9.4.3. Проход отмены
Завершив проход повтора, NTFS начинает npoxoд отмены, откатывая транзакции, не зафиксированные к моменту сбоя системы.
Этап состоит из одного шага:
1. Чтение журнала транзакций в обратном направлении и откат незавершенных транзакций.
Так как все подоперации каждой транзакции связаны в список, система легко переходит от одной записи модификации к другой, извлекает из них информацию, необходимую для отмены, и выполняет откат
незавершенных транзакций.
Рассмотри пример выполнения этапа отмены.
Ha рис. 9.7 показаны две транзакции в журнале: транзакция 1 зафиксирована до сбоя системы, а транзакция 2 — нет. NTFS должна отменить
транзакцию 2.
Рис. 9.7. Фрагмент журнала транзакций
Рис. 9.8. Состав информации для повтора и отмены записей модификации транзакции 2
87
Допустим, в ходе транзакции 2 создавался файл. Эта
операция состоит из трех подопераций (каждая со своей записью модификации). Записи модификации, относящиеся к одной транзакции, связываются в журнале обратными указателями, поскольку эти записи обычно не располагаются одна за другой.
B таблице транзакций NTFS для каждой незавершенной транзакции
хранится LSN записи модификации, помещенной в журнал последней.
B данном примере таблица транзакций сообщает, что для транзакции
2 это запись с LSN 4049. NTFS выполняет откат транзакции 2, посредством действий, указанных в информации для отмены каждой записи
модификации (рис. 9.8).
Найдя LSN 4049, NTFS извлекает информацию для отмены и выполняет отмену, сбрасывая биты 3—9 в своей битовой карте. Затем NTFS
следует по обратному указателю к LSN 4048, который указывает ей, что
необходимо удалить новое имя файла из индекса имен файлов. Наконец,
NTFS переходит по последнему обратному указателю и освобождает запись MFT, зарезервированную для данного файла, в соответствии с информацией из записи модификации с LSN 4046. Ha этом откат транзакции 2 заканчивается. Если имеются другие незавершенные транзакции,
NTFS повторяет ту же процедуру для их отката.
Операция отмены сама является транзакцией, поскольку связана с
модификацией системных блоков файловой системы, поэтому она протоколируется обычным образом в журнале транзакций. По отношению
к ней также могут быть применены операции повторения или отката.
Когда проход отмены завершен, том возвращается в согласованное
состояние. B этот момент NTFS сбрасывает на диск изменения кэша,
чтобы гарантировать правильность содержимого тома. Далее NTFS записывает «пустую» область перезапуска, указывающую, что том находится в согласованном состоянии и что, если система сразу потерпит
еще одну аварию, никакого восстановления не потребуется. Ha этом
восстановление завершается.
Когда восстановление завершено, NTFS очищает область рестарта
журнала транзакций, указывая тем самым на то, что диск находится в
согласованном состоянии.
10. Основы организации ОС UNIX
10.1. Особенности архитектуры UNIX
Самый общий взгляд на архитектуру UNIX позволяет увидеть двухуровневую модель системы (рис. 10.1).
Первый уровень представлен ядром системы. Ядро непосредственно
взаимодействует с аппаратной частью компьютера, изолируя прикладные программы (процессы в пользовательской части операционной системы) от особенностей ее архитектуры. Ядро имеет набор услуг, предоставляемых прикладным программам посредством системных вызовов.
Таким образом, в системе можно выделить два уровня привилегий: уровень системы (привилегии специального пользователя root) и уровень
пользователя (привилегии всех остальных пользователей).
Второй уровень составляют приложения или задачи как системные,
определяющие функциональность системы, так и прикладные, обеспечивающие пользовательский интерфейс UNIX. Однако, несмотря
на внешнюю разнородность приложений, схемы их взаимодействия с
ядром одинаковы.
Операционная система UNIX обладает классическим монолитным
ядром, в котором можно выделить следующие основные части: файловая система, подсистема управления процессами и памятью, подсистема
ввода/вывода (рис.10.2).
Файловая подсистема
Файловая подсистема обеспечивает унифицированный интерфейс
доступа к данным, расположенным на дисковых накопителях, и к периферийным устройствам. Одни и те же функции ореn, read, write могут
использоваться как при чтении или записи данных на диск, так и при
выводе текста на принтер или терминал.
Рис. 10.1. Архитектура операционной системы UNIX
89
Рис. 10.2. Ядро операционной системы UNIX
Эта подсистема контролирует права доступа к файлу, выполняет операции размещения и удаления файла, а также выполняет запись/чтение
данных файла.
Файловая подсистема обеспечивает перенаправление запросов,
адресованных периферийным устройствам, соответствующим модулям
подсистемы ввода/вывода.
Подсистема управления процессами и памятью
К основным функциям подсистемы относятся управление параллельным выполнением процессов (планирование и диспетчеризация),
управление виртуальной памятью процесса и организация взаимодействия между процессами (сигналы, очереди сообщений и т. п.).
Специальная задача ядра, называемая распорядителем или планировщиком процессов (scheduler), разрешает конфликты между процессами
в конкуренции за системные ресурсы (процессор, память, устройства
ввода/вывода). Планировщик запускает процесс на выполнение, следя
за тем, чтобы процесс монопольно не захватил разделяемые системные
ресурсы. Процесс освобождает процессор, ожидая длительной операции
ввода/вывода, или по истечении кванта времени. В этом случае планировщик выбирает следующий процесс с наивысшим приоритетом и запускает его на выполнение.
90
Модуль управления памятью обеспечивает размещение прикладных
задач в физической оперативной памяти. Управление виртуальной памятью процесса также входит в задачи модуля управления памятью.
Таким образом, в случае, когда для всех процессов недостаточно памяти, ядро перемещает части процесса или нескольких процессов в специальную область жесткого диска — раздел swap, освобождая ресурсы для
выполняющегося процесса.
Модуль межпроцессного взаимодействия отвечает за уведомление процессов о событиях с помощью сигналов и обеспечивает возможность
передачи данных между различными процессами.
Подсистема ввода/вывода
Подсистема ввода/вывода выполняет запросы файловой подсистемы и подсистемы управления процессами по доступу к периферийным
устройствам. Подсистема ввода/вывода обеспечивает взаимодействие
со специальными модулями ядра — драйверами устройств, осуществляя
в тех случаях, когда это необходимо, буферизацию данных. Благодаря
тому, что в UNIX аппаратно-независимая часть явно отделена от остальной части ядра, операционные системы этого семейства могут быть с минимальными затратами перенесены на новые аппаратные платформы.
10.2. Базовые элементы ОС UNIX и их взаимодействие
К базовым элементам UNIX относят файлы, пользователей и группы
пользователей, процессы, сигналы. Как отмечалось выше, ОС UNIX является многопользовательской многозадачной системой. Для удобства
управления работой пользователей, выполняющих одни и те же задачи,
в UNIX принято создавать группы пользователей. Пользователи работают в UNIX, манипулируя с объектами двух типов: файлами и процессами.
Для управления процессами можно использовать сигналы. Рассмотрим
базовые элементы UNIX более подробно.
10.2.1. Файлы и файловая система
Файлы играют в UNIX ключевую роль. Все данные хранятся в виде
файлов, доступ к периферийным устройствам осуществляется посредством чтения/записи в специальные файлы. Запуск программ реализуется в системе в виде загрузки соответствующего исполняемого файла, на
основе которого создается процесс, получающий управление. Во время
выполнения процесс может считывать данные из файла или записывать
их в файл. Наконец, файлы в UNIX определяют привилегии пользователей, поскольку права пользователей в большинстве случаев контролируются с помощью прав доступа к файлам.
Каждый файл имеет связанные с ним метаданные (хранящиеся в индексных дескрипторах — inode), содержащие все характеристики файла за
исключением имени файла и позволяющие операционной системе выполнять операции, заказанные прикладной задачей: открыть файл, прочитать
91
или записать данные, создать или удалить файл. В частности, метаданные
содержат указатели на дисковые блоки хранения данных файла.
Типы файлов
В UNIX существуют шесть типов файлов, различающихся по функциональному назначению и действиям операционной системы при выполнении тех или иных операций над файлами:
– обычный файл (regular file);
– каталог (directory);
– специальный файл устройства (special device file);
– FIFO или именованный канал (named pipe);
– связь (link);
– сокет.
Обычный файл представляет собой наиболее общий тип файлов, содержащий данные в некотором формате. Для операционной системы
такие файлы представляют собой просто последовательность байтов.
Вся интерпретация содержимого файла производится прикладной программой, обрабатывающей файл. К этим файлам относятся текстовые
файлы, бинарные данные, исполняемые программы и т. п.
Каталог. С помощью каталогов формируется логическое дерево файловой системы. Каталог — это файл, содержащий имена находящихся в
нем файлов, а также указатели на дополнительную информацию — метаданные, позволяющие операционной системе производить операции
над этими файлами. Каталоги определяют положение файла в дереве
файловой системы, поскольку сам файл не содержит информации о своем местонахождении. Любая задача, имеющая право на чтение каталога,
может прочесть его содержимое, но только ядро имеет право на запись в
каталог. По существу каталог представляет собой таблицу, каждая запись
которой соответствует некоторому файлу (рис. 10.3).
Первое поле каждой записи содержит указатель на метаданные (номер индексного дескриптора, inode), а второе определяет имя файла.
Рис. 10.3. Структура каталога
92
Таким образом, имя файла в файловой системе играет роль указателя на
его метаданные.
Как уже говорилось, каталог содержит имена файлов и указатели на
их метаданные. В то же время сами метаданные не содержат ни имени
файла, ни указателя на это имя. Такая архитектура позволяет одному
файлу иметь несколько имен в файловой системе. Имена жестко связаны с метаданными и соответственно с данными файла, в то время как
сам файл существует независимо от того, как его называют в файловой
системе. Связь имени файла с его данными называется жесткой связью
(hard link). Создать еще одно имя файла можно с помощью команды ln.
Например, с помощью команды ln first second можно создать еще одно
имя second для файла, на который указывает имя first.
Жесткие связи абсолютно равноправны. В списках файлов каталогов, которые можно получить с помощью команды ls, файлы first и
second будут отличаться только именем. Все остальные атрибуты файла
будут абсолютно одинаковыми. С точки зрения пользователя — это два
разных файла, с точки зрения системы — два имени одного и того же набора данных на диске. Изменения, внесенные в любой из этих файлов,
затронут и другой, поскольку оба они ссылаются на одни и те же данные.
Удаление одного из файлов (first или second) не приведет к удалению самого файла, то есть его метаданных и данных. Просто уменьшится число жестких связей у набора данных, с которым было связано удаленное
имя. Информацию о наличии у файла нескольких имен, связанных с
ним жесткими связями, можно получить, просмотрев подробный листинг файлов с помощью команды ls–l. Во второй колонке листинга
указано число жестких связей данного файла.
Жесткая связь является естественной формой связи имени файла с
его метаданными и не принадлежит к особому типу файла.
Специальный файл устройства обеспечивает доступ к физическому
устройству. В UNIX различают символьные (character) и блочные (block)
файлы устройств. Доступ к устройствам осуществляется путем открытия, чтения и записи в специальный файл устройства.
Файлы блочных устройств служат интерфейсом к устройствам, обмен
данными с которыми происходит большими фрагментами, называемыми блоками. При этом ядро операционной системы обеспечивает необходимую буферизацию. Примером физических устройств, соответствующих этому типу файлов, являются жесткие диски.
Файлы символьных устройств используются для доступа к устройствам, драйверы которых обеспечивают собственную буферизацию и
побайтную передачу данных. В качестве примера устройств с символьным интерфейсом можно привести терминалы, принтеры и накопители
на магнитной ленте.
Доступ к некоторым устройствам может осуществляться как через
символьные, так и через блочные специальные файлы.
93
FIFO или именованный канал — это файл, используемый для связи
между процессами. FIFO впервые появились в файловой системе System
V UNIX, но большинство современных систем поддерживают этот
механизм.
Особым типом файла является символическая связь, позволяющая косвенно адресовать файл. В отличие от жесткой связи символическая связь
адресует файл, который, в свою очередь, ссылается на другой файл.
Создается символическая связь командой ln с ключом –s.
Пример
ln –s /home/sergey/symfirst first
Данные файла, являющегося символической связью, содержат только имя целевого файла.
Рис. 10.4. Пример символической связи в UNIX
В результате, последний файл адресуется символической связью косвенно (рис. 10.4).
Операционная система работает с файлом, являющимся символической связью, не так, как с обычным файлом. Например, при выводе
на экран содержимого файла symfirst появятся данные файла /home/
andrei/first.
Сокеты предназначены для взаимодействия между процессами.
Интерфейс сокетов часто используется для доступа к сети TCP/IP. В системах ветви BSD UNIX на базе сокетов реализована система межпроцессного взаимодействия, с помощью которой работают многие системные сервисы, например, система печати.
Структура файловой системы UNIX
Как и во многих современных операционных системах, в UNIX файлы организованы в виде древовидной структуры (дерева), называемой
деревом файловой системы. Все доступное пользователям файловое
94
пространство, независимо от устройств хранения, объединено в единое
дерево каталогов, корнем которого является каталог, имеющий имя ‘‘/’’,
называемый root directory ( корневой каталог). Имена всех остальных
файлов содержат путь — список каталогов, которые необходимо пройти
от корневого каталога, чтобы найти файл. Таким образом, полное имя
любого файла начинается с ‘‘/’’ и не содержит идентификатора устройства (дискового накопителя, CD-ROM или удаленного компьютера в
сети), на котором он фактически хранится. Однако это не означает, что
в системе присутствует только одна файловая система. В большинстве
случаев единое дерево, такое каким его видит пользователь системы,
составлено из нескольких отдельных файловых систем, которые могут
иметь различную внутреннюю структуру, а файлы, принадлежащие этим
файловым системам, могут быть расположены на различных устройствах. Объединение нескольких файловых систем отдельных физических устройств в единое дерево каталогов выполняется с помощью операции монтирования файловой системы.
Для облегчения работы пользователей в операционной системе, повышения эффективности ее администрирования и упрощения переносимости практически все дистрибутивы UNIX используют общепринятые структуру каталогов и имена основных файлов [13; 24]. Эта структура
используется в работе системы при ее инициализации и конфигурирова-
Рис. 10.5. Типовое дерево каталогов UNIX
95
нии, при работе почтовой системы и системы печати. Нарушение этой
структуры может привести к неработоспособности всей системы или
отдельных ее компонентов. Пример типового дерева каталогов UNIX
представлен на рис. 10.5.
Рассмотрим назначение основных каталогов файловой системы [16; 20].
Корневой каталог ‘‘/’’ является основой любой файловой системы
UNIX. Все остальные файлы и каталоги располагаются в рамках структуры, порожденной корневым каталогом, независимо от их физического
местонахождения.
В каталоге /bin находятся наиболее часто употребляемые команды и
утилиты системы, как правило, общего пользования.
Каталог /dev содержит специальные файлы устройств, являющиеся
интерфейсом доступа к периферийным устройствам. Каталог /dev может
содержать несколько подкаталогов, группирующих специальные файлы
устройств одного типа. Например, каталог /dev/dsk содержит специальные файлы устройств для доступа к гибким и жестким дискам системы.
В каталоге /etc находятся системные конфигурационные файлы и
многие утилиты администрирования. Среди наиболее важных файлов —
скрипты инициализации системы.
В каталоге /lib находятся библиотечные файлы языка С и других языков программирования. Стандартные названия библиотечных файлов
имеют вид libx.a (или libx.so), где х — это один или более символов, определяющих содержимое библиотеки. Например, стандартная библиотека
С называется libс.a, а библиотека системы X Window System имеет имя
libXll.a. Часть библиотечных файлов также находится в каталоге /usr/lib.
Каталог /lost+found обычно называют каталогом «потерянных» файлов. Ошибки целостности файловой системы, возникающие при неправильном останове UNIX или аппаратных сбоях, могут привести к
появлению так называемых «безымянных» файлов — структура и содержимое файла являются правильными, однако для него отсутствует
имя в каком-либо из каталогов. Программы проверки и восстановления
файловой системы помещают такие файлы в каталог под системными
числовыми именами.
Каталог /mnt является стандартным каталогом для временного связывания (монтирования) физических файловых систем к корневой для
получения единого дерева логической файловой системы. Обычно содержимое этого каталога пусто, поскольку при монтировании он перекрывается связанной файловой системой.
Каталог /home используется для размещения домашних каталогов
пользователей. Например, имя домашнего каталога пользователя andrei
будет называться /home/andrei.
В каталоге /usr находятся подкаталоги различных сервисных подсистем — системы печати, электронной почты (/usr/spool), исполняемые
файлы утилит UNIX (/usr/bin), дополнительные программы, используе96
мые на данном компьютере (/usr/local ), файлы заголовков (/usr/include),
электронные справочники (/usr/man) и т. д.
Каталог /var используется в некоторых версиях OC UNIX для хранения временных файлов сервисных подсистем вместо стандартного каталог /usr/spool.
Каталог /tmp служит для хранения временных файлов, необходимых
для работы различных подсистем UNIX. Обычно этот каталог открыт на
запись для всех пользователей системы.
10.2.2. Пользователи и группы
Для того, чтобы получить возможность работать в ОС UNIX, нужно
стать пользователем системы, то есть получить уникальное регистрационное имя и пароль для входа в систему.
С точки зрения системы, пользователь — это не обязательно физическое лицо. Под пользователем система понимает объект, который обладает определенными правами, может запускать на выполнение программы и владеть файлами.
Информация обо всех зарегистрированных в системе пользователях
и их атрибутах хранится в специальном системном файле /etc/passwd в
текстовом виде.
Каждому пользователю соответствует одна строка, хранящая атрибуты пользователя, которые разделяются двоеточиями:
регистрационное_имя:x:UID:GID:полное имя:домашний
каталог:стартовый shell
Пример файла /etc/passwd представлен на рис. 10.6.
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false
daemon:x:2:2:daemon:/sbin:/bin/false
adm:x:3:4:adm:/var/adm:/bin/false
Рис. 10.6. Пример фрагмента файла /etc/passwd
Как уже отмечалось выше, каждый пользователь имеет уникальное
регистрационное имя. Однако система различает пользователей по ассоциированному с именем идентификатору пользователя или UID (User
Identifier). Идентификаторы пользователя также должны быть уникальными. Пользователь является членом одной или нескольких групп
— списков пользователей, имеющих сходные задачи (например пользователей, работающих над одним проектом). Принадлежность к группе
определяет дополнительные права, которыми обладают все пользователи группы. Каждая группа имеет имя, уникальное среди имен групп
(имя группы и пользователя могут совпадать), но как и для пользователя, внутренним представлением группы является ее идентификатор
97
GID (Group Identifier). В конечном счете UID и GID определяют, какими правами обладает пользователь в системе.
После установки UNIX обычно в системе уже зарегистрировано несколько пользователей и групп, основные из которых перечислены в
[24] и представлены в табл. 10.1.
Таблица 10.1.
Предопределенные пользователи и группы
Имя
Пользователь или группа
Суперпользователь — администратор системы, UID=0. Пользователь с
этим именем имеет неограниченные полномочия в системе.
Следует отметить, что root — это только имя. На самом деле значение
Root имеет UID. Суперпользователь не подчиняется законам, которые
управляют правами доступа, и может по своему усмотрению эти права
изменять. Большинство настроек системы доступны для записи только
суперпользователю
Adm Псевдопользователь, владеющий файлами системы ведения журналов
Обычно это владелец всех исполняемых файлов, являющихся командами
Bin
UNIX
Псевдопользователь, владеющий соответствующими файлами,
Cron от имени которого выполняются процессы подсистемы запуска программ
по расписанию
Псевдопользователь, от имени которого выполняются процессы системы
Lp
печати
Псевдопользователь, используемый в работе NFS — стандартной сетевой
Nobody
файловой системы для UNIX
Wheel Административная группа, GID=0
Группа, в которую по умолчанию включаются все обычные пользователи
Users
UNIX
Пароли на вход в систему пользователей в UNIX не хранятся в открытом виде, хранятся только их хэши (набор байт, получаемый из пароля с помощью односторонней функции). Даже если злоумышленник
получит значение этого хэша, ему придется подбирать пароль, применяя
данную одностороннюю функцию к различным словам и сравнивая со
значением хэша. Часто хэши хранятся в специальном файле (например,
/etc/shadow), доступ к которому разрешен только системе, так что перебор вообще не возможен.
При входе в систему пользователь оказывается в каталоге, который
является его домашним каталогом. Как правило, имея ограниченные
права в других частях файловой системы, пользователь является полноправным хозяином домашнего каталога и его подкаталогов.
Стартовый shell — это имя программы, которую UNIX использует в
качестве командного интерпретатора. При входе пользователя в систему
UNIX автоматически запустит указанную программу. Обычно это один
из стандартных командных интерпретаторов (Bourne shell), (C shell) или
shell), позволяющих пользователю вводить команды и запускать задачи.
98
Завершив выполнение этой программы, пользователь автоматически
выйдет из системы. Некоторые системы имеют файл /etc/shells, содержащий список программ, которые могут быть использованы в качестве
командного интерпретатора.
Из приведенного выше примера видно, что некоторые пользователи имеют «неправильные» командные оболочки, работа в которых невозможна. Это сделано специально для того, чтобы исключить возможность входа таких пользователей в систему.
Изменение информации о пользователях, как и добавление новых
пользователей, может производиться простым редактированием файла
/etc/passwd, однако более корректным способом является использование
специальных утилит.
Аутентификация пользователей
В UNIX сеанс работы пользователя начинается с его аутентификации
и заканчивается его выходом из системы. При входе в систему (рис. 10.7)
Рис. 10.7. Процесс входа в систему
выполняются действия в приведенной ниже последовательности:
– процесс getty ожидает реакции пользователя на одной из терминальных линий, в случае активности пользователя выводит приглашение;
– после ввода имени пользователя запускается программа login, которая проверяет подлинность пользователя. Стандартным механизмом
является проверка пароля, заданного для данного пользователя;
– убедившись, что пароль введен правильно, login запускает командный интерпретатор с установленными UID и GID данного пользователя. Таким образом, права доступа любой программы (действительного
субъекта), запущенной пользователем в этом сеансе работы, будут определяться правами номинального субъекта UID+GID.
99
Изменение базы данных пользователей
Для добавления и удаления пользователей и групп существует набор команд: useradd, userdel, groupadd, groupdel. Эти команды доступны
только суперпользователю и имеют единственный обязательный параметр: имя пользователя или группы.
С помощью команд usermod и groupmod можно изменять информацию в базах данных пользователей и групп. Эти команды также может
выполнять только администратор системы.
Команда passwd позволяет простым пользователям изменять свой
системный пароль, а суперпользователю — изменять пароль любого из
пользователей системы.
10.2.3. Владельцы файлов и управление правами доступа
Категории владельцев файлов в UNIX
Файлы в UNIX имеют двух владельцев: пользователя (user owner) и
группу(group owner). Важной особенностью является то, что владелецпользователь может не являться членом группы, владеющей файлом.
Совместное пользование файлами можно организовать практически
для любого состава пользователей, создав соответствующую группу
и установив для нее права на требуемые файлы. При этом для того,
чтобы некий пользователь получил доступ к этим файлам, достаточно
включить его в группу, владеющую файлом, и наоборот — исключение
из группы автоматически изменяет для пользователя права доступа к
файлам.
Определить владельцев файла можно из подробного листинга команды ls –l, третья и четвертая колонки которого содержат имена владельцапользователя и владельца-группы, соответственно.
Владельцем-пользователем вновь созданного файла является пользователь, создавший файл. Порядок назначения владельца-группы зависит от конкретной версии UNIX.
Для изменения владельца файла используется команда chown.
Параметрами команды выступают имя владельца-пользователя и
список файлов, для которых требуется изменить данный атрибут.
Изменение владельца-группы выполняется командой chgrp. В качестве
параметров команды указываются имя владельца-группы и список
файлов, для которых требуется изменить данный атрибут.
Индексные дескрипторы
Индексный дескриптор (или inode), содержит информацию о файле,
необходимую для обработки данных, то есть метаданные файла. Каждый
файл ассоциирован с одним индексным дескриптором, хотя может
иметь несколько имен (жестких связей) в файловой системе, каждое из
которых указывает на один и тот же индексный дескриптор.
100
Индексный дескриптор не содержит имени файла, которое содержится в блоках хранения данных каталога, и содержимого файла, которое размещено в блоках хранения данных.
Индексный дескриптор содержит:
— номер;
— тип файла;
— права доступа к файлу;
— количество связей (ссылок на файл в каталогах) файла;
— идентификатор пользователя и группы-владельца;
— размер файла в байтах;
— время последнего доступа к файлу;
— время последнего изменения файла;
— время последнего изменения индексного дескриптора файла;
— указатели на блоки данных файла (обычно 10);
— указатели на косвенные блоки (обычно 3).
Размер индексного дескриптора обычно составляет 128 байтов.
Рассмотрим более подробно организацию хранения информации
о расположении данных файла. Поскольку дисковые блоки хранения
данных в общем случае располагаются непоследовательно, индексный
дескриптор должен хранить физические адреса всех блоков, принадлежащих данному файлу.
Каждый дескриптор содержит 13 указателей. Первые 10 указателей
непосредственно ссылаются на блоки данных файла. Если файл большего размера — 11-й указатель ссылается на первый косвенный блок
(indirection block) из 128 (256) ссылок на блоки данных. Если и этого недостаточно, 12-й указатель ссылается на дважды косвенный блок, содержащий 128 (256) ссылок на косвенные блоки. Наконец последний, 13-й
указатель ссылается на трижды косвенный блок из 128 (256) ссылок на
дважды косвенные блоки. Количество элементов в косвенном блоке зависит от его размера.
Поддерживая множественные уровни косвенности, индексные дескрипторы позволяют отслеживать огромные файлы, не растрачивая
дисковое пространство для небольших файлов.
Права доступа
На уровне файловой системы в UNIX определяются три вида доступа:
чтение (read, r), запись (write, w) и использование (execution, x). Право на
чтение из файла дает доступ к содержащейся в нем информации, а право
записи — возможность ее изменять. Право использования трактуется поразному в зависимости от типа файла. В случае обычного файла оно означает возможность исполнения файла, то есть запуска программы или
командного сценария, содержащихся в этом файле. Для каталога использование — это возможность доступа к файлам этого каталога (точнее говоря, к атрибутам этих файлов — имени, правам доступа и т. п.).
101
Рис. 10.8. Базовые права доступа в UNIX
Рис. 10.9. Последовательность проверки прав доступа в UNIX
Информация о правах доступа к файлу хранится в индексном дескрипторе (inode), соответствующем файлу. Права доступа включают
список из девяти пунктов (три тройки): по три вида доступа для трех
групп — пользователя-владельца, группы-владельца и всех остальных
(рис. 10.8). Каждый пункт в этом списке может быть либо разрешен,
либо запрещен (равен 0 либо 1). Таким образом, для хранения этой информации о правах доступа достаточно 9 бит.
При обращении процесса к файлу (с запросом доступа определенного вида, то есть на чтение, запись или исполнение) система проверяет
совпадение идентификаторов владельцев процесса и владельцев файла в
определенном порядке и в зависимости от результата применяет ту или
иную группу прав.
Права доступа к объекту проверяются по схеме, представленной
на рис. 10.9.
Право на запись для каталога трактуется как возможность создания и
удаления файлов в нем, а также возможность изменения атрибутов фай102
Рис. 10.10. Формат команды chmod
лов (например, переименование или удаление). При этом субъекту не
обязательно иметь права на запись для этих файлов, поскольку и переименование, и удаление файла затрагивают только сам каталог.
Таким образом, из своего каталога пользователь может удалить любой
файл. Часто возникает ситуация, когда каталог нужно использовать совместно — в этом случае необходимо разрешить запись в него либо группе пользователей, либо всем пользователям (например, общесистемный
каталог для временных файлов). А если запись в каталог разрешена всем,
то любой пользователь сможет удалить в нем любой файл. Для разрешения этой проблемы был добавлен специальный атрибут — sticky bit.
При установке этого атрибута пользователь, имеющий доступ на запись
в этот каталог, может изменять только принадлежащие ему файлы.
Права доступа могут быть изменены только владельцем файла или
суперпользователем. Для этого используется команда chmod, общий
формат которой представлен на рис. 10.10.
10.2.4. Процессы в UNIX
Немного об архитектуре процессов
Ядро представляет собой некую программу, которая является резидентом и обслуживает все таблицы, используемые для управления ресурсами и процессами компьютера.
На самом деле операционная система только управляет образом
процесса или сегментами кода и данных, определяющих среду выполнения, а не самим процессом. Сегмент кода содержит реальные
инструкции центральному процессору, в которые входят как строки,
написанные и скомпилированные пользователем, так и код, сгенерированный системой, который обеспечивает взаимодействие между
программой и операционной системой. Данные связанные с процессом, тоже являются частью образа процесса, некоторые из них хранятся в регистрах (регистры это области памяти, к которым центральный
процессор может оперативно получать доступ). Для ускорения доступа
регистры хранятся внутри центрального процессора.
Для оперативного хранения рабочих данных в адресном пространстве приложения существует динамическая область памяти, располо103
женная после последнего байта данных, размещенного компилятором.
Эту область памяти принято называть «куча».
Эта память выделяется динамически и использование ее от процесса
к процессу меняется. С помощью кучи программист, используя API подсистемы malloc, может предоставить процессу дополнительную память.
Автоматически при запуске программы переменные размещаются в стeке (стек служит хранилищем для временного хранения переменных и адресов возврата из процедур). Обычно при выполнении
или в режиме ожидания выполнения процессы находятся в оперативной памяти компьютера. Довольно большая ее часть резервируется
ядром операционной системы и только к оставшейся ее части могут
получить доступ пользователи. Одновременно в оперативной памяти
может находиться несколько процессов. Память, используемая процессором, разбивается на сегменты, называемые страницами (page).
Каждая страница имеет определенный размер, который фиксирует
операционная система в зависимости от типа вашего компьютера.
Если все страницы используются и возникает потребность в новой
странице, то та страница, которая используется меньше остальных,
помещается в область подкачки (swap area), а на ее месте создается
новая. Но если область подкачки не определена, то с помощью специальных команд можно разместить ее в файле. Но есть такие страницы, которые всегда должны находится в оперативной памяти, они
называются невытесняемыми (nonpreemptable pages). Обычно такие
страницы используются ядром или программами подкачки. Главная
особенность в постраничном использовании памяти заключается в
том, что процесс может использовать больше памяти, чем есть на самом деле.
Типы процессов
В UNIX различают три типа процессов: системные процессы, демоны, прикладные процессы.
Системные процессы являются частью ядра и всегда расположены в
оперативной памяти. Системные процессы не имеют соответствующих
им программ в виде исполняемых файлов и запускаются особым образом при
инициализации ядра системы. Выполняемые инструкции и данные этих
процессов находятся в ядре системы, поэтому они могут вызывать функции и обращаться к данным, недоступным для остальных процессов.
К системным процессам следует отнести процесс init, являющийся прародителем всех остальных процессов в UNIX. Хотя init не является частью ядра и его запуск происходит из исполняемого файла (/etc/init), его
работа жизненно важна для функционирования всей системы в целом.
Демоны — это неинтерактивные процессы, которые запускаются
обычным образом — путем загрузки в память соответствующих им программ (исполняемых файлов) и выполняются в фоновом режиме. Обычно
демоны запускаются при инициализации системы и обеспечивают ра104
боту различных подсистем UNIX: системы терминального доступа, системы печати, системы сетевого доступа и сетевых услуг и т. п. Демоны
не связаны ни с одним пользовательским сеансом работы и не могут непосредственно управляться пользователем. Большую часть времени демоны
ожидают, пока тот или иной процесс запросит определенную услугу, например, доступ к файловому архиву или печать документа.
К прикладным процессам относятся все остальные процессы, выполняющиеся в системе. Как правило, это процессы, порожденные в рамках
пользовательского сеанса работы. Важнейшим пользовательским процессом является основной командный интерпретатор (login shell), который обеспечивает вашу работу в UNIX. Он запускается сразу же после
вашей регистрации в системе, а завершение работы login shell приводит к
отключению от системы. Пользовательские процессы могут выполняться как в интерактивном, так и в фоновом режиме, но в любом случае время их жизни (и выполнения) ограничено сеансом работы пользователя. При
выходе из системы все пользовательские процессы будут уничтожены.
Интерактивные процессы монопольно владеют терминалом. Пока
такой процесс не завершит свое выполнение, пользователь не сможет
работать с другими приложениями.
Управление процессами
В операционной системе UNIX традиционно поддерживается классическая схема мультипрограммирования. Система предоставляет возможность параллельного или псевдопараллельного (в случае наличия
только одного аппаратного процессора) выполнения нескольких пользовательских программ. Каждому такому выполнению соответствует
процесс операционной системы.
Для каждого процесса создается свой блок управления, который помещается в системную таблицу процессов, находящихся в ядре. Эта таблица представляет собой массив структур блоков управления процессами. В каждом блоке содержатся данные, описывающие процесс:
– слово состояния процесса;
– приоритет;
– величина кванта времени, выделенного системным планировщиком;
– степень использования системным процессором;
– признак диспетчеризации;
– идентификатор пользователя, которому принадлежит процесс;
– эффективный идентификатор пользователя;
– реальный и эффективный идентификаторы группы;
– группа процесса;
– идентификатор процесса и идентификатор родительского процесса;
– размер образа, размещаемого в области подкачки;
– размер сегментов кода и данных;
– массив сигналов, ожидающих обработки.
105
Чтобы система функционировала должным образом, ядру необходимо отслеживать все эти данные.
Каждому процессу соответствует контекст, в котором он выполняется. Этот контекст включает:
– пользовательский контекст (т. е. содержимое виртуального адресного пространства, сегментов программного кода, данных, стека, разделяемых сегментов и сегментов файлов, отображаемых в виртуальную
память);
– содержимое аппаратных регистров — регистровый контекст (регистр счетчика команд, регистр состояния процессора, регистр указателя стека и регистры общего назначения),
– структуры данных ядра (контекст системного уровня), связанные
с этим процессом.
Контекст процесса в ОС UNIX состоит из «статической» и «динамических» частей. Для каждого процесса имеется одна статическая часть
контекста системного уровня и переменное число динамических частей.
Статическая часть контекста процесса системного уровня включает
следующее.
Идентификатор процесса (PID). Уникальный номер, идентифицирующий процесс. По сути, это номер строки в таблице.
В любой момент времени ни у каких двух процессов номера не могут
совпадать, однако после завершения процесса его номер освобождается и может быть в дальнейшем использован для идентификации любого
вновь запущенного процесса.
Идентификатор родительского процесса (PPID). В операционной
системе UNIX процессы выстраиваются в иерархию — новый процесс
может быть создан только одним из уже существующих процессов, который считается для него родительским.
Очевидно, что в такой схеме должен присутствовать один процесс с
особым статусом: он должен быть порожден ядром операционной системы и являться родительским для всех остальных процессов в системе.
Как отмечалось ранее, в UNIX такой процесс имеет собственное имя
— init.
Идентификаторы пользователя. Идентификатор пользователя и
группы, от имени которых исполняется процесс, используются операционной системой для определения границ доступа для процесса.
Приоритет процесса. Число, используемое при планировании исполнения процесса в операционной системе. Традиционное решение
операционной системы UNIX состоит в использовании динамически
изменяющихся приоритетов. При образовании каждого процесса ему
приписывается некоторый устанавливаемый системой статический
приоритет, который в дальнейшем может быть изменен с помощью системного вызова nice. Реальным критерием планирования выступает
динамический приоритет, статический приоритет составляет основу на106
чального значения динамического приоритета процесса. Все процессы с
динамическим приоритетом не ниже порогового участвуют в конкуренции за процессор.
Таблица дескрипторов открытых файлов. Список структур ядра, описывающий все файлы, открытые этим процессом для ввода/вывода.
Другая информация, связанная с процессом. Динамическая часть контекста процесса — это один или несколько стеков, которые используются процессом при выполнении в режиме пользователя и в режиме ядра
(в процессе прерываний и системных вызовов).
Состояние процесса. Каждый процесс в любой момент времени находится в одном из нескольких определенных состояний: инициализация, исполнение, приостановка, ожидание ввода/вывода, завершение
(рис. 10.11).
Большинство этих состояний совпадает с классическим набором состояний процессов в многозадачных операционных системах. Для операционной системы UNIX характерно особое состояние процесса —
зомби. Процесс получает это состояние, если он завершился раньше, чем
этого ожидал его родительский процесс. В UNIX перевод процессов в
состояние зомби служит для корректного завершения группы процессов, освобождения ресурсов.
Создание и завершение процесса
Процесс порождается с помощью системного вызова fork(). При этом
вызове происходит проверка на наличие свободной памяти, доступной
для размещения нового процесса. Если требуемая память доступна, то
создается процесс-потомок текущего процесса, представляющий собой
Рис. 10.11. Состояния жизненного цикла процесса в UNIX
107
точную копию вызывающего процесса. При этом в таблице процессов
для нового процесса строится соответствующая структура. Новая структура создается также в таблице пользователя. При этом все ее переменные инициализируется нулями. Этому процессу присваивается новый
уникальный идентификатор, а идентификатор родительского процесса
запоминается в блоке управления процессом.
Для завершения процесса используется системный вызов exit(), при
котором освобождаются все используемые ресурсы, такие как память и
структуры таблиц ядра. Кроме того, завершаются и процессы-потомки,
порожденные данным процессом. Затем из памяти удаляются сегменты
кода и данных, а сам процесс переходит в состояние зомби (для таких
процессов в таблицах ядра сохраняются некоторые записи, но в конечном счете его судьбу решает его родительский процесс). И, наконец, родительский процесс должен очистить все ресурсы, занимаемые дочерними процессами.
Рассмотрим пример создания нового процесса.
Когда возникает необходимость создания нового процесса (C), текущий процесс (P) выполняет системный вызов fork (рис. 10.12). При
этом создается новый процесс, представляющий собой копию исходного процесса и его контекста. Новый процесс отличается тем, что у него
другой PID, а родителем для него является запустивший процесс (P).
Далее дочерний процесс (C) с помощью системного вызова exec() запускает вместо себя другую программу, заново проинициализировав свои
код и данные.
Взаимодействие процессов
Ранее был рассмотрен механизм создания дочернего процесса.
Существует также и обратная связь между дочерним процессом и родительским. Родительский процесс (P) может синхронизовать свое испол-
Рис. 10.12. Создание нового процесса
108
нение с завершением процесса (C) (ожидать завершения дочернего процесса) с помощью специального системного вызова wait (см. рис. 10.12).
Рассмотрим доступные в ОС UNIX средства взаимодействия
процессов.
Самым распространенным средством взаимодействия процессов являются сокеты (sockets). Программы подключаются к сокету и выдают
запрос на привязку к нужному адресу. Затем данные передаются от одного сокета к другому в соответствии с указанным адресом.
Сигналы позволяют одному процессу информировать другой о возникновении определенных условий внутри текущего процесса, требующих реакции другого процесса. Многие программы обработки сигналов
для анализа возникшей проблемы выводят дамп памяти.
Еще одним распространенным способом взаимодействия служат каналы, реализованные в двух вариантах. Первый из них создается с помощью системного вызова pipe(). При этом для обмена информацией
между процессами инициализируется специальная структура в ядре.
Вызывающему процессу приписываются два дескриптора файла: один
— для чтения, другой — для записи информации. Затем, когда процесс
порождает новый процесс, между двумя процессами открывается коммуникационный канал. Другим типом каналов являются именованные каналы. При их использовании с управляющей структурой в ядре связывается специальный каталог, через который два автономных процесса могут
обмениваться данными. При этом каждый процесс должен открыть канал
в виде обычных файлов (один — для чтения, другой — для записи). Затем
операции ввода-ввывода выполняются обычным образом.
Очередь сообщений представляет собой механизм, когда один процесс предоставляет блок данных с установленными флагами, а другой
разыскивает блок данных, флаги которого установлены в требуемых
значениях.
Семафоры — это средство передачи флагов от одного процесса к другому. «Подняв» семафор, процесс может сообщить, что он находится в
определенном состоянии. Любой другой процесс в системе может отыскать этот флаг и выполнить необходимые действия.
Совместно используемая память позволяет процессам получить доступ к одной и той же области физической памяти.
Процессы и потоки в UNIX
В современных версиях операционной системы UNIX, помимо процессов, существует понятие потока (или нити) исполнения. В рамках
процесса может существовать несколько потоков, каждый из которых
исполняется независимо, но все они объединены общим виртуальным
адресным пространством. Можно сказать, что все процессы исполняются с единственным потоком по умолчанию, но при необходимости могут
быть созданы новые потоки.
109
Потоки отсутствовали в оригинальной архитектуре UNIX и были добавлены под влиянием современных архитектур персональных компьютеров, в которых переключение контекста исполнения между процессами занимает значительно большее время, чем переключение контекста
исполнения между потоками. Однако ценой эффективного переключения между потоками является сильное влияние потоков в рамках одного
процесса друг на друга (критическая ошибка в одном потоке приводит к
завершению всего процесса), поэтому в UNIX-системах потоки традиционно используются редко.
10.2.5. Сигналы в UNIX
Сигналы — одно из традиционных средств межпроцессного взаимодействия в UNIX (табл. 10.2). Сигнал может быть отправлен процессу
операционной системой или другим процессом. Операционная система
использует сигналы для доставки процессу уведомлений об ошибках и
неправильном поведении.
При получении сигнала исполнение процесса приостанавливается и запускается специальная подпрограмма — обработчик сигнала.
Обработчики сигналов могут быть явно определены в исходном тексте
исполняемой программы если же они отсутствуют (а также в некоторых
специальных случаях), используется стандартный обработчик, определенный операционной системой.
У сигнала есть только одна характеристика, несущая информацию
— его номер (целое число). Иначе говоря, сигналы — это заранее определенный и пронумерованный список сообщений. Для удобства использования каждый сигнал имеет сокращенное буквенное имя. Список
сигналов и их имен стандартизован и практически не отличается в различных версиях UNIX. Для отправки сигналов процессам используется
специальный системный вызов kill и одноименная ему пользовательская
утилита.
Таблица 10.2.
Основные сигналы ОС UNIX
Сигнал
Описание
Процесс может с помощью специального системного вызова
abort задать время, через которое ему необходимо отправить
сигнал. Через указанный промежуток времени операционная
SIGALАRM(14) система доставит процессу сигнал SIGALARM. Обычно этот
прием применяется для задания тайм-аутов. Если процесс не
зарегистрировал обработчик этого сигнала, то обработчик по
умолчанию завершает процесс
Сигнал отправляется родительскому процессу в случае
SIGCHLD
завершения его дочернего процесса. По умолчанию сигнал
игнорируется
Сигнал продолжения исполнения программы после остановки.
SIGCONT
Обработчика по умолчанию нет
110
Окончание табл. 10.2.
Сигнал
Описание
Сигнал ошибки в вычислениях с плавающей точкой.
Отправляется операционной системой при некорректном
SIGFPE (8)
исполнении программы. Обработчик по умолчанию завершает
процесс
Сигнал закрытия терминала, к которому привязан данный
процесс. Обычно отправляется операционной системой всем
SIGHUP (1)
процессам, запущенным из командной строки при завершении
сеанса пользователя. Обработчик по умолчанию завершает
процесс
Сигнал некорректной инструкции. Отправляется операционной
системой процессу в случае, если в исполнении программы
SIGILL (4)
встретилась некорректная инструкция процессора. Обработчик
по умолчанию завершает процесс
Сигнал аварийного завершения. По этому сигналу процесс
завершается немедленно — без освобождения ресурсов.
Этот сигнал не может быть перехвачен, заблокирован или
SIGKILL (9)
переопределен самим процессом, всегда используется
стандартный обработчик операционной системы. Сигнал
используется для гарантированного завершения процесса
Сигнал отправляется процессу, который пытается отправить
данные в канал, закрытый с противоположной стороны.
SIGPIPE (13) Такая ситуация может возникнуть в случае, если один из
взаимодействующих процессов был аварийно завершен.
Обработчик по умолчанию завершает процесс
Сигнал отправляется процессу операционной системой, если
была произведена неверная операция с памятью (обращение по
SIGSEGV (11)
несуществующему или защищенному адресу). Обработчик по
умолчанию завершает процесс
Сигнал приостановки работы процесса. Этот сигнал не может
быть перехвачен, заблокирован или переопределен. Используется
SIGSTOP
для гарантированной приостановки работы процесса с полным
сохранением его состояния и возможностью возобновления
Сигнал завершения процесса, как правило, используется для
SIGTERM (15) корректного завершения его работы. Пример использования
сигнала показан на рис. 10.13
«Пользовательские» сигналы — могут использоваться
SIGUSR1,
процессами для всевозможных уведомлений. Обработчик по
SIGUSR2
умолчанию завершает процесс
Сигналы являются ограниченным средством межпроцесснного обмена. Они прекрасно подходят для уведомлений, но не могут использоваться для передачи информации между процессами. Сигналы передаются без каких-либо сопутствующих данных, поэтому они обычно
комбинируются с другими способами обмена (например, как показано
на рис. 10.14 — здесь сообщения между процессами сохраняются в общем
файле, а сигнал служит для уведомления о приходе нового сообщения).
111
Рисунок 10.13. Пример использования сигнала SIGTERM
Рис. 10.14. Использование сигналов при межпроцессном обмене
Еще одна интересная особенность сигналов — в случае поступления нескольких сигналов одного вида в течение короткого интервала
времени, принимающий процесс рассматривает их как один поступивший сигнал, и вызывает обработчик только один раз, то есть сигналы не
накапливаются.
11. Архивация файлов
11.1. Основные понятия архивации
Утилиты, сжимающие один или несколько файлов в один меньший,
входили в состав системного программного обеспечения персональных
компьютеров с самого начала их возникновения. Малый объем носителей информации и невысокая скорость передачи информации в сетях
этому очень способствовали.
Несмотря на то, что со времени возникновения первых архиваторов
места на дисках стало значительно больше, а скорости в Интернете возросли в тысячи раз, архиваторы не исчезли, а по-прежнему остаются одними из самых используемых программ в арсенале любого пользователя
компьютера и системного администратора, в частности.
Архиватор. Так называется компьютерная программа, осуществляющая сжатие данных в один файл архива для более легкой передачи или
компактного их хранения. В качестве данных обычно выступают файлы
и папки. Процесс создания архива называется архивацией или упаковкой
(сжатием, компрессией), а обратный процесс — распаковкой.
Термин «архивация» не совсем точен. Главное назначение программархиваторов — сжатие файлов в целях экономии памяти. Поскольку со
сжатыми файлами часто невозможно работать по их прямому назначению, их используют для хранения копий файлов, то есть для их архивации. Сжатию (уплотнению) могут быть подвергнуты: файлы, папки,
диски. Сжатие файлов и папок необходимо либо для их транспортировки, либо для резервного копирования, либо для обмена информацией по
сети Интернет. Уплотнение дисков применяют для повышения эффективности использования их рабочего пространства (обычно для дисков
недостаточной емкости).
Существует много программ-архиваторов, имеющих различные показатели по степени и времени сжатия. Эти показатели могут быть разными для различных файлов (текстовых, графических, исполняемых и
т.д.), то есть один архиватор хорошо сжимает текстовый файл, а другой
— исполняемый.
Архиватором (упаковщиком) называется программа, позволяющая
за счет применения специальных методов сжатия информации создавать
копии файлов меньшего размера, а также объединять копии нескольких
файлов в один архивный файл, из которого можно при необходимости
извлечь файлы в их первоначальном виде.
Весь спектр существующих сегодня архиваторов можно разделить
на три группы, которые условно назовем файловыми, программными и
дисковыми.
Файловые архиваторы позволяют упаковывать один или несколько файлов (например, все содержимое данного подкаталога вместе с
113
вложенными в него подкаталогами) в единый архивный файл. Размер
последнего, как правило, меньше, чем суммарный размер исходных
файлов, но воспользоваться запакованными программами или данными, находящимися в архиве, нельзя, пока они не будут распакованы.
Для распаковки архивного файла обычно используется тот же самый
архиватор.
Программные архиваторы действуют иначе. Они позволяют упаковать за один прием один единственный файл — исполняемую программу ЕХЕ-типа, но зато так, что заархивированная программа будет сразу
после ее запуска на исполнение самораспаковываться в оперативной памяти и тут же начинать работу.
Дисковые архиваторы позволяют программным способом увеличить
доступное пространство на жестком диске. Типичный дисковый архиватор представляет собой резидентный драйвер, который незаметно для
пользователя архивирует любую записываемую на диск информацию и
распаковывает ее обратно при чтении. Однако операции чтения/записи
файлов несколько замедляются, так как процессору требуется время для
упаковки и распаковки.
Для архивирования используются специальные программы — архиваторы или диспетчеры архивов. Наиболее известные архиваторы:
WinZip; WinRar; 7Zip, PowerZip. Эти программы обеспечивают возможность использования и других архиваторов, поэтому, если на компьютере, куда перенесены сжатые в них файлы, отсутствуют указанные программы, архивы можно распаковать с помощью другого архиватора.
Почти все архиваторы позволяют создавать удобные самораспаковывающиеся архивы (SFX — Self-extracting-архивы) — файлы с расширением .ехе. Для распаковки такого архива не требуется программыархиватора, достаточно запустить архив *.ехе как программу. Многие
архиваторы позволяют создавать многотомные (распределенные) архивы, которые могут размещаться на нескольких экземплярах носителя
(дискетах, CD-дисках).
Основные характеристики программ-архиваторов:
– скорость работы;
– степень сжатия — отношение размера исходного файла к размеру
упакованного файла;
– сервис (набор функций архиватора).
Основные функции архиваторов:
– создание архивных файлов из отдельных (или всех) файлов текущего каталога и его подкаталогов, загружая в один архив до 32 000 файлов;
– добавление файлов в архив;
– извлечение и удаление файлов из архива;
– просмотр содержимого архива;
– просмотр содержимого архивированных файлов и поиск строк в
архивированных файлах;
114
– ввод в архив комментариев к файлам;
– создание многотомных архивов;
– создание самораспаковывающихся архивов как в одном томе, так и
в виде нескольких томов;
– обеспечение защиты информации в архиве и доступ к файлам, помещенным в архив;
– защита каждого из помещенных в архив файлов циклическим
кодом;
– тестирование архива, проверка сохранности в нем информации;
– восстановление файлов (частично или полностью) из поврежденных архивов;
– поддержка типов архивов, созданных другими архиваторами.
11.2. Для чего архивация нужна сейчас?
Как отмечалось выше, архивация — это процесс перекодирования,
способствующий сжатию файлов, то есть с помощью архивации можно
уменьшить размер файлов (в основном текстовых) в несколько раз.
На заре компьютерной эры, когда емкость внешних носителей была
небольшой, а сами устройства долговременного хранения информации
были дорогими, борьба шла за каждый килобайт дискового или ленточного пространства.
Сейчас есть флешки, внешние жесткие диски и другие носители,
объем которых позволяет не экономить десятки и сотни килобайтов при
хранении данных. К тому же при архивировании фото- или видео-файлов их размер практически не изменяется.
Так зачем же архивация нужна именно СЕЙЧАС?
В наше время ей придумали новое применение, а именно — использовать для передачи файлов в интернете.
Известно, что папки в интернете передавать нельзя. А чем архив отличается от папки? Тем, что папка — это папка, а архив — это файл, а
значит с помощью архива можно передавать группу файлов.
Если вам приходилось посылать электронное письмо, то вы должны
знать, что к нему можно прикреплять файлы (например, текстовый документ или картинку); тем самым, когда ваш адресат получит письмо, он
так же сможет скачать прикрепленный файл.
Все бы хорошо, но если этих файлов много! Есть два варианта:
1. Прикреплять их по одному. Но это не очень удобно, как для отправителя, так и для получателя, которому тоже придется сохранять все
файлы по отдельности.
2. Заархивировать все файлы и прикрепить архив к письму. Этот вариант намного удобнее и проще.
Именно поэтому очень часто файлы из Интернета скачиваются в
виде архивов.
115
11.3. Типы архивов и алгоритмы сжатия
Для сжатия используются различные алгоритмы, которые можно разделить на обратимые (сжатие без потерь) и методы сжатия с частичной
потерей информации. Последние более эффективны, но применяются
для тех файлов, у которых частичная потеря информации не приводит к
значительному снижению потребительских свойств.
Характерные форматы сжатия без потери информации:
.tif, .pcx и другие — для графических файлов;
.avi — для видеоклипов;
.zip, .arj, .rar, .lzh, .cab и другие — для любых типов файлов.
Характерными форматами сжатия с потерей информации являются:
.jpg — для графических данных;
.mpg — для видеоданных;
.mp3 — для звуковых данных.
Основные алгоритмы сжатия
Алгоритмы сжатия без потерь
Алгоритм RLE
Алгоритм RLE (Run-Length Encoding — Групповое кодирование ) —
один из самых старых и самых простых алгоритмов архивации. Он использует принцип выявления повторяющихся последовательностей.
При сжатии записывается последовательность из двух повторяющихся
величин: повторяемого значения и количества его повторений.
Пример:
исходная последовательность: 3, 3, 12, 12, 12, 0, 0, 0, 0.
сжатая информация: 3, 2, 12, 3, 0, 4.
коэффициент сжатия: 6/9•100% = 67%.
Одна из реализаций алгоритма такова: ищут наименее часто встречающийся байт, называют его префиксом и делают замены цепочек одинаковых символов на тройки — «префикс, счетчик, значение». Если же
этот байт встречается в исходном файле один или два раза подряд, то его
заменяют на пару «префикс, 1» или «префикс, 2». Остается одна неиспользованная пара «префикс, 0», которую можно использовать как признак конца упакованных данных.
Несмотря на то, что кодер RLE, как правило, дает очень незначительное сжатие, он может работать очень быстро. А скорость работы
декодера RLE вообще близка к скорости простого копирования блока информации. К положительным сторонам алгоритма, можно отнести то, что он не требует дополнительной памяти при работе и быстро
выполняется. Алгоритм применяется в форматах РСХ, TIFF, ВМР.
Интересная особенность группового кодирования в PCX заключается
в том, что степень архивации для некоторых изображений может быть
существенно повышена лишь за счет изменения порядка цветов в палитре изображения.
116
Алгоритмы семейства LZ
Алгоритм LZ лежит в основе таких известных программ-архиваторов,
как PKZIP, LHA, ARJ, Stacker, Dblspace и многих других. Своим появлением он обязан двум исследователям из Израиля: Якобу Зиву и Абрахаму
Лемпелу (Jacob Ziv & Abraham Lempel). В 1977 году они опубликовали
работу, появление которой ознаменовало начало новой эры в технологии сжатия информации. Практически все современные компьютерные
программы-архиваторы используют ту или иную модификацию алгоритма LZ. Одной из причин широкого распространения алгоритма LZ
стала его исключительная простота.
Для того, чтобы понять основную идею алгоритма, рассмотрим первое четверостишье бессмертного «Евгения Онегина»:
«Мой дядя, самых честных правил,
Когда не в шутку занемог,
Он уважать себя заставил
И лучше выдумать не мог.
Его пример... »
Обратите внимание на то, что Пушкин избегает повторения подстроки «Мой дядя». Сначала вместо нее используется местоимение «он», затем — «его». При этом информативность всего сообщения нисколько не
снижается, а его объем уменьшается. Очевидно, что нет смысла полностью повторять однажды сказанную в разговоре фразу несколько раз. То
же самое относится и к компьютерной информации.
Основная идея алгоритма LZ состоит в том, что второе и последующие
вхождения некоторой строки символов в сообщение заменяются ссылкой на
ее первое появление в сообщении.
Визуальную демонстрацию работы алгоритма LZ можно посмотреть
на сайте кафедры компьютерных технологий Санкт-Петербургского государственного университета информационных технологий, механики
и оптики по адресу:
http://rain.ifmo.ru/cat/view.php/vis/data-compression/lz-2000
Алгоритм KWE (Keyword Encoding) предполагает использование
словаря, в котором каждому слову соответствует двухбайтовый код.
Эффективность сжатия увеличивается с ростом объема кодируемого
текста.
Алгоритм Хаффмана
Метод сжатия информации на основе двоичных кодирующих деревьев был предложен Д. А. Хаффманом в 1952 году задолго до появления
современного цифрового компьютера. При высокой эффективности,
указанный метод и его многочисленные адаптивные версии лежат в основе многих методов, используемых в алгоритмах кодирования.
Идея алгоритма: зная вероятность вхождения символов в сообщение, можно описать процедуру построения кодов переменной длинны,
состоящих из целого количества битов. Символам с большей вероятно117
стью присваиваются более короткие коды. Коды Хаффмана имеют уникальный префикс, что позволяет однозначно их декодировать, несмотря
на их переменную длину. Динамический алгоритм Хаффмана на входе
получает таблицу частот встречаемости символов в сообщении. Далее на
основании этой таблицы строится дерево кодирования Хаффмана.
Описание алгоритма
1. Символы входного алфавита образуют список свободных узлов.
Каждый лист имеет вес, который может быть равен либо вероятности,
либо количеству вхождений символа в ожидаемое сообщение.
2. Выбираются два свободных узла дерева с наименьшими весами.
3. Создается родитель с весом, равным их суммарному весу.
4. Родитель добавляется в список свободных узлов, а оба его потомка
удаляются из этого списка.
5. Одной дуге, выходящей из родителя, ставится в соответствие бит 1,
другой — бит 0.
6. Далее пункты повторяются, начиная со второго, до тех пор, пока в
списке свободных узлов не останется только один свободный узел. Он и
будет считаться корнем дерева.
Рассмотрим пример работы алгоритма Хаффмана.
Допустим, что у нас есть таблица частот:
A
15
B
7
C
6
D
6
E
5
На первом шаге из листьев дерева выбираются два с наименьшими
весами — D и E. Они присоединяются к новому узлу-родителю, вес которого устанавливается в 5+6=11. Затем узлы D и E удаляются из списка
свободных. Узел D соответствует ветви 0 родителя, узел E — ветви 1. На
следующем шаге то же происходит с узлами B и C, так как теперь эта
пара имеет самый меньший вес в дереве. Создается новый узел с весом
13, а узлы B и C удаляются из списка свободных. После этого дерево кодирования выглядит так, как показано на рис. 11.1.
Рис.11.1. Вид дерева кодирования после двух этапов работы алгоритма Хаффмана
На следующем шаге «наилегчайшей» парой оказываются узлы B/C
и D/E. Для них еще раз создается родитель, теперь уже с весом 24. Узел
B/C соответствует ветви 0 родителя, D/E — ветви 1.
На последнем шаге в списке свободных остаются только два узла —
это A и узел (B/C)/(D/E). В очередной раз создается родитель с весом
39, и бывшие свободные узлы присоединяются к разным его ветвям.
Поскольку свободным остается только один узел, то алгоритм построе118
ния дерева кодирования Хаффмана завершается. Итоговое дерево кодирования представлено на рис. 11.2.
Рис.11.2. Вид итогового дерева кодирования после работы алгоритма Хаффмана
Чтобы определить код для каждого из символов, входящих в сообщение, следует пройти путь от листа дерева, соответствующего этому символу, до корня дерева, накапливая биты при перемещении по ветвям
дерева. Полученная таким образом последовательность битов является
кодом данного символа, записанная в обратном порядке.
Для данной таблицы символов коды Хаффмана будут выглядеть следующим образом:
A
0
B
100
C
101
D
110
E
111
Поскольку ни один из полученных кодов не является префиксом
другого, они могут быть однозначно декодированы при чтении их из
потока. Кроме того, наиболее частый символ сообщения A закодирован наименьшим количеством битов, а наиболее редкий символ
E — наибольшим.
Классический алгоритм Хаффмана имеет два существенных недостатка:
1. Для восстановления содержимого сообщения декодер должен
знать таблицу частот, которой пользовался кодер. Следовательно, длина сжатого сообщения увеличивается на длину таблицы частот, которая
должна посылаться впереди данных, что приводит к увеличению размеров выходного файла.
2. Необходимость наличия полной частотной статистики перед началом собственно кодирования требует двух проходов по сообщению:
одного для построения модели сообщения (таблицы частот и дерева),
другого для собственно кодирования.
Алгоритмы сжатия с потерями
Алгоритм JPEG
JPEG — достаточно мощный алгоритм. Практически он является
стандартом для полноцветных изображений. Оперирует алгоритм областями 8x8, на которых яркость и цвет меняются сравнительно плавно.
Вследствие этого при разложении матрицы такой области в двойной ряд
119
по косинусам значимыми оказываются только первые коэффициенты.
Таким образом, сжатие в JPEG осуществляется за счет плавности изменения цветов в изображении.
Алгоритм разработан группой экспертов в области фотографии специально для сжатия 24-битных изображений. JPEG — Joint Photographic
Expert Group — подразделение в рамках ISO — Международной организации по стандартизации.
В целом алгоритм основан на дискретном косинусоидальном преобразовании – ДКП (Discrete-Cosine Transform — DCT), применяемом к
матрице изображения для получения некоторой новой матрицы коэффициентов. Для получения исходного изображения применяется обратное преобразование.
ДКП раскладывает изображение по амплитудам некоторых частот.
Таким образом, при преобразовании получают матрицу, в которой многие коэффициенты либо близки, либо равны нулю. Кроме того, благодаря несовершенству человеческого зрения, можно аппроксимировать
коэффициенты более грубо без заметной потери качества изображения.
Для этого используется квантование коэффициентов (quantization).
В самом простом случае — это арифметический побитовый сдвиг вправо. При этом преобразовании теряется часть информации, но может
быть достигнута большая степень сжатия.
12. Виртуализация в вычислительных системах
Виртуализация в вычислениях — процесс представления набора вычислительных ресурсов, или их логического объединения, который дает
какие-либо преимущества перед оригинальной конфигурацией. Это новый виртуальный взгляд на ресурсы составных частей, не ограниченных
реализацией, физической конфигурацией или географическим положением. Обычно виртуализированные ресурсы включают в себя вычислительные мощности и хранилище данных. По-научному, виртуализация
— это изоляция вычислительных процессов и ресурсов друг от друга.
Примером виртуализации являются симметричные мультипроцессорные компьютерные архитектуры, которые используют более одного
процессора. Операционные системы обычно конфигурируются таким
образом, чтобы несколько процессоров представлялись как единый
процессорный модуль. Вот почему программные приложения могут
быть написаны для одного логического (виртуального) вычислительного модуля, что значительно проще, чем работать с большим количеством
различных процессорных конфигураций.
12.1. Типы виртуализации
На практике нашли применение два основных вида виртуализации:
программная и аппаратная
12.1.1. Программная виртуализация
Динамическая трансляция
При динамической трансляции (бинарной трансляции) проблемные
команды гостевой OC перехватываются гипервизором. После того как эти
команды заменяются на безопасные, происходит возврат управления гостевой ОС.
Паравиртуализация
Паравиртуализация — техника виртуализации, при которой гостевые
операционные системы подготавливаются для исполнения в виртуализированной среде, для чего их ядро незначительно модифицируется.
Операционная система взаимодействует с программой гипервизора, который предоставляет ей гостевой API, вместо использования напрямую
таких ресурсов, как таблица страниц памяти.
Метод паравиртуализации позволяет добиться более высокой производительности, чем метод динамической трансляции.
Метод паравиртуализации применим лишь в том случае, если гостевые ОС имеют открытые исходные коды, которые можно модифицировать согласно лицензии, или же гипервизор и гостевая ОС разработаны
одним производителем с учетом возможности паравиртуализации гостевой ОС (хотя при условии того, что под гипервизором может быть запу121
щен гипервизор более низкого уровня, то и паравиртуализации самого
гипервизора). Достаточно подробно классификация и использование
гипервизоров представлены в статье Колесова А. «Вернемся к нашим
гипервизорам» [11] .
Гипервизор (или Монитор виртуальных машин) — программа или аппаратная схема, обеспечивающая или позволяющая одновременное,
параллельное выполнение нескольких операционных систем на одном
и том же хост-компьютере. Гипервизор также обеспечивает изоляцию
операционных систем друг от друга, защиту и безопасность, разделение
ресурсов между различными запущенными ОС и управление ресурсами.
Гипервизор также может предоставлять работающим под его управлением на одном хост-компьютере ОС средства связи и взаимодействия между собой (например, через обмен файлами или сетевые соединения) так, как если бы эти ОС выполнялись на разных физических
компьютерах.
Гипервизор сам по себе в некотором роде является минимальной
операционной системой (микроядром). Он предоставляет запущенным под его управлением операционным системам сервис виртуальной машины, виртуализируя или эмулируя реальное (физическое)
аппаратное обеспечение конкретной машины, и управляет этими виртуальными машинами, выделением и освобождением ресурсов для
них. Гипервизор позволяет осуществлять независимое «включение»,
перезагрузку, «выключение» любой из виртуальных машин с той или
иной ОС. При этом операционная система, работающая в виртуальной
машине под управлением гипервизора, может, но не обязана «знать»,
что она выполняется в виртуальной машине, а не на реальном аппаратном обеспечении.
На практике используются три типа гипервизоров: автономный, на
основе базовой ОС, гибридный.
Автономный гипервизор (Тип 1) имеет свои встроенные драйверы
устройств, модели драйверов и планировщик и поэтому не зависит от
базовой ОС. Так как автономный гипервизор работает непосредственно
на оборудовании, то он более производителен. Примером автономного
гипервизора служит гипервизор VMware ESX
Гипервизор на основе базовой ОС (Тип 2, V) — это программный модуль, работающий в одном кольце с ядром основной ОС (кольцо 0).
Гостевой код может выполняться прямо на физическом процессоре, но
доступ к устройствам ввода/вывода компьютера из гостевой ОС осуществляется через второй компонент, обычный процесс основной ОС
— монитор уровня пользователя. Примерами такого решения служат
гапервизоры Microsoft Virtual PC, VMware Workstation, QEMU, Parallels,
VirtualBox.
Гибридный гапервизор (Тип 1+) cостоит из двух частей: тонкого гипервизора, контролирующего процессор и память, а также работающей
122
под его управлением специальной сервисной ОС в кольце пониженного
уровня. Через сервисную ОС гостевые ОС получают доступ к физическому оборудованию. Примерами гипервизора гибридного типа являются Microsoft Virtual Server, Sun Logical Domains, Xen, Citrix XenServer,
Microsoft Hyper-V
Встроенная виртуализация
Этот вариант программной виртуализации обладает рядом преимуществ по сравнению с двумя ранее рассмотренными:
– cовместное использование ресурсов обеими ОС (каталоги, принтеры и т.д. );
– удобство интерфейса для окон приложений из разных систем (перекрывающиеся окна приложений, одинаковая минимизация окон, как
в хост-системе);
– при тонкой настройке на аппаратную платформу производительность мало отличается от оригинальной нативной ОС.
Имеет место:
— быстрое переключение между системами (менее 1 сек.).
— простая процедура обновления гостевой ОС;
— двухсторонняя виртуализация (приложения одной системы запускаются в другой и наоборот);
12.1.2. Аппаратная виртуализация
Аппаратная виртуализация обладает рядом преимуществ по сравнению с программной:
— упрощение разработки программных платформ виртуализации за
счет предоставления аппаратных интерфейсов управления и поддержки
виртуальных гостевых систем. Это уменьшает трудоемкость и время на
разработку систем виртуализации;
— возможность увеличения быстродействия платформ виртуализации. Управление виртуальными гостевыми системами осуществляет напрямую небольшой промежуточный слой программного обеспечения,
гипервизор, что дает увеличение быстродействия;
— улучшается защищенность, появляется возможность переключения между несколькими запущенными независимыми платформами
виртуализации на аппаратном уровне. Каждая из виртуальных машин
может работать независимо, в своем пространстве аппаратных ресурсов,
полностью изолированно друг от друга. Это позволяет устранить потери быстродействия на поддержание хостовой платформы и увеличить
защищенность;
— гостевая система становится не привязана к архитектуре хостовой
платформы и к реализации платформы виртуализации. Технология аппаратной виртуализации делает возможным запуск 64-битных гостевых
систем на 32-битных хостовых системах (с 32-битными средами виртуализации на хостах).
123
12.2. Области применения виртуализации
12.2.1. Виртуализация уровня ОС
Виртуализация на уровне операционной системы — виртуализирует
физический сервер на уровне ОС, позволяя запускать изолированные
и безопасные виртуальные серверы на одном физическом сервере. Эта
технология не позволяет запускать ОС с ядрами, отличными от типа
ядра базовой ОС. При виртуализации на уровне операционной системы
не существует отдельного слоя гипервизора. Вместо этого сама хостовая операционная система отвечает за разделение аппаратных ресурсов
между несколькими виртуальными серверами и поддержку их независимости друг от друга.
12.2.2. Виртуальные машины
Виртуальная машина — это окружение, которое представляется для
«гостевой» операционной системы, как аппаратное. Однако на самом деле
это программное окружение, которое эмулируется программным обеспечением хостовой системы. Эта эмуляция должна быть достаточно надежной,
чтобы драйверы гостевой системы могли стабильно работать. При использовании паравиртуализации, виртуальная машина не эмулирует аппаратное
обеспечение, а, вместо этого, предлагает использовать специальное API.
Виртуальная машина исполняет некоторый машинно-независимый
код или машинный код реального процессора. Помимо процессора,
ВМ может эмулировать работу как отдельных компонентов аппаратного
обеспечения, так и целого реального компьютера (включая BIOS, оперативную память, жесткий диск и другие периферийные устройства).
В последнем случае в ВМ, как и на реальный компьютер, можно устанавливать операционные системы (например, Windows можно запускать
в виртуальной машине под Linux или наоборот). На одном компьютере может функционировать несколько виртуальных машин (это может
использоваться для имитации нескольких серверов на одном реальном
сервере с целью оптимизации использования ресурсов сервера).
Концепция виртуальной машины как совокупности ресурсов, которые эмулируют поведение реальной машины, появилась в Кембридже
в конце 1960-х годов как расширение концепции виртуальной памяти
манчестерской вычислительной машины Atlas (англ.). В целом вычислительный процесс определяется в рамках этой концепции содержимым
того рабочего пространства памяти, к которому он имеет доступ. При
условии, что конкретная ситуация в этом рабочем пространстве соответствует ожидаемой, процесс не имеет никаких средств для определения
того, является ли представленный ему ресурс действительно физическим ресурсом этого типа, или же он имитируется действиями других
ресурсов, которые приводят к аналогичным изменениям содержимого
рабочего пространства процесса.
124
Например, процесс не может определить, монопольно ли он использует процессор или же в режиме мультипрограммирования вместе
с другими процессами. В виртуальной машине ни один процесс не может монопольно использовать никакой ресурс, и все системные ресурсы
считаются ресурсами потенциально совместного использования. Кроме
того, использование виртуальных машин обеспечивает развязку между
несколькими пользователями, работающими в одной вычислительной
системе, обеспечивая определенный уровень защиты данных.
Примеры применения:
— тестовые лаборатории и обучение: Тестированию в виртуальных
машинах удобно подвергать приложения, влияющие на настройки операционных систем, например инсталляционные приложения. За счет
простоты в развертывании виртуальных машин, они часто используются
для обучения новым продуктам и технологиям;
— распространение предустановленного ПО: многие разработчики
программных продуктов создают готовые образы виртуальных машин с
предустановленными продуктами и предоставляют их на бесплатной или
коммерческой основе. Такие услуги предоставляют Vmware VMTN или
Parallels PTN.
12.2.3. Виртуализация серверов
1. Размещение нескольких логических серверов в рамках одного физического (консолидация).
2. Объединение нескольких физических серверов в один логический для решения определенной задачи. Пример: Oracle Real Application
Cluster, grid-технология, кластеры высокой производительности.
12.2.4. Виртуализация ресурсов
1. Разделение ресурсов (partitioning). Виртуализация ресурсов может
быть представлена как разделение одного физического сервера на несколько частей, каждая из которых видна для владельца в качестве отдельного сервера. Не является технологией виртуальных машин, осуществляется на уровне ядра ОС.
В системах с гипервизором второго типа обе ОС (гостевая и гипервизора) отнимают физические ресурсы, и требует отдельного лицензирования. Виртуальные серверы, работающие на уровне ядра ОС, почти
не теряют в быстродействии, что дает возможность запускать на одном
физическом сервере сотни виртуальных, не требующих дополнительных
лицензий.
Разделяемое дисковое пространство или пропускной канал сети на
некоторое количество меньших составляющих, легче используемых ресурсов того же типа.
Например, к реализации разделения ресурсов можно отнести OpenSolaris Network Virtualization and Resource Control (Проект
125
Crossbow), позволяющий создавать несколько виртуальных сетевых интерфейсов на основе одного физического.
2. Агрегация, распределение или добавление множества ресурсов в большие ресурсы или объединение ресурсов. Например, симметричные мультипроцессорные системы объединяют множество процессоров; RAID
и дисковые менеджеры объединяют множество дисков в один большой
логический диск; RAID и сетевое оборудование использует множество
каналов, объединенных так, чтобы они представлялись, как единый широкополосный канал. На мета-уровне компьютерные кластеры делают
все вышеперечисленное. Иногда сюда же относят сетевые файловые системы абстрагированные от хранилищ данных на которых они построены, например, Vmware VMFS.
12.2.5. Виртуализация приложений
Виртуализация приложений — процесс использования приложения
преобразованного из требующего установки в ОС в не требующий (требуется только запустить). Для виртуализации приложений программное
обеспечение виртуализатора определяет при установке виртуализируемого приложения, какие требуются компоненты ОС и их эмулирует,
таким образом, создается необходимая специализированная среда для
конкретно этого виртуализируемого приложения и, тем самым, обеспечивается изолированность работы этого приложения. Для создания
виртуального приложения виртуализируемое помещается в контейнер,
оформленный, как правило, в виде папки. При запуске виртуального приложения запускается виртуализируемое приложение и контейнер, являющийся для него рабочей средой. Рабочая среда запускается и
предоставляет локальные ранее созданные ресурсы, которое включает в
себя ключи реестра, файлы и другие компоненты, необходимые для запуска и работы приложения. Такая виртуальная среда работает как прослойка между приложением и операционной системой, что позволяет
избежать конфликтов между приложениями.
Достоинства:
– изолированность исполнения приложений: отсутствие несовместимостей и конфликтов;
– каждый раз в первозданном виде: не загромождается реестр, нет
конфигурационных файлов — необходимо для сервера;
– меньшие затраты ресурсов по сравнению с эмуляцией всей ОС.
13. Организация мультизагрузочных
вычислительных систем
Мультизагрузочная система
Большинство пользователей компьютеров работают с одной операционной системой, но растет и число тех, которые выбирают использование нескольких операционных систем, так как их компьютер
должен выполнять широкий набор функций. В другом случае разработчикам программного обеспечения может понадобиться несколько
разных операционных систем для проверки их программ на совместимость. Специалист должен понимать основную идею мультизагрузочной
системы.
Мультизагрузочная система — это компьютер с установленными на
нем несколькими операционными системами, при этом нужная операционная система выбирается при каждой загрузке. Любой компьютер
может поддерживать множество операционных систем, пока выполняются основные условия:
● оборудование компьютера отвечает минимальным системным
требованиям каждой из операционных систем;
● установлен загрузчик, который поддерживает все имеющиеся
операционные системы;
● емкость жесткого диска достаточна для всех операционных систем и прикладных файлов.
Существует много различных менеджеров загрузки операционных
систем, в частности Acronis OS Selector, System Commander (www.v-com.
com/product/sc7ind.html) и т. д. Обычно главная загрузочная запись предназначена для загрузки определенной операционной системы. Когда
определен менеджер загрузки, он выводит список установленных операционных систем, в котором можно выбрать требуемую. После этого
управление передается загрузчику выбранной операционной системы и
процесс загрузки продолжается нормальным образом.
На компьютерах архитектуры IBM PC запуск загрузчика осуществляется программным обеспечением BIOS (Basic Input/Output System —
базовая система ввода/вывода), записанной в ПЗУ компьютера, после
успешного окончания процедуры POST.
Рассмотрим процедуру, с помощью которой происходит загрузка с
НЖМД IBM PC.
1. BIOS выполняет чтение 512 байтов первого сектора НЖМД (MBR
— Master Boot Record — основная загрузочная запись) в ОЗУ по адресу
0x00007C00 и передает управление прочитанному коду.
2. Этот код читает и анализирует таблицу разделов жесткого диска, а
затем в зависимости от вида загрузчика либо передает управление загрузочному коду активного раздела жесткого диска, либо самостоятельно загружает ядро с диска в оперативную память и передает ему управление.
127
Исполняемую часть MBR обычно называют менеджером загрузки.
Полностью менеджер загрузки может располагаться внутри файловой
системы — достаточно, чтобы в MBR находился его загрузочный код.
Стандартные средства Windows для организации
мультизагрузочной системы
NTLDR (сокращение от англ. NT Loader) — загрузчик операционных
систем Windows NT и более поздних, за исключением Windows Vista и
Windows 7.
NTLDR может быть запущен как с переносного устройства, например CD-ROM или флэш-накопитель USB, так и с жесткого диска.
NTLDR также способен загружать операционные системы, не основанные на технологии NT, путем задания соответствующего загрузочного
сектора в отдельном файле.
Для запуска NTLDR требуется, как минимум, наличие следующих
двух файлов на активном разделе: NTLDR, который собственно и содержит код загрузчика, и boot.ini, в котором записаны команды для формирования меню выбора системы и параметры для ее запуска. Чтобы загружать операционные системы на базе Windows NT, необходимо также
наличие файла ntdetect.com.
Рассмотрим процесс запуска.
При загрузке NTLDR выполняет следующие шаги:
1. Переводит процессор в «плоский» 32-битный режим работы
(англ. — 32-bit flat memory mode).
2. Организует доступ к текущей файловой системе.
3. Если присутствует файл hiberfil.sys и загрузчик обнаруживает образ
спящего режима, содержимое образа загружается в оперативную память,
и система восстанавливается в предыдущее состояние.
4. В противном случае загрузчик читает файл boot.ini и выводит
пользователю соответствующее меню для выбора запускаемой операционной системы. Если была выбрана не система семейства Windows
NT (например, Windows 98), тогда загружается файл, указанный в boot.
ini (bootsect.dos, если не указан иной файл, являющийся полноценной
загрузочной записью) и управление передается этому файлу, либо загружается операционная система на базе DOS. Если была выбрана система на базе Windows NT, то запускается программа ntdetect.com, которая собирает информацию о составе оборудования.
5. Запускает файл ntoskrnl.exe (ядро операционной системы), передавая ему собранную информацию о составе оборудования, после чего
происходит собственно запуск операционной системы.
Как было сказано, NTLDR позволяет пользователю выбрать желаемую операционную систему для запуска из меню. Для операционных
систем Windows NT и более поздних могут быть указаны дополнительные опции загрузки ядра. Все эти настройки хранятся в файле boot.ini,
128
который является конфигурационным файлом загрузчика NTLDR.
Файл boot.ini расположен на системном диске в корневом каталоге и
имеет атрибуты «Скрытый» и «Только чтение». Это сделано для того,
чтобы неопытный пользователь его случайно не испортил. Порча этого
файла приведет к невозможности запустить операционную систему.
Рассмотрим основной синтаксис файла boot.ini. Тело файла состоит
из двух основных разделов:
— [boot loader];
— [operating systems];
В разделе [boot loader] содержатся следующие основные параметры
загрузки: timeout, default, redirect, redirectbaudrate.
Параметр timeout задает задержку в секундах перед запуском операционной системы. Этот параметр можно считать актуальным, если на
компьютере установлено две и более операционных систем. В результате при запуске компьютера на экране будет отображаться список всех
операционных систем, и пользователь сможет выбрать нужную ОС для
запуска. Параметр timeout указывает, сколько секунд будет отображаться этот список, прежде чем компьютер сам загрузит ОС, которая выбрана по умолчанию. Если указать в секции [boot loader] параметр timeout
равным 0, то загрузочное меню будет отображаться бесконечно, а если
данный параметр сделать равным 1, то сразу запустится операционная
система, заданная в параметре default.
Параметр default определяет, какую операционную систему загружать
по умолчанию, после того, как истечет время, указанное в параметре
timeout.
Параметр redirect задает имя порта, по которому будут работать
службы аварийного управления (EMS). Эти службы используются в семействе операционных систем Windows Server 2003. Поэтому рядовому
пользователю этот параметр не нужен и в стандартном файле boot.ini параметр redirect не указывается. К тому же при указании этого параметра
необходимо запускать операционную систему с параметром /redirect,
который определяет, что ОС надо загрузить с поддержкой служб аварийного управления.
Параметр redirectbaudrate указывает, с какой скоростью должен работать порт, описанный в параметре redirect. Основные значения: 9600,
19200, 57600, 115200. Этот параметр используется при необходимости и
только совместно с параметром redirect.
Пример записи раздела [boot loader]:
[boot loader]
timeout=15
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
129
В разделе [operating systems] содержится список операционных систем, которые установлены на компьютере, с указанием того, где размещена ОС и с какими параметрами ее запускать.
Местоположение операционной системы описывается с использованием имен ARC (Advanced RISC Computer):
1. Первым в адресе ОС указывается порядковый номер адаптера,
с которого осуществляется загрузка; для этого используется один из
трех параметров, перечисленных в табл. 13.1. Х — это номер адаптера.
Нумерация начинается с 0.
Таблица 13.1.
Описание типов адаптеров
Параметр
Описание
Сообщает загрузчику, что ОС находится на адаптере любого типа
multi(X) с включенным BIOS. Такие диски устанавливаются в большинстве
компьютеров. Значение в скобках всегда равно 0, то есть multi(0)
Сообщает загрузчику, что ОС находится на адаптере типа SCSI
scsi(X)
с отключенным BIOS
Сообщает загрузчику, что ОС находится на адаптере, в загрузочной
записи которого находится указанная в скобках сигнатура.
signature(X) Сигнатура — это уникальное шестнадцатиричное число, которое
записывается при установке Windows. Этот параметр использовался в
старых версиях Windows и встречается весьма редко
2. Далее в адресе ОС прописывается тип подключения диска; для
этого используется параметр disk(). В скобках указывается 0 (Primary —
Первичный) или 1 (Secondary — Вторичный).
3. Следующий параметр rdisk() сообщает номер жесткого диска, на
котором находится ОС, и с которого необходимо загружаться. В скобках
указывается номер диска, нумерация начинается с 0.
4. Параметр partition() указывает раздел жесткого диска, в котором
находится ОС. Номер раздела указывается в скобках, нумерация начинается с 1.
5. Пятым параметром является имя каталога в разделе, где находятся файлы операционной системы. Например, у Windows XP этот каталог
называется WINDOWS, а у Windows 2000 — WINNT, значит параметр будет выглядеть \WINDOWS или \WINNT соответственно.
6. Последним параметром прописывается текстовое название операционной системы, это название будет отображаться в списке выбора ОС
(если их несколько) при загрузке компьютера. Имя ОС указывается после знака «=» в кавычках, вот так: =»Windows XP»
7. После названия ОС указываются необходимые параметры, через
пробел со знаком «/». Например: /fastdetect, /sos, /bootlog и другие.
Итак, собрав все параметры вместе, пользователь получает полный
путь до нужной ему операционной системы, например:
130
multi(0)disk(1)rdisk(0)partition(1)\WINDOWS=»Microsoft Windows XP
Professional RU» /fastdetect
Пример записи раздела [operating systems] с тремя ОС:
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=»Microsoft Windows XP
Professional RU» /fastdetect
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS=»Microsoft
2003 EMS» /fastdetect /redirect
Windows
multi(0)disk(0)rdisk(1)partition(1)\WINNT=»Microsoft Windows 2000»
/fastdetect
Полностью сформированный файл boot.ini, будет выглядеть примерно так:
[boot loader]
timeout=3
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=»Microsoft Windows XP
Professional» /fastdetect
Список разрешенных параметров загрузки операционной системы Windows можно посмотреть в статье «Список параметров загрузчика Windows. Параметры для запуска операционной системы в файле
BOOT. INI» по адресу:
http://www.pc-problems.ru/index.php?s=4&idk=17&idpk=22&ida=169
Начиная с Windows, Vista файла boot.ini больше нет.
Необходимые для загрузки параметры можно изменить, используя инструмент Конфигурация системы (рис. 13.1). Окно Конфигурация
системы запускается так: Панель управления -> Администрирование ->
Конфигурация системы -> Загрузка (или Win+R -> msconfig -> Ok)
Данный инструмент позволяет:
— получить информацию о текущей и загружаемой по умолчанию
системах;
— выбрать систему, загружаемую по умолчанию;
— удалить ненужную запись из меню загрузки.
— отредактировать время в секундах (тайм-аут), по истечении которого будет загружена операционная система, выбранная по умолчанию;
— включить\выключить экран приветствия(Без GUI);
— включить\выключить загрузку стандартных драйверов VGA, вместо
драйверов экрана, соответствующих видеооборудованию компьютера
(Базовое видео).
Используя Дополнительные параметры можно указать:
— число процессоров при загрузке;
131
Рис. 13.1. Редактирование меню загрузки с помощью средства
«Конфигурация системы»
— максимальный объем памяти в мегабайтах, используемый для моделирования конфигурации с малым объемом памяти.
При помощи окна Конфигурация системы нельзя изменить наименование существующих записей и положение записи в меню загрузки.
Для выбора системы, загружаемой по умолчанию, необходимая
операционная система задается нажатием кнопки «Использовать по
умолчанию».
Для удаления ненужной записи из списка нажмается кнопка «Удалить».
Для редактирования тайм-аута, в нужном поле указывается желаемое
количество секунд.
Для применения сделанных изменений — необходимо перезагрузить
компьютер.
Редактирование меню загрузки возможно также с помощью окна
«Загрузка операционной системы» (рис. 13.2).
Открыть окно «Загрузка операционной системы» можно так: Пуск —
«Панель управления\Все элементы панели управления\Система» или, если
включено отображение элементов управления Панели инструментов по
категориям, то «Панель управления\Система и безопасность\Система».
Далее — окно «Дополнительные параметры системы», в открывшемся
окне следует перейти на вкладку «Дополнительно». Также можено воспользоваться поиском Windows 7 и в поле поиска написать «Расш», в от132
Рис. 13.2. Редактирование меню загрузки с помощью окна
«Загрузка операционной системы»
крывшемся списке выбрать «Просмотр расширенных параметров системы». В рамке «Загрузка и восстановление» нажать кнопку «Параметры».
Здесь интересна верхняя часть окна: «Загрузка».
С помощью данного окна возможно:
— увидеть список операционных систем, находящийся в меню
загрузки;
— отредактировать время (тайм-аут), в течение которого будет виден
этот список;
— изменить систему, загружаемую по умолчанию.
Данный инструмент почти не отличается от своего аналога в
Windows XP, за исключением нескольких деталей. Так, например, в
Windows XP была кнопка «Правка», нажав которую пользователь имел
возможность самостоятельно править загрузочное меню. Начиная с
Windows Vista, такой простой способ отсутствует. Из данного меню также
недоступны функции удаления записей из меню загрузки, их переименование и изменение их положения.
Редактирование меню загрузки с помощью bcdedit.exe
Программа bcdedit.exe — тот инструмент, который позволяет делать
с меню загрузки все, что нужно. Необдуманные и неправильные действия могут привести к невозможности загрузки операционных систем.
Поэтому, прежде чем приступать к настройке меню загрузки с помощью
программы bcdedit.exe, рекомендуется подготовить установочный диск с
133
Рис. 13.3. Программа для настройки загрузчика ОС Windows7 EasyBCD
операционной системой, создать диск восстановления, сделать резервную копию данных хранилища загрузки.
Настройка загрузчика ОС Windows7 с помощью EasyBCD
Программа EasyBCD (рис. 13.3) может быть применена пользователями различной квалификации для решения широкого круга задач. Вот
несколько из них:
— загрузка XP/Vista/7/Ubuntu/OS X на одном компьютере;
— загрузка с USB, ISO образов виртуальных жестких дисков (VHD),
по сети или на основе WinPE;
— ремонт загрузчика Windows, изменение загрузочного диска, создание загрузочной USB; переименование записи в меню загрузки, установка варианта загрузки по умолчанию, тайм-аута, скрытие меню загрузки;
— создание собственной последовательности загрузки, скрытие дисков при загрузке, резервное копирование и восстановление конфигурации и многое другое.
14. Реестр Windows
Содержание этой лекции основано на материалах, изложенных в
книгах Р.А. Клименко «Тонкости реестра Windows Vista. Трюки и эффекты» [9]; А.П. Климова «Реестр Windows 7» [10] и П.А. Шалина «Реестр
Windows XP. Специальный справочник» [22].
14.1. Основные понятия о реестре Windows
Место реестра в системе и его назначение
Реестр Windows или системный реестр (англ. Windows Registry) —
иерархически построенная база данных параметров и настроек в большинстве операционных систем Microsoft Windows.
Реестр содержит информацию и настройки для аппаратного обеспечения, программного обеспечения, профилей пользователей, предустановки. Большинство изменений в Панели управления, в ассоциациях
файлов, системных политиках, списке установленного программного
обеспечения фиксируются в реестре.
Реестр Windows был введен для упорядочения информации, хранившейся до этого во множестве INI-файлов.
14.1.1. Структура реестра
Все данные системного реестра Windows в зависимости от их функционального назначения могут быть отнесены к одному из пяти основных разделов, называемых корневыми разделами. Имя каждого корневого
раздела начинается с аббревиатуры HKEY.
Рассмотрим состав данных корневых разделов.
● HKEY_CLASSES_ROOT — хранит информацию о зарегистрированных в системе типах файлов, способах обработки файлов каждого типа, о методах управления основными настройками интерфейса (настройки ActiveX-объектов).
Раздел содержит сведения о программных пакетах MSI, которые
были установлены в операционной системе; определяет перечень программ окна Открыть с помощью. Кроме того, в разделе хранится информация о наборе интерфейсов ОС, которыми можно пользоваться при
разработке программ для Windows.
● HKEY_CURRENT_USER — содержит информацию о пользователе, работающем с Windows в текущем сеансе, а также о различных настройках системы, относящихся к текущему пользователю
(вид Рабочего стола, сетевые соединения, принтеры и др.).
● HKEY_LOCAL_MACHINE — хранит информацию об аппаратной конфигурации компьютера и установленном программном
обеспечении. Настройки раздела действительны для всех пользователей данного компьютера. По объему информации этот раздел
135
является самым большим, по сравнивнению с другими разделами
реестра Windows.
Существует тесная взаимосвязь данного корневого раздела с разделом HKEY_CLASSES_ROOT, который HKEY_CLASSES_ROOT
является ссылкой на ветвь реестра HKEY_LOCAL_MACHINE\
SOFTWARE\ Classes.
● HKEY_USERS — содержит информацию обо всех пользователях
данного компьютера.
Следует отметить фактическую взаимосвязь данного корневого раздела с разделом HKEY_CURRENT_USER, который является ссылкой
на подраздел корневого раздела HKEY_USERS, хранящий сведения о
текущем пользователе.
● HKEY_CURRENT_CONFIG — хранит информацию о настройках оборудования, которое используется локальным компьютером в текущем сеансе работы.
Данный корневой раздел является ссылкой на подраздел реестра
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles.
В целом структура реестра представлена в иерархическом порядке:
каждый из перечисленных разделов имеет ряд подчиненных уровней иерархии, нижней ступенью которой являются параметры настройки системного реестра.
Примером иерархии можно считать указанный выше подраздел
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware
Profiles. Он начинается с корневого раздела HKEY_LOCAL_MACHINE.
Подраздел SYSTEM находится в корневом разделе HKEY_LOCAL_
MACHINE и является подчиненным ему. Подраздел CurrentControlSet
находится в подразделе SYSTEM.
14.1.2. Данные каких типов хранятся в реестре
Рассмотрим наиболее часто используемые в реестре Windows типы
данных.
● REG_BINARY — двоичные данные. Этот тип данных используется, например, для хранения сведений об аппаратных ресурсах;
сведения выводятся в редакторе реестра в шестнадцатеричном
формате.
● REG_DWORD — целое число. Может использоваться, например,
в качестве переключателя (1 — включение, 0 — выключение некоторого действия); могут применяться и другие числа. Возможно
представление этого типа данных в двоичном, десятичном и
шестнадцатеричном формате. Этот тип данных используется, например, в параметрах драйверов устройств.
● REG_EXPAND_SZ — расширенная строка. Этот тип данных используется в Windows для ссылок на файлы. Кроме произвольного текста значение параметра такого типа может включать спе136
циальные переменные, заменяющиеся определенными путями
к каталогам во время своей «интерпретации». Например, значение параметра данного типа может содержать такие специальные
переменные:
– %systemroot% — заменяет собой путь к каталогу, в котором операционная система хранит свои файлы (например, каталог C:\Windows);
– %windir% — является эквивалентом предыдущей переменной. Ее отличие от %systemroot% заключается в том, что переменную %systemroot%
переопределить нельзя, а каталог, к которому ведет переменная %windir%,
можно изменить с помощью окна «Переменные среды», вызываемого
нажатием соответствующей кнопки на вкладке «Дополнительно» окна
«Свойства системы»;
– %systemdrive% — заменяет собой букву системного диска (диска, в
котором операционная система хранит свои файлы);
– %userprofile% — заменяет собой путь к каталогу, хранящему профиль текущего пользователя;
– %programfiles% — заменяет собой путь к каталогу, в который операционная система по умолчанию устанавливает все программы;
– %username% — в отличие от предыдущих переменных, заменяет
собой не путь к каталогу, а имя текущего пользователя, работающего с
системой;
– %computername% — как и предыдущая переменная, не имеет никакого отношения к файловой системе Windows. Эта переменная заменяет
собой имя компьютера (именно это имя используется при обращении к
компьютеру по сети и хранится в строковом параметре ComputerName
ветви реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\
Control\ComputerName\ComputerName).
● REG_MULTI_SZ — многострочный текст (массив строк). Этот
тип обычно используется для представления списков и иных подобных записей в удобном для чтения формате.
● REG_SZ — текстовая строка. Данные этого типа используются в
реестре чаще всего.
● REG_FULL_RESOURCE_DESCRIPTOR — последовательность
вложенных массивов, предназначенная для хранения списка ресурсов устройств или драйверов.
С помощью программы Редактор реестра параметры данного типа
создать нельзя (но можно создать с помощью REG-файлов).
● REG_LINK — строковый тип данных, предназначенный для указания пути к файлам. С помощью программы regedit параметры
данного типа создать нельзя (но их также можно создать с помощью REG-файлов).
Помимо перечисленных выше типов данных, в системном реестре
могут использоваться типы REG_NONE, REG_RESOURCE_LIST и
другие.
137
14.1.3. В каких файлах хранится системный реестр
Файлы системного реестра хранятся в каталоге %systemroot%\
system32\config. В число этих файлов входят:
SAM — HKEY_LOCAL_MACHINE\SAM;
SECURITY — HKEY_LOCAL_MACHINE\Security;
Software — HKEY_LOCAL_MACHINE\Software;
System — HKEY_LOCAL_MACHINE\System и
HKEY_CURRENT_CONFIG;
Default — HKEY_USERS\.DEFAULT;
NTUSER.DAT — HKEY_CURRENT_USER (этот файл хранится в каталоге %SystemRoot%\Profiles\%username%).
Существуют также файлы с другими расширениями:
.ALT — содержит архивную копию куста
HKEY_LOCAL_MACHINE\System. Только учетная запись
System имеет файл .ALT;
.LOG — журнал изменений, записывающий модификации ключей и значений куста;
.SAV — копия куста на момент завершения текстовой фазы процесса установки Windows.
14.2. Основные правила работы с реестром
Редактировать системный реестр можно вручную или с помощью специально предназначенных утилит.
Ручное редактирование системного реестра Windows выполняется
либо средствами Редактора реестра, либо с помощью REG-файлов.
Рассмотрим каждый из этих способов.
Запуск программы «Редактор реестра»
Редактор системного реестра Windows представляет собой встроенный механизм, предназначенный для просмотра и редактирования параметров реестра. Для запуска Редактора реестра предназначен файл
regedit.exe, расположенный в каталоге Windows, однако целесообразнее
воспользоваться командой «Пуск
Выполнить» и в открывшемся окне
«Запуск программы» в поле «Открыть» ввести regedit.
Использование REG-файлов
В процессе эксплуатации системы могут возникать ситуации, когда
редактирование реестра средствами Редактора реестра невозможно либо
нецелесообразно. В таких случаях следует использовать файлы реестра,
которые имеют расширение REG.
По своей структуре и содержанию файл реестра представляет собой
обычный текстовый файл, поэтому его формирование и редактирование
возможно с помощью любого текстового редактора (например, Блокнота).
Следует отметить, что для редактирования имеющегося REG-файла
целесообразно воспользоваться командой Файл
Экспорт, которая
138
выбирается в окне Редактора реестра. В результате выполнения этой команды требуемый файл (это может быть как файл отдельного раздела
или ветви, так и файл реестра целиком) будет экспортирован по указанному пути. После внесения всех необходимых изменений файл импортируется в реестр с помощью команды Файл
Импорт, также вызываемой в окне Редактора реестра.
Внимание!
Следует учитывать, что двойной щелчок кнопкой мыши на имени
файла реестра в Проводнике не откроет его для редактирования, а приведет к импорту его в реестр таким же образом, как это произошло бы
при выполнении команды Файл
Импорт.
Важным элементом любого REG-файла системного реестра Windows
является его первая строка, текст которой нельзя изменять ни при каких
обстоятельствах. Только по ней система сможет распознать, что текущий
файл содержит именно данные реестра. Вот как выглядит эта строка для
REG-файлов операционных систем семейства Windows NT (в том числе
и операционной системы Windows 7):
Windows Registry Editor Version 5.00
Если вы будете создавать REG-файлы вручную, то вместо этой длинной строки можно использовать другой заголовок:
REGEDIT4
Данный заголовок REG-файла использовался в операционных системах семейства Windows 9x, а также Windows NT 4. Он считается морально
устаревшим, однако вопросы обратной совместимости требуют, чтобы он
поддерживался будущими версиями операционных систем Windows.
Иными словами, REG-файлы, имеющие заголовок REGEDIT4, будут работать на любых версиях операционной системы Windows. Тогда
как REG-файлы, имеющие более новый заголовок, будут работать только в операционных системах начиная с Windows NT 5.
Между REG-файлами со старым и новым заголовками существует
еще одно отличие: в REG-файлах с новым заголовком строковые переменные записываются в кодировке Unicode, тогда как в REG-файлах
со старым заголовком используется стандартная кодировка ASCII. Это
отличие не важно, если вы создаете REG-файл вручную. Однако, если
выполняется экспортирование в REG-файл с помощью программы
Редактор реестра, следует учитывать то, что REG-файлы с новым заголовком будут иметь больший размер, чем REG-файлы с заголовком
REGEDIT4 (при самых худших условиях, то есть, если все экспортируемые в REG-файл параметры имеют строковый тип, размер REG-файла
с новым заголовком будет в два раза больше).
По умолчанию при экспортировании содержимого ветви реестра в
REG-файл программа «Редактор реестра» использует новые заголовки.
Но при желании экспортировать в REG-файл старого формата, придется самостоятельно выбирать элемент Файлы реестра Win9x/NT4 (-.reg)
раскрывающегося списка Тип файла окна Экспорт файла реестра.
139
После первой строки текста REG-файла (заголовка) обязательно
должна следовать пустая строка. Затем в квадратных скобках указывается раздел системного реестра, к которому относятся редактируемые
параметры (в качестве разделителя между объектами реестра используется символ \). Далее следует перечисление параметров редактируемого
раздела с указанием имени параметра, типа данных и значения параметра (каждый параметр отображается в отдельной строке текста файла).
При этом соблюдаются следующие правила: имя параметра заключается
в кавычки, затем после знака равенства указывается тип данных, далее
после двоеточия — значение параметра. Если тип данных не указан, то
по умолчанию соответствующий параметр считается строковым и его
значение заключается в кавычки. Последняя строка REG-файла должна
оставаться пустой.
Рассмотрим содержимое одного из файлов реестра на примере части REG-файла раздела HKEY_CURRENT_USER\Control Panel\Mouse
(рис.14.1):
Windows Registry Editor Version 5.00
[пустая строка]
[HKEY_CURRENT_USER\Control Panel\Mouse]
«ActiveWindowTracking»=dword:00000000
«DoubleClickHeight»=»4»
«SmoothMouseXCurve»=hex:00,00,00,00,00,00,00,00,15,6e,00,00,\
00,00,00,00,00,40,01,00,00,00,00,00,29,dc,03,00,00,00,00,00,\
00,00,28,00,00,00,00,00
[пустая строка]
Рис. 14.1. Пример REG-файла
Редактирование текста REG-файла осуществляется по обычным
правилам работы с текстовыми файлами. Кроме того, с помощью
REG-файла можно удалять элементы системного реестра. Например,
чтобы удалить раздел реестра, необходимо перед его именем в тексте
REG-файла поставить знак «минус»:
[-HKEY_CURRENT_USER\Control Panel\Mouse]
Следует учитывать, что удаление раздела невозможно до тех пор,
пока не удалены все входящие в его состав подразделы, поэтому сначала
необходимо произвести подобную операцию с ними.
Для удаления значения параметра следует поставить знак «–» после
знака «=»:
«SnapToDefaultButton»=–
Сделанные изменения будут перенесены в реестр после импорта отредактированного REG-файла.
140
14.3. Резервное копирование и восстановление реестра
Характерной особенностью реестра Windows является то, что в отличие от большинства других программ при его редактировании система не спрашивает, желает ли пользователь сохранить внесенные изменения. Поэтому в процессе работы с реестром следует помнить, что все
внесенные корректировки невозможно отменить. Поскольку системный реестр является одним из главных компонентов Windows, необходимо перед началом редактирования создать его резервную копию, к
которой можно будет вернуться в случае внесения в реестр ошибочных
изменений.
Кратко остановимся на двух наиболее популярных способах сохранения резервной копии.
Архивирование в REG-файл
Самым простым способом является создание резервной копии с помощью Редактора реестра. В левой панели окна редактора следует установить указатель мыши на ветвь Компьютер (в этом случае будет сохранен
весь реестр; если необходимо сделать копию какой-либо его части, то
нужно выделить ее указателем) и выполнить команду Файл
Экспорт
либо команду Экспортировать контекстного меню, которое появляется
при щелчке правой кнопкой мыши на выделенном элементе. В результате
на экране откроется стандартное окно Экспорт файла реестра, в котором
следует указать имя файла и путь для его сохранения, а затем нажать кнопку Сохранить. После этого реестр (либо выделенная его часть) будет сохранен в виде REG-файла (описание порядка работы с REG-файлами см.
в разд. 14.2). Рекомендуется, помимо сохранения файла реестра на локальном компьютере, сохранять его и на внешнем носителе информации
(другой компьютер, компакт-диск и т.п.). Для последующего восстановления системного реестра из сохраненного заранее REG-файла необходимо запустить Редактор реестра и выполнить команду Файл
Импорт.
В результате на экране отобразится стандартное окно Импорт файла реестра, в котором следует указать путь для импорта файла.
Создание куста реестра
Более удобным и одновременно более сложным способом архивирования части реестра является создание куста реестра. В описании реестра в английской литературе среди прочих используется термин Hive.
В некоторых работах его переводят на русский как «улей». Microsoft в
своих документах переводит это как «куст».
Кустом реестра называется ветвь или корневой раздел, которые хранятся в отдельном файле. Собственно, сам реестр операционных систем
семейства Windows хранится в виде отдельных кустов (расположенных в
каталоге %systemroot%\system32\config), поэтому, создавая куст, фактически создают часть реестра, которую впоследствии можно будет загрузить в Редактор реестра (рис. 14.2).
141
Чтобы создать куст реестра, необходимо воспользоваться командой вида
reg save <ветвь реестра> <файл>. Например, архивирование корневого раздела HKEY_CURRENT_USER в файл MyHKEY_CURRENT_USER.hiv,
расположенный в каталоге С:, выполняется с помощью команды
reg save HKEY_CURRENT_USER c:\MyHKEY_CURRENT_ USER.hiv.
Впоследствии всегда возможно восстановить содержимое ветви реестра из созданного ранее куста. Для этого предназначена команда вида
reg restore <ветвь реестра> <файл>.
Например:
reg restore HKEY_CURRENT_USER c:\MyHKEY_CURRENT_USER.hiv
Создание и восстановление из куста реестра выполняется намного быстрее, чем создание и восстановление из REG-файла.
Однако это еще не все преимущества использования кустов реестра.
Главным преимуществом данного способа архивирования является то, что
в любой момент можно воспользоваться программой «Редактор реестра»,
чтобы отредактировать содержимое созданного ранее куста. Например, изменить значение какого-либо параметра, создать или удалить параметр или
ветвь реестра и т. д. В общем, выполнить над кустом любую операцию, которую можно выполнить над самим реестром. Для этого нужно запустить
Рис. 14.2. Созданный ранее куст реестра, загруженный в программу
«Редактор реестра» для дальнейшей модификации
142
программу regedit.exe, после чего выделить один из основных корневых разделов реестра (например, HKEY_LOCAL_MACHINE), а потом воспользоваться командой меню Файл
Загрузить куст. Это приведет к отображению нескольких окон. В первом из них надо выбрать файл куста реестра,
который предполагается загрузить; во втором — ввести какое-либо имя,
под которым этот куст будет отображаться в выделенном корневом разделе
(то есть в корневом разделе HKEY_LOCAL_MACHINE). Например, можно ввести имя HKEY_CURRENT_USER. Результат действий представлен
на рис. 14.2.
После того, как пользователь поработал с загруженным кустом,
куст необходимо выгрузить. Для этого нужно выбрать добавленный
куст реестра (то есть выделить раздел с именем, которое указано при
загрузке куста реестра), после чего воспользоваться командой меню
Файл
Выгрузить куст. В принципе, этого можно и не делать — операционная система сама выгрузит куст при завершении работы компьютера. Однако необходимо понимать, что загруженный куст, если
его не выгрузить, будет находиться в оперативной памяти вплоть до
следующей перезагрузки/выключения компьютера.
14.4. Критика технологии сохранения настроек системы
с помощью реестра
Способ хранения параметров и настроек операционной системы при
помощи реестра Windows часто подвергается критике по следующим
причинам:
1. Реестр подвержен фрагментации, из-за чего доступ к реестру постепенно замедляется.
2. В связи с тем, что помимо настроек, в реестре хранится различная
информация системы и приложений (например, многие приложения
хранят в реестре список недавно открытых файлов), размер реестра значительно увеличивается по мере использования операционной системы.
Эта проблема частично решается при помощи специальных утилит.
3. Не все настройки системы хранятся в реестре, поэтому перенос настроек системы путем копирования реестра невозможен.
4. Некоторые программы не могут работать без параметров, занесенных в реестр, что создает трудности при переносе их с компьютера
на компьютер, или теряют данные после переустановки операционной
системы.
Критики приводят в пример UNIX-подобные операционные системы, где нет реестра и выполняемые им задачи решаются другими
средствами.
15. Вредоносные программы
и средства борьбы с ними
15.1. Терминология
В свободной энциклопедии «Википедия» [25] приводится следующее
определение вредоносного программного обеспечения:
«Вредоносная программа (на жаргоне антивирусных служб «зловред»,
англ. malware, malicious software — «злонамеренное программное обеспечение») — любое программное обеспечение, предназначенное для получения несанкционированного доступа к вычислительным ресурсам самой ЭВМ или
к информации, хранимой на ЭВМ, в целях несанкционированного владельцем использования ресурсов ЭВМ или причинения вреда (нанесения ущерба)
владельцу информации, и/или владельцу ЭВМ, и/или владельцу сети ЭВМ
путем копирования, искажения, удаления или подмены информации».
Таким образом, по основному определению, вредоносные программы
предназначены для получения несанкционированного доступа к информации в обход существующих правил разграничения доступа.
Федеральная служба по техническому и экспортному контролю
(ФСТЭК России) определяет данные понятия следующим образом.
Правила разграничения доступа (англ. access mediation rules) — совокупность правил, регламентирующих права доступа субъектов доступа к
объектам доступа
Санкционированный доступ к информации — доступ, не нарушающий
правил разграничения доступа.
Несанкционированный доступ к информации — доступ, нарушающий
правила разграничения доступа с использованием штатных средств,
предоставляемых средствами вычислительной техники или автоматизированными системами. Под штатными средствами понимается совокупность программного, микропрограммного и технического обеспечения
средств вычислительной техники или автоматизированных систем.
Согласно статье 273 Уголовного Кодекса Российской Федерации
(«Создание, использование и распространение вредоносных программ
для ЭВМ») определение вредоносных программ таково: «… программы для
ЭВМ или внесение изменений в существующие программы, заведомо приводящие к несанкционированному уничтожению, блокированию, модификации либо копированию информации, нарушению работы ЭВМ, системы
ЭВМ или их сети…»
Надо отметить, что действующая формулировка статьи 273 трактует
понятие вредоносности чрезвычайно широко. Когда обсуждалось включение этой статьи в УК, подразумевалось, что «несанкционированными»
будут считаться действия программы, не одобренные явным образом
пользователем этой программы. Однако нынешняя судебная практика
относит к вредоносным также и программы, модифицирующие (с санк144
ции пользователя) исполняемые файлы и/или базы данных других программ, если такая модификация не разрешена их правообладателями.
Корпорация Microsoft трактует термин «вредоносная программа» следующим образом.
«Вредоносная программа (malware) — это сокращение от «malicious
software», обычно используемое как общепринятый термин для обозначения
любого программного обеспечения, специально созданного для того, чтобы причинять ущерб отдельному компьютеру, серверу, или компьютерной сети, независимо от того, является ли оно вирусом, шпионской программой и т.д.»
15.2. Классификация вредоносных программ
Необходимость создания классификации вредоносного программного обеспечения возникла одновременно с появлением первой антивирусной программы. Несмотря на то, что вирусов в то время было мало, их
все равно необходимо было как-то отличать друг от друга по названиям.
Пионеры антивирусной индустрии, как правило, использовали самую простую классификацию, состоящую из уникального имени вируса
и размера детектируемого файла. Однако из-за того, что один и тот же
вирус в разных антивирусных программах мог именоваться по-разному,
началась путаница.
Первые попытки упорядочить процесс классификации были предприняты еще в начале 90-х годов прошлого века в рамках альянса
антивирусных специалистов CARO (Computer AntiVirus Researcher’s
Organization). Альянсом был создан документ «CARO malware naming
scheme», который на какой-то период стал стандартом для индустрии.
Но со временем стремительное развитие вредоносных программ, появление новых платформ и рост числа антивирусных компаний привели к
тому, что эта схема фактически перестала использоваться.
Еще более важной причиной отказа от нее стали существенные отличия в технологиях детектирования каждой антивирусной компании и,
как следствие, невозможность унификации результатов проверки разными антивирусными программами.
Периодически предпринимаются попытки выработать новую общую
классификацию детектируемых антивирусными программами объектов,
однако они по большей части остаются безуспешными.
Последним значительным проектом подобного рода было создание организации CME (Common Malware Enumeration), которая присваивает одинаковым детектируемым объектам единый уникальный
идентификатор.
В настоящее время у каждой компании-разработчика антивирусного программного обеспечения существует собственная корпоративная
классификация и номенклатура вредоносных программ.
Одним из признанных экспертов в области антивирусного программного обеспечения выступает компания «Лаборатория Касперского».
145
Используемая в «Лаборатории Касперского» система классификации детектируемых объектов является одной из наиболее широко распространенных в индустрии антивирусного ПО, и служит основой для
классификаций некоторых других антивирусных компаний.
Классификация «Лаборатории Касперского» включает весь объем
детектируемых Антивирусом Касперского вредоносных или потенциально нежелательных объектов и основана на разделении объектов по
типу совершаемых ими на компьютере пользователя действий [26].
Все детектируемые продуктами «Лаборатории Касперского» типы
объектов можно отобразить в виде дерева (рис. 15.1).
Рассмотрим типы детектируемых объектов более подробно.
К1*. Вредоносные программы
Вредоносные программы создаются специально для несанкционированного пользователем уничтожения, блокирования, модификации
или копирования информации, нарушения работы компьютеров или
компьютерных сетей.
К данной категории относятся вирусы и черви, троянские программы и иной инструментарий, созданный для автоматизации деятельности
злоумышленников (инструменты для взлома, конструкторы полиморфного вредоносного кода и т. д.).
К1.1. Вирусы и черви. Подобные вредоносные программы обладают
способностью к несанкционированному пользователем саморазмножению в компьютерах или компьютерных сетях, при этом полученные копии также обладают такой возможностью. Отличие от вирусов и червей
состоит в невозможности дальнейшего самовоспроизведения копий.
Основным признаком, по которому различают типы (поведения) вирусов и червей, является способ их распространения, то есть как вредоносная программа передает свою копию по локальным или сетевым
ресурсам.
К1.1.1. Net-Worm. Вредоносная программа, обладающая способностью к несанкционированному пользователем саморазмножению в
компьютерных сетях. Отличительной особенностью этого типа червей
является отсутствие необходимости в пользователе как звене в цепочке
распространения (то есть, непосредственно для активации вредоносной программы). Зачастую при распространении такой червь ищет в
сети компьютеры, на которых используется программное обеспечение,
содержащее критические уязвимости. Для заражения уязвимых компьютеров червь посылает специально сформированный сетевой пакет
(эксплойт), в результате чего код (или часть кода) червя проникает на
компьютер-жертву и активируется. Если сетевой пакет содержит только часть кода червя, то после проникновения в уязвимый компьютер он
скачивает основной файл червя и запускает его на исполнение.
* Префикс «К» означает классификацию, принятую «Лабораторией Касперского».
146
К1.1.2. Email-Worm. Вредоносная программа, обладающая способностью к несанкционированному пользователем саморазмножению по
каналам электронной почты. В процессе размножения червь отсылает
либо свою копию в виде вложения в электронное письмо, либо ссылку на свой файл, расположенный на каком-либо сетевом ресурсе (например, URL на зараженный файл, расположенный на взломанном или
хакерском веб-сайте). В первом случае код червя активизируется при
открытии (запуске) зараженного вложения, во втором — при открытии
ссылки на зараженный файл. В обоих случаях эффект одинаков — активизируется код червя.
Рис. 15.1. Типы детектируемых объектов по классификации
«Лаборатории Касперского»
147
Методы, используемые почтовыми червями для поиска почтовых
адресов, на которые будут рассылаться зараженные письма:
— рассылают себя по всем адресам, обнаруженным в адресной книге
MS Outlook;
— сканируют «подходящие» файлы на диске и выделяет в них строки,
являющиеся адресами электронной почты;
— рассылают себя по всем адресам, обнаруженным в письмах в почтовом ящике (при этом некоторые почтовые черви «отвечают» на обнаруженные в ящике письма).
К1.1.3. Worm. Вредоносная программа, обладающая способностью
к несанкционированному пользователем саморазмножению в компьютерных сетях через сетевые ресурсы. В отличие от Net-Worm для активации Worm пользователю необходимо запустить его. Черви этого типа
ищут в сети удаленные компьютеры и копируют себя в каталоги, открытые на чтение и запись (если таковые обнаружены). При этом черви
данного типа перебирают доступные сетевые каталоги, используя функции операционной системы, и случайным образом ищут компьютеры в
глобальной сети, подключаются к ним и пытаются открыть их диски на
полный доступ.
К1.1.4. P2P-Worm. Вредоносная программа, обладающая способностью к несанкционированному пользователем саморазмножению по
каналам файлообменных пиринговых сетей (например, Kazaa, Grokster,
eDonkey, FastTrack, Gnutella и др.).
Механизм работы большинства подобных червей прост — для внедрения в P2P-сеть червю достаточно скопировать себя в каталог обмена файлами, который обычно расположен на локальной машине. Всю
остальную работу по распространению вируса P2P-сеть берет на себя
— при поиске файлов в сети она сообщит удаленным пользователям о
данном файле и предоставит весь необходимый сервис для скачивания
файла с зараженного компьютера.
К1.1.5. IM-Worm. Вредоносная программа, обладающая способностью к несанкционированному пользователем саморазмножению по
каналам систем мгновенного обмена сообщениями (например, ICQ,
MSN Messenger, AOL Instant Messenger, Yahoo Pager, Skype и др.).
Для этой цели черви, как правило, рассылают на обнаруженные контакты (из контакт-листа) сообщения, содержащие URL, на файл с телом
червя, расположенный на каком-либо сетевом ресурсе. Данный прием
практически полностью повторяет аналогичный способ рассылки, использующийся почтовыми червями.
К1.1.6. IRC-Worm. Вредоносная программа, обладающая способностью к несанкционированному пользователем саморазмножению через
Internet Relay Chats.
У этого типа червей существует два способа распространения по
IRC-каналам, напоминающие способы распространения почтовых чер148
вей. Первый способ заключается в отсылке URL на копию червя. Второй
способ – отсылка зараженного файла какому-либо пользователю IRCканала. При этом атакуемый пользователь должен подтвердить прием
файла, затем сохранить его на диск и открыть (запустить на выполнение).
К1.1.7. Virus. Классический компьютерный вирус — вредоносная
программа, обладающая способностью к несанкционированному пользователем саморазмножению по локальным ресурсам компьютера.
В отличие от червей вирусы не используют сетевых сервисов для своего распространения и проникновения на другие компьютеры. Копия вируса
попадает на удаленные компьютеры только в том случае, если зараженный объект по каким-либо не зависящим от функционала вируса причинам оказывается активизированным на другом компьютере. Например:
— при заражении доступных дисков вирус проник в файлы, расположенные на сетевом ресурсе;
— вирус скопировал себя на съемный носитель или заразил файлы
на нем;
— пользователь отослал электронное письмо с зараженным
вложением.
Вирусы делятся на классы по среде обитания, а эти классы, в свою
очередь, делятся на подклассы по способу заражения.
По среде обитания вирусы делятся на файловые, загрузочные, макро- и
скриптовые.
Файловые вирусы для заражения пользуются файловой системой ОС.
Такие вирусы дополнительно классифицируются по способу заражения
на перезаписывающие, паразитические и вирусы-компаньоны.
Перезаписывающие вирусы (Overwriting). Самый распространенный способ заражения. Вирус переписывает код программы (заменяет его своим), после чего, естественно, файл перестает работать.
Файл, зараженный данным способом, восстановлению не подлежит.
Перезаписывающий вирус быстро обнаруживает себя, так как зараженная система (или программа) не функционирует.
Паразитические вирусы (Parasitic). К таковым относятся все вирусы, которые изменяют содержимое файла, но при этом оставляют его
работоспособным. Основными типами таких вирусов являются вирусы, записывающиеся в начало файлов (prepending), в конец файлов
(appending) и в середину файлов (inserting). В свою очередь, внедрение
вирусов в середину файлов происходит различными методами — путем
переноса части файла в его конец или копирования своего кода в заведомо неиспользуемые данные файла (cavity-вирусы).
При записывании кода в начало файла вирус может воспользоваться
двумя способами. Первый — это перенос начала файла в конец и дописывание собственного кода в освободившееся место. Второй — дописывание кода файла к своему коду. В обоих случаях при запуске файла
149
управление получает вирус, а потом во избежание подозрений управление передается обратно файлу-жертве.
При внедрении кода вируса в конец файла используется способ дописывания. Код вируса дописывается в конец файла-жертвы, при этом
головная часть файла изменяется таким образом, что управление опять
первым получает вирус, а потом файл.
При внедрении в середину файла вирус может воспользоваться несколькими вариантами. Первый — перенос части файла, вместо которой
предполагается расположить код вируса, в конец. Второй — так называемое «раздвижение» кода файла. Третий — замещение неисполняемых
областей файла кодом вируса.
Но каким бы из способов вирус ни воспользовался, ему опять придется изменять головную часть файла-жертвы. Изменение головной части кода файла происходит двумя способами. Наиболее распространен
способ, при котором вирус заменяет стандартную точку входа, «перенося» ее на принадлежащий ему участок. Но некоторые могут просто добавить команду передачи управления — таким образом, файл стартует с
оригинальной точки входа, а потом (по дописанной команде) передает
управление коду вируса.
Вирусы-компаньоны (Companion). Данный способ подразумевает
создание файла-двойника, при этом код файла-жертвы не изменяется.
Обычно вирус изменяет расширение файла (например, с .exe на .com),
потом создает свою копию с именем, идентичным имени файла-жертвы,
и дает ему расширение, тоже идентичное. Пользователь запускает любимую программу, не подозревая, что это вирус. Вирус, в свою очередь,
заражает еще несколько файлов и запускает программу, затребованную
пользователем.
Загрузочные вирусы заражают загрузочный сектор гибкого диска и
boot-сектор или Master Boot Record (MBR) винчестера. Принцип действия загрузочных вирусов основан на алгоритмах запуска операционной системы при включении или перезагрузке компьютера: после необходимых тестов установленного оборудования (памяти, дисков и т.д.)
программа системной загрузки считывает первый физический сектор
загрузочного диска (A:, C: или CD-ROM в зависимости от параметров,
установленных в BIOS Setup) и передает на него управление.
При заражении дисков загрузочные вирусы «подставляют» свой код
вместо какой-либо программы, получающей управление при загрузке
системы. Принцип заражения одинаков во всех вышеописанных способах: вирус «заставляет» систему при ее перезапуске считать в память и
отдать управление не оригинальному коду загрузчика, а коду вируса.
Дискеты заражаются единственным известным способом — вирус
записывает свой код вместо оригинального кода boot-сектора дискеты.
Винчестер заражается тремя возможными способами:
— вирус записывается либо вместо кода MBR;
150
— либо вместо кода boot-сектора загрузочного диска (обычно диска C:);
— либо модифицирует адрес активного boot-сектора в таблице разделов диска (Disk Partition Table), расположенной в MBR винчестера.
При инфицировании диска вирус в большинстве случаев переносит
оригинальный boot-сектор (или MBR) в какой-либо другой сектор диска
(например, в первый свободный). Если длина вируса больше длины сектора, то в заражаемый сектор помещается первая часть вируса, остальные
части размещаются в других секторах (например, в первых свободных).
Макровирусы в основном заражают документы MS Office. При этом вирус добавляет свой код в область макросов документа. Расположение кода
вируса в документах разных приложений вышеописанного пакета разное.
Скрипт-вирусы — это вирусы, написанные на скрипт-языках (VBS,
JS, BAT, PHP и т.д.). Заражают они файлы довольно большого диапазона
расширений: от .exe до .html.
К1.2. Троянские программы. Эти вредоносные программы созданы
для осуществления несанкционированных пользователем действий, направленных на уничтожение, блокирование, модификацию или копирование информации, нарушение работы компьютеров или компьютерных сетей.
В отличие от вирусов и червей представители данной категории
не способны создавать свои копии, имеющие возможность дальнейшего
самовоспроизведения.
Основным признаком, по которому различают типы троянских программ, являются их несанкционированные пользователем действия на
зараженном компьютере.
К данной категории вредоносных программ относятся следующие.
К1.2.1. Backdoor. Вредоносная программа, предназначенная для
скрытого удаленного управления злоумышленником пораженным компьютером. По своей функциональности бэкдоры во многом напоминают различные системы администрирования, разрабатываемые и распространяемые фирмами-производителями программных продуктов.
Эти вредоносные программы позволяют делать с компьютером все,
что в них заложил автор: принимать или отсылать файлы, запускать и
уничтожать их, выводить сообщения, стирать информацию, перезагружать компьютер и т.д.
Представители этого типа вредоносных программ очень часто используются для объединения компьютеров-жертв в так называемые
«ботнеты», централизованно управляемые злоумышленниками в своих целях.
Отдельно следует отметить группу бэкдоров, способных распространяться по сети и внедряться в другие компьютеры, как это делают сетевые черви. Отличает такие бэкдоры от червей то, что они
распространяются по сети не самопроизвольно (как сетевые черви),
а только по специальной команде «хозяина», управляющего данной
копией троянской программы.
151
К1.2.2. Exploit. Программы, в которых содержатся данные или исполняемый код, позволяющие использовать одну или несколько уязвимостей в программном обеспечении на локальном или удаленном компьютере с заведомо вредоносной целью.
Обычно эксплойты используются злоумышленниками для проникновения на компьютер-жертву в целях последующего внедрения туда
вредоносного кода (например, заражение всех посетителей взломанного
веб-сайта вредоносной программой). Также эксплойты интенсивно используются программами типа Net-Worm для проникновения на компьютер-жертву без участия пользователя.
Широко известны так называемые программы-Nuker´ы, которые
отправляют на локальный или удаленный компьютер специальным образом сформированные запросы, в результате чего система прекращает
свою работу.
К1.2.3. Rootkit. Программа, предназначенная для сокрытия в системе определенных объектов либо признаков активности. Сокрытию, как
правило, подвергаются ключи реестра (например, отвечающие за автозапуск вредоносных объектов), файлы, процессы в памяти зараженного
компьютера, вредоносная сетевая активность.
Сам по себе Rootkit ничего вредоносного не делает, но очень часто
используется вредоносными программами для увеличения собственного времени жизни в пораженных системах в силу затрудненного
обнаружения.
К1.2.4. Trojan-*
Trojan-Banker. Вредоносная программа, предназначенная для кражи
пользовательской информации, относящейся к банковским системам,
системам электронных денег и пластиковых карт. Найденная информация передается злоумышленнику. Для передачи данных «хозяину» могут
быть использованы электронная почта, FTP, HTTP (посредством указания данных в запросе) и другие способы.
Trojan-Clicker. Вредоносная программа, предназначенная для несанкционированного пользователем обращения к интернет-ресурсам (обычно к
веб-страницам). Достигается это либо посылкой соответствующих команд
браузеру, либо заменой системных файлов, в которых указаны «стандартные» адреса интернет-ресурсов (например, файл hosts в MS Windows).
У злоумышленника могут быть различные цели для подобных действий:
— увеличение посещаемости каких-либо сайтов для повышения частоты показов рекламы;
— организация DoS-атаки (Denial of Service) на какой-либо сервер;
— привлечение потенциальных жертв для заражения вирусами или
троянскими программами.
Trojan-DDoS. Вредоносная программа, предназначенная для проведения несанкционированной пользователем DoS – (Denial of Service)
атаки с пораженного компьютера на компьютер-жертву по заранее
определенному адресу.
152
Суть атаки сводится к посылке жертве многочисленных запросов, что
приводит к отказу в обслуживании, если ресурсы атакуемого удаленного
компьютера недостаточны для обработки всех поступающих запросов.
Часто для проведения успешной DDoS-атаки злоумышленники
предварительно заражают «троянцами» данного типа множество компьютеров (например, в ходе массированной спам-рассылки), после чего
каждый из зараженных компьютеров атакует заданную жертву.
Trojan-Downloader. Вредоносная программа, предназначенная для несанкционированной пользователем загрузки и установки на компьютержертву новых версий вредоносных программ, установки троянцев или
рекламных систем. Загруженные из Интернета программы затем либо запускаются на выполнение, либо регистрируются троянцем на автозагрузку в соответствии с возможностями операционной системы.
Информация об именах и расположении загружаемых программ содержится в коде и данных троянца или скачивается троянцем с «управляющего» интернет-ресурса (обычно, с веб-страницы). Данный тип
вредоносных программ в последнее время стал часто использоваться для
первоначального заражения посетителей зараженных веб-страниц, содержащих эксплойты.
Trojan-Dropper. Вредоносная программа, предназначенная для несанкционированной пользователем скрытой инсталляции на компьютер-жертву вредоносных программ, содержащихся в теле этого типа
троянцев.
Данный тип вредоносных программ обычно без каких-либо сообщений (либо с ложными сообщениями об ошибке в архиве, неверной версии операционной системы и др.) сохраняют на диск жертвы (часто в
системный каталог Windows или временный каталог и т.д.) другие файлы
и запускают их на выполнение.
В результате использования программ данного класса хакеры достигают двух целей:
— скрытной инсталляции троянских программ и вирусов;
— защиты от детектирования известных вредоносных программ антивирусами, поскольку не все из них в состоянии проверить компоненты внутри подобных троянцев.
Trojan-FakeAV. Класс вредоносных программ, имитирующих работу
антивирусного программного обеспечения или защитных компонентов
операционной системы в целях получения от пользователя вознаграждения за обнаружение и удаление несуществующих угроз. Такие программы показывают множество нежелательных уведомлений, создают дискомфорт, стимулируя пользователя внести плату. Иногда препятствуют
нормальной работе компьютера, но, как правило, не блокируют систему
полностью, чтобы не утратить доверия жертвы.
Trojan-GameThief. Вредоносная программа, предназначенная для
кражи пользовательской информации, относящейся к сетевым играм.
153
Найденная информация передается злоумышленнику. Для передачи
данных «хозяину» могут быть использованы электронная почта, FTP,
HTTP (посредством указания данных в запросе) и другие способы.
Trojan-IM. Вредоносная программа, предназначенная для кражи
пользовательских эккаунтов (логин и пароль) от интернет-пейджеров
(например, ICQ, MSN Messenger, AOL Instant Messenger, Yahoo Pager,
Skype и др.).
Найденная на зараженном компьютере информация передается злоумышленнику. Для передачи данных «хозяину» могут быть использованы электронная почта, FTP, WWW (посредством указания данных в запросе) и другие способы.
Trojan-Notifier. Вредоносная программа, предназначенная для несанкционированного пользователем сообщения своему «хозяину» о том, что
зараженный компьютер сейчас находится «на связи». При этом на адрес
злоумышленника отправляется информация о компьютере, например,
IP-адрес компьютера, номер открытого порта, адрес электронной почты и
т.п. Отсылка осуществляется различными способами: электронным письмом, специально оформленным обращением к WEB-странице злоумышленника, ICQ-сообщением.
Trojan-Proxy. Вредоносная программа, предназначенная для осуществления злоумышленником несанкционированного пользователем
анонимного доступа к различным интернет-ресурсам через компьютержертву. Данный тип вредоносных программ обычно используется при
рассылке спама через зараженные компьютеры.
Данные троянские программы используются в многокомпонентных
троянских наборах для извещения злоумышленника об успешной инсталляции вредоносных программ в атакуемой системе.
Trojan-Ransom. Вредоносная программа, предназначенная для несанкционированной пользователем модификации данных на компьютере-жертве таким образом, чтобы сделать невозможным работу с ними
либо блокировать нормальную работу компьютера. После того, как данные «взяты в заложники» (блокированы), пользователю выдвигается
требование выкупа.
Обозначенную в требовании сумму жертва должна передать злоумышленнику, после чего злоумышленник обещает выслать программу для восстановления данных или нормальной работоспособности
компьютера.
Trojan-SMS. Вредоносная программа, предназначенная для несанкционированной пользователем отсылки SMS-сообщений с пораженных мобильных устройств на дорогостоящие платные номера, которые
«жестко» записаны в теле вредоносной программы.
Trojan-Spy. Вредоносная программа, предназначенная для ведение электронного шпионажа за пользователем (вводимая с клавиатуры информация, снимки экрана, список активных приложений и т.д.).
Найденная информация передается злоумышленнику. Для передачи
154
данных «хозяину» могут быть использованы электронная почта, FTP,
HTTP (посредством указания данных в запросе) и другие способы.
Trojan-Mailfinder. Вредоносная программа, предназначенная для несанкционированного пользователем сбора адресов электронной почты
на компьютере с последующей передачей их злоумышленнику через
электронную почту, HTTP, FTP или другими способами. Украденные
адреса используются злоумышленниками при проведении последующих рассылок вредоносных программ и спама.
Trojan-PSW. Вредоносная программа, предназначенная для кражи
пользовательских аккаунтов (логин и пароль) с пораженных компьютеров. Название PSW произошло от Password-Stealing-Ware.
При запуске PSW-троянцы ищут необходимую им информацию в
системных файлах, хранящих различную конфиденциальную информацию, или реестре. В случае успешного поиска программа отсылает
найденные данные «хозяину». Для передачи данных могут быть использованы электронная почта, FTP, HTTP (посредством указания
данных в запросе) и другие способы. Некоторые троянцы данного типа
воруют регистрационную информацию к различному программному
обеспечению.
П р и м е ч а н и е : Trojan-PSW, занимающиеся кражей банковских аккаунтов, аккаунтов к интернет-пейджерам, а также аккаунтов к компьютерным играм, относятся к Trojan-Banker, Trojan-IM и Trojan-GameThief
соответственно. В отдельные типы данные вредоносные программы выделены в силу их многочисленности.
К1.3 Подозрительные упаковщики. Вредоносные программы часто сжимаются различными способами упаковки, совмещенными с шифрованием
содержимого файла для того, чтобы исключить обратную разработку программы и усложнить анализ ее поведения проактивными и эвристическими
методами. Антивирусом детектируются результаты работы подозрительных
упаковщиков — упакованные объекты. Существуют приемы борьбы с распаковкой: например, упаковщик может расшифровывать код не полностью, а лишь по мере исполнения или расшифровывать и запускать вредоносный объект целиком только в определенный день недели.
Основными признаками, по которым дифференцируют объекы подкласса «Подозрительные упаковщики», являются вид и количество упаковщиков, использованных при сжатии файла.
К1.4 Вредоносные утилиты. Вредоносные программы, разработанные для автоматизации создания других вирусов, червей или троянских
программ, организации DoS-атак на удаленные серверы, взлома других
компьютеров и т.п. В отличие от вирусов, червей и троянских программ
представители данной категории не являются угрозой непосредственно
компьютеру, на котором исполняются.
Основные признаки, по которым различают вредоносные утилиты —
это совершаемые ими действия.
155
Constructor. Программы, предназначенные для изготовления новых
компьютерных вирусов, червей и троянских программ. Известны конструкторы вредоносных программ для DOS, Windows и макро-платформ. Подобные программы позволяют генерировать исходные тексты
вредоносных программ, объектные модули и непосредственно зараженные файлы. Некоторые конструкторы снабжены стандартным оконным
интерфейсом, где при помощи системы меню можно выбрать тип вредоносной программы, наличие или отсутствие самошифровки, противодействие отладчику и т.п.
HackTool. Программа, используемая злоумышленниками при организации атак на локальный или удаленный компьютер (например, несанкционированное пользователем внесение нелегального пользователя в список разрешенных посетителей системы; очистка системных
журналов в целях сокрытия следов присутствия в системе; снифферы с
выраженным вредоносным функционалом и т.д.).
Email-Flooder. Программы, функцией которых является «забивания
мусором» (бесполезными сообщениями) каналов электронной почты.
Данные программы могут использоваться спамерами.
Spoofer. Программы, позволяющие отправлять сообщения и сетевые
запросы с поддельным адресом отправителя. Программы данного типа
могут быть использованы с различными целями (например, затруднить
обнаружение отправителя или выдать сообщение за сообщение, отправленное оригиналом).
К2. Adware, Pornware и Riskware
Это программы поведения, которые разрабатываются и распространяются абсолютно легально и могут использоваться в повседневной
работе, например, системных администраторов. Однако подобные программы могут быть использованы как во благо, так и во вред — в зависимости от того, в чьих руках они находятся.
Например, если программа удаленного администрирования установлена на компьютер пользователя системным администратором, то ничего
страшного в этом нет, так как администратор всего лишь получает возможность удаленно решать возникающие у пользователя проблемы. Но если та
же программа установлена на компьютер пользователя злоумышленником,
то он фактически получает полный контроль над компьютером-жертвой и
в дальнейшем может использовать его по своему усмотрению.
Классификация детектируемых объектов «Лаборатории Касперского»
выделяет эти программы в отдельную группу условно нежелательных
программ — программ, которые невозможно однозначно отнести ни к
опасным, ни к безопасным.
Adware (Adware, Advware, Browser Hijackers) — рекламное программное обеспечение, предназначенное для показа рекламных сообщений
(чаще всего в виде графических баннеров); перенаправления поисковых
запросов на рекламные веб-страницы; а также для сбора данных мар156
кетингового характера об активности пользователя (например, какие
тематические сайты посещает пользователь), позволяющих сделать рекламу более целенаправленной.
За исключением показов рекламы, подобные программы, как правило, никак не проявляют своего присутствия в системе — отсутствует
значок в системном трее, нет упоминаний об установленных файлах в
меню программ.
Часто у Adware-программ нет процедур деинсталляции, используются пограничные с вирусными технологии, позволяющие скрытно внедряться на компьютер пользователя и незаметно осуществлять на нем
свою деятельность.
На компьютеры пользователей Adware чаще всего попадает двумя
способами:
— путем встраивания рекламных компонентов в бесплатное и условно-бесплатное программное обеспечение (freeware, shareware);
— путем несанкционированной пользователем установки рекламных компонентов при посещении пользователем «зараженных»
веб-страниц.
Большинство программ freeware и shareware прекращает показ рекламы после их покупки или регистрации. Подобные программы часто
используют встроенные Adware-утилиты сторонних производителей.
В некоторых случаях эти Adware-утилиты остаются установленными на
компьютере пользователя и после регистрации программ, с которыми они
изначально попали в операционную систему. При этом удаление Adwareкомпонента, все еще используемого какой-либо программой для показа
рекламы, может привести к сбоям в функционировании этой программы.
Базовое назначение Adware данного типа — неявная форма оплаты
программного обеспечения, осуществляемая за счет показа пользователю
рекламной информации (рекламодатели платят за показ их рекламы рекламному агентству, рекламное агентство — разработчику Adware). Adware
помогает сократить расходы как разработчикам программного обеспечения (доход от Adware стимулирует их к написанию новых и совершенствованию существующих программ), так и самим пользователям.
В случае установки рекламных компонентов при посещении пользователем «зараженных» веб-страниц в большинстве случаев применяются
хакерские технологии: проникновение в компьютер через «дыры» в системе безопасности интернет-браузера, а также использование троянских
программ, предназначенных для скрытной установки программного обеспечения (Trojan-Downloader или Trojan-Dropper). Adware-программы,
действующие подобным образом, часто называют «Browser Hijackers».
Доставка рекламы
Известны два основных способа доставки рекламной информации:
— скачивание рекламных текстов и изображений с веб- или FTPсерверов, принадлежащих рекламодателю;
157
— перенаправление поисковых запросов интернет-браузера на рекламный веб-сайт.
Перенаправление запросов в некоторых случаях происходит только
при отсутствии запрашиваемой пользователем веб-страницы, то есть
при ошибке в наборе адреса страницы.
Сбор данных
Многие рекламные системы, помимо доставки рекламы собирают
конфиденциальную информацию о компьютерах и пользователях:
— IP-адреса компьютера;
— версию установленной операционной системы и интернет-браузера;
— списоки часто посещаемых пользователями интернет-ресурсов;
— поисковые запросы;
— прочие данные, которые можно использовать при проведении последующих рекламных кампаний.
Не стоит путать Adware, занимающиеся сбором информации, с троянскими шпионскими программами. Отличие Adware состоит в том, что они
осуществляют подобный сбор с СОГЛАСИЯ пользователя.
Если Adware никак не уведомляет пользователя об осуществляемом
ей сборе информации, то она подпадает под поведение Trojan-Spy и относится к категории вредоносных программ.
Riskware — к этой категории относятся обычные программы (некоторые из них свободно продаются и широко используются в легальных
целях), которые, тем не менее, в руках злоумышленника способны причинить вред пользователю (вызвать уничтожение, блокирование, модификацию или копирование информации, нарушить работу компьютеров или компьютерных сетей).
В списке программ категории Riskware можно обнаружить коммерческие утилиты удаленного администрирования, программы-клиенты
IRC, программы дозвона, программы для загрузки («скачивания») файлов, мониторы активности компьютерных систем, утилиты для работы с
паролями, а также многочисленные интернет-серверы служб FTP, Web,
Proxy и Telnet.
Все эти программы не являются вредоносными сами по себе, однако
обладают функционалом, которым могут воспользоваться злоумышленники для причинения вреда пользователям.
Pornware — программы, которые так или иначе связаны с показом
пользователю информации порнографического характера. Такие программы могут быть установлены пользователем на свой компьютер сознательно, в целях поиска и получения порнографической информации.
В этом случае они не являются вредоносными.
С другой стороны, те же программы могут быть установлены на пользовательский компьютер злоумышленниками — через использование
уязвимостей операционной системы и интернет-браузера или при помощи вредоносных троянских программ классов Trojan-Downloader или
158
Trojan-Dropper. Делается это обычно в целях «насильственной» рекламы
платных порнографических сайтов и сервисов, на которые пользователь
сам никогда не обратил бы внимания.
15.3. Антивирусные программы
Антивирусная программа (антивирус) — любая программа для обнаружения компьютерных вирусов, а также нежелательных (считающихся
вредоносными) программ вообще и восстановления зараженных (модифицированных) такими программами файлов, а также для профилактики — предотвращения заражения (модификации) файлов или операционной системы вредоносным кодом.
Классифицировать антивирусные продукты можно сразу по нескольким признакам, таким как: используемые технологии антивирусной защиты, функционал продуктов, целевые платформы, по объектам защиты.
По используемым технологиям антивирусной защиты:
— классические антивирусные продукты (продукты, применяющие
только сигнатурный метод детектирования). Чаще всего эти программы
называют антивирусными сканерами;
— продукты проактивной антивирусной защиты (продукты, применяющие только проактивные технологии антивирусной защиты). Такие
программы принято называть антивирусными мониторами;
— комбинированные продукты (продукты, применяющие как классические, сигнатурные методы защиты, так и проактивные).
По функционалу продуктов:
— антивирусные продукты (продукты, обеспечивающие только антивирусную защиту);
— комбинированные продукты (продукты, обеспечивающие не только
защиту от вредоносных программ, но и фильтрацию спама, шифрование
и резервное копирование данных и другие функции).
По целевым платформам:
— антивирусные продукты для ОС семейства Windows;
— антивирусные продукты для ОС семейства *NIX (к данному семейству относятся ОС BSD, Linux, Mac OS X и др.);
— антивирусные продукты для мобильных платформ (Windows
Mobile, Symbian, iOS, BlackBerry, Android, Windows Phone 7 и др.).
Антивирусные продукты для корпоративных пользователей можно
также классифицировать по объектам защиты:
— антивирусные продукты для защиты рабочих станций;
— антивирусные продукты для защиты файловых и терминальных
серверов;
— антивирусные продукты для защиты почтовых и Интернет-шлюзов;
— антивирусные продукты для защиты серверов виртуализации.
16. Базовые средства администрирования Windows
В повседневной работе системного администратора можно выделить
набор задач, требующих быстрого и безотлагательного выполнения.
К таким задачам относят, например, регистрацию нового пользователя в
системе, назначение прав доступа пользователя к тем или иным файлам
и каталогам, установку и настройку программного обеспечения, восстановление работоспособности подсистемы печати и другие.
На компьютерах с установленной ОС Windows к основным инструментам, с помощью которых системный администратор может и должен
решать широкий круг задач, принадлежат: средства Панели управления, утилиты командной строки, консоль «Управление компьютером» и
консоль управления Microsoft (Microsoft Management Console — MMC).
Указанные инструменты подробно описаны в ряде работ, предназначенных для углубленного изучения Windows: [1; 4; 17].
Панель управления (Control Panel)
Панель управления содержит приложения для настройки программ и
оборудования компьютера, среды конкретного пользователя и стандартной среды Windows. Панель управления представлена как веб-страница
с группами типовых задач (рис 16.1).
Для получения подробного списка задач нужно изменить режим
просмотра на один из двух режимов Крупные значки или Мелкие значки
(рис. 16.2).
Утилиты командной строки
При администрировании компьютера или сети компьютеров достаточно часто применяется командная оболочка, представляющая собой
программу, обеспечивающую прямую связь между пользователем и операционной системой без использования графического интерфейса.
Рис. 16.1. Общий вид Панели управление в режиме «Категория»
160
Рис. 16.2. Вид Панели управление в режиме «Мелкие значки»
Рис. 16.3. Общий вид консоли «Управление компьютером»
Консоль Управление компьютером
Набор административных инструментов, с помощью которых можно
изменять большинство параметров локального или удаленного компьютера, сосредоточен в консоли Управление компьютером (рис. 16.3). Чтобы
ее открыть, необходимо щелкнуть правой кнопкой мыши на значке
Мой компьютер на Рабочем столе и в контекстном меню выбрать пункт
Управление.
В левой части консоли «Управление компьютером» расположены три
основных узла, каждый из которых включает несколько инструментов
администрирования — оснасток. Содержание выбранной в текущий момент оснастки отображается в правой части окна.
161
Рис. 16.4. Состав узла управления Служебные программы
Рис. 16.5. Окно консоли ММС
Узел «Служебные программы» (рис. 16.4) позволяет управлять системными событиями, учетными записями пользователей и производительностью компьютера.
Консоль управления MMC (Microsoft Management Console)
Консоль управления ММС — одно из основных средств администрирования Windows. Она предоставляет стандартный способ создания, сохранения и открытия административных утилит — консолей.
Для открытия консоли ММС в Windows 7 нужно нажать Пуск и в окне
«Найти программы и файлы» набрать mmc. В верхней части окна поиска
в разделе Программы будет отображен значок программы Консоль ММС.
После запуска программы на экране отобразится основное окно консоли ММС (рис. 16.5).
Переход в режим добавления/удаления оснастки происходит после
нажатия Файл и затем Добавить или удалить оснастку. В результате на
экран будет выведено окно «Добавление и удаление оснасток» (рис.16.6),
с помощью которого создаются новые оснастки.
Консоль управления не выполняет функций администрирования.
В ней помешаются административные приложения — оснастки, которые используются для выполнения задач по администрированию, а также для решения проблем на локальных и удаленных компьютерах.
162
Рис. 16.6. Окно выбора оснастки в консоли ММС
По умолчанию Windows сохраняет файлы пользовательских консолей (с расширением .msc) в папку Administrative Tools автора консоли.
Дерево консоли отображает иерархию ее оснасток, что упрощает их поиск. В панели подробных сведений (справа) показываются элементы
активной оснастки. Существует два вида оснасток: изолированные и
расширения.
Изолированную оснастку обычно называют просто оснасткой. Она
предоставляет одну функцию или связанный набор функций.
Оснастку-расширение обычно называют просто расширением; она
предоставляет дополнительные функции администрирования другим
оснасткам. Расширения предназначены для работы с одной или несколькими изолированными оснастками в зависимости от их назначения.
Параметры консоли позволяют определить ее назначение, выбрав
соответствующий режим консоли — авторский или пользовательский.
При сохранении консоли в авторском режиме, пользователю предоставляется полный доступ ко всем функциям консоли ММС, включая
возможность изменять консоли. Сохранять консоль в авторском режиме следует, если предполагается предоставить пользователю право добавлять или удалять оснастки, создавать новые окна, просматривать все
узлы дерева консоли, а также сохранять консоли.
В большинстве случаев консоль, доступную другим администраторам, рекомендуется сохранять в пользовательском режиме. Если консоль сохранена в этом режиме, пользователи не могут добавлять и удалять оснастки, а также сохранять консоль.
163
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
164
Бойс Дж., Андерсон К. и др. Расширенное техническое руководство по
Windows NT Workstation 4.0. В двух книгах. М.: СК Пресс, 1998.
Гленн К. Системное администрирование в школе, вузе, офисе — М.:
СОЛОН-ПРЕСС, 2008.
Гордеев А.В. Операционные системы: Учебник для вузов. 2-е изд. —
СПб.: Питер, 2009.
Дейтел Х.М., Дейтел П.Дж., Чофнес Д.Р. Операционные системы.
Основы и принципы: Третье издание. Пер. с англ. — М.: ООО «БиномПресс», 2006.
Иванов Н.А. «Дисковая подсистема персонального компьютера».
Методи-ческие указания к выполнению лабораторных работ по курсу
«Системное программное обеспечение», — М., МГСУ, 2009.
Карпов В.Е., Коньков К.А., Иванников В.П. Введение в операционные
системы. Режим доступа: http://cs.mipt.ru/docs/courses/osstud/12/ch12.
htm, Дата обращения: 12.05.13.
Кастер Х. Основы Windows NT и NTFS/пер. с англ. — М.: Издательский
отдел «Русская редакция» ТОО «Channel Trading Ltd», 1996.
Клейман Д. Winternals: руководство по администрированию, восстановлению, дефрагментации. Пер. с англ. — М.: ООО «Бином-Пресс», 2007.
Клименко Р.А. Тонкости реестра Windows Vista. Трюки и эффекты
(+CD). – СПб.: Питер, 2008.
Климов А.П. Реестр Windows 7 — СПб.: Питер, 2010.
Колесов А. Вернемся к нашим гипервизорам // PC Week/RE. 2009.
№ 16–17.
Колисниченко Д.Н. Ubuntu 10. Краткое руководство пользователя. —
СПб.: БХВ-Петербург, 2010.
Кофлер М. Весь Linux. Установка, конфигурирование, использование:
7-е изд. Пер.с нем. — М.: ООО «БиномПресс», 2007.
Лав Р. Разработка ядра Linux, 2-е издание.: Пер. с англ. — М.: ООО
«И.Д. Вильямс», 2006.
Олифер В.Г., Олифер Н.А. Сетевые операционные системы. — СПб.:
Питер, 2007.
Робачевский А.М., Немнюгин С.А., Стесик О.Л. Операционная система
UNIX. — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2007.
Руссинович М., Соломон Д. Внутреннее устройство Microsoft Windows:
Windows Server 2003, Windows XP и Windows 2000. Мастер-класс. / Пер.
18.
19.
20.
21.
22.
23.
24.
25.
26.
с англ. — 4е изд. — М.: Издательство «Русская Редакция»; СПб.: Питер,
2008. — 992 стр.: ил.
Сычев Ю.Н. Основы информационной безопасности Учебно-практическое пособие. — М.: Изд. центр ЕАОИ, 2007.
Таненбаум Э., Вудхалл А. Операционные системы: разработка и реализация. Классика CS. — СПб.: Питер, 2006.
Торчинский Ф. UNIX. Практическое пособие администратора, 2-е издание. — СПб.: Символ-Плюс, 2005.
Хозяин системы. Режим доступа: http://www.faito.ru/blogs/2006/07/25/
khozjain_sistemy.html, Дата обращения: 12.05.13.
Шалин П.А. Реестр Windows XP. Специальный справочник — СПб.:
Питер, 2005.
Эндрюс Г.Р. Основы многопоточного, параллельного и распределенного программирования. : Пер. с англ. — М.: Издательский дом
«Вильямс», 2003.
UNIX. Руководство системного администратора. Режим доступа:
http://hr-portal.ru/di?page=31&title=&title_op=word, Дата обращения:
12.05.13.
http://ru.wikipedia.org/wiki/Вредоносная_программа
http://www.securelist.com/ru/threats/detect?chapter=32
Классификация вредоносных программ по номенклатуре компании
«Лаборатория Касперского».
Оглавление
Введение ................................................................................................................ 3
1. Общие сведения о системном администрировании .................................. 4
1.1. Что такое системное администрирование? ...................................... 4
1.2. Кто такой системный администратор? ............................................. 5
1.2.1. Описание профессии ................................................................ 5
1.2.2. Что должен уметь системный администратор .......................... 6
1.2.3. Системный администратор и современный рынок труда ....... 7
1.3. Основные задачи системного администратора ............................... 9
1.3.1. Выбор и установка операционной системы ........................... 9
1.3.2. Подключение и удаление пользователей ................................ 9
1.3.3. Подключение и удаление аппаратных средств ...................... 10
1.3.4. Резервное копирование .......................................................... 10
1.3.5. Инсталляция новых программных средств ........................... 10
1.3.6. Мониторинг системы ............................................................. 10
1.3.7. Поиск неисправностей ............................................................ 10
1.3.8. Ведение локальной документации.......................................... 11
1.3.9. Контроль защиты .................................................................... 11
1.3.10. Оказание помощи пользователям ........................................ 11
1.4. Системное администрирование
и системное программное обеспечение .......................................... 11
2. Управление вводом/выводом в операционных системах ........................ 14
2.1. Основные концепции организации ввода/вывода
в операционных системах ............................................................... 14
2.2. Режимы управления вводом/выводом ............................................ 16
2.3. Основные системные таблицы ввода/вывода ................................ 19
3. Организация внешней памяти на магнитных носителях ........................ 24
3.1. Диски, разделы, секторы, кластеры ................................................ 24
3.2. Способы размещения файлов на диске ........................................... 28
3.2.1. Выделение непрерывной последовательностью блоков ....... 28
3.2.2. Связный список блоков/кластеров ........................................ 29
3.2.3. Связный список с использованием индекса ......................... 30
3.2.4. Перечисление номеров блоков .............................................. 31
3.3. Учет свободного и занятого дискового пространства .................... 31
3.4. Проблема размера единицы распределения дискового пространства 32
4. Логическая организация файловой системы ........................................... 34
4.1. Цели и задачи файловой системы.................................................... 34
4.2. Типы файлов .................................................................................... 36
4.3. Иерархическая структура файловой системы ................................ 37
4.4. Имена файлов .................................................................................. 37
4.5. Монтирование файловых систем .................................................... 39
4.6. Атрибуты файлов ............................................................................. 41
4.7. Логическая организация файла ...................................................... 43
5. Файловая система FAT .............................................................................. 46
5.1. Структура файловой системы FAT ................................................. 46
5.2. Функционирование файловой системы FAT .................................. 47
5.3. Файловые системы FAT12, FAT16, FAT32 ...................................... 48
5.4. Имена файлов в файловых системах FAT12, FAT16, FAT32 .......... 49
5.4.1. Состав записи каталога для имени файла в формате 8.3 ....... 50
5.4.2. Организация хранения длинных имен файлов ...................... 51
6. Файловая система HPFS ........................................................................... 54
7. Файловая система NTFS ........................................................................... 58
7.1. Структура тома NTFS ....................................................................... 58
7.2. Структура файлов и каталогов NTFS .............................................. 61
8. Отказоустойчивость файловых систем ..................................................... 68
8.1. RAID 0. Дисковый массив без отказоустойчивости
(Striped Disk Array without Fault Tolerance) ....................................... 68
8.2. RAID 1. Дисковый массив с зеркалированием (mirroring).............. 69
8.3. RAID 2. Схема резервирования данных с использованием
кода Хэмминга (Hamming code) для коррекции ошибок............................ 70
8.4. RAID 3. Отказоустойчивый массив
с параллельным вводом/выводом и диском контроля четности ..... 71
8.5. RAID 4. Отказоустойчивый массив независимых дисков
с общим диском контроля четности ................................................. 71
8.6. RAID 5. Отказоустойчивый массив независимых дисков
с распределенной четностью ............................................................ 72
8.7. RAID 10 (RAID 1+0). Отказоустойчивый массив
с дублированием и параллельной обработкой ................................ 73
8.8. Составные дисковые массивы .......................................................... 74
8.9. Реализация RAID-системы программным путем ............................ 74
9. Восстанавливаемые файловые системы ................................................... 77
9.1. Причины нарушения целостности файловой системы .................. 77
9.2. Технология протоколирования транзакций .................................... 78
9.3. Восстанавливаемость файловой системы NTFS ............................. 80
9.4. Этапы процесса восстановления файловой системы ..................... 85
9.4.1. Проход анализа ........................................................................ 85
9.4.2. Проход повтора ....................................................................... 86
9.4.3. Проход отмены ........................................................................ 87
10. Основы организации ОС UNIX .............................................................. 89
10.1. Особенности архитектуры UNIX ................................................... 89
10.2. Базовые элементы ОС UNIX и их взаимодействие ....................... 91
10.2.1. Файлы и файловая система ................................................... 91
10.2.2. Пользователи и группы ......................................................... 97
10.2.3. Владельцы файлов и управление правами доступа ............ 100
10.2.4. Процессы в UNIX ................................................................ 103
10.2.5. Сигналы в UNIX .................................................................. 110
11. Архивация файлов .................................................................................. 113
11.1. Основные понятия архивации ...................................................... 113
11.2. Для чего архивация нужна сейчас? ............................................... 115
11.3. Типы архивов и алгоритмы сжатия ............................................... 116
12. Виртуализация в вычислительных системах ......................................... 121
12.1. Типы виртуализации ..................................................................... 121
12.1.1. Программная виртуализация ............................................... 121
12.1.2. Аппаратная виртуализация .................................................. 123
12.2. Области применения виртуализации ........................................... 124
12.2.1. Виртуализация уровня ОС ................................................... 124
12.2.2. Виртуальные машины .......................................................... 124
12.2.3. Виртуализация серверов....................................................... 125
12.2.4. Виртуализация ресурсов ....................................................... 125
12.2.5. Виртуализация приложений ................................................ 126
13. Организация мультизагрузочных систем ............................................... 127
14. Реестр Windows ........................................................................................ 135
14.1. Основные понятия о реестре Windows ................................................ 135
14.1.1. Структура реестра ................................................................. 135
14.1.2. Данные каких типов хранятся в реестре .............................. 136
14.1.3. В каких файлах хранится системный реестр ....................... 138
14.2. Основные правила работы с реестром .......................................... 138
14.3. Резервное копирование и восстановление реестра ...................... 141
14.4. Критика технологии сохранения настроек системы
с помощью реестра ........................................................................ 143
15. Вредоносные программы и средства борьбы с ними ............................ 144
15.1. Терминология ................................................................................ 144
15.2. Классификация вредоносных программ ...................................... 145
15.3. Антивирусные программы ............................................................ 159
16. Базовые средства администрирования Windows.................................... 160
Библиографический список .............................................................................. 164
Минимальные системные требования определяются соответствующими
требованиями программ Adobe Reader версии не ниже 11-й
либо Adobe Digital Editions версии не ниже 4.5
для платформ Windows, Mac OS, Android и iOS; экран 10”
Учебное электронное издание
Иванов Николай Александрович
СИСТЕМНОЕ
АДМИНИСТРИРОВАНИЕ
ПЕРСОНАЛЬНОГО КОМПЬЮТЕРА
Редактор Н.С. Плоткина
Корректор В.К. Чупрова
Дизайн обложки и верстка Д.Л. Разумнхкх
одписано к использованию 05.0 .2017
Формат 1
,5 см
Гарнитура e ton
Федера ное осударственное б д етное образовате ное
у у ре дение в с е о образования
Национа н й исс едовате ский
Московский осударственн й строите н й университет
Москва рос авское
Те
Издате ство МИСИ МГСУ
вн
Сайт
о та
Электронная версия данной книги подготовлена
Агентством электронны изданий Интермедиатор
Сайт: ttp://
.inter ediator.r
елефон: (4 5) 5 7-74- 1
Эл. по та: info inter ediator.r
Download