4. Współpraca z dyskami
Współpraca komputera z dyskami jest miejscem, gdzie Bios i Dos działają ze sobą szczególnie w ścisły sposób. Rozdzielanie tych funkcji jest nieco pozbawione sensu.
4.1. Sektory, ścieszki, klastry i cylindry
Dysk, obojętnie czy to dyskietka czy dysk twardy, składa się z jednej lub więcej płytek w kształcie z naniesioną substancją gmagnetyczną. System operacyjny Dos wprowadził następującą organizację dysków: całą powierzchnię, oczywiście logiczne, współsirodkowymi okręgami - ścieszkami (Track). Każda ścieszka podzielona jest na mniejsze jednostki - sektory (Sector). Ich liczba na ścieszce jest zależna od położenia ścieszki - na zewnątrz dysku jest ich najwięcej, najbliżej środka jest ich najmniej. System operacyjny wymaga jednak, by liczba sektorów na ścieszce3 była jednakowa. Operację tę wykonuje sterownik dysków w sposób całkowicie niewidzialny dla systemu. Gdy dysk jest zbudowany więcej niż z jednej płytki, to wszystkie ścieszki płaszczyzny przecinającej wszystkie płytki noszą miano cylindra. Jest to jednostka spotykana jedynie w dyskach twardych - dyskietki składają się zawsze z jednej płytki. Sektory wchodzą wskład tak zwanych jednostek alokacji, wskrócie JAP lub klastrów (Cluster). Chodzi tu o to, że program nie jest umieszczony w sektorach, tylko właśnie w klastrach. Jeśżeli klaster to dwa sektory, to program zajmujący naprawdę trzy sektory na dysku, będzie zajmował dwa klastry, czyli defacto cztery sektory. Stąd czasem rozbieżności w ilości zajmowanego przez programy, jeżeli chodzi o ich faktyczną długość, a ilości miejscach zajmowanego w jednostkach alokacji. Dsyk można także scharakteryzować za pomocą stron - jest to ilość powierzchni płytek będących pod kontrolą systemu Dos. Dysk twardy o dwóch płytkach będzie miał tych stron cztery. Jest jeszcze jeden parametr charakteryzujący nośnik - jest to gęstość. Określa ona ilość ścierzek na jednostkę długości - promień dysku. Jednostką są zazwyczaj TPI (Track Per Inch - ścieszka na cal). Jednostka ta mówi ile ścierzek przechodzi przez promień dysku. Dyskietki mają gęstość zapisu od 48 do 96 TPI. Dyski twarde nawet do 1000 TPI. Pojemność dysków mierzy się w tych samych jednostkach co pamięć, czyli w bajtach. Dyskietki są zazwyczaj produkowane w dwóch formatach: 5,25 cala i 3,5 cala (jest to długość krawędzi bocznej).
160kB - 40 ścierzek, 320 sektorów, jedna strona, 48 TPI, 5,25 cala
180kB - 40 ścierzek, 360 sektorów, jedna strona, 48 TPI, 5,25 cala
320kB - 40 ścierzek, 640 sektorów, dwie strony, 48 TPI, 5,25 cala
360kB - 40 ścierzek, 720 sektorów, dwie strony, 48 DPI, 5,25 cala
720kB - 80 ścierzek, 1440 sektorów, dwie strony, 135 DPI, 3,5 cala
1,2MB - 80 ścierzek, 2400 sektorów, dwie strony, 96 DPI, 5,25 cala
1,44MB - 80 ścierzek, 2880 sektorów, dwie strony, 135 DPI, 3,5 cala
4.2. FOrmatowanie
Przystosowanie dyskietki (nośnika) do pracy z komputerem nosi nazwę formatowania. W jego trakcie na powierzchnię dysku nanoszona jest struktura ścierzek, sektorów i innych pól używanych tylko przez sterownik dysku. Gdy korzystamy z dysku twardego, potrzebne jest dwókrotne formatowanie - jedno na tak zwanym niskim poziomie, drugie normalne. Pierwsze jest zazwyczaj przeprowadzane przez producenta. Gdy dyskietka lub dysk twardy został już tak spreparowany, możemy zacząć z nim pracować.
4.3. Boot sector
Logicznie i fizycznie pierwszym sektorem na dysku jest tak zwany Boot Sector. Pełni on szczególnie ważną rolę. Zawiera on informacje o strukturze naszej dyskietki, a także program, który wczyta zbiory systemowe, o ile znajdują się na tej dyskietce. Program taki w żargonie nosi nazwę programu "bootującego", a proces ładowania systemu "bootowania". Poniżej jest opis pierwszych trzydziestu bajtów:
Przesunięcie 00h - Rozmiar 2B - JMP*skok do programu wczytującego system
02h - 1B - NOT instrukcja pusta
03h - 8B - $49$42$4D$20$20$33$2E$33 (IBM 3.3) identyfikator wytwórcy systemu i jego wersja. Jest tylko przyjęty standard. Może być tu zawartych dowolnych bajtów, ponieważ Dos nie kożysta z tego pola.
0Bh - 2B - ilość bajtów na sektor w formacie: LSB MSB
0Dh - 1B - ilość sektorów na klaster
0Eh - 2B - zarezerwowane sektory
10h - 1b - ilość tablic FAT
11h - 2B - maksymalna ilość katalogów wychodzących z głównego katalogu (32 bajty każdy) w formacie LSB MSB
13h - 2b - Całkowita ilość sektorów na dysku (partycji) w formacie LSB MSB
15h - 1B - tyb dysku:
|FEh - 160kB
|FCh - 180kB
|FFh - 320kB
|FDh - 360kB
|F0h - 720kB; 2,88MB
|F9h - 1,2MB; 1,44MB
|FFF8h - dysk twardy
16h - 2b - ilość sektorów w jednej tablicy FAT (LSB MSB)
18h - 2B - ilość sektorów na ścieszkę (LSB MSB)
1Ah - 2b - ilość stron (głowic)
1Ch - 2b - ilość sektoró ukrytych
1Eh - początek obszaru przeznaczonego na program ładującego system. Program ten można modyfikować.
Bajty 0Bh - 17h tworzą tak zwaną BPB (aBios Parameter Block - blok parametrów Bios). W wersji 4.00 i wyższych BOOT SECTOr ma wygląd nie co inny:
bajty 00h - 1Bh bez zmian w stosunku do wersji wześniejszych
1Ch - 4B - liczba sektorów ukrytych
20h - 4B - całkowita liczba setkorów na dysku
24h - 1b - numer mechanizmu dyskowego
25h - 1B - zarezerwowane
26h - 1B - znacznik rozszerzonego rekordu ładującego
27h - 4B - numer seryjny dysku
2Bh - 11B - etykieta dysku
36h - 8B - typ systemu plików
Typ samym blok BPB uległ rozszerzeniu i zawiera się w bajtach 0Bh - 23h.
4.4. Tablica partycji dysku twardego
W Boot Sektorze dysku twardego, oprócz programu inicjującego system, znajduje się jeszce 64-bajtowa struktura o 4 16-bajtowych polach opisujące podział fizycznego dysku na dyski logiczne. Potrzeba takiego podziału wynikła z niemożności obsłużenia przez Dos w wersjach od 1 do 3. Opis partycji zaczyna się w polu o przesunięciu 1BEh, opis każdej partycji zawiera 16 bajtów. Koniec opisu partycji ma miejsce w polu o przesunięciu 1FEh. Pole to zawiera słowo o wartości 0AA55h.
Tak wygląda pojedynczy jelement tablicy partycji:
00h - 1B- znacznik typu partycji: 88h - z niej wczytywany jest system, 00h - każda inna
01h - 1B - numer głowicy początku partycji
02h - 2B - numer ścieszki i sektora początku partycji: 10 bitów - ścieszka, 6 - sektor
04h - 1B - typ systemu: 0 - nieznany, 1 - Dos 12-bitowy FAT, 4 - Dos 16-bitowy FAT
05h - 1B - numer głowicy końca partycji
06h - 2B - numer ścieszki i sektora końca partycji: 10 bitów - ścieszka, 6 - sektor
08h - 4B - numer pierwszego sektora dysku logicznego, licząc od początku dysku fizycznego
0Ch - 4B - rozmiar partycji w sektorach
4.5. FAT
Pliki na dysku są umieszczone nie w sektorach lecz w klastrach. Ważny jest też jeden szczegół - kod danego pliku nie musi być umieszczony w klastrach następujących po sobie - może być w kilku lub nawet w kilkunastu kawałkach. System jednak powinien wiedzieć, gdzie znaleźć kolejne kawałki programu. I tu z pomocą przychodzi tablica alokacji plików, w skrócie FAT (Fiee Allocation Table). Jej początek ma prawie zawsze miejsce w fizycznie drugim sektorze na dysku, tuż po BOOt Sektorze. Ponieważ możliwości sprtu z biegiemczasu się zwiększyły, a system w swej podstawowej formie był ten sam - powstały dwa rodzaje FAT'u: pierwszy, 12-bitowy dla systemu Dos w wersji 2.xx i przeznaczony wzasadzie wyłącznie dla dyskietek oraz 16-bitowy dla systemu Dos w wersji 3.XX i późniejszych. Na czym poleta FAT? Otóż jej istota jest prosta. W katalogu dyskietki, oprócz nazwy pliku, określony jest też numer JAP, od którego plik się zaczyna. W tablicy FAT pod tym numerem zapisany jest numer kolejnego klastra. Skolei pod tym numerem następny i tym podobnie. Tak to wygląda teoretycznie. Praktycznie przy obliczaniu pozycji następnego klastra jest nieco kłopotu. Sposób uzyskania kolejnego klastra jest różny w zależności od typu FAT. W przypadku 12-bitowego postępujemy następująco:
1. Posiadany numer JAP mnożymy przez 1,5;
2. Bierzemy część całkowitą uzystakanej liczby. Pod tym numerem i numerem następnym znajduą się dwa bajty szukanego numeru JAP;
3. Zamieniamy miejscami te bajty;
4. Jeżeli poprzedni JAP parzysty - wejź 12 mniej znaczących bitów słowa. Jeżeli poprzedni JAP nieparzysty - wejź 12 bardziej znaczących bitów słowa;
5. Otrzymana liczba to miejsce kolejnego JAP;
W przypadku JAP 16-bitowego procedura jest owiele prostrza:
1. Posiadany numer JAP pomnuż przez 2;
2. Otrzymana liczba to pierwszy bajt słowa zawierającego kolejny JAP.
Przestudiujmy to zagadnienie na następującycm przykładzie: Niech zbiór TEST.PAS zajmujer trzy klastry - 1, 3, 4. Tablica alokacji będzie miała wygląd następujący (w wersji 16-bitowej):
F0; FF; FF; FF; 1,XX; 2,00; 3,03; 4,xx; 5,xx; 6,00; 7,04; 8,FF; FF; ...
FF - bajty identyczne
xx - wartość nieistotna
F0 do 1,xx - typ dysku
od 3,03 do 8,FF - koniec JAP pliku
Bajty identyfikacyjne to: FF FF dla FAT 12-bitowego; ff FF FF dla FAT 16-bitowego
- wartość 0 oznacza JAP wolny
- wartość z przedziały FFF0 - FFF6 oznacza JAP systemowy
- wartość FFF7 oznacza JAP uszkodzony
wartość z przedziału FFF8 - FFFF - koniec pliku
Numer sektora odpowiadającego danemu JAP otrzymuje w sposób następujący:
1. Od posiadanego nueru JAP odejmujemy 2;
2. Otrzymaną liczbę mnożymy przez liczbę sektorów w jednym klastrze;
3. Dodajemy liczbę sektorów systemowych;
Liczba sektorów systemowych - 7; pojemność dysku 160kB
9 - 180kB
10 - 320kB
12 - 360kB
14 - 720kB
29 - 1,2MB
33 - 1,44MB
Tablica FAT ma zawsze swoją kopię - jednak dostęp do niej nie jest udokumentowany.
4.6. Katalog plików, talica CDS
Pliki w systemie DOs oparte są o tak zwane drzewiastą strukturę katalogów. Oznacza to, że podobnie jak gałęzie drzewa, struktura katalogów może się rozgałęziać. Główny katalog (Root Directory) może zawierać pliki lub podkatalogi (Sub Directory) a te znów pliki lub dalsze podkatalogi.
Dane o głównym katalogu dysku, jego plikach i podkatalogach, są zawarte w sektorach zapisanych bezpośrednio za drugą kopią FAT. Ilość sektorów przeznaczonych na ten katalog jest charakterystyczna dla nośnika. Wzwiązku jest ograniczona ilość podkatalogów wychodzących od głównego katalogu. Na dyskietce 360kB może być ich maksymalnie 16. W podkatalogu może być dowolna ilość, ponieważ dane o nich są zapisywane nie w obszarach zarezerwowanych na główny katalog, a w taki sam sposób jak pliki użytkowe.
Pliki lub podkatalogi opisuje następująca tablica:
00h - 8B - nazwa pliku lub podkatalogu w kodach ASCII
08h - 3B - rozszerzenie nazwy pliku w kodach ascii
0Bh - 1B - atrybut pliku:
|0 - plik dtylko do czytania (Read-Only)
|1 - plik ukryty (Hiden)
|2 - plik systemowy (System)
|3 - opis dotyczy etykiety dysku (label)
|4 - podkatalog
|5 - plik jest archiwizowany (Archive)
|6,7 - nieużywane
0Ch - 9B - zarezerwowane (wartość 0)
16h - 2B - czas utworzenia lub aktualizacji pliku, czas = godziny*2048 + minuty*32 + sekundy/2
18h - 2B - data utworzenia lub aktualizacji pliku, data = (rok - 1980)*512 + miesiąc*32 + dzień
1Ah - 2B - numer pierwszego JAP
1Ch - 2B - mniej znaczące słowo wielkości pliku
1Eh - 2B - bardziej znaczące słowo wielkości pliku
Pole przeznaczone na pierwszy znak pliku lub katalogu może mieć różne znaczenie:
00h - pozycja w katalogu dotychczas nie zajęta
E5h - plik skasowany
05H - gdy tak zaczyna się nazwa pliku, oznacza to, że plik faktycznie zaczyna się znakiem o kodzie E5h
2E0 h - podkatalog
2Eh 2Eh - podkatalog, numer JAP wskazuje na czątkowy JAP katalogu rodzicielskiego
Każdy inny - pierwszy znak nazwy
Ponieważ na każdym dysku logicznym istnieje pewien katalog, w danej chwili uważany za roboczy, istnieje specjalna tablica opisująca te katalogi. Tablica ta nosi nazwę CDS (Current Directory Structure - tablica katalogów roboczych). Jej rozmiar jest określony za pomocą strukturynazywanje listą list (dodatek B), w polu o przesunięciu 21h. Adres CDS znajdziesz w tej samej strukturze w plu o przesunięci 16h. Element tej tablicy ma następującą postać:
00h - 67B - ciąg ascii opisujący roboczy katalog napęd: \[{katalog/} katalog]
43h - 2B - typ dysku:
|bit 12: dysk przedstawiony przez LUBST
|bit 13: dysk dołączony przez JOINT
|bit 14: dysk fizyczny
|bit 15: dysk sieciowy
45h - 4B - daleki wskaźnik do bloku DPB
49h - 2B - początkowy klaster katalogu roboczego
4Bh - 4B - zarezerwowane
4Fh - 2B - położenie znaku '\' w polu 00h, traktowane jako oznaczenie głównego katalogu
51h - 7B - zarezerwowane (Dos 4.XX i późniejsze)
4.7. Blok parametrów dysku
Informacje o wszystkich użądzeniach blokowych, w tym o dyskach, zgłaszane przez storowniki użądzeń zarówno zewnętrznych, jak i tych wbudowanych w MSdos zawarte są w specjalenej tablicy nazywanej blokiem paremetrów dysku - DPB (ang. Drive parametr block). Dostęp do tego bloku jest możliwy na kilka sposobów:
1. Przez funkcję 32h przerwania 21h dla wskazanego dysku
2. Przez funkcję 1Fh przerwania 21h dla dysku roboczego
3. Przez wskaźnik zawarty w polu 45h tablicy CDS
4. Przez wskaźnik zawarty w plu 00h listy list (dodatek B).
A oto element struktury DPB w wersji systemu 4.XX i wyższych. W systemie 3.XX pole o przesunięciuu 0Fh miało wielkość jedngo bajtu, stąd następne pola miały przesunięcie zmniejszone o 1. Poza tym nie istniało pole 1Fh.
00h - 1B - numer dysku (0 - A; 1 - B; ...)
01h - 1B - numer jednostki w programie obsługi
02h - 2B - rozmiar sektora w bajtach
04h - 1B - liczba sektorów w klastrze (JAP) - 1
05h - 1B - logarytm przy podstawie 2 z liczby sektorów w JAP
06h - 2B - liczba sektorów zarezerwowanych na dysku, przed FAT
08h - 1B - liczba kopi FAT
09h - 2B - maksymalna liczba plików w katalogu głównym
0Bh - 2B - pierwszy sektor zawierający dane
0Dh - 2B - największy numer JAP (JAP na dane + 1)
0Fh - 2B - liczba sektorów zajętych przez FAT
11h - 2B - numer pierwszego sektora katalogu
13h - 4B - daleki wskaźnik do programu obsługi dysku
17h - 1B - typ nośnika - patrz opis Boot Sektora
18h - 1B - flaga dostępu do dysku: 0FFh - nie żądano dostępu
19h - 4B - daleki wwskaźnik do następnego bloku DPB. Jeżli przemieszczenie jest równe 0FFFFh, to jest to ostatni blok DPB
1Dh - 2B - numer pierwszego wolnego klastra na dysku
1Fh - 2B - liczba wolnych JAP na dysku (0FFFFh, jeżeli jest to liczba niewiadoma)
4.8. Blok opisu pliku
Dziedzictwem systemu CP/M w systemie MS-DOS jest niewątpliwie system dostępu do pliku za pomocą bloku opisu pliku, FCB (File COntrol Block). Blok FCB jest umieszczony fizycznie w obszarze programu, którego dotyczy. Gdy chmy wykonać jakąś operację na pliku do FCB musi mieć dostęp zarówno DOs, jak i program. Przy operacjach na plikach za pomocą FCB nie ma ograniczenia ilości otwartych plików. Każde nowe otwardzie odbywa się kosztem pamięci operacycjnej. Obecnei coraz żadziej sporadycznie używa się FCB - system obsługi zbiorów przestażały. Używa się raczej uchwytóww - następny punkt. Blok FCB ma wygląd następujący:
00h - 1B - nuemr napędu (0 - A:; 1 - B:; ...)
01h - 8B - nazwa pliku
09h - 3B - rozszerzenie nazwy pliku
0Ch - 2B - bieżący blok
0Eh - 2B - długość jednego rekordu
10h - 4B - długość pliku (LSB MSB)
14h - 2B - data ostatniej modyfikacji
16h - 2B - czas ostatniej modyfikacji
18h - 8B - zarezerwowane
20h - 1B - bieżący rekord w bloku
21h - 4B - bieżący rekord w dostępie swobodnym
Ponieważ w tak opisanym bloku nie ma miejsca na atrybut zbioru, wprowadzono tak zwany rozszerzony FCB. Pola 00h - 21h mają identyczną postać jak w normalnym FCB, dołączono pola o przesunięciu od -07h do 00h. Oto one:
-07h - 1B - FFh - znacznik rozszerzonego FCB
-06h - 5B - zarezerwowane
-01h - 1B - atrybut pliku
4.9. Uchwyty
Uchwyt pliku (File Handle) jest sposobem operacji na plikach, który zastąpi dostęp za pomocą FCB. Fizycznie uchwyt jest 16-bitową liczbą, która zostaje przypożądkowana plikowi podczas jego otwierania lub tworzenia. Od tej pory jest ona synonimem pliku, i nie tylko pliku, bo uchwyt można przypożądkować każed3emu użądzeniu znakowem o charakterze pliku. Podczas pracy systemu zdefiniowanych jest zawsze 5 uchwytów:
00h - standardowe wejście (sdin)
01h - standardowe wyjście (sdout)
02h - standardowe użądzenie wysyłające komunikaty o błędach (sderr)
03h - standardowe łącze szeregowe (sdaux)
04h - standardowe łącze równoległe (sdprn)
Możliwą ilość otwartych plików określamy w zbiorze CONFIG.SYS za pomocą polecenia BUFFERS=XX. Jak to się dzieje, że jeden numer może więcej, niż cała tablica FCB opiszemy w następnych punkcie.
4.10. Tablice JFT i SFT
Tablica JFT (ang. JOP file table - tablica plików procesu) ma swoje miejsce w bloku PSP aktualnego procesu w polu o przesunięciu 18h i wielkości 20 bajtów. Gdy tablica jest większa, jej adres znajdziesz w polu 34h. Adres tablicy SFT (ang. System FIel Table - systemowa tablica plików) znajdziesz w polu o przesunięciu 04h i rozmiarze 4 bajtów struktury LL (listy lis - DOdatek B).
Każdy uchwyt nowo otwieranego pliku jest indeksem w tablicy JFT. Stąd kolejne pliku otrzymują kolejne numery, choć pierwsze 3 pliki standardowe (sdin, sdout, sderr) mają ten sam numer (0), jako że odwołują się do tego samego pliku (użądzenia), as mianowicie konsoli (CON). Każdy z elementów tablicy JFT jest indeksem w tablicy SFT. Tablica ta opisu szczegółow wszystkiego otwarte pliki systemowe. Oto jej wygląd (DOs 5.0):
00h - 4B - daleki wwskaźnik do następnej tablicy SFT. Jeżeli offset jest równy 0FFFFh, oznacza to, że jest to ostatnia tablica
04h - 2B - liczba plików w tej podtablicy
06h - 59B - opis pierwszego pliku
41h - 59B - opis drugiego pliku
...
? - 59B - opis N-tego pliku
Blok opisu pliku składa się z 59 bajtów zorganizowanych w następujący sposób:
00h - 2B - liczba indeksów tablicy JFT odwołujących się do tego pliku
02h - 2B - tryb otwarcia pliku
04h - 1B - atrybut pliku
05h - 2B - informacja o uogólnionym pliku (funkcja 4400h przerwania 21h)
07h - 4B - wskaźnik do początku programu obsługi (dla użądzeń znakowych) lub do bloku parametrów dysku (DPB) dla użądzeń blokowych
0Bh - 2B - początkowy klaster pliku (JAP)
0Dh - 2B - czas utworzenia lub aktualizacji pliku
0Fh - 2B - data utworzenia lub aktualizacji pliku
11h - 4B - rozmiar pliku (LSB MSB)
15h - 4B - wartość wskaźnika odczytu - zapisu pliku
19 h -2B - numer klastra pliku wskazywanego przez wskaźnik odczytu zapisu
1Bh - 4B - numer sektora katalogu zawierającego opis danego pliku
1Fh - 1B - numer w pozycji katalogu zawierającym plik
20h - 11B - nazwa i rozszerzenie pliku
2Bh - 4B - wskaźnik do poprzedniego elementu SFT dzielącego do tego samego pliku za pomocą SHARE.EXE
2Fh - 2B - nuemr komputera w sieci
31h - 2B - adres PSP właściciela pliku
33h - 2B - położenie listy opisu zablokowanych regionów pliku (za pomocą SHARE.EXE)
35h - 2B - numer JAP, której notyczyła ostatnia operacja
37h - 4B - zarezerwowane
Opisana tablica ma taką postać w Dos 5.0.
W wersji 3.30 na jeden plik przypada 53, a nie 59, bajtów informacji. Przykład odczytania tablic JFT i SFT znajdziesz w następnych rozdziałach, w pliku JFT-SFT.PAS.
Wyszukiwarka
Podobne podstrony:
ustawa o wspolpracy 0404 (131)2006 04 Karty produktów04 Prace przy urzadzeniach i instalacjach energetycznych v1 104 How The Heart Approaches What It Yearnsstr 04 07 maruszewski[W] Badania Operacyjne Zagadnienia transportowe (2009 04 19)Plakat WEGLINIEC Odjazdy wazny od 14 04 27 do 14 06 14MIERNICTWO I SYSTEMY POMIAROWE I0 04 2012 OiOr07 04 ojqz7ezhsgylnmtmxg4rpafsz7zr6cfrij52jhi04 kruchosc odpuszczania rodz2Rozdział 04 System obsługi przerwań sprzętowychLiderzy jedza na koncu Dlaczego niektore zespoly potrafia swietnie wspolpracowac a inne nie lidjedKNR 5 04więcej podobnych podstron