
- •Министерство образования и науки Российской Федерации
- •Лекция 1. Введение.
- •Лекция 2. Структура подсистемы обмена с ву
- •Лекция 3. Регистры ву
- •3.1. Виды регистров внешних устройств
- •3.2. Виды адресации регистров ву
- •Лекция 4. Алгоритм обмена без прерываний
- •37Bh – не используется
- •Лекция 5. Прерывания
- •5.1. Механизм прерываний
- •5.2. Таблица векторов прерываний
- •Лекция 6. Изменения установок обработки прерываний
- •6.1. Маскирование прерываний
- •6.2. Изменение таблицы векторов прерываний
- •6.3. Обработчики прерываний
- •Лекция 7. Аппаратные прерывания
- •Лекция 8. Дисковые системы (Часть 1) Организация магнитного диска
- •Лекция 9. Дисковые системы (Часть 2) Функции bios для работы с дисками
- •Инициализация контроллера нмд
- •Лекция 10. Файловые системы (Часть 1)
- •Организация логического диска
- •Лекция 11. Файловые системы (Часть 2)
- •Файловые системы Windows
- •Лекция 12. Файловая системаntfs Главная файловая таблица
- •Последовательность обновления
- •Атрибуты
- •Типы атрибутов
- •Лекция 13. Атрибуты ntfs
- •Списки отрезков
- •Лекция 14. Анализ и восстановление файловой системы
- •Лекция 15. Управление памятью
- •Типы адресов
- •Методы распределения памяти без использования дискового пространства
- •Лекция 16. Виртуальная память
- •Лекция 17. Виртуальная память (продолжение)
- •Лекция 18. Иерархия запоминающих устройств
- •Лекция 19. Управление вычислительными процессами
- •Вытесняющие и невытесняющие алгоритмы планирования
- •Лекция 20. Синхронизация и взаимодействие процессов
- •V(b); /* Выход из критической секции */
- •Лекция 21. Архитектура драйвера файловой системы
- •Локальные fsd
- •Удаленные fsd
- •Работа файловой системы
- •Явный файловый ввод-вывод
- •Подсистема отложенной записи
- •Поток, выполняющий опережающее чтение
- •Драйверы фильтров файловой системы
- •Лекция 22. Windows api
- •Windows api— набор функций операционной системы
- •Лекция 23. WindowsApi(продолжение)
- •Окно рабочего стола
- •Приложение Windows
- •Компоненты окна приложения
- •Создание окна
- •Атрибуты окна
- •Класс окна
- •Имя окна
- •Стиль окна
- •Родитель или владелец окна
- •Расположение, размер и позиция в z-порядке
- •Идентификатор дочернего окна или дескриптор меню
- •Дескриптор копии приложения
- •Дополнительные данные
- •Дескрипторы окна
- •Создание главного окна
- •Сообщения, посылаемые при создании окна
- •Многопоточные приложения
- •Общие стили окна
- •Позиционирование
- •Взаимоотношения с родительским окном
- •Рамка окна
- •Компоненты неклиентской области окна
- •Заблокированное окно
- •Окна переднего плана и фоновые окна
- •Активное окно
- •Видимость
- •Свернутые, развернутые и восстановленные окна
- •Размер и позиция окна
- •Размер окна
- •Позиция окна
- •Размер и позиция по умолчанию
- •Системные команды
- •Сообщения, связанные с размером и позицией окна
- •Уничтожение окна
- •Как создать главное окно
- •Работа с дочерними окнами
- •Как уничтожить окно
- •Лекция 24. Ловушки сообщений (Хуки)
- •Лекция 25. Трансляция с языков программирования Сущность трансляции. Компиляция и интерпретация
- •Фазы трансляции и выполнения программы
- •Препроцессор
- •Трансляция и ее фазы
- •Модульное программирование, компоновка
- •Структура транслятора
Списки отрезков
Тела нерезидентных атрибутов хранятся на диске в одной или нескольких кластерных цепочках, называемых отрезками (runs). Отрезком называется последовательность смежных кластеров, характеризующаяся номером начального кластера и длиной. Совокупность отрезков называется списком (run-list или data run).
Внутренний формат представления списков не то, чтобы сложен, но простым его тоже не назовешь. Для экономии места длина отрезка и номер начального кластера хранятся в полях переменной длины. Если размер отрезка умещается в байт (т.е. его значение не превышает 255), то он займет один байт. По аналогии, если размер отрезка требует для своего представления двойного слова, то он займет двойное слово.
Сами же поля размеров хранятся в 4-битных ячейках, называемых нибблами (nibble) или полубайтами. Шестнадцатеричная система счисления позволяет легко переводить байты в нибблы и наоборот. Младший ниббл равен (х & 15), а старший – (х / 16). Иначе говоря, младший ниббл соответствует младшему шестнадцатеричному разряду байта, а старший – старшему. Например, 69h состоит из двух нибблов, причем младший равен 9h, а старший – 6h.
Список отрезков представляет собой массив структур, каждая из которых описывает характеристики «своего» отрезка. Структура элемента списка отрезков показана в табл. 13.4. В конце списка находится завершающий ноль. Первый байт структуры состоит из двух нибблов: младший задает длину поля начального кластера отрезка (условно обозначаемого буквой F), а старший – количество кластеров в отрезке (L). Затем идет поле длины отрезка. В зависимости от значения L оно может занимать от одного до восьми байт (поля большей длины недопустимы). Первый байт поля стартового кластера файла расположен по смещению 1 + Lбайт от начала структуры (что соответствует 2+2*L нибблам).
Таблица 13.4
Структура одного элемента списка отрезков
Смещение в нибблах |
Размер в нибблах |
Описание |
0 |
1 |
Размер поля длины (L) |
1 |
1 |
Размер поля начального кластера (S) |
2 |
2*L |
Количество кластеров в отрезке |
2+2*L |
2*S |
Номер начального кластера отрезка |
Рассмотрим следующий список отрезков фрагментированного файла: 31 38 73 25 34 32 14 01 Е5 11 02 31 42 АА 00 03 00. Извлекаем первый байт – 31h. Один байт приходится на поле длины, и три байта – на поле начального кластера. Таким образом, первый отрезок (run 1) начинается с кластера 342573h и продолжается вплоть до кластера 342573h + 38h= 3425ABh. Чтобы найти смещение следующего отрезка в списке, мы складываем размер обоих полей с их начальным смещением: 3 + 1 = 4. Отсчитываем четыре байта от начала списка отрезков и переходим к декодированию следующего отрезка: 32h – два байта на поле длины отрезка (равное в данном случае 0114h) и три байта – на поле номера начального кластера (0211E5h). Следовательно, второй отрезок (run 2) начинается с кластера 0211E5h и продолжается вплоть до кластера 0211E5h + 114h = 212F9h. Третий отрезок (run 3): 31h – один байт на поле длины и три байта – на поле начального кластера, равные 42h и 0300AAhсоответственно. Поэтому третий отрезок (run 3) начинается с кластера 0300AAhи продолжается вплоть до кластера 0300AAh+ 42h = 300ECh. Завершающий ноль на конце списка отрезков сигнализирует о том, что это последний отрезок в файле.
Таким образом, рассмотренный файл состоит из трех отрезков, разбросанных по диску в следующем порядке: 342573b - 3425ABh; 0211E5h - 212F9h; 0300AAh – 300ECh. Начиная с версии 3.0, NTFS поддерживает разреженные (sparse) атрибуты, т.е. такие атрибуты, которые не записывают на диск кластеры, содержащие одни нули. При этом поле номера начального кластера отрезка может быть равным нулю, что означает, что данному отрезку не выделен никакой кластер. Поле длины содержит количество кластеров, заполненных нулями. Их не нужно считывать с диска.