Dos az örök téma IV.| Pascal 5.| A BO Vírusról
DOS az örök téma IV.
Ebben a hónapban a file rendszerekről lesz szó. Ezekről lehet a legkevesebbet hallani és elég sok
tévhit, jelenik meg velük kapcsoltban. Én ezeket a tévhiteket szeretném eloszlatni. Most joggal mondhatja mindenki, hogy mit keres ez a téma ebben a rovatban? Mivel a mai operációs rendszerek még tudják futtatni a DOS-os programokat és szerintem, nem árt megismerkedni logikai lemezkezelésükkel.FAT16:
(DOS is így kezeli a merevlemezt.)
A clusterek száma változó, de egy adott partícióban állandó. A cluster méret 512 bájt. A szektorokat clusterek alkotják és egy adott partícióban állandó a szektorméret.
A rendszerterület három részre bontható:
- boot szektor
- FAT
- ROOT
A boot szektor 512 bájtos (1 cluster). Tartalmaz egy információs táblát, amiben megtalálhatók a következő információk:
- verziószám
- szektorméret
- sávonkénti szektorszám
- FAT mérete
- gyökérkatalógus mérete
- hibaüzenetek
Az adatterület nyilvántartása clusterekben történik. A DOS-nál maximum 256 szektor lehet.
A FAT-ból létezik egy másolat is, de a másolat nem használható közvetlenül DOS-ból, csak a helyreállító program tudja használni. A FAT bejegyzése négy féle lehet:
- file folytatása
- file vége
- hibás cluster
- szabad cluster
A file kezdetét az állománybejegyzés tartalmazza.
A ROOT felépítése:
Az állománybejegyzések 32 bájtosak, ez a méret rögzített. Az első két bájt speciális karaktereket tartalmaznak, például, hogy a terület törölt vagy nem használt.
8 bájt az állomány neve
3 bájt kiterjesztése
1 bájt attribútum
10 bájt fenntartott
2+2 bájt az utolsó módosítás dátumát tartalmazza
4 bájt az állomány hosszát tartalmazza bájtokban
VFAT16 és VFAT32:
Támogatja a hosszú file neveket. Egy év 256 karakter lehet + 3 a kiterjesztés, de tárolja a file rövid nevét is 8+3 formában. Az állománybejegyzések 32 bájtosak. Egy állományhoz egy bejegyzésláncolat tartozik. Az első az alapbejegyzés a többi csak kiegészítő bejegyzés. A FAT16-nál a 10 fenntartott bájtból a 16 bites kiegészítő bejegyzésnél 8-at a 32 bites bejegyzésnél 10-et használnak. Tartalmazza a létrehozás dátumát 2 bájton, létrehozás idejét 3 bájton, utolsó hozzáférés idejét 2 bájton.
A VFAT32-nél +2 bájt a kezdő cluster sorszámát tartalmazza 32 biten.
Maximálisan 16T bájtot lehet lefedni vele. A kiegészítő bejegyzés mérete
a file nagyságától függ. A kiegészítő bejegyzés 13 bájtos és 16 bites UNI kódban van tárolva.HPFS:
Az információkat és a rendszeradminisztrációkat szétszórva tartalmazza a gyorsabb elérhetőség miatt. Egy telepíthető file rendszert tartalmaz (IFS). Kiegés
zítést nem igényel, mert beépített védelem a fragmentáció ellen, beépített paraméterezhet lemezcache, hosszú file nevek használatát tartalmazza. Az attribútumok 0-64k között változhat, ez programozható. Hot fix hívás a hibás részek kiiktatására és másodpercre kész lemeznyilvántartás. Az állománynév maximum 254 karakter lehet. 1 cluster 1 szektort alkot. Maximálisan 516G lehet egy partíció, és maximum 4Tbájtot lehet lefedni.Lemezszerkezet:
Első 18 szektor speciális:
- első 16 szektor BOOT
- 1 szektor állománykezelő
- 1 szektor biztonsági blokk
8MB-os sávokat tart nyilván. A katalógus 2 KB-os blokkokból áll D-csomóban elhelyezve.
Állománytárolás:
Minden állományhoz tartozik egy F-csomó, a kezdet előtt egy szektornyi. Azt mondja meg, hogy az állomány hány részből áll. Ez 12 db A-csomóra mutat. Az A-csomó vagy 40 állománybejegyzésre mutat vagy 60 A-csomóra.
NTFS:
A hosszú file neveket UNI kódban tárolja, de a 8+3 nevet is tárolja. A kis és nagybetűket meg tud különböztetni. Többfelhasználós adatbiztonsági modellt tartalmaz. A file műveletekről jelentésfile készül, és ezért vissza tudja állítani még a nagy veszteségeket is. Kötetkészlet létrehozását támogatja. Képes partíciókat összefűzni és a ritkán használt állományokat tömöríti.
Felépítése:
Minden állományhoz egy rekord tartozik. MFT-ben kerülnek bejegyzésre. Első 26 rekord kitüntetett szerepű.
- 2. rekord MFT tükörállományát tartja nyilván
- 1. és 2. megegyezik, ezért végtelen rekurzió jön létre
- 3. rekord a naplóállományra mutat
Rövid állomány vagy katalógusok esetén az állományt az MFT tartalmazza. Teljesen objektum orientált. Az MFT-t automatikusan bővíti, de helyet nem szabadít fel.
Ha valami kérdésetek, kérésetek van, akkor írjatok a következő címre: Magician@freemail.c3.hu
Magician
Szokásunkhoz híven most is kezdjük az előző szám végén feladott feladat megoldásával:
Uses Crt;
Var
szam : integer;
Begin
ClrScr;
WriteLn('Kérek egy számot');
ReadLn(szam);
case pont of
1..10: WriteLn('A szám az 1..10 tartományba esik.');
11..100: WriteLn(' A szám az 11..100 tartományba esik.');
101..1000: WriteLn(' A szám az 101..1000 tartományba esik.');
else WriteLn('A szám a tartományon kívül esik');
end;
Readkey;
End.
Ugye, hogy tényleg nagyon könnyű volt.
A mostani részben megismerkedünk a Pascal nyelv eljárásaival és függvényeivel, de előtte jöjjön egy kis rövid áttekintés, hogy mi is az a függvény és az eljárás.
Az eljárás egy olyan külön programrész, aminek külön egy feladatot adunk át. Ilyen lehet, ha valaki megír, például egy egérkezelést és többször használja a programban nem kell minden használathoz átmásolni ugyan azt a programrészt, elég csak a nevével rá hivatkozni. Az eljárások a programot érthetőbbé és jobban áttekinthetővé teszik. Paraméterátadás lehetséges.
A függvény nagyon hasonlít az eljáráshoz, csak az a különbség, hogy a függvény visszaadott értékkel is rendelkezik. Itt mindenképpen célszerű paramétert átadni.
Az eljárás és a függvény is ugyan úgy épül fel, mint egy külön program. Itt is lehet használni deklarációs részt. Egy eljáráson vagy függvényen belül is lehetnek további eljárások és függvények.
Mi is az a paraméterátadás?
A paraméterátadáskor egy eljárásnak vagy függvénynek adunk értéket, amivel dolgozhat.
A paraméterátadás kétféle lehet:
- cím szerinti
- érték szerinti
A cím szerinti paraméterátadásnál, ha az eljárásban megváltoztatjuk a paraméter értékét az eljáráson vagy függvényen belül, akkor, ha befejeződött az eljárás vagy függvény futása, akkor a változó értéke a megváltozott érték lesz.
Az érték szerinti paraméterátadásnál, ha az átadott értéket megváltoztattuk és kilépünk az eljárásból vagy függvényből, akkor az átadott érték elvész.
Nézzük egy kicsit konkrétabban Pascal nyelven:
A Pascalban először megadjuk, hogy eljárásról (procedure) vagy függvényről (function) van szó. A meghatározás után meg kell adnunk, hogy változókat (esetleg konstansokat) adunk át és, hogy cím vagy érték szerint. A cím szerinti átadásnál a var szócskát használjuk a paraméterlistában. Minden paraméter után ; kell tenni. A paramétereket úgy kell megadni, mint már a deklarációs résznél megbeszéltük.
Eljárás:
procedureeljárás_neve( [érék szerinti átadás paraméter listája]; var [cím szerinti átadott paraméterek listája]);
var
.
begin
.
.
.
end;
Függvény:
functionfüggvény_neve([érék szerinti átadás paraméter listája]; var [cím szerinti átadott paraméterek listája]): visszaadott_érték_típusa;
var
.
begin
.
.
.
end;
Ennyi elmélet után most jöjjön egy kis gyakorlat.
Első feladat: olvassuk be egy háromszög oldalait éseljárássál számítsuk ki a háromszög kerületét. Az eljárás neve legyen haromszog_kerulete. Az eredményt 3 tizedes jegy pontossággal határozzuk meg.
Kezdjünk is hozzá a feladat megoldásához:
uses crt;
var
a,b,c : real;
kerulet : real;
procedure haromszog_kerulete(a,b,c:real; var kerulet:real);
begin
kerulet:=a+b+c;
end;
begin
clrscr;
write('A háromszög a oldala: ');readln(a);
write('A háromszög b oldala: ');readln(b);
write('A háromszög c oldala: ');readln(c);
haromszog_kerulete(a,b,c,kerulet);
writeln('A háromszög kerülete: ',kerulet:5:3);
readkey;
end.
Lássunk egy kis magyarázatot:
A programban az a,b,c paraméterek értékét érték szerint adtuk át a kerület változót viszont cím szerint. Mivel a kerület cím szerint lett átadva, amikor az eljárásban megváltoztattuk a kerület változó értékét az eredeti programba is megváltozott az érték és csak ki kellet íratni.
Ami még magyarázatot érdemel az a kerület:5:3 itt azt adtam meg, hogy 5 egész jegyet és 3 tizedes jegyet írjunk ki.
Most egy kicsit bonyolítsuk a feladatot. A feladat ugyan az, mint az előbb csak a beolvasást oldjuk meg eljárással. Adjuk meg a szövegbe a változó nevét, ami a bekéréskor meg fog jelenni és a változót, amibe beolvasunk.
Lássuk most is a megoldást:
uses crt;
var
a,b,c : real;
kerulet : real;
procedure haromszog_kerulete(a,b,c:real; var kerulet:real);
begin
kerulet:=a+b+c;
end;
procedure beolvasas(szoveg:string; var valtozo:real);
begin
write('A háromszög ',szoveg,' oldala: ');readln(valtozo);
end;
begin
clrscr;
beolvasas('a',a);
beolvasas('b',b);
beolvasas('c',c);
haromszog_kerulete(a,b,c,kerulet);
writeln('A háromszög kerülete: ',kerulet:5:3);
readkey;
end.
Most írjuk át a programot úgy, hogy ne egy eljárással, hanem egy függvénnyel határozzuk meg a kerületet.
A függvény_nevet egy használjuk a függvényben, mint egy változót, de vigyázzunk, mert ez lesz a visszatérési érték.
uses crt;
var
a,b,c : real;
kerulet : real;
function haromszog_kerulete(a,b,c:real):real;
begin
haromszog_kerulete:=a+b+c;
end;
procedure beolvasas(szoveg:string; var valtozo:real);
begin
write('A háromszög ',szoveg,' oldala: ');readln(valtozo);
end;
begin
clrscr;
beolvasas('a',a);
beolvasas('b',b);
beolvasas('c',c);
kerulet:=haromszog_kerulete(a,b,c);
writeln('A háromszög kerülete: ',kerulet:5:3);
readkey;
end.
A végen írjuk át a beolvasást is eljárássá.
uses crt;
var
a,b,c : real;
kerulet : real;
function haromszog_kerulete(a,b,c:real):real;
begin
haromszog_kerulete:=a+b+c;
end;
function beolvasas(szoveg:string):real;
var
valtozo : real;
begin
write('A háromszög ',szoveg,' oldala: ');readln(valtozo);
beolvasas:=valtozo;
end;
begin
clrscr;
a:=beolvasas('a');
b:=beolvasas('b');
c:=beolvasas('c');
kerulet:=haromszog_kerulete(a,b,c);
writeln('A háromszög kerülete: ',kerulet:5:3);
readkey;
end.
Ez egy jó példa volt arra is, hogy hogyan lehet a függvényben megvalósítani a deklarációs részt.
A végén jöjjön a házi feladat: Írjuk egy programot eljárások és függvények használatával, ami beolvassa egy négyszög oldalait és kiszámítja a kerületét és területét.
A megoldáshoz sok sikert kívánok!!! Ha valakinek valami kérdése vagy kérése van a témával kapcsolatban, akkor nyugodtan írjon a következő címre: Magician@freemail.c3.hu
Magician
Agent-Junior
cyberarmy.hu TM