CACHE

V cache používáme tyto typy promìných,struktur.
Ze souboru COMMON/type.h

typedef unsigned int zone_t;
typedef unsigned int dev_t;
typedef unsigned int block_t;


Ze souboru buf.h

kde BLOCK_SIZE, NR_DIR_ENTRIES, NR_INDIRECTS, INODES_PER_BLOCK jsou definovany v COMMON/const.h a COMMON/fsconst.h


Cache poskytuje tyto funkce

Inicializace cache : PUBLIC void buf_pool();


Jak pracovat s bloky: O blok se žádá cache, pomoci funkce get_block. Ta o daný blok požádá nižší vrstvu a vratí na nìj ukazatel. Pokud v danem bloku nastala zmìna tak v hlavièce bloku nastavit b_dirt a vratit tento blok cache pomocí funkce put_block.

Poskytnutí bloku: Vrací pointer na buffer s daty požadovaného bloku. Jestliže Cache vlastní tento blok zvìtší b_count a vratí pointer na blok. Pokud ho, ale nevlastní požadá ovládaè o jeho naètení.

PUBLIC struct buf *get_block(register dev_t dev, register block_t block, int only_search);


Vrácení bloku:Na základì parametru 'block_type', který identifikuje charakter v bloku obsažených dat pøesune blok v obousmìrném seynamu na stranu LRU nebo MRU podle toho, zda se pøedpokládá, že blok bude v krátké dobì znovu vyžadán. U zvlášť dùležitých dat rovnìž vynutí zápis bufferu na disk.

PUBLIC void put_block(register struct buf *bp, int block_type);


Alokace nové zony : Alokuje novou zónu na indikovaném zaøízení a vrací jeho èíslo. (To znamená nalezení "prazdneho" bitu v tabulkach volnych bloku daného zaøízení a jeho nastaveni na obsazeno (o to se stará super.c) a vraceni odpovidajiciho cisla bloku v pøípadì, že již vše je obsazeno vrací NO_ZONE).

PUBLIC zone_t alloc_zone(dev_t dev);


Uvolnìní zony : Uvolní zónu na pøislušném zaøízení s pøíslušným šíslem. (To znamená nalezení daného èísla zóny v tabulkach volnych bloku daného zaøízení a jeho nastaveni na "volno" (o to se stará super.c)).

PUBLIC void free_zone(dev_t dev, zone_t number);


Invalidate: Uloží všechny bloky ve, kterých došlo ke zmìnì. A odstraní je z cache. Tz. že všechny tyto bloky budou znaèeny jako prazdné.

PUBLIC void invalidate(dev_t dev);


flushall: Uloží všechny bloky ve kterých došlo ke zmìnì, ale na rozdíl od invalidate si je ponechá v pamìti.

PUBLIC void flushall(dev_t dev);


Cache využívá funkce z tìchto vrstev

cache.c
cache.h