Реферат: Модель файловой системы FAT

ОДЕССКАЯ ГОСУДАРСТВЕННАЯ АКАДЕМИЯ ХОЛОДА

Институт информационных технологий

кафедра информационных систем

 

 

кУРСОВАЯ РАБОТА ПО ДИСЦИПЛИНЕ

“тЕОРИЯ ОПЕРАЦИОННЫХ СИСТЕМ”

 

“модель файловой системы FAT”

Выполнил студент 322Бгруппы Холод Денис.

Руководитель Чмырь И.А.

ОДЕССА

1997

<span Times New Roman";mso-bidi-font-family: «Times New Roman»;text-transform:uppercase;mso-ansi-language:RU;mso-fareast-language: RU;mso-bidi-language:AR-SA">

Содержание:

 

Цель курсовой работы

3

Идея программы

3

О системе FAT

4

Структура системы файлов FAT

5,6

О реализации задания

7

О примененных уровнях абстракции

8

Об интерфейсе

9

Исходный текст: Макросы, вызываемые событиями

10

Исходный текст: Базовые события

13

Исходный текст: Макросы нижнего уровня абстракции

15

Список литературы, примененной при подготовке курсовой работы

17

<span Times New Roman";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language:AR-SA">

 

Цель:

         Разработкапрограммы, моделирующей организацию файловой системы FAT.

Идея программы:

         Программапозвовяет экспериментально исследовать логическую структуру файловой системыFAT, состоящую из трех областей: FAT (File Allocation Table), корневой каталоги область файлов.<span Times New Roman";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language:AR-SA">[1]Имеется панель описания операций с файлами, находящимися на диске, а именно:добавить файл, удалить файл, перезаписать файл (с изменением размера). Крометого, предоставлена возможность графического отображения соответствия файловсекторам на диске.

Файловая Система FAT:

         Такназываемая файловая система FAT использовалась во всех версиях МСДОС и в первыхдвух выпусках OS/2 (версии 1.0 и 1.1). Каждый логический том имеет собственныйFAT, который выполняет две функции: содержит информацию распределения длякаждого файла в томе в форме списка связей модулей распределения (кластеров) иуказывает, какие модули распределения свободны.

         КогдаFAT был изобретен, это было превосходное решение для управления дисковымпространством, главным образом потому что гибкие диски, на которых ониспользовался, редко были размером более, чем несколько Mb. FAT был достаточномал, чтобы находиться в памяти постоянно, позволял обеспечивать очень быстрыйпроизвольный доступ к любой части любого файла. Когда FAT был применен нажестких дисках, он стал слишком большим для резидентного нахождения в памяти иухудшал производительность системы. Кроме того, так как информация относительносвободного дискового пространства рассредотачивалась «поперек»большого количества секторов FAT, он был непрактичен при распределениифайлового пространства, и фрагментация файлов оказалась препятствием высокойэффективности.

         Крометого, использование относительно больших кластеров на жестких дисках привело кбольшому количеству неиспользуемых участков, так как в среднем для каждогофайла половина кластера была потрачена впустую.

         ОграниченияFAT на наименование файлов и каталогов унаследованы из CP/M. Когда Patersonсоздавал 86DOS, одной из его первых целей было облегчить импорт из CP/M в егоновую операционную систему. А следовательно принятые в CP/M ограничения наимена файлов и расширений перенеслись в 86DOS.

         Втечение нескольких лет Microsoft и IBM сделали попытку продлить жизнь файловойсистемы FAT благодаря снятию ограничений на размеры тома, улучшению cтратегийраспределения, кэширования имен пути, и перемещению таблиц и буферов врасширенную память. Но они могут расцениваться только как временные меры,потому что файловая система просто не подходила к большим устройствампроизвольного доступа.

<span Times New Roman";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language:AR-SA">

Структура системы файлов FAT<img src="/cache/referats/1845/image001.gif" " v:shapes="_x0000_s1038">

Файл Д

<img src="/cache/referats/1845/image002.gif" v:shapes="_x0000_s1037">

Файл В

<img src="/cache/referats/1845/image003.gif" v:shapes="_x0000_s1036">

Файл Б

<img src="/cache/referats/1845/image004.gif" v:shapes="_x0000_s1032">

Каталог

<img src="/cache/referats/1845/image005.gif" v:shapes="_x0000_s1035">

Файл Г

<img src="/cache/referats/1845/image006.gif" v:shapes="_x0000_s1034">

Каталог

<img src="/cache/referats/1845/image007.gif" v:shapes="_x0000_s1033">

Каталог

<img src="/cache/referats/1845/image008.gif" v:shapes="_x0000_s1031">

Файл А

<img src="/cache/referats/1845/image009.gif" v:shapes="_x0000_s1030"><div v:shape="_x0000_s1028">

Идентификатор

дисковода

<div v:shape="_x0000_s1029">

Корневой каталог

(метка тома)

00Н

01Н

Идентификатор дисковода

01Н

09Н

Имя файла (8 символов)

09Н

0СН

Расширение (3 символа)

0СН

0ЕН

Номер текущего блока

0ЕН

10Н

Размер записи

10Н

14Н

Размер файла

14Н

16Н

Дата создания (обновления)

16Н

18Н

Время создания (обновления)

18Н

20Н

Зарезервировано

20Н

21Н

Номер текущей записи

<div v:shape="_x0000_s1026">

Типичный блок управления файлом

Элементы структуры

<img src="/cache/referats/1845/image010.gif" v:shapes="_x0000_s1042">

Относительный конечный адрес в байтах

<img src="/cache/referats/1845/image011.gif" " v:shapes="_x0000_s1040">

Относительный начальный адрес в байтах

<img src="/cache/referats/1845/image012.gif" " v:shapes="_x0000_s1039">21Н

25Н

Номер относительной записи

<span Times New Roman";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language:AR-SA">

00Н

01Н

0FFH

01Н

06Н

Зарезервировано

06Н

07Н

Байт атрибута

07Н

08Н

Идентификатор дисковода

08Н

10Н

Имя файла (8 символов)

10Н

13Н

Расширение (3 символа)

13Н

15Н

Номер текущего блока

15Н

17Н

Размер записи

17Н

1ВН

Размер файла

1BН

1DН

Дата создания (обновления)

1DН

1FН

Время создания (обновления)

1FН

27H

Зарезервировано

27H

28H

Номер текущей записи

28H

2CH

Номер относительной записи

<div v:shape="_x0000_s1027">

Расширенный блок управления файлом

Относительный начальный адрес в байтах

<img src="/cache/referats/1845/image013.gif" v:shapes="_x0000_s1044">

Элементы структуры

<img src="/cache/referats/1845/image014.gif" v:shapes="_x0000_s1043">

Относительный конечный адрес в байтах

<img src="/cache/referats/1845/image015.gif" v:shapes="_x0000_s1041">

Резюме

Резюме.

<span Times New Roman";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language:AR-SA">

О реализации задания

         Модельфайловой системы представляет собой рабочий лист Microsoft Excel, на котором ввиде ячеек представлены три логические структуры файловой системы:

·<span Times New Roman"">    

Каталогфайлов

·<span Times New Roman"">    

Таблицараспределения

·<span Times New Roman"">    

Областьфайлов

         Нарабочем листе также расположены две панели управления:

1)<span Times New Roman"">               

Операции с файлами

·<span Times New Roman"">                  

добавить

·<span Times New Roman"">                  

удалить

·<span Times New Roman"">                  

перезаписать

2)<span Times New Roman"">               

Визуализация FAT

·<span Times New Roman"">                  

показать файл

·<span Times New Roman"">                  

убрать стрелки

         Исходяиз контекста вопроса параллельное выполнение процессов или потоков(MultiThreading) реализовывать нет необходимости. Учитывая эти факторы, а такженеобходимость разработки “дружественного” интерейса с применением графическихпримитивов, было решено использовать язык программирования VisualBasic (VBA) отфирмы Microsoft и электронную таблицу Excel 5.0 фирмы Microsoft.

         Таккак модель является типичной управляемой событиями системой, то алгоритм ееработы достаточно прост, а точнее представляет собой ряд алгоритмов, которыепересекаются только в среднем уровне абстракции. (см. ниже) События вызываютсяпользователем посредством воздействия на органы управления.

<span Times New Roman";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language:AR-SA">

О примененных уровнях абстракции

         Всевозможные события были тщательно проанализированы автором и разделены на трикатегории, или на три уровня абстракции:

·<span Times New Roman"">    

События,вызываемые внешними воздействиями. Таковыми являются все события, вызываемыепользователем посредством вызова пунктов из групп операций с файлами.<span Times New Roman"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:RU;mso-fareast-language: RU;mso-bidi-language:AR-SA">[2]

·<span Times New Roman"">    

Событияфундаментальной природы, т.е. базовые события, порождаемые предудущими. Ихзначительно меньше, и они никак не вникают в суть породивших из внешнихсобытий.<span Times New Roman"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:RU;mso-fareast-language: RU;mso-bidi-language:AR-SA">[3]

·<span Times New Roman"">    

Событиянизкого уровня абстракции, которые являются искуственно синтезированными изпредыдущих двух групп событиями и имеют целью понизить сложность системы засчет абстрагирования от непринципиальных тонкостей и усложнений в системе,диктуемых контекстом. Таковыми, например, являются события обработкинеправильных ситуаций.<span Times New Roman"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:RU;mso-fareast-language: RU;mso-bidi-language:AR-SA">[4]<span Times New Roman";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language:AR-SA">

Об интерфейсе

         Интерфейсявляется интуитивно понятным и не навязчивым, всегда, насколько это возможно,является “демократичным” по отношению к пользователю. В программах, написанныхтаким стилем, очень четко прослеживается причинно-следственная связь, хорошознакомая любому человеку и являющаяся неотъемлемой частью образного мышления.Это делат программу весьма простой в использовании, а алгоритм работы простым впонимании. Вся необходимая для работы информация представлена в диалогах, онеправильных ситуциях программа сообщает пользователю и это единственный (изаконный) случай нарушения свободы действий пользователя.

         Далееприводится исходный текст программы с обширными комментариями, в которыхделается упор не на особенности языка программирования и конкретной реализации,а на представление составляющих файловой системы как объектов, а процедур ифункций как методов, применяемых к этим объектам.

        
Макросы, вызываемые событиями

<span Academy Condensed";text-decoration:none; text-underline:none">Public Type FileID 'Тип, описывающий файл: имя, размер иточка входа в FAT

<span Academy Condensed"">    Name As String

<span Academy Condensed"">    Size As Integer

<span Academy Condensed"">    First As Integer

<span Academy Condensed"">    End Type

<span Academy Condensed"">   

<span Academy Condensed"">SubPressAddFile() 'Макрос, вызываемый кнопкой «Добавить Файл»

<span Academy Condensed"">   DialogSheets(«Add»).EditBoxes(«Name»).Text ="" 'подготовка диалога «Добавление файла»

<span Academy Condensed"">   DialogSheets(«Add»).EditBoxes(«Size»).Text ="" 'очистка полей ввода

<span Academy Condensed"">    Sheets(«Add»).Show 'Вызов диалога«Добавление файла»

<span Academy Condensed"">    With DialogSheets(«Add»)'Проверка на правильность введенных данных

<span Academy Condensed"">        If (.EditBoxes(«Name»).Text ="") Or (.EditBoxes(«Size»).Text = "") Or(.EditBoxes(«Size»).Text = «0») Then Exit Sub

<span Academy Condensed"">    End With

<span Academy Condensed"">    Dim NewFile As FileID 'Экземпляр переменнойс описанием создаваемого файла

<span Academy Condensed"">    With DialogSheets(«Add»)

<span Academy Condensed"">        NewFile.Name =.EditBoxes(«Name»).Text

<span Academy Condensed"">        NewFile.Size =.EditBoxes(«Size»).Text

<span Academy Condensed"">    End With

<span Academy Condensed"">    Call AddFile(NewFile) 'Вызов процедурыдобавления файла

<span Academy Condensed"">    Refresh 'обновили графическое изображениеразмещения файлов

<span Academy Condensed"">EndSub

<span Academy Condensed"">

<span Academy Condensed"">SubPressDeleteFile() 'в основном рабочем листе нажата кнопка Удалить Файл

<span Academy Condensed"">    temp = 4

<span Academy Condensed"">    With DialogSheets(«Delete»)'подготавливаем к работе диалог Delete

<span Academy Condensed"">       .ListBoxes(«Name»).RemoveAllItems

<span Academy Condensed"">        WhileSheets(«Sheet»).Cells(temp; 2) <> "" 'заполняемсписок имеющимися в каталоге файлами

<span Academy Condensed"">           .ListBoxes(«Name»).AddItemText:=Worksheets(«Sheet»).Cells(temp; 2).Value; Index:=temp — 3

<span Academy Condensed"">            temp = temp + 1

<span Academy Condensed"">        Wend

<span Academy Condensed"">        .Show 'показываем диалог Delete

<span Academy Condensed"">        If .ListBoxes(«Name») = 0Then Exit Sub

<span Academy Condensed"">        Dim File As FileID 'переменная дляидентификатора удаляемого файла.Передается процедуре DeleteFile

<span Academy Condensed"">        File.Name =Sheets(«Sheet»).Cells(.ListBoxes(«Name») + 3; 2)

<span Academy Condensed"">        File.Size =Sheets(«Sheet»).Cells(.ListBoxes(«Name») + 3; 3)

<span Academy Condensed"">        File.First =Sheets(«Sheet»).Cells(.ListBoxes(«Name») + 3; 4)

<span Academy Condensed"">        Call DeleteFile(File) 'Вызываемпроцедуру удаления файла

<span Academy Condensed"">        Refresh 'обновили графическоеизображение размещения файлов

<span Academy Condensed"">    End With

<span Academy Condensed"">EndSub

<span Academy Condensed"">

<span Academy Condensed"">SubPressRemakeFile() 'нажата кнопка Изменить_размеры_файла

<span Academy Condensed"">'поэтому поводу подготавливаем к работе диалог Remake

<span Academy Condensed"">    temp = 4

<span Academy Condensed"">    With DialogSheets(«Remake»)

<span Academy Condensed"">       .ListBoxes(«Name»).RemoveAllItems

<span Academy Condensed"">        .EditBoxes(«Size»).Text =""

<span Academy Condensed"">        WhileSheets(«Sheet»).Cells(temp; 2) <> "" 'заполняемсписок имеющимися в каталоге файлами

<span Academy Condensed"">           .ListBoxes(«Name»).AddItemText:=Worksheets(«Sheet»).Cells(temp; 2).Value; Index:=temp — 3

<span Academy Condensed"">            temp = temp + 1

<span Academy Condensed"">        Wend

<span Academy Condensed"">    .Show 'показываем диалог Remake

<span Academy Condensed"">    'при нажатии кнопки OK в диалоге запуститсямакрос DialogRemakePressOK

<span Academy Condensed"">    EndWith

<span Academy Condensed"">EndSub

<span Academy Condensed"">

<span Academy Condensed"">SubDialogRemakePressName() 'в диалоге Перезапись выбран файл из списка

<span Academy Condensed"">    With DialogSheets(«Remake») 'ипоэтому в диалоге Перезапись обновляем поле размера файла в соотв. с выбраннымфайлом

<span Academy Condensed"">        .EditBoxes(«Size»).Text =Sheets(«Sheet»).Cells(3 + .ListBoxes(«Name»).ListIndex;3).Value

<span Academy Condensed"">    End With

<span Academy Condensed"">EndSub

<span Academy Condensed"">

<span Academy Condensed"">SubDialogRemakePressOK() 'в диалоге изменение размеров файла нажата кнопка OK

<span Academy Condensed"">    With DialogSheets(«Remake»)

<span Academy Condensed"">        .Hide 'убрали с экрана диалог

<span Academy Condensed"">        If .ListBoxes(«Name»).ListIndex= 0 Then Exit Sub

<span Academy Condensed"">        Dim File As FileID 'Экземпляр типаFileID — идентификатор файла

<span Academy Condensed"">        File.Name =Sheets(«Sheet»).Cells(3 + .ListBoxes(«Name»).ListIndex;2).Text

<span Academy Condensed"">        File.Size =Sheets(«Sheet»).Cells(3 + .ListBoxes(«Name»).ListIndex;3).Value

<span Academy Condensed"">        File.First =Sheets(«Sheet»).Cells(3 + .ListBoxes(«Name»).ListIndex;4).Value

<span Academy Condensed"">        'проверка на наличие изменений

<span Academy Condensed"">        If .EditBoxes(«Size»).Text =File.Size Or .EditBoxes(«Size»).Text = «0» Then Exit Sub

<span Academy Condensed"">        'проверка на помещаемость

<span Academy Condensed"">        If .EditBoxes(«Size»).Text> (FreeSize + ((File.Size — 1) 8 + 1) * 8) Then

<span Academy Condensed"">            temp = MsgBox(«Файл „& File.Name & “ размером » &.EditBoxes(«Size»).Text & " не может быть размещен";vbExclamation; «Перезапись файла»)

<span Academy Condensed"">            Exit Sub

<span Academy Condensed"">        End If 'перезапись: удаление, а затемзапись файла, но с другим размером

<span Academy Condensed"">        Call DeleteFile(File) 'удалили

<span Academy Condensed"">        File.Size =.EditBoxes(«Size»).Text 'изменили размер

<span Academy Condensed"">        Call AddFile(File) 'записали

<span Academy Condensed"">        Refresh 'обновили таблицу распределенияфайлов

<span Academy Condensed"">    End With

<span Academy Condensed"">EndSub

<span Academy Condensed"">

<span Academy Condensed"">SubVisualisation() 'визуализация файла

<span Academy Condensed"">    temp = 4

<span Academy Condensed"">    WithDialogSheets(«Visualisation») 'подготавливаем к работе диалогVisualisation

<span Academy Condensed"">       .ListBoxes(«Name»).RemoveAllItems

<span Academy Condensed"">        WhileSheets(«Sheet»).Cells(temp; 2) <> "" 'заполняемсписок имеющимися в каталоге файлами

<span Academy Condensed"">           .ListBoxes(«Name»).AddItemText:=Worksheets(«Sheet»).Cells(temp; 2).Value; Index:=temp — 3

<span Academy Condensed"">            temp = temp + 1

<span Academy Condensed"">        Wend

<span Academy Condensed"">        .Show 'показываем диалог Visualisation

<span Academy Condensed"">        If .ListBoxes(«Name») = 0Then Exit Sub 'выбрали ли что-нибудь ?

<span Academy Condensed"">        Dim NumberFile As Integer

<span Academy Condensed"">        NumberFile =.ListBoxes(«Name»).ListIndex 'номер по каталогу визуализируемогофайла

<span Academy Condensed"">       Sheets(«Sheet»).Cells(NumberFile + 3; 2).ShowDependents'показываем линии, проходящие от ячейки каталога с именем визуализируемогофайла до всех занятых им ячеек области файлов

<span Academy Condensed";text-decoration: none;text-underline:none">    End With

<span Academy Condensed";text-decoration: none;text-underline:none">End Sub

<span System",«sans-serif»; text-decoration:none;text-underline:none">

Базовые события

<span Academy Condensed";text-decoration:none; text-underline:none">Const ColorOfPaper = 33 'цвет фона области файлов

<span Academy Condensed";text-decoration:none; text-underline:none">Const ColorUsedPartOfFAT = 2 'цвет занятой части областифайлов

<span Academy Condensed";text-decoration:none; text-underline:none">

<span Academy Condensed";text-decoration:none; text-underline:none">Sub AddFile(NewFile As FileID) 'Процедурa добавления файла

<span Academy Condensed";text-decoration:none; text-underline:none">    'Проверканаличия присутствия в достаточном для создания файла количестве свободногопространства

<span Academy Condensed";text-decoration:none; text-underline:none">    If NewFile.Size> FreeSize Then

<span Academy Condensed";text-decoration:none; text-underline:none">        temp =MsgBox(«Файл » + NewFile.Name + " не может быть размещен из-занехватки свободного места."; vbExclamation; «Процесс созданияфайла»)

<span Academy Condensed";text-decoration:none; text-underline:none">        Exit Sub

<span Academy Condensed";text-decoration:none; text-underline:none">    End If

<span Academy Condensed";text-decoration:none; text-underline:none">    count =NewFile.Size 'счетчик уже записанной части файла

<span Academy Condensed";text-decoration:none; text-underline:none">    NewFile.First =NextFreeCellFAT ' задание точки входа в FAT для данного файла

<span Academy Condensed";text-decoration:none; text-underline:none">    DimPreviousCellFAT As Integer 'Номер последней модифицировавшейся ячейки FAT

<span Academy Condensed";text-decoration:none; text-underline:none">    PreviousCellFAT= NextFreeCellFAT

<span Academy Condensed";text-decoration:none; text-underline:none">    CallToFAT(PreviousCellFAT; 0) 'Записали в нее ноль-признак того, что это последний(пока) кластер данного файла

<span Academy Condensed";text-decoration:none; text-underline:none">    count = count — 8 'как минимум 8 байт файла уже размещены

<span Academy Condensed";text-decoration:none; text-underline:none">    While count >0 'пока весь файл не разместился

<span Academy Condensed";text-decoration:none; text-underline:none">        CallToFAT(PreviousCellFAT; NextFreeCellFAT) 'в последнюю модифицировавшуюся ячейкуFAT вносим указатель на следующую свободную ячейку

<span Academy Condensed";text-decoration:none; text-underline:none">       PreviousCellFAT = NextFreeCellFAT

<span Academy Condensed";text-decoration:none; text-underline:none">        CallToFAT(PreviousCellFAT; 0) 'Записали в нее ноль-признак того, что это последний(пока) кластер данного файла

<span Academy Condensed";text-decoration:none; text-underline:none">        count =count — 8 'как минимум 8 байт файла уже размещены

<span Academy Condensed";text-decoration:none; text-underline:none">    Wend

<span Academy Condensed";text-decoration:none; text-underline:none">    CallAddFileToCatalog(NewFile) 'добавили файл в каталог

<span Academy Condensed";text-decoration:none; text-underline:none">End Sub

<span Academy Condensed";text-decoration:none; text-underline:none">

<span Academy Condensed";text-decoration:none; text-underline:none">Sub DeleteFile(File As FileID) 'процедура удаляет заданныйфайл без разговоров

<span Academy Condensed";text-decoration:none; text-underline:none">    CallDeleteCellFromFAT(File.First)

<span Academy Condensed";text-decoration:none; text-underline:none">    CallDeleteFileFromCatalog(File.Name)

<span Academy Condensed";text-decoration:none; text-underline:none">End Sub

<span Academy Condensed";text-decoration:none; text-underline:none">

<span Academy Condensed";text-decoration:none; text-underline:none">Sub Refresh() 'обновление изображения области файлов

<span Academy Condensed";text-decoration:none; text-underline:none">    WithSheets(«Sheet»)

<span Academy Condensed";text-decoration:none; text-underline:none">       .Range(«F6:U13»).Interior.ColorIndex = ColorOfPaper 'окрасилиобласть файлов в цвет фона

<span Academy Condensed";text-decoration:none; text-underline:none">       .Range(«F6:U13»).Value = "" 'очистили все ячейкиобласти файлов

<span Academy Condensed";text-decoration:none; text-underline:none">       .Range(«F6:U13»).NumberFormat = «0» 'формат числадля области файлов-целые числа

<span Academy Condensed";text-decoration:none; text-underline:none">        .ClearArrows'убрали все стрелки

<span Academy Condensed";text-decoration:none; text-underline:none">        DimPointerToFile As String

<span Academy Condensed";text-decoration:none; text-underline:none">        NumberFile =1

<span Academy Condensed";text-decoration:none; text-underline:none">        While.Cells(NumberFile + 3; 2) <> "" 'последовательно просматриваемобласть файлов. Для каждого файлавыполняется следующая процедура:

<span Academy Condensed";text-decoration:none; text-underline:none">           NumberCellFAT = .Cells(NumberFile + 3; 4) 'точка входа в FAT N-ногофайла

<span Academy Condensed";text-decoration:none; text-underline:none">           PointerToFile = "=R" & NumberFile + 3 & «C2»'указатель на ячейку каталога с именем N-ного файла

<span Academy Condensed";text-decoration:none; text-underline:none">            Relation= (.Cells(NumberFile + 3; 3) — 1) Mod 8 'смещение. Являет собой размернеполностью заполненного кластера

<span Academy Condensed";text-decoration:none; text-underline:none">            While.Cells(3; NumberCellFAT + 5) <> 0 'просмотр FAT до признака конца цепочки

<span Academy Condensed";text-decoration:none; text-underline:none">               .Range(Cells(6; NumberCellFAT + 5); Cells(6 + 7; NumberCellFAT +5)).Interior.ColorIndex = ColorUsedPartOfFAT + NumberFile 'выделение цветомочередного непоследнего кластера N-ного файла

<span Academy Condensed";text-decoration:none; text-underline:none">               .Range(Cells(6; NumberCellFAT + 5); Cells(6 + 7; NumberCellFAT +5)).Font.ColorIndex = ColorUsedPartOfFAT + NumberFile

<span Academy Condensed";text-decoration:none; text-underline:none">               .Range(Cells(6; NumberCellFAT + 5); Cells(6 + 7; NumberCellFAT +5)).Formula = PointerToFile 'каждая ячейка этого кластера теперь указывает наячейку с именем файла в каталоге

<span Academy Condensed";text-decoration:none; text-underline:none">               NumberCellFAT = .Cells(3; NumberCellFAT + 5) 'взяли следующую ячейку FATиз цепочки

<span Academy Condensed";text-decoration:none; text-underline:none">            Wend'теперь обработка последнего кластера N-ного файла. Отличается тем, что онможет быть занят не полностью

<span Academy Condensed";text-decoration:none; text-underline:none">           .Range(Cells(6; NumberCellFAT + 5); Cells(6 + Relation; NumberCellFAT +5)).Interior.ColorIndex = ColorUsedPartOfFAT + NumberFile

<span Academy Condensed";text-decoration:none; text-underline:none">           .Range(Cells(6; NumberCellFAT + 5); Cells(6 + Relation; NumberCellFAT +5)).Font.ColorIndex = ColorUsedPartOfFAT + NumberFile

<span Academy Condensed";text-decoration:none; text-underline:none">           .Range(Cells(6; NumberCellFAT + 5); Cells(6 + Relation; NumberCellFAT +5)).Formula = PointerToFile

<span Academy Condensed";text-decoration:none; text-underline:none">           

<span Academy Condensed";text-decoration:none; text-underline:none">           NumberFile = NumberFile + 1 'работаем со следующим файлом

<span Academy Condensed";text-decoration:none; text-underline:none">        Wend

<span Academy Condensed";text-decoration:none; text-underline:none">    End With

<span Academy Condensed";text-decoration:none; text-underline:none">End Sub

<span System",«sans-serif»;text-decoration:none; text-underline:none">

<span Times New Roman";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language:AR-SA">

Макросы нижнего уровня абстракции

<span Academy Condensed"; text-decoration:none;text-underline:none">Function FreeSize() As Integer'Функция для определения количества свободного места в области файлов

<span Academy Condensed"; text-decoration:none;text-underline:none">   FreeSize = 0

<span Academy Condensed"; text-decoration:none;text-underline:none">   temp = 6

<span Academy Condensed"; text-decoration:none;text-underline:none">   While temp < 22 'просмотр области FAT

<span Academy Condensed"; text-decoration:none;text-underline:none">        If Sheets(«Sheet»).Cells(3;temp).Value = "" Then _

<span Academy Condensed"; text-decoration:none;text-underline:none">                FreeSize = FreeSize + 8 'еслиячейка FAT пуста, то своб.места в ней 8 байт

<span Academy Condensed"; text-decoration:none;text-underline:none">        temp = temp + 1

<span Academy Condensed"; text-decoration:none;text-underline:none">   Wend

<span Academy Condensed"; text-decoration:none;text-underline:none">End Function

<span Academy Condensed"; text-decoration:none;text-underline:none">

<span Academy Condensed"; text-decoration:none;text-underline:none">Function NextFreeCellFAT() As Integer'Функция возвращает номер первого найденного свободного элемента FAT

<span Academy Condensed"; text-decoration:none;text-underline:none">   NextFreeCellFAT = 1

<span Academy Condensed"; text-decoration:none;text-underline:none">   While NextFreeCellFAT < 17

<span Academy Condensed"; text-decoration:none;text-underline:none">        If Sheets(«Sheet»).Cells(3;NextFreeCellFAT + 5).Value = "" Then Exit Function

<span Academy Condensed"; text-decoration:none;text-underline:none">        NextFreeCellFAT = NextFreeCellFAT + 1

<span Academy Condensed"; text-decoration:none;text-underline:none">   Wend

<span Academy Condensed"; text-decoration:none;text-underline:none">End Function

<span Academy Condensed"; text-decoration:none;text-underline:none">

<span Academy Condensed"; text-decoration:none;text-underline:none">Sub AddFileToCatalog(File As FileID)'добавление файла в область каталога

<span Academy Condensed"; text-decoration:none;text-underline:none">   temp = 4

<span Academy Condensed"; text-decoration:none;text-underline:none">   With Sheets(«Sheet»)

<span Academy Condensed"; text-decoration:none;text-underline:none">        While .Cells(temp; 2) <>""

<span Academy Condensed"; text-decoration:none;text-underline:none">            temp = temp + 1 'поиск свободногоместа в каталоге файлов

<span Academy Condensed"; text-decoration:none;text-underline:none">        Wend 'кто дочитает до этогоместа-бутылка шампанского !

<span Academy Condensed"; text-decoration:none;text-underline:none">        .Cells(temp; 2) = File.Name 'Запись вкаталог информации о файле

<span Academy Condensed"; text-decoration:none;text-underline:none">        .Cells(temp; 3) = File.Size

<span Academy Condensed"; text-decoration:none;text-underline:none">        .Cells(temp; 4) = File.First

<span Academy Condensed"; text-decoration:none;text-underline:none">   End With

<span Academy Condensed"; text-decoration:none;text-underline:none">End Sub

<span Academy Condensed"; text-decoration:none;text-underline:none">

<span Academy Condensed"; text-decoration:none;text-underline:none">SubDeleteFileFromCatalog(NameDeletedFile As String) 'удаление информации о файлеиз каталога

<span Academy Condensed"; text-decoration:none;text-underline:none">   Position = 4

<span Academy Condensed"; text-decoration:none;text-underline:none">   While Sheets(«Sheet»).Cells(Position; 2).Text <>NameDeletedFile

<span Academy Condensed"; text-decoration:none;text-underline:none">        Position = Position + 1

<span Academy Condensed"; text-decoration:none;text-underline:none">   Wend

<span Academy Condensed"; text-decoration:none;text-underline:none">   For temp = Position To 16 + 3 'следующие за удаляемым файлом ячейкисдвигаются, _

<span Academy Condensed"; text-decoration:none;text-underline:none">   затирая запись об удаляемом файле

<span Academy Condensed"; text-decoration:none;text-underline:none">       Sheets(«sheet»).Range(Cells(temp; 2); Cells(temp; 4)).Value =_

<span Academy Condensed"; text-decoration:none;text-underline:none">           Sheets(«sheet»).Range(Cells(temp + 1; 2); Cells(temp + 1;4)).Value

<span Academy Condensed"; text-decoration:none;text-underline:none">   Next

<span Academy Condensed"; text-decoration:none;text-underline:none">End Sub

<span Academy Condensed"; text-decoration:none;text-underline:none">

<span Academy Condensed"; text-decoration:none;text-underline:none">Sub ToFAT(NumberCell As Integer;Value As Integer) 'Процедура записи в заданную ячейку FAT заданного значения

<span Academy Condensed"; text-decoration:none;text-underline:none">   Sheets(«Sheet»).Cells(3; NumberCell + 5).Value = Value

<span Academy Condensed"; text-decoration:none;text-underline:none">End Sub

<span Academy Condensed"; text-decoration:none;text-underline:none">

<span Academy Condensed"; text-decoration:none;text-underline:none">Sub DeleteCellFromFAT(StartCell AsInteger) 'рекурсивная функция удаления цепочки из FAT _

<span Academy Condensed"; text-decoration:none;text-underline:none">Вызывается с номером точки входа

<span Academy Condensed"; text-decoration:none;text-underline:none">'   MsgBox («DeleteCellFromFAT, StartCell=» & StartCell)

<span Academy Condensed"; text-decoration:none;text-underline:none">   If Sheets(«Sheet»).Cells(3; 5 + StartCell).Value = 0 Then'если в рассматриваемой точке — 0, _

<span Academy Condensed"; text-decoration:none;text-underline:none">   то это значит, что она является указателем конца файла

<span Academy Condensed"; text-decoration:none;text-underline:none">        Sheets(«Sheet»).Cells(3; 5 +StartCell) = "" 'и поэтому очищаем эту ячейку FAT

<span Academy Condensed"; text-decoration:none;text-underline:none">   Else  'в противном случае этоуказатель на следующую ячейку FAT — вызываем эту же процедуру

<span Academy Condensed"; text-decoration:none;text-underline:none">        DeleteCellFromFAT(Sheets(«sheet»).Cells(3; 5 + StartCell).Value) 'но с новым номеромячейки FAT

<span Academy Condensed"; text-decoration:none;text-underline:none">        Sheets(«sheet»).Cells(3; 5 +StartCell) = "" 'и затем ее очищаем

<span Academy Condensed"; text-decoration:none;text-underline:none">   End If

<span Academy Condensed"; text-decoration:none;text-underline:none">End Sub

<span Academy Condensed"">

Список литературы, примененной при подготовке курсовой работы.

1.<span Times New Roman""> 

Microsoft Systems Journal, Sept 1989. П
еще рефераты
Еще работы по программированию, базе данных