Jak jiz jsme rekli, system souboru provadi mechanismy on-line ukladani a pristupu k datum
i programum. System souboru je ulozen na odkladacim zarizeni, jehoz hlavnim ukolem je neustale uchovavat
velke mnozstvi dat. Nyni si vysvetlime aspekty tykajici se uchovavani a pristupu k souborum na zatim
nejpouzivanejsim mediu, magnetickem disku. Ukazeme si postupy, jak alokovat diskovy prostor, jak ho
uvolnovat, jake jsou navaznosti ostatnich casti vypocetniho systemu na odkladaci prostor.
Chce-li aplikacni program vytvorit novy soubor, zavola logicky system souboru. Logicky system souboru
zna format adresarove struktury. Pro vytvoreni noveho souboru nacte do pameti obsah patricneho adresare,
zapise do nej novou polozku a ulozi ho zpet na disk. S adresarem muze byt nakladano jako se souborem,
ktery ma indikacni polozku definujici, ze se jedna o adresar. Po aktualizaci adresare tedy muze logicky
system souboru zavolat modul organizace souboru aby namapoval adresar na cisla diskovych bloku, ktera mu
patri v zakladnim systemu souboru a v systemu I/O operaci.
Jakmile je adresar aktualizovan, muze ho vyuzit logicky system souboru k vykonani I/O operaci. Je-li
soubor otviran, je v nem treba nalezt polozku patrici otviranemu souboru. Aby nemuselo byt toto prohledavani
vykonavano pred kazdou I/O operaci, OS vetsinou uklada adresarove polozky otevrenych souboru do pameti
do tabulky otevrenych souboru (urychleni, zjednoduseni).
Prvni odkaz na soubor (vetsinou operace open) vyvola prohledani adresare a zkopirovani
patricne polozky do tabulky otevrenych souboru v pameti. Ukazatel do teto tabulky (file deskriptor
nebo file control block)vrati operace open a vsechny operace se souborem po ni
nasledujici se odvolavaji prostrednictvim ukazatele na tuto polozku. Kdyz je soubor uzavren vsemi uzivateli,
kteri ho otevreli je adresarova polozka z tabulky opet zkopirovana na sve misto na disku.
Obr. 82 Typicka tabulka otevrenych souboru
Nektere systemy rozvijeji toto schema uzitim viceurovnovych tabulek. Napr. v BSD Unix ma kazdy
proces svou vlastni tabulku otevrenych souboru, ktera pouze ukazuje do systemove tabulky otevrenych souboru,
ktera ukazuje do tabulky aktivnich inods. Tabulka aktivnich inods je cache prave uzivanych inods v
pameti a obsahuje polozky odkazujici na diskove bloky. BSD Unix je typicky svym uzitim cache kdekoliv je to
mozne. Uziti teto cache miva az 85% ucinnost.
Uziti kontinualni alokace s sebou prinasi take znacnou vnejsi fragmentaci disku. Tak, jak je diskovy
prostor alokovan pro jednotlive soubory a tyto soubory jsou potom opet mazany, rozpada se disk do malych
volnych oblasti. Problem nastava v okamziku, kdy ani nejvetsi mala oblast nestaci na vyplneni pozadavku o
ulozeni souboru. V zavislosti na velikosti diksoveho prostoru a prumerne velikosti souboru muze byt
fragmentace velkym ci malym problemem.
Nektere starsi mikropocitacove systemy uzivaly kontinualni alokaci na floppy discich. Aby zabranil
mozne fragmentaci, pouzivali preskupovaci rutinu, ktera cely system souboru z diskety nakopirovala na jinou
nebo na magnetickou pasku. Puvodni disk byl tedy cely uvolnen a vytvorila se na nem jedna velka souvisla
volna oblast. Potom byly soubory na disketu nakopirovany zpatky a tvorily na ni souvislou oblast. Tak byla
zajistena celistvost prostoru s ulozenymi soubory a eliminovana fragmentace. Cenou za to byl ovsem cas. Cely
proces realokce trval hodiny a mnohdy byl zapotrebi kazdy tyden. Behem casu, kdy system provadel realokaci
nebylo mozno provadet nic jineho.
Kontinualni alokace s sebou prinasi i dalsi problemy. Jednim z nich je zjistit, kolik diskoveho prostoru
bude pro ukladany soubor potreba. V okamziku vzniku souboru je treba nalezt a alokovat mu diskovy prostor
pro jeho celou budouci velikost. Jaka ale bude? Pokud napr. pouze kopirujeme existujici soubor, je odpoved na
tuto otazku jednoducha. Obecne vsak velikost nejakeho napr. vystupniho souboru lz jen velmi tezko dopredu
urcit.
Pokud na zacatku alokujeme prilis maly prostor, muze se stat, ze od urciteho okamziku jiz nemuzeme
soubor zvetsit. Reseni tohoto problemu je dvoji. Ukoncit program, ktery soubor vytvari s patricnou chybovou
spravou. Potom musi uzivatel na pocatku alokovat pro soubor vetsi prostor a spustit program znovu. Tent
postup muze byt velice drahy na vypocetni cas. Aby tomu uzivatele predesel, nadefinuje na pocatku veliky
prostor pro soubor, coz ma potom za nasledek nevyuzite prostory uvnitr prirazenych diskovych bloku.
Druhym resenim drive uvedeneho problemu ja nalezt vetsi souvisly prostor na disku, soubor tam
prekopirovat a uvolnit disk na jeho predesle lokaci. K teto operaci muze dochazet pomerne casto a bude
spotrebovavat vypocetni cas systemu. Navzdory tomu, ze uzivatel v tomto pripade neni explicitne informovan
o tom, co se deje, zjisti to velmi brzy z toho, ze vypocetni rychlost je stale mensi a mensi.
I kdyz je predem znama maximalni velikost souboru, muze byt tento mechanismus alokace velmi
neucinny. Uvazme soubor, ktery muze dosahnout ohromne velikosti, ale jeho prirustky jsou male a pomale. V
tom pripade sobour dlouhou dobu zabira zcela zbytecne diskovy prostor a dochazi k vnitrni fragmentaci.
Aby zabranily alespon nekterym ze zminovanych nedostatku, uzivaji nektere OSy modifikovany
algoritmus souvisle alokace. Na zacitku naalokuji souboru urcity celistvy kus diskoveho prostoru. Pokud tento
prostor casem neni dostatecny, je souboru pridelen dalsi souvisly usek jako extend. Udaje o blocich
souboru potom obsahuji adresu prvniho bloku, pocet bloku a spojeni na nasledujici extend blok.