Одеська державна академія холоду p>
Інститут інформаційних технологій кафедра інформаційних систем p>
курсової роботи з дисципліни p>
"Теорія операційних систем" p>
"модель файлової системи FAT" p>
Виконав студент 322Б групи Холод Денис. p>
Керівник Чмир І.О. p>
ОДЕСА p>
1997
Зміст: p>
| Мета курсової роботи | 3 |
| Ідея програми | 3 |
| Про систему FAT | 4 |
| Структура системи файлів FAT | 5,6 |
| Про реалізацію завдання | 7 |
| Про застосованих рівнях абстракції | 8 |
| Про інтерфейсі | 9 |
| Оригінальний текст: Макроси, що викликаються подіями | 10 |
| Оригінальний текст: Базові події | 13 |
| Оригінальний текст: Макроси нижнього рівня абстракції | 15 |
| Список літератури, застосованої при підготовці курсової | 17 |
| роботи | | p>
Мета: p>
Розробка програми, що моделює організацію файлової системи FAT. p>
Ідея програми: p>
Програма позвовяет експериментально досліджувати логічну структуруфайлової системи FAT, що складається з трьох областей: FAT (File Allocation
Table), кореневий каталог і область файлів. [1] Є панель описуоперацій з файлами, що знаходяться на диску, а саме: додати файл, видалитифайл, перезаписати файл (зі зміною розміру). Крім того, наданаможливість графічного відображення відповідності файлів секторів на диску. p>
Файлова Система FAT: p>
Так звана файлова система FAT використовувалася у всіх версіях
МСДОС і в перших двох випусках OS/2 (версії 1.0 і 1.1). Кожний логічнийтому має власний FAT, який виконує дві функції: міститьінформацію розподілу для кожного файлу в томі у формі списку зв'язківмодулів розподілу (кластерів) і вказує, які модулі розподілувільні. p>
Коли FAT був винайдений, це було чудове рішення для управліннядисковим простором, головним чином тому що гнучкі диски, на якихвін використовувався, рідко були розміром більше, ніж кілька Mb. FAT бувдостатньо малий, щоб перебувати в пам'яті постійно, дозволяв забезпечуватидуже швидкий довільний доступ до будь-якої частини будь-якого файлу. Коли FAT бувзастосований на жорстких дисках, він став занадто великим для резидентногознаходження в пам'яті і погіршував продуктивність системи. Крім того, такяк інформація щодо вільного дискового просторурассредотачівалась "впоперек" великої кількості секторів FAT, він бувнепрактичний при розподілі файлового простору, і фрагментація файліввиявилася перешкодою високої ефективності. p>
Крім того, використання щодо великих кластерів на жорсткихдисках призвело до великої кількості невикористаних ділянок, так як всередньому для кожного файлу половина кластеру була витрачена даремно. p>
Обмеження FAT на найменування файлів і каталогів успадковані з
CP/M. Коли Paterson створював 86DOS, однією з його перших цілей булополегшити імпорт з CP/M в його нову операційну систему. А отжеприйняті в CP/M обмеження на імена файлів і розширень перенеслися в
86DOS. P>
Протягом декількох років Microsoft і IBM зробили спробу продовжитижиття файлової системи FAT завдяки зняття обмежень на розміри томи,поліпшенню Стратегія розподілу, кешування імен шляху, і переміщеннятаблиць і буферів у розширену пам'ять. Але вони можуть розцінюватися тількияк тимчасові заходи, тому що файлова система просто не підходила довеликим пристроїв довільного доступу. p>
Структура системи файлів FAT
| 00Н | 01н | Ідентифікатор дисководу |
| 01н | 09Н | Файл (8 символів) |
| 09Н | 0СН | Розширення (3 символи) |
| 0СН | 0ЕН | Номер поточного блоку |
| 0ЕН | 10Н | Размер записи |
| 10Н | 14Н | Размер файла |
| 14Н | 16Н | Дата створення (оновлення) |
| 16Н | 18Н | Час створення (оновлення) |
| 18Н | 20Н | Зарезервовано |
| 20Н | 21Н | Номер поточного запису |
| 21Н | 25Н | Номер відносної записи | p>
| 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 | Номер відносної записи | p>
Резюме p>
Резюме. P>
Про реалізацію завдання p>
Модель файлової системи є робочим лист Microsoft
Excel, на якому у вигляді осередків представлені три логічні структурифайлової системи: p>
. Каталог файлів
. Таблиця розподілу
. Область файлів p>
На робочому аркуші також розташовані дві панелі управління: p>
1. Операції з файлами p>
2. додати p>
3. видалити p>
4. перезаписати p>
5. Візуалізація FAT p>
6. показати файл p>
7. прибрати стрілки p>
Виходячи з контексту питання паралельне виконання процесів абопотоків (MultiThreading) реалізовувати немає необхідності. З огляду на цічинники, а також необхідність розробки "дружнього" інтерейса ззастосуванням графічних примітивів, було вирішено використовувати мовупрограмування VisualBasic (VBA) від фірми Microsoft і електронну таблицю
Excel 5.0 фірми Microsoft. P>
Оскільки модель є типовою керованої подіями системою, тоалгоритм її роботи досить простий, а точніше являє собою рядалгоритмів, які перетинаються тільки в середньому рівні абстракції. (див.нижче) Події викликаються користувачем за допомогою впливу на органиуправління. p>
Про застосованих рівнях абстракції p>
Всі можливі події були ретельно проаналізовані автором ірозділені на три категорії, або на три рівні абстракції:
. Події, що викликаються зовнішніми впливами. Такими є всі події, що викликаються користувачем за допомогою виклику пунктів з груп операцій з файлами. [2]
. Події фундаментальної природи, тобто базові події, що породжуються попередні. Їх значно менше, і вони ніяк не вникають у суть породили із зовнішніх подій. [3]
. Події низького рівня абстракції, які є штучно синтезованими з попередніх двох груп подіями і мають на меті знизити складність системи за рахунок абстрагування від непринципових тонкощів і ускладнень в системі, що диктуються контекстом. Такими, наприклад, є події обробки неправильних ситуацій. [4] p>
Про інтерфейсі p>
Інтерфейс є інтуїтивно зрозумілим і не нав'язливим, завжди,наскільки це можливо, є "демократичним" по відношенню докористувачеві. У програмах, написаних таким стилем, дуже чіткопростежується причинно-наслідковий зв'язок, добре знайома будь-якій людиніі є невід'ємною частиною образного мислення. Це делат програмудосить простий у використанні, а алгоритм роботи простим в розумінні. Всянеобхідна для роботи інформація представлена в діалогах, про неправильнісітуціях програма повідомляє користувачеві, що це єдиний (і законний)випадок порушення свободи дій користувача. p>
Далі наводиться вихідний текст програми з багатьма коментарями,в яких робиться наголос не на особливості мови програмування іконкретної реалізації, а на представлення складових файлової системи якоб'єктів, а процедур та функцій як методів, що застосовуються до цих об'єктів. p>
Макроси, що викликаються подіями
Public Type FileID 'Тип, що описує файл: ім'я, розмір і точка входу в FAT p>
Name As String p>
Size As Integer p>
First As Integer p >
End Type p>
Sub PressAddFile () 'Макрос, що викликається кнопкою "Додати Файл" p>
DialogSheets ( "Add"). EditBoxes ( "Name"). Text = " " 'підготовка діалогу
"Додавання файлу" p>
DialogSheets ( "Add"). EditBoxes ( "Size"). Text = "" 'очистка полів вводу p>
Sheets ( "Add"). Show' Виклик діалогу "Додавання файлу" p>
With DialogSheets ( "Add") 'Перевірка на правильність введених даних p>
If (. EditBoxes ( "Name"). Text = "") Or (. EditBoxes ( "Size"). Text = "")
Or (. EditBoxes ( "Size"). Text = "0") Then Exit Sub p>
End With p>
Dim NewFile As FileID 'Примірник змінної з описом створюваногофайлу p>
With DialogSheets ( "Add") p>
NewFile.Name =. EditBoxes ( "Name"). Text p>
NewFile.Size =. EditBoxes ( " Size "). Text p>
End With p>
Call AddFile (NewFile) 'Виклик процедури додати файл p>
Refresh' оновили графічне зображення розміщення файлів
End Sub p>
Sub PressDeleteFile () 'в основному робочому листі натиснута кнопка Видалити Файл temp = 4 p>
With DialogSheets ( "Delete")' готуємо до роботи діалог Delete p> < p>. ListBoxes ( "Name"). RemoveAllItems p>
While Sheets ( "Sheet"). Cells (temp; 2) "" 'заповнюємо списокнаявними в каталозі файлами p>
. ListBoxes ( "Name"). AddItem
Text: = Worksheets ( "Sheet"). Cells (temp; 2). Value; Index: = temp - 3 temp = temp + 1 p>
Wend p>
. Show 'показуємо діалог Delete p>
If. ListBoxes ( "Name") = 0 Then Exit Sub p>
Dim File As FileID 'мінлива для ідентифікатора видаляєтьсяфайла.Передается процедурі DeleteFile p>
File.Name = Sheets ( "Sheet"). Cells (. ListBoxes ( "Name") + 3; 2) p>
File.Size = Sheets ( "Sheet"). Cells (. ListBoxes ( "Name") + 3; 3) p>
File.First = Sheets ( "Sheet"). Cells (. ListBoxes ( "Name") + 3; 4 ) p>
Call DeleteFile (File) 'Викликаємо процедуру видалення файлу p>
Refresh' оновили графічне зображення розміщення файлів p>
End With
End Sub p>
Sub PressRemakeFile () 'натиснута кнопка Ізменіть_размери_файла
'з цього приводу готуємо до роботи діалог Remake temp = 4 p>
With DialogSheets ( "Remake") p>
. ListBoxes ( "Name"). RemoveAllItems p>
. EditBoxes ( "Size"). Text = "" p>
While Sheets ( "Sheet"). Cells (temp; 2) "" 'заповнюємо списокнаявними в каталозі файлами p>
. ListBoxes ( "Name"). AddItem
Text: = Worksheets ( "Sheet"). Cells (temp; 2). Value; Index: = temp - 3 temp = temp + 1 p>
Wend p>
. Show 'показуємо діалог Remake p>
'при натисканні кнопки OK в діалозі запуститься макрос DialogRemakePressOK p>
End With
End Sub p>
Sub DialogRemakePressName () 'в діалозі Перезапис вибраний файл зі списку p>
With DialogSheets ( "Remake")' і тому в діалозі Перезапис оновлюємополе розміру файлу в соотв. з обраним файлом p>
. EditBoxes ( "Size"). Text = Sheets ( "Sheet"). Cells (3 +
. ListBoxes ( "Name"). ListIndex; 3). Value p>
End With
End Sub p>
Sub DialogRemakePressOK () 'в діалозі зміна розмірів файлу натиснута кнопка
OK p>
With DialogSheets ( "Remake") p>
. Hide 'прибрали з екрану діалог p>
If. ListBoxes ( "Name"). ListIndex = 0 Then Exit Sub p>
Dim File As FileID 'Примірник типу FileID - ідентифікатор файлу p>
File.Name = Sheets ( "Sheet"). Cells (3 +. ListBoxes ( "Name"). ListIndex ;
2). Text p>
File.Size = Sheets ( "Sheet"). Cells (3 +. ListBoxes ( "Name"). ListIndex;
3). Value p>
File.First = Sheets ( "Sheet"). Cells (3 +
. ListBoxes ( "Name"). ListIndex; 4). Value p>
'перевірка на наявність змін p>
If. EditBoxes ( "Size"). Text = File.Size Or. EditBoxes ( "Size"). Text =
"0" Then Exit Sub p>
'перевірка на помещаемость p>
If. EditBoxes ( "Size"). Text> (FreeSize + ((File.Size - 1) 8 + 1)
* 8) Then temp = MsgBox ( "Файл" & File.Name & "розміром" &
. EditBoxes ( "Size"). Text & "не може бути розміщений"; vbExclamation;
"Перезапис файлу") p>
Exit Sub p>
End If 'перезапис: видалення, а потім запис файлу, але з іншимрозміром p>
Call DeleteFile (File) 'видалили p>
File.Size =. EditBoxes ( "Size"). Text' змінили розмір p>
Call AddFile (File) 'записали p>
Refresh' оновили таблицю розподілу файлів p>
End With
End Sub p>
Sub Visualisation () 'візуалізація файлу temp = 4 p>
With DialogSheets ( "Visualisation")' готуємо до роботи діалог
Visualisation p>
. ListBoxes ( "Name"). RemoveAllItems p>
While Sheets ( "Sheet"). Cells (temp; 2) "" 'заповнюємо списокнаявними в каталозі файлами p>
. ListBoxes ( "Name"). AddItem
Text: = Worksheets ( "Sheet"). Cells (temp; 2). Value; Index: = temp - 3 temp = temp + 1 p>
Wend p>
. Show 'показуємо діалог Visualisation p>
If. ListBoxes ( "Name") = 0 Then Exit Sub 'вибрали чи що-небудь? p>
Dim NumberFile As Integer p>
NumberFile =. ListBoxes ( "Name"). ListIndex 'номер по каталогувізуалізіруемого файлу p>
Sheets ( "Sheet"). Cells (NumberFile + 3; 2). ShowDependents 'показуємолінії, що проходять від осередку каталогу з ім'ям візуалізіруемого файлу довсіх зайнятих їм осередків області файлів p>
End With
End Sub p>
Базові події p>
Const ColorOfPaper = 33 'колір фону області файлів
Const ColorUsedPartOfFAT = 2 'колір зайнятої частини області файлів p>
Sub AddFile (NewFile As FileID)' Процедурa додати файл p>
'Перевірка наявності присутності в достатньому для створення файлукількості вільного простору p>
If NewFile.Size> FreeSize Then temp = MsgBox ( "Файл" + NewFile.Name + "не може бути розміщений черезчерез брак вільного місця. "; vbExclamation;" Процес створення файлу ") p>
Exit Sub p>
End If count = NewFile.Size 'рахівник вже записаної частини файлу p>
NewFile.First = NextFreeCellFAT 'завдання точки входу в FAT для даногофайлу p>
Dim PreviousCellFAT As Integer 'Номер останньої модифікувавшиосередку FAT p>
PreviousCellFAT = NextFreeCellFAT p>
Call ToFAT (PreviousCellFAT; 0) 'Записали в неї нуль-ознака того, щоце останній (поки що) кластер даного файлу count = count - 8 'як мінімум 8 байт файла вже розміщені p>
While count> 0' поки весь файл не розмістився p>
Call ToFAT (PreviousCellFAT; NextFreeCellFAT) 'в останнюмодифікувавши клітинку FAT вносимо покажчик на наступну вільнуклітинку p>
PreviousCellFAT = NextFreeCellFAT p>
Call ToFAT (PreviousCellFAT; 0) 'Записали в неї нуль-ознака того,що це останній (поки що) кластер даного файлу count = count - 8 'як мінімум 8 байт файла вже розміщені p>
Wend p>
Call AddFileToCatalog (NewFile)' додали файл у каталог
End Sub p>
Sub DeleteFile (File As FileID) 'процедура видаляє заданий файл безрозмов p>
Call DeleteCellFromFAT (File.First) p>
Call DeleteFileFromCatalog (File.Name)
End Sub p>
Sub Refresh () 'оновлення зображення області файлів p>
With Sheets ( "Sheet") p>
. Range ( "F6: U13"). Interior . ColorIndex = ColorOfPaper 'забарвилиобласть файлів в колір фону p>
. Range ( "F6: U13"). Value = "" 'очистили всі комірки області файлів p>
. Range ( "F6: U13"). NumberFormat = "0" 'формат числа для областіфайлів-цілі числа p>
. ClearArrows 'прибрали всі стрілки p>
Dim PointerToFile As String p>
NumberFile = 1 p>
While. Cells (NumberFile + 3; 2) "" 'послідовнопереглядаємо область файлів. Для кожного файлавиполняется наступнапроцедура: p>
NumberCellFAT =. Cells (NumberFile + 3; 4) 'точка входу в FAT N -ного файлу p>
PointerToFile = "= R" & NumberFile + 3 & "C2" 'вказівник накомірку каталогу з ім'ям N-ного файлу p>
Relation = (. Cells (NumberFile + 3; 3) - 1) Mod 8 'зміщення.
Являє собою розмір не повністю заповненого кластеру p>
While. Cells (3; NumberCellFAT + 5) 0 'перегляд FAT доознаки кінця ланцюжка p>
. Range (Cells (6; NumberCellFAT + 5); Cells (6 + 7;
NumberCellFAT + 5)). Interior.ColorIndex = ColorUsedPartOfFAT + NumberFile
'виділення кольором чергового неостанню кластеру N-ного файлу p>
. Range (Cells (6; NumberCellFAT + 5); Cells (6 + 7;
NumberCellFAT + 5)). Font.ColorIndex = ColorUsedPartOfFAT + NumberFile p>
. Range (Cells (6; NumberCellFAT + 5); Cells (6 + 7;
NumberCellFAT + 5)). Formula = PointerToFile 'кожна клітинка цього кластерутепер вказує на комірку з ім'ям файлу в каталозі p>
NumberCellFAT =. Cells (3; NumberCellFAT + 5) 'взялинаступну комірку FAT з ланцюжка p>
Wend 'тепер обробка останнього кластера N-ного файлу.
Відрізняється тим, що він може бути зайнятий не повністю p>
. Range (Cells (6; NumberCellFAT + 5); Cells (6 + Relation;
NumberCellFAT + 5)). Interior.ColorIndex = ColorUsedPartOfFAT + NumberFile p>
. Range (Cells (6; NumberCellFAT + 5); Cells (6 + Relation;
NumberCellFAT + 5)). Font.ColorIndex = ColorUsedPartOfFAT + NumberFile p>
. Range (Cells (6; NumberCellFAT + 5); Cells (6 + Relation;
NumberCellFAT + 5)). Formula = PointerToFile p>
NumberFile = NumberFile + 1 'працюємо з наступним файлом p>
Wend p>
End With
End Sub p>
Макроси нижнього рівня абстракції p>
Function FreeSize () As Integer 'Функція для визначення кількостівільного місця в області файлів p>
FreeSize = 0 temp = 6 p>
While temp <22 'перегляд області FAT p>
If Sheets ( "Sheet"). Cells ( 3; temp). Value = "" Then _ p>
FreeSize = FreeSize + 8 'якщо комірка FAT порожня, тосвоб.места в ній 8 байт temp = temp + 1 p>
Wend
End Function p>
Function NextFreeCellFAT () As Integer 'Функція повертає номер першийзнайденого вільного елемента FAT p>
NextFreeCellFAT = 1 p>
While NextFreeCellFAT <17 p>
If Sheets ( "Sheet"). Cells (3; NextFreeCellFAT + 5). Value = "" Then
Exit Function p>
NextFreeCellFAT = NextFreeCellFAT + 1 p>
Wend
End Function p>
Sub AddFileToCatalog (File As FileID) 'додавання файлу в область каталогу temp = 4 p>
With Sheets ( "Sheet") p>
While. Cells ( temp; 2) "" temp = temp + 1 'пошук вільного місця в каталозі файлів p>
Wend' хто дочитає до цього місця-пляшка шампанського! p>
. Cells (temp; 2) = File.Name 'Запис у каталозі інформації про фото p>
. Cells (temp; 3) = File.Size p>
. Cells (temp; 4) = File.First p >
End With
End Sub p>
Sub DeleteFileFromCatalog (NameDeletedFile As String) 'видалення інформації профото з каталогу p>
Position = 4 p>
While Sheets ( "Sheet"). Cells (Position; 2). Text NameDeletedFile p>
Position = Position + 1
Wend p>
For temp = Position To 16 + 3 'наступні за що видаляється файлом осередкузсуваються, _ затірая запис про файл, що видаляється p>
Sheets ( "sheet"). Range (Cells (temp; 2); Cells (temp; 4)). Value = _ p>
Sheets ( "sheet"). Range (Cells (temp + 1; 2); Cells (temp + 1;
4)). Value p>
Next
End Sub p>
Sub ToFAT (NumberCell As Integer; Value As Integer) 'Процедура запису взадану клітинку FAT заданого значення p>
Sheets ( "Sheet"). Cells (3; NumberCell + 5). Value = Value
End Sub p>
Sub DeleteCellFromFAT (StartCell As Integer) 'рекурсивна функція видаленняланцюжки з FAT _
Викликається з номером точки входу
'MsgBox ( "DeleteCellFromFAT, StartCell =" & StartCell) p>
If Sheets ( "Sheet"). Cells (3; 5 + StartCell). Value = 0 Then' якщо врозглянутій точці - 0, _ то це означає, що вона є вказівником кінця файлу p>
Sheets ( "Sheet"). Cells (3; 5 + StartCell) = "" 'і тому очищаємо цюкомірку FAT p>
Else 'в противному випадку це покажчик на наступну комірку FAT --викликаємо цю ж процедуру p>
DeleteCellFromFAT (Sheets ( "sheet"). Cells (3; 5 + StartCell). Value)
'але з новим номером комірки FAT p>
Sheets ( "sheet"). Cells (3; 5 + StartCell) = ""' і потім її очищаємо p>
End If
End Sub p>
Список літератури, застосованої при підготовці курсової роботи. P>
| Microsoft Systems Journal, Sept 1989. Отримано з Computer Library |
| Periodicals, Jan 1990, Doc # 14753 |
| Професійна робота в MS-DOS, Р. Данкан, Мир, 1993 |
| Excel 5.0 для професіоналів, Н. Ніколь, Р. Альбрехт, Москва, "Еком", |
| 1996 | p>
-----------------------< br>[1] Необхідно зауважити, що саме така структура використовувалася в першуверсії MS-DOS.
[2] PressAddFile
PressDeleteFile
PressRemakeFile
DialogRemakePressName
DialogRemakePressOK
Visualisation p>
[3] AddFile
DeleteFile
Visualisation
Refresh p >
[4] FreeSize
ToFAT
NextFreeCellFAT
AddFileToCatalog
DeleteCellFromFAT
DeleteFileFromCatalog p>
--------------- -------- p>
Файл Д p>
Файл В p>
Файл Б p>
Каталог p>
Файл Г p>
Каталог p>
Каталог p>
Файл А p>
Ідентифікатор дисковода p>
Кореневий каталог p> < p> (мітка тому) p>
Типовий блок керування файлом p>
Елементи структури p>
Відносний кінцевий адреса в байтах p>
Відносний початковий адреса в байтах p>
Розширений блок керування файлом p>
Відносний початковий адреса в байтах p>
Елементи структури p>
Відносний кінцевий адреса в байтах p>