CONCURRENT FILESYSTEM ===================== * Luodaan oma SFS-tiedostonjärjestelmä TFS:n pohjalta. * Luodaan file handle -taulu, jossa pidetään kirjaa avoimista tiedostoista ja threadeista, jotka ne ovat avanneet. * Tarvitaan myös file operations -taulu, jossa pidetään kirjaa avoimista tiedostoista ja niihin liittyvistä asioista (lukevien prosessien määrä, tuhottu, odottava kirjoitus) * Open / Close -operaatiot muutetaan noudattamaan file handle -taulua. KIRJOITUS / LUKU * Aloittaessa kirjoitusoperaatiota tehdään tiedoston muutettavista blokeista kopio, johon kirjoitukset tehdään. Kopio siirretään oikean tiedoston tilalle, kun kirjoitus on valmistunut (File Header Block). * Luettaessa tiedostoa testataan semaforia read_semaphore ja jos saadaan vapautetaan se heti ja siirrytään lukemaan. File tablessa on kohta lukevien prosessien määrälle jota inkrementoidaan. * Kirjoitettaessa semafori otetaan haltuun kun kopioblokkeihin on tehty muutokset. Odotetaan että file tablessa ei ole enää lukevia prosesseja. (Entry filetableen + sleep queue) Tämän jälkeen voidaan kirjoittaa file header block uusiksi ja merkata vanha blokki poistetuksi. * Luettaessa luetaan tiedostojärjestelmää normaalisti, mikäli lukko saatiin. Jos lukkoa ei saatu, odotetaan. POISTO * Poistettaessa tiedostoa, tarkastetaan onko se auki jollakin threadilla file handle taulussa. Jos ei, poistetaan tiedosto (lukko). Jos on, merkitään file handle tauluun tiedosto tuhottavaksi avonaisten kohdalle. * Tiedostoa suljettaessa lippu tarkastetaan ja tiedosto tuhotaan jos se ei ole auki muilla threadeilla. * Avattessa katsotaan onko tiedosto auki jollakin ja jos on, onko tuhottavaksi -lippu asetettu. Jos on, tiedostoa ei anneta avata.