Temat: System plików FAT12.
Prowadzący: mgr inż. Arkadiusz Chrobot
Grupa 211A: Dariusz Kamiński, Bartosz Jackowski
I Wstęp:
System plików to abstrakcyjna struktura, która ma za zadanie ułatwić i ujednolicić dostęp i zarządzanie danymi zapisanymi na rożnych typach nośników. W przypadku MS-DOS, dla dyskietki jest to FAT12 oparty o tablice alokacji plików (File Allocation Table). Dane na dyskietce są przechowywane w sektorach o pojemności 512B. Z sektorów składają się ścieżki – umieszczone na dyskietce w postaci okręgów, umieszczane po obu stronach dyskietki. Aby odwołać się do konkretnych danych należy podać trzy współrzędne: numer głowicy (strony dyskietki), numer ścieżki i sektora na ścieżce. Numer sektora logicznego określa się następująco:
- ((nr ścieżki)*(liczba głowic) + nr głowicy)*(liczba sektorów na ścieżce) + nr sektora na ścieżce
W pierwszym sektorze dyskietki znajduje się MBR (Master Boot Record), który zawiera informacje o organizacji nośnika: liczba sektorów, ich rozmiar, liczba głowic.. itp. Za MBR znajdują się tablice alokacji plików FAT – struktury określające, które jednostki przydziału należą do danego pliku. Każda pojedyncza JAP (Jednostka Alokacji Pliku – Jednostka Przydziału) zawiera informacje takie jak: numer kolejnej JAP należącej do pliku, typ JAP (zajęta, wolna, uszkodzona). W przypadku FAT12 wartości i indeksy w FAT i JAP są 12-sto bitowe. Sposób wyznaczania kolejnej JAP:
- Pomnóż numer JAP przez 1,5.
- Część całkowita określa numer bajta od początku FAT zawierającego numer kolejnej FAT.
- Odczytaj wskazany i następny bajt.
- Zamień kolejność tych bajtów.
- Jeśli ostatni numer JAP był parzysty to weź 12 mniej znaczących bitów otrzymanego w poprzednim kroku słowa, w przeciwnym przypadku, 12 najbardziej znaczących bitów.
- Tak otrzymana liczba wskazuje numer kolejnej JAP.
Za tablicami FAT znajduje się katalog główny dyskietki. Każda 32B pozycja zawiera informacje o nazwie, typie, atrybutach, uprawnieniach dostępu, czasie i dacie utworzenia obliczane i zapisane następująco:
- czas = godziny * 2048 + minuty * 32 + sekundy/2,
- data = (rok-1980)*512 + miesiąc*32 + dzień.
F |
E |
D |
C |
B |
A |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
godzina |
minuta |
sekunda/2 |
F |
E |
D |
C |
B |
A |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
||
rok |
miesiąc |
dzień |
II Przebieg Ćwiczeń:
Do samodzielnego wykonania mieliśmy 3 zadania, wykonaliśmy wszystkie:
Ćwiczenie 1 (zad1.pas):
Napisać program, który odczyta zawartość MBR i wyświetli na ekran niektóre informacje. W procedurze „odczytMBR”, do której przekazujemy zmienną buforową jako parametr, dokonujemy odczytu zawartości pierwszego sektora dyskietki. Używamy funkcji 02H przerwania 13H, a do odpowiednich rejestrów przekazujemy następujące dane: AL – liczba sektorów, CX – numer ścieżki i sektora, DL – numer napędu (0 dla dyskietki), DH – numer głowicy, a do ES:BX – adres bufora za pomocą znanych już i używanych na wcześniejszych laboratoriach funkcji pascalowych „seg” i „ofs”. Bufor musi mieć odpowiednią strukturę odpowiadającą strukturze MBR. Po odczycie sprawdzamy wartość znacznika CF: jeżeli jest wyzerowany znaczy to, że wszystko przebiegło dobrze, w przeciwnym wypadku kod błędu zwracany jest w AH. Następnie wyświetlamy na ekran podstawowe informacje z bufora.
Ćwiczenie 2 (zad2.pas).
Napisać program, który wyświetli mapę dyskietki na ekranie. Użyliśmy zmodyfikowanej procedury „odczytMBR” – pominęliśmy etap wyświetlania informacji z MBR, oraz trzech nowych:
Procedura „odczyt_sek” – do której przekazujemy jako parametry: adres bufora, ilośc sektorów do odczytania oraz trzy współrzędne do lokalizacji sektora. Działa ona w sposób prawie identyczny co wcześniejsza procedura z tym, że zmienił się typ bufora oraz dane potrzebne do odczytu konkretnych sektorów nie są ustawiane na sztywno, lecz przekazywane do procedury.
Procedura „kolor” – wyświetla odpowiedniego koloru znaki w zależności od wartości parametru do niej przekazanego. Służy do identyfikacji typu JAP – czy jest uszkodzony, zajęty .. itp.
Funkcja „nast_JAP” – wylicza i zwraca numer kolejnej jednostki alokacji pliku w oparciu o dane do niej przekazywane: parzystość poprzednio odczytanego bajta danych, numer bieżącego bajta i bufor z którego należy czytać dane. Obliczeń dokonuje na podstawie algorytmu opisanego w wstępie.
W programie głównym odczytujemy zawartość MBR, później kolejnego sektora do bufora typu „Tbyte” który będzie od teraz zawierał numery JAP. Następnie iteracyjnie wyznaczamy kolejne JAP i wyświetlamy informacje o nich.
Ćwiczenie 3 (zad3.pas).
Napisać program, który wyświetli na ekranie zawartość katalogu głównego dyskietki. Tu używamy dwóch stosowanych w zadaniu drugim procedur: „odczytMBR” i „odczyt_sek” oraz trzech nowych:
Procedury „czas” i „data” przeliczają odpowiednio czas i datę utworzenia pliku na postać zrozumiałą i czytelną dla użytkownika. Sposoby odczytu godziny, minuty, sekundy, dnia, miesiąca i roku są do siebie podobne i wyglądają następująco:
na odpowiednich wartościach bitów mówiących o minucie, sekundzie ...itp. jest dokonywana operacja logiczna „and” z liczbą, której wartość odpowiada rozmiarowi jaką minuta, sekunda ...itp. zajmuje w odpowiednim polu bufora np.:
min:=(p.czas and (63 shl 5) shr 5), gdzie: wartość 63 odpowiada 6-ściu bitom które oznaczają minuty w zmiennej „p.czas”, wartość ta jest przesuwana logicznie w lewo o 5 pozycji, a po wykonaniu operacji „and” przesuwana o 5 w prawo, aby do zmiennej „min” odczytać tylko fragment zmiennej „p.czas” mówiący o minucie.
Procedura „plik_info” służy do wyświetlania informacji o pliku, takich jak: nazwa, rozszerzenie, czas i data utworzenia, pierwsza jednostka przydziału.
W programie głównym dokonujemy odczytu MBR, następnie odczytu 14 sektorów zaczynających się od 2 sektora na 0 ścieżce, którą obsługuje 1 głowica – gdyż od tego miejsca zaczyna się katalog główny. Odczytujemy 14 sektorów, ponieważ każda pozycja ma rozmiar 32B, a pozycji jest 224, co jest równe 14 sektorom po 512B. Na ekran wyświetlamy tylko pozycje mówiące o plikach obecnych na dyskietce i rozmiarze większym od 0, ponieważ na dyskietce mogą się znajdować również pozycje częściowo zapisane np. po plikach usuniętych i systemowych.
III. Wnioski:
Wszystkie ćwiczenia przebiegły zgodnie z oczekiwaniami. Nie wystąpiły żadne komplikacje ani błędy.