ECHO (С) - Копирование на диск А файлов с жесткого диска
ECHO (D) - Просмотр оглавления каталога
ECHO (E) - Редактирование текстового файла
ECHO (0) - Выход
CHOICE /C: FCDE0
IF ERRORLEVEL 5 GOTO EXIT
IF ERRORLEVEL 4 GOTO EDITOR
IF ERRORLEVEL 3 GOTO DIRECTORY
IF ERRORLEVEL 2 GOTO COPYFILE
FORMAT A:
GOTO Start (10)
: EDITOR
EDIT %1.TXT
GOTO Start
: DIRECTORY
DIR D:\%2
GOTO Start
: COPYFILE
COPY D:\ %2\*.%3 A:\*.*
GOTO Start
: EXIT
ECHO Завершение работы
Учебные задания
Задание 1. Подготовить bat-файлы, иллюстрирующие приведенные выше примеры (1... 10). Выполнить эти файлы с различными вариантами входных параметров.
Задание 2. Подготовить bat-файл, при выполнении которого в текущем каталоге создается его копия под новым именем (имя указывается при запуске bat-файла). Созданная копия файла должна оставаться работоспособной – то есть способной создавать свои копии.
Контрольные вопросы
Каковы количественные ограничения на использование переменных и параметров пакетных файлов?
Предложите несколько способов организации bat-файла, в котором команды выполняются не в том порядке, в котором они записаны.
Предложите несколько способов организации циклического выполнения группы команд.
Охарактеризуйте группу команд, используемых для создания пользовательских меню.
Лабораторная работа №3
Исследование алгоритмов реализации файловых операций
Файловая система - это часть операционной системы, обеспечивающая работу прикладных программ с внешними запоминающими устройствами. Термином "файловая система" охватывается функционально полный набор программных компонентов различных уровней, реализующих алгоритмы обработки и доступа к файлам (функции DOS и BIOS, драйверы устройств), а также используемые этими программами структуры данных, формируемые на диске и в памяти ПК.
Цель лабораторной работы - изучение логической структуры дисковых накопителей в FAT-ориентированных файловых системах и исследование алгоритмов исполнения команд, обеспечивающих выполнение типовых операций доступа к файлам и каталогам (DIR, MD, CD, COPY, REN, DEL и др.).
Структура дискового пространства
Файловая система использует несколько уровней представлений о структуре дискового пространства, каждый из которых ориентирован на определенную группу потребителей и позволяет решать определенный круг задач доступа к файлам. С этой точки зрения различают информационную, логическую и физическую структуры, для которых существует определенный набор структурных элементов и используется соответствующая терминология.
Информационная структура
Информационная структура дискового пространства – это его внешнее представление, ориентированное на пользователя и определяемое такими элементами, как том ( иначе называемый логическим диском), каталог и файл. Элементы информационной структуры используются при общении пользователя с системой посредством команд, реализующих операции доступа к файлам и каталогам.
Дисковое пространство представляется пользователю, как множество логических дисков, для именования которых используются буквы латинского алфавита от A до Z. При этом имена A и B зарезервированы для гибких дисков.
С каждым из логических дисков связано дерево каталогов, включающее (в обязательном порядке) один корневой каталог (root directory) и (необязательно) множество иерархически подчиненных каталогов. Корневой и подчиненные каталоги могут "содержать" файлы и (или) другие (дочерние) подкаталоги. Как будет показано ниже, каталог содержит не сами файлы (подкаталоги), в только регистрационные записи, включающие имена, адреса и другую служебную информацию о дочерних каталогах и файлах.
Корневой каталог формируется автоматически при форматировании диска и имеет фиксированный размер, ограничивающий число регистрируемых в нем дочерних объектов (файлов и подкаталогов). Корневой каталог не имеет имени - можно считать, что имя корневого каталога совпадает с именем соответствующего логического диска.
Подчиненные каталоги – это (по существу) файлы определенной структуры, аналогичной структуре корневого каталога. Размер подчиненного каталога не фиксирован – он динамически изменяется при добавлении и удалении регистрируемых в нем объектов (файлов или дочерних подкаталогов). Размер подчиненного каталога ограничивается только размером соответствующего логического диска.
Подчиненные каталоги создаются пользователем (с помощью команды MD) и обязательно имеют имена, формируемые в соответствии с соглашением об именах, принятом в операционной системе[5].
Физическая структура
Технические средства чтения-записи информации имеют дело с физической структурой дискового пространства, которая описывается такими терминами, как диск (или пакет дисков), понимаемый как физическое устройство с автономным приводом, рабочая поверхность диска (Side), связанная с магнитной головкой чтения-записи (Head), магнитная дорожка (Track) и сектор. Каждая дорожка поделена на секторы, для стандартных форматов диска количество секторов на каждой из дорожек одинаково. Множество дорожек одинакового радиуса, расположенных на всех рабочих поверхностях пакета дисков, образуют так называемый цилиндр. Доступ ко всем дорожкам одного цилиндра может быть обеспечен при однократном радиальном позиционировании блока магнитных головок.
Сектор - это минимальная единица дискового пространства, к которой можно обратиться с целью чтения или записи информации. Информационная емкость сектора обычно составляет 512 байтов.
Все рабочие поверхности, дорожки и секторы последовательно пронумерованы, так что номер поверхности, номер дорожки на этой поверхности и номер сектора на этой дорожке однозначно определяют иерархический адрес сектора. Используют также и абсолютную нумерацию секторов– начиная с нулевого сектора нулевой дорожки нулевой поверхности диска. Для однозначного определения места расположения некоторого файла на диске необходимо связать с этим файлом упорядоченную последовательность пронумерованных секторов.
Следует отметить, что сектор - это весьма малая единица емкости дискового пространства, и использование номера сектора в качестве логического адреса файла на диске может создавать проблемы технического характера и снижает эффективность использования дисков большой емкости. Для этой цели используется другая, более крупная единица, называемая кластером и являющаяся основным элементом логической структуры диска.
Логическая структура
Логическая структура реализует линейную ("ленточную") модель дискового пространства тома. Согласно этой модели том разделен на две расположенные последовательно области - системную и рабочую.
Рабочая область, расположенная непосредственно после системной, разделена на последовательно пронумерованные кластеры и предназначена для хранения файлов и подкаталогов. Кластер используется в качестве минимальной единицы, выделяемой операционной системой одному файлу (или подкаталогу). Каждый кластер имеет уникальный номер (1, 2,...) и содержит несколько расположенных подряд секторов (1 или 2 сектора в кластере - для гибких дисков, 4 и более - для жестких). Между номером кластера и списком абсолютных номеров входящих в него секторов существует взаимно-однозначное соответствие.
Системная область занимает несколько начальных (в абсолютной нумерации) секторов, начиная с нулевого, и содержит блоки служебной информации, используемые для организации доступа к файлам и загрузки операционной системы: блок загрузки (Boot-Sector), таблица распределения файлов (FAT - File Allocation Table) и корневой каталог (Root Directory).
Блок загрузки - всегда занимает нулевой сектор и содержит таблицу параметров формата диска и короткую программу загрузки DOS. Структура блока загрузки поясняется таблицей 1.4.
Таблица 1.4 - Структура блока загрузки
Смещение | Длина, байт | Содержимое |
1 | 2 | 3 |
+00 | Команда перехода на программу загрузки (JMP) | |
+03 | Служебная информация программы форматирования | |
+0bH | Размер сектора в байтах | |
+0dH | Размер кластера в секторах | |
+0eH | Количество секторов перед первой FAT | |
+10H | Количество FAT |
Окончание таблицы 1.4
1 | 2 | 3 |
+11H | Максимальное число элементов корневого каталога | |
+13H | Общее число секторов на логическом диске | |
+15H | Дескриптор носителя (то же, что 1-й байт FAT) | |
+16H | Количество секторов в одной FAT | |
+18H | Количество секторов на дорожке | |
+1aH | Количество головок чтения/записи (поверхностей) | |
+1cH | Количество спрятанных секторов | |
+1eH | Размер форматированной порции корневого сектора | |
Начало кода и данных загрузки |
Корневой каталог состоит из набора регистрационных записей (32-байтных элементов)[6], каждая из которых содержит информацию об одном файле или подкаталоге и имеет следующую структуру.
Таблица 1.5 - Структура корневого каталога
Смещение | Длина, байт | Содержимое |
+00 | Имя файла или каталога | |
+08 | Расширение | |
+0bH | Атрибуты файла | |
+0cH | 0aH | Резерв |
+16H | Время создания/модификации (в специальном формате) | |
+18Н | Дата создания/модификации (в специальном формате) | |
+1aН | Номер начального кластера | |
+1cH | Размер файла в байтах | |
+20H | Размер элемента оглавления |
Шесть младших битов байт а а трибутов используются как битовые флаги, единичное значение каждого из которых задает определенное свойство соответствующего объекта:
0-й бит = 1 Только чтение (R/O - Read Only)
1-й бит = 1 Спрятанный (Hid - Hidden)
2-й бит = 1 Системный (Sys - System)
3-й бит = 1 Метка тома (Vol - Volume)
4-й бит = 1 Элемент подкаталога (Dir - Directory)
5-й бит = 1 Архивная копия файла НЕ создавалась (Arc)
Информация, хранимая в атрибутах, используется операционной системой при выполнении файловых операций. Например, значение атрибута Dir позволяет отличить файл от подчиненного каталога, а по значению атрибута Arc отбираются файлы для резервного копирования. Атрибут R/O блокирует возможность изменения и удаления файла, а атрибут Hid делает файл "невидимым" (команда DIR не выводит имя этого файла в списке). Если в записи корневого каталога установлено единичное значение атрибута Vol, то поля "Имя" и "Расширение" этой записи (всего 11 байтов) будут трактоваться как метка тома, а остальные данные этой записи будут игнорироваться.
Время и дата создания файла (подкаталога) описываются двухбайтовыми блоками данных в следующих форматах:
|
часы (0-23) минуты (0-59) 2-секундные
единицы (0-30)
|
год (0-119)+1980 месяц (1-12) день (0-31)
Рисунок 1.1 Форматы полей "Дата" и "Время" в записи каталога
Подчиненные каталоги по своей структуре подобны корневому каталогу – то есть содержат множество 32-байтовых регистрационных записей.. В отличие от корневого, каждый подчиненный каталог имеет две служебных записи: первая запись подкаталога в поле "имя" содержит символ ". " (точка), а в поле "номер начального кластера" - ссылку "на самого себя"; вторая запись подкаталога с символами " .. " (две точки) в поле "имя" – это ссылка на родительский каталог (если родительским является корневой каталог, то в качестве номера кластера указывается "0").
Все подчиненные каталоги хранятся в рабочей области диска подобно файлам. При создании подкаталога ему выделяется один кластер (из числа свободных), в котором создаются две служебных записи. После заполнения этого кластера регистрационными записями этому подкаталогу выделяется еще один свободный кластер и т. д.
Таблица распределения файлов (FAT) - это связанный список, который обеспечивает возможность фрагментарного расположения файлов на диске и используется файловой системой для определения последовательности кластеров, выделенных файлу или подкаталогу, а также для поиска свободного пространства, необходимого для записи новых файлов и подкаталогов. Число элементов этого списка равно числу кластеров рабочей области диска, так что каждому кластеру соответствует один "одноименный", то есть имеющий такой же номер, элемент FAT.
Каждому файлу или подкаталогу, записанному в рабочей области диска, соответствует цепочка элементов FAT. Номер начального элемента этой цепочки (совпадающий с номером начального кластера) указывается в соответствующей регистрационной записи каталога. Первый элемент цепочки указывает (содержит номер) на следующий элемент (кластер) и т.д. до конечного элемента, в котором указывается специальный код - признак конца файла.
Для гибких дисков используются 12-битовые элементы FAT, а для жестких – 16-ти и 32-битовые. Длина элемента FAT определяет разрядность хранимого в нем двоичного числа и, следовательно, ограничивает максимальное количество кластеров, которые могут быть сформированы в рабочей области тома (для FAT-12: 212 = 4096; для FAT-16: 216 = 65536; для FAT-32: 232 = 4294967296).
Каждый из элементов FAT представляет один кластер и может содержать следующие коды:
(0)000H...................... доступный (свободный) кластер
(0)002H до (f)fefH...... номер следующего кластера
(f)ff0H до (f)ff7H....... зарезервированный кластер
(f)ff7H........................ плохой кластер (BAD)
(f)ff8H до (f)fffH........ конец цепочки (EOF)
Следует отметить, что первый байт FAT имеет особый статус и содержит так называемый "дескриптор носителя" (FAT ID-байт), в котором закодирована информация о типе и формате диска. Следующие 5 байтов (12-битовые FAT) или 7 байтов (16-битовые FAT) содержат код 0ffH. Далее следуют собственно элементы FAT.
Для иллюстрации основных концепций FAT рассмотрим фрагмент FAT, приведенный на рисунке 1.2 (курсивом обозначены номера элементов FAT, а жирным шрифтом – числовые значения, записанные в этих элементах). Все числа записаны в шестнадцатеричной системе счисления.
Пусть элемент некоторого каталога содержит регистрационную запись о файле, в которой содержится ссылка на начальный кластер (№ 18) из цепочки кластеров, выделенных этому файлу:
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 19 | 1a | 1b | 1c | 1d | 1e | 1f | |
Ff8 | 1a | 1b |
ff7 | 2a | 2b | ff8 | ||||||||||||
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 2a | 2b | 2c | 2d | 2e | 2f |
Рисунок 1.2 Фрагмент FAT
Из приведенного на рисунке фрагмента FAT, в частности, следует:
Файл занимает цепочку из десяти кластеров: 18 – 19 - 1a - 1b – 25 – 26 – 27 – 29 - 2a - 2b. Каждый элемент указывает на следующий элемент цепочки, а последний элемент содержит специальный код EOF (ff8).
Еще одна цепочка начинается с кластера № 12 и кончается кластером № 15. Чтобы узнать, какому файлу (или подкаталогу) распределены эти кластеры, нужно отыскать в каком-либо каталоге тома регистрационную запись, содержащую ссылку на начальный кластер №12.
Кластер № 28 помечен, как BAD (код ff7) и не входит ни в одну из цепочек. При поиске свободных кластеров для записи нового файла этот кластер будет игнорироваться.
Кластеры №№ 10, 11, 16, 17, 1c…24 и 2c…2f пусты (точнее – объявлены таковыми) и доступны для распределения под вновь записываемые файлы.
Каждая цепочка кластеров, выделенных системой для одного файла (подкаталога), упорядочена в порядке возрастания их номеров.