TUOX - implementace funkcí
pro i-uzly a superblok
Tuto èást TUOX-u v souèasné
dobì programuje Dalibor
Lukáš.
Seznam všech funkcí a jejich význam:
- Soubor super.c:
- int load_bit_maps(dev_t dev)
- zavede z daného zaøízení <dev> bitmapy
i-uzlù a zón, nastaví 0. a 1. zónu jako obsazenou.
Pøedpokladem je døíve zevedený superblok pøíslušného
zaøízení. Funkce vrací TRUE pøi úspìšném
zavádìní, jinak FALSE.
- int unload_bit_maps(dev_t dev)
- uvolní všechny pamìťové bloky, které obsahují
nìjakou bitmapu daného zaøízení <dev>.
Pøedpokladem je døíve zavedený superblok. Úspìch
je indikován návratovou hodnotou TRUE, jinak FALSE.
- bit_t alloc_bit(struct super_block *sp,int
map) - alokuje první volný bit
dané bitmapy <map> (INODE_BITMAP nebo ZONE_BITMAP), kde <sp>
je ukazatel na døíve zavedený superblok. Pøedpokladem
jsou již døíve zavedené bitmapy. Funkce vrací
0, není-li volného bitu, jinak vrací èíslo
alokovaného bitu.
- void free_bit(struct super_block *sp, int
map, bit_t bit_returned) - uvolní bit
<bit_returned> v bitmapì <map> (INODE_BITMAP nebo ZONE_BITMAP)
daného superbloku <sp>. Pøedpokladem jsou døíve
zavedené bitmapy.
- struct super_block *get_super(dev_t dev)
- vrátí ukazatel na døíve zavedený superblok
daného zaøízení <dev>.
- int mounted(struct inode *rip)
- vrací TRUE, je-li i-uzel s ukazatelem <rip> na nìjakém
namontovaném zaøízení, tj. superblok je v tabulce
superblokù, jinak FALSE
- int rw_super(struct super_block *sp,int rw_flag)
- naète do cache (rw_flag = READING) èi zapíše na
pøíslušné zaøízení (rw_flag =
WRITING) superblok sp. Úspìšné volání
funkce je indikováno návratovou hodnotou TRUE, jinak FALSE.
- Soubor inode.c:
- struct inode *get_inode(dev_t dev, inode_t
numb) - hledá i-uzel s èíslem
numb v tabulce i-uzlù, pokud jej najde vrací jeho ukazatel,
jinak v tabulce alokuje volný slot a zavede do nìj požadovaný
i-uzel, navíc také zvýší èítaè
použití i-uzlu. Je-li dev==NO_DEV, pak pouze vrací volný
slot z tabulky i-uzlù.
- void put_inode(struct inode *rip)
- sníží èítaè použití daného
i-uzlu rip, jestliže jej nikdo neužívá, zapíše jej
na disk. V pøípadì, že poèet odkazù
je nulový (soubor byl smazán), uvolní všechny bloky
pøíslušející tomuto i-uzlu.
- struct inode *alloc_inode(dev_t dev, mode_t
mode) - alokuje na zaøízení
dev nový i-uzel v módu mode (typ,práva,...) a vrací
jeho ukazatel. Funkce pøedpokládá, že superblok daného
zaøízení byl již døíve zaveden spolu
s bimapami tohoto zaøízení. V pøípadì
úspìchu vrací funkce ukazatel na nový i-uzel,
jinak vrací NIL_INODE.
- void wipe_inode(struct inode *rip)
- vyplní "jistá pole" v daném i-uzlu rip
- void free_inode(dev_t dev, inode_t numb)
- uvolní i-uzel numb patøící zaøízení
dev. Pøedpokladem je døívìjší zavedení
pøíslušného superbloku a pøíslušných
bitmap.
- void rw_inode(struct inode *rip, int rw_flag)
- naète do cache (rw_flag = READING) èi zapíše na
pøíslušné zaøízení (rw_flag =
WRITING) i-uzel rip. Je pøedpokládáno, že superblok
je již v pamìti zeveden.
- void dup_inode(struct inode *ip)
- zvýší èítaè použití daného
i-uzlu ip. Tato funkce je využívána v pøípadì,
že chce nìkdo používat již zavedený i-uzel ip.