- •4 Курс, 1 семестр
- •Оглавление
- •1 Введение в ос unix
- •1.1 История создания
- •1.2 Базовые концепции
- •1.3 Архитектура unix
- •1.4 Пользователи системы
- •1.5 Пользовательская среда Unix.
- •2 Файловая подсистема
- •2.1 Понятие
- •2.2 Логическая структура файловой системы
- •2.3 Имена файлов в ос unix
- •2.4 Типы файлов
- •2.5 Права доступа к файлам
- •2.6 Физическое размещение файловой системы
- •2.7 Особенности размещения файловой системы sVfs
- •2.8 Особенности размещения файловой системы ffs (ufs)
- •2.9 Монтирование файловых систем
- •2.10 Восстановление файловой системы
- •2.11 Типы файловых систем unix
- •3 Подсистема управления процессами
- •3.1 Понятие процесса
- •3.2 Логическая организация процессов
- •3.3 Жизненный цикл процесса
- •3.4 Реализация процессов
- •3.4.1 Состав процесса
- •3.4.2 Структуры управления процессом
- •3.4.3 Файловая система /proc
- •3.5 Нити (потоки)
- •Причины появления нитей
- •Типы нитей
- •3) Прикладные нити. Существует возможности поддержки нитей полностью на прикладном уровне, при этом ядру об их существовании ничего не известно.
- •3.5 Планирование
- •3.5.1 Задачи планировщика
- •3.5.2 Приоритеты процессов
- •3.5.3 Реализация планировщика
- •3.5.4 Расчет приоритета
- •3.5.5 Особенности планирования в Linux
- •3.6 Взаимодействие между процессами (Interprocess Communication, ipc)
- •3.6.1 Введение
- •3.6.2 Взаимодействие родственных процессов
- •3.6.3 Взаимодействие произвольных процессов
- •Разделяемая память.
- •Передача сообщений.
- •Семафоры.
- •3.6.4 Межпроцессное взаимодействие с помощью файловой системы
- •4 Управление памятью
- •4.1 Понятие виртуальной памяти
- •4.2 Свопинг
- •4.3 Страничное замещение
- •4.4 Стратегия замещения страниц
- •5 Подсистема ввода-вывода
- •5.1 Основные задачи
- •5.2 Типы устройств ввода-вывода в ос
- •5.3 Общая схема
- •5.4 Драйвера
- •5.5 Буферизация
- •5.6 Поддержка операций ввода-вывода
- •6 Unix в сетях
- •6.1 Конфигурация tcp/ip
- •6.2 Основные сетевые утилиты
- •6.3 Основные сетевые интерфейсы
- •6.4 Доступ к сетевым ресурсам
- •6.5 Сетевые службы Unix
2.10 Восстановление файловой системы
Структура файловой системы, описанная выше в терминах i-узлов, блоков, косвенных блоков и суперблока, может быть нарушена и требовать восстановления. Например, при разрушении информации в трижды косвенном блоке могут появиться следующие проблемы:
некоторый блок может быть вне системы, т.е. не являться частью файла и не быть в списке свободных блоков;
могут появиться дубли i-узлов, т.е. описывать один и тот же файл дважды;
некоторый блок может одновременно быть частью файла и быть в списке свободных блоков;
некоторый файл может существовать, не будучи включенным ни в один каталог.
К счастью, структура файловой системы обладает некоторой избыточностью, позволяющей восстанавливать отдельные поломки.
Вот некоторые виды избыточности:
блок данных, являющийся каталогом, содержит имена файлов и номера i-узлов; где-то есть i-узел, соответствующий этому каталогу, и этот i-узел должен быть каталогом, а не обычным файлом;
блок, включенный в список свободных блоков, теоретически не может быть частью какого-либо файла; для проверки этого достаточно сканировать все i-узлы для просмотра всех блоков, занятых файлами, и сканировать список свободных блоков;
аналогично, блок, принадлежащий файлу, должен принадлежать только одному файлу; это легко проверить.
Эти и другие виды избыточности использует программа проверки файловой системы, запускаемая командой fsck (file system check)
Из примера видно, что fsck выполняется в несколько фаз.
На этих фазах производится следующая работа:
проверка целостности i-узлов (счетчик связи, тип и формат i-узла);
проверка каталогов, указывающих на i-узлы, содержащие ошибки;
проверка каталогов, на которые нет ссылок;
проверка счетчиков связей в каталогах и файлах;
проверка неверных блоков и дублированных блоков в списке свободных блоков, неиспользуемых блоков, которые должны быть включены, но не включены в список свободных блоков, и счетчика общего числа свободных блоков.
После выполнения fsck, связанного с "починкой" файловой системы, может появиться сообщение: ***** BOOT UNIX (NO SYNC!) *****, требующее перезагрузки системы без выполнения команды sync.
Если этого не сделать, работа по восстановлению списка свободных блоков будет утрачена, так как копии управляющих таблиц и буфера в оперативной памяти остались старыми. Для их обновления требуется перезагрузка без выгрузки буферов на диск командой sync.
2.11 Типы файловых систем unix
По предназначению файловые системы можно классифицировать на следующие категории:
Физические файловые системы (так называемых disk-based) расположены в основной памяти и остаются там после выключения компьютера
Для носителей с произвольным доступом (например, жёсткий диск): FAT32, HPFS, ext2 и др. Поскольку доступ к дискам в разы медленнее, чем доступ к оперативной памяти, для прироста производительности во многих файловых системах применяется асинхронная запись изменений на диск. Для этого применяется либо журналирование, например в ext3, ReiserFS, JFS, NTFS, XFS, либо механизм soft_updates и др. Журналирование широко распространено в Linux, применяется в NTFS. Soft_updates - в BSD системах. Reiser4 не применяет журналирование, все операции в ней атомарны.
Для носителей с последовательным доступом (например, магнитные ленты): QIC, fifofs - эта новая файловая система использует механизм VFS для и др.
Для оптических носителей — CD и DVD: ISO9660, ISO9690, HFS, UDF и др.
Виртуальные файловые системы расположенs в виртуальной памяти и существуют только на время активности операционной системы. Такими являются: /proc - файловая система организации процессов,
/pipefs – для организации программных каналов, bfs - загрузочная файловая система, предназначенная для быстрой и простой загрузки и поэтому представляет собой очень простую плоскую файловую систему, состоящую из одного каталога;
Сетевые файловые системы: NFS, SMBFS, SSHFS, GmailFS и др.
Не во всех коммерческих реализациях поддерживаются все эти файловые системы, отдельные производители могут предоставлять только некоторые из них.
Кроме перечисленных, существуют специфические файловые системы, разработанные коммерческими фирмами.
Кроме родных систем, UNIX поддерживают файловые системы FAT NTFS.
2.12 VFS
Для поддержки различных файловых систем UNIX предоставляет специальный интерфейс уровня ядра, который называется VFS (Virtual Filesystem Switch). Виртуальная файловая система VFS, расположенная как бы между приложениями и конкретными файловыми системами, позволяет пользовательским приложениям получать доступ к множеству файловых систем разных типов.
Каждая отдельная смонтированная файловая система представляется структурой виртуальной файловой системы. Виртуальная файловая система может быть физической файловой системой, сетевой файловой системой или логической файловой.
Когда какой-либо процесс выдает системный вызов, связанный с работой файловой системы, ядро вызывает функцию, расположенную в VFS. Эта функция производит действия, не зависимые от структуры файловой системы, и перенаправляет вызов к функции этой файловой системы, которая выполняет операции, связанные с ее структурой. Код, реализующий операции с файловой системой, использует функции буфера для обращения к устройствам ввода/вывода.
Рисунок 2.6 – Архитектура виртуальной файловой системы
VFS содержит набор функций, которые должна поддерживать любая файловая система. Функции управляют тремя типами объектов: файловые системы, индексные дескрипторы и открытые файлы.
VFS содержит информацию о всех типах поддерживаемых файловых систем в специальной таблице, которая создается во время компиляции ядра.
VFS оперирует тремя структурами, связанными к файлам
vnode - (от virtual inode - виртуальный индексный дескриптор) - не зависящую от типа файловой системы. Vnode одинакова для всех файлов, независимо от типа реальной файловой системы и содержат информацию, необходимую для работы виртуальной файловой системы, а также неизменные характеристики файла, например, такие как тип файла.
inode - зависящую от типа файловой системы, где хранятся основные характеристики данного файла и с помощью которой обеспечивается доступ к его данным. Формат inode на уровне VFS не определен, а используется только ссылка на нее в структуре vnode.
дескриптор открытого файла. В то время как дескриптор inode содержит указатели к функциям, используемым по отношению к любому файлу (например, create или unlink), то дескриптор файлов содержит указатели к функциям, оперирующим только с открытыми файлами (например, read или write).
При необходимости копия inode создаётся в памяти. Если она была изменена, то содержимое дискового и "виртуального" inode синхронизируется. Старое содержимое inode на диске заменятеся теми данными, которые находятся в памяти. VFS склонна рассматривать копии inode в памяти как свои, а не как inode какой-либо другой системы.
Виртуальная файловая система VFS поддерживает следующие типы файлов:
обычные файлы,
каталоги,
специальные файлы,
именованные конвейеры,
символьные связи.