10.1 - File Concept (p.461)
- File = (Bestand) Een collectie van gerelateerde informatie die opgeslagen is op een secondaire opslag.
- Data kan niet naar opslag worden geschreven zonder dat het in een file is.
- Een file is een abstract data type omdat deze op veel verschillende manieren kan worden ingevuld.
- File Structure = De structuur van een file bepaalt het type. (text, source, object, executable etc)
- Current File Position Pointer = Een pointer die een locatie in het bestand aangeeft.
- Er hoeft maar een pointer te zijn om zowel te lezen als te schrijven, omdat het systeem alleen kan lezen of schrijven naar de file
File Attributes
- Name
- Symbolische bestandsnaam
- Human readable
- Ook extenties vallen hierin (.exe, .jpg etc.)
- Identifier
- Uniek nummer dat het bestand identificeert in het systeem
- Niet human readable
- Type
- Definieert de type file.
- Zie File Structure
- Location
- Pointer naar op welk apparaat en waar op het apparaat het bestand staat.
- Size
- De huidige groote (in bytes, words, blocks) en evt de maximale groote van het bestand.
- Protection
- Informatie welke beslist wie het bestand kan lezen, schrijven, uitvoeren etc.
- Time/Date/User Identification
- Bestand aangemaakt, laast gewijzigd, door wie gewijzigd etc.
File Operations
- Creating a file (aanmaken)
- Hoe:
1.Er moet ruimte worden gevonden voor de file.
2.Er wordt een item (met de file beschrijving) toegevoegd aan de directory lijst.
- Writing a file (schrijven)
- Hoe:
- Een systeem call wordt gemaakt met daarin de naam van de file en welke gegevens naar de file moeten worden geschreven.
- Het systeem zoekt naar de bestandslocatie.
- Het systeem schrijft de gegevens achter de current file position pointer in de file.
- Reading a file (lezen)
- Hoe:
- Een systeem call wordt gemaakt met daarin de naam van de file en waar in het geheugen de file moet worden neergezet.
- Het systeem zoekt naar de bestandslocatie.
- Het systeem leest de gegevens bij de current file position pointer in de file.
- De current file position pointer wordt geupdated wanneer de read is uitgevoerd.
- Repositioning within a file
- Het aanpassen van de current file position pointer.
- Wordt ook wel een seek genoemd.
- Deleting a file
- Het bestand wordt opgezocht in het systeem, en het geheugen wordt vrijgegeven om te worden overschreven.
- Ook wordt het item (van de file) in de lijst van de directory verwijderd.
- Truncating a file
- Het behouden van de attributen van de file, maar verwijderen van de inhoud ervan.
- Overige operaties kunnen zijn:
- Appending (toevoegen)
- Bestandsnaam wijzigen
- Kopieren van het bestand
Open File Table en Locking
- Open File Table = Een kleine tabel in het OS die bijhoud welke besanden er geopend zijn, en informatie van deze bestanden.
- Bijgehouden informatie:
- File Pointer (waar in het bestand zijn we)
- File-Open count (hoeveel processen hebben het bestand open)
- Disk location of the file (waar en op welke disk staat het bestand)
- Access Rights (wie mag het bestand openen)
- Wanneer er een bestands operatie moet worden uitgevoerd, wordt een index in deze tabel geplaatst.
- Zo hoeft niet bij iedere bestands operatie op hetzelfde bestand naar het bestand gezocht te worden.
- De index wordt uit de tabel verwijderd wanneer een process het bestand sluit, of het process wordt gestopt.
- Sommige systemen openen bestanden zodra eraan wordt gerefereerd.
- Sommige systemen verplichten de programmeur de open() en close() commandos te gebruiken.
- Open() wil soms ook weten wat je met het bestand gaat doen (read, write, create, read-write etc.)
- Het bestand wordt dan alleen geopend als het process ook daadwerkelijk die actie mag uitvoeren op het bestand.
- In systemen waar bestanden door meerdere processen tegelijk mag worden geopend:
- Zijn er open file tables voor elk process, en een voor het OS.
- De pointer wordt dan opgeslagen in de process tabel, maar de disklocatie etc in de OS table.
- Sommige systemen bieden de mogelijkheid om een bestand te versleutelen, waardoor andere processen geen bewerkingen kunnen uitvoeren op dat bestand.
- Aka file locks
- Delen van bestanden kunnen ook worden gelocked ipv het hele bestand.
- Shared lock = Alleen lezen. (meerdere processen kunnen deze lock toepassen tegelijkertijd)
- Exclusive lock = Schrijven en lezen. (Maar een process kan deze lock hebben tegelijkertijd)
- Mandatory lock = Geen enkele ander process kan bij de file komen.
- Advisory lock = Programmeurs moeten hierbij zelf regelijk dat files worden gelocked en vrijgegeven.
File Types
- Extenties is een manier om een filetype aan te geven. [naam].[extentie]
- In Windows bestandsextenties worden gezien als "hints" voor de applicaties
- MacOs gebruikt een atribuut voor elk bestand welke aangeeft welk applicatie het bestand heeft gemaakt.
- UNIX geeft elk type bestand een magic number aan het begin van het bestand om het type aan te geven.
File Structure
- Sommige bestanden hebben een structuur die niet wordt ondersteund door het OS.
- Ondersteuning door het OS behoeft ook code om deze oa. te laden en te wijzigen.
- MacOs bestanden bestaan uit twee forks, een resource fork met bestandsinformatie (zoals labels etc) en een data fork met de orginele data/code.
Internal File Structure
- Bestanden worden opgeslagen in blokken van normaal gezien 512 bytes of een vermenigvuldiging van 2 daarvan.
- Bestanden kunnen alleen in hele blokken worden opgeslagen.
- Wanneer ze kleiner zijn dan de groote in blokken worden een de overgebleven ruimte als wasted beschouwd.
- Dit leidt tot Internal Fragmentation oftewel verloren ruimte.
- Hoe groter de blokgroote, hoe groter de internal fragmentation.