1. Overzicht van computersystemen Een besturingssysteem gebruikt de hardwarebronnen van een of meer processors om een aantal diensten te verzorgen voor de gebruikers van het systeem. Het besturingssysteem beheert ook het secundaire geheugen en I/O-apparaten voor de gebruikers. 1.1. Basiselementen Processor De processor beheert de werking van de computer en voert de functies voor de gegevensverwerking uit. De processor heeft 2 interne registers: 1. Geheugenadresregister (Memory Address Register, MAR): bevat geheugenadres voor de volgende lees- of schrijfbewerking 2. Geheugenbufferregister (Memory Buffer Register, MBR): bevat gegevens die naar het geheugen worden geschreven of de gegevens ontvangt die uit het geheugen worden gelezen. Overeenkomstig: 1. I/O-adresregister (I/O AR): bevat een bepaald I/O-apparaat 2. I/O-bufferregister (I/O BR): wordt gebruikt voor het uitwisselen van gegevens tussen een I/Omodule en de processor Hoofdgeheugen Hoofdgeheugen wordt ook wel reëel geheugen of primair geheugen genoemd. Hoofdgeheugen is een vluchtig geheugen: wanneer de computer uitgeschakeld wordt, gaat de inhoud van het geheugen verloren. I/O-modules De I/O-modules verplaatsen gegevens tussen de computer en en zijn externe omgeving: - Harde schijven - Communicatie-apparatuur - Werkstations Systeembus De systeembus verzorgt de communicatie tussen de processors, het hoofdgeheugen en de I/Omodules 1.2. Processorregisters Processorregisters zijn sneller en kleiner dan het hoofdgeheugen. De registers in de processor dienen 2 doelen: - Registers die zichtbaar zijn voor de gebruiker: laat de programmeur toe verwijzingen naar het hoofdgeheugen te minimaliseren door het registergebruik te optimaliseren. - Stuur- statusregisters: worden gebruikt door de processor voor het besturen van de werking van de processor geprivilegieerde routine’s van het besturingssysteem voor het beheren van de uitvoering van programma’s 1.2.1. Registers die zichtbaar zijn voor de gebruiker Een register dat zichtbaar is voor de gebruiker is een register waarnaar kan worden verwezen in de gebruikte machinetaal en dat doorgaans beschikbaar is voor alle programma’s, waaronder toepassingsprogramma’s en systeemprogramma’s. De beschikbare registertypen: - Gegevensregisters - Adresregisters - Conditiecoderegisters Gegevensregisters Gegevensregisters kunnen gebruikt worden door de programmeur voor verschillende functies. Soms is hun doel algemeen, maar vaak zijn er echter beperkingen. Er kunnen bijvoorbeeld speciale reigsters zijn voor floating-pointbewerkingen. Adresregisters Adresregisters bevatten adressen van gegevens en instructies in het hoofdgeheugen. Voorbeelden: - Indexregister - Segmentwijzer - Stackwijzer Conditiecoderegisters 1.2.2. Stuur- en statusregisters - Programmateller (PC): bevat het adres van de volgende op te vragen instructie - Instructieregister (IR): bevat de laatste opgevraagde instructie - Programmastatuswoord (PSW): bevat statusinformatie Conditiecodes Conditiecodes (ook wel flags of vlaggen genoemd) zijn bits die worden ingesteld door de processorhardware als het resultaat van bewerkingen. Doorgaans maken ze deel uit van een stuurregister. 1.3. Uitvoering van instructies Een programma bestaat uit een verzameling instructies die is opgeslagen in het geheugen. Het uitvoeren van een instructie bestaat uit 2 stappen: 1. De processor haalt (fetches) instructies één voor één op uit het geheugen 2. De processor voert (executes) elke instructies uit Instructiecyclus: tijd die nodig is om één instructie uit te voeren. De processor haalt de instructie op uit het geheugen. De programmateller bevat het adres van de volgende op te halen instructie. De teller wordt altijd verhoogd na het ophalen van een instructie, zodat de daarop volgende instructie zal worden opgehaald. De opgevraagde instructie is geladen in het instructieregister. De instructie bevat bits die aangeven welke actie de processor moet uitvoeren. De processor interpreteert de instructie en voert de gewenste actie uit. Hierbij zijn er 4 categorieën: 1. Processorgeheugen: gegevens worden overgebracht van de processor naar het geheugen of omgekeerd 2. Processor-I/O: gegevens worden uitgewisseld tussen de processor en een I/O module. 3. Gegevensverwerking: rekenkundige of logische bewerking uitvoeren op gegevens 4. Besturing: de volgorde van uitvoering wijzigen 1.4. Interrupts Interrupt is een mechanisme waarmee andere modules de normale verwerking door de processor kunnen onderbreken. Interrupts worden vooral gebruikt om de verwerkingsefficiëntie te verhogen. De meeste externe apparaten zijn langzamer dan de processor. Na elke schrijfbewerking moet de processor pauzeren totdat het apparaat de instructie heeft verwerkt. Verschillende klassen van interrupts: Programma: gegenereerd door het resultaat van de uitvoering van een instructie, vb. een rekenkundige berekening met een te grote waarde, delen door nul, een poging tot het uitvoeren van een ongeldige machine-instructie en een verwijzing buiten de geheugenruimte waartoe een gebruikersprogramma toegang heeft Timer: gegenereerd door een timer binnen de processor. Hiermee kan het besturingssysteem functies uitvoeren met een bepaalde regelmaat I/O: gegenereerd door een I/O-controller om de normale voltooiing van een bewerking of uiteenlopende foutcondities te melden Hardwarefout: gegenereerd door fouten zoals het uitvallen van de stroom of een geheugenpariteitsfout 1.4.1. Interrupts en de instructiecyclus Voor interrupts wordt een interruptfase toegevoegd aan de instructiecyclus. In de interruptfase controleert de processor of er interrupts zijn opgetreden. Als er een interrupt is, dan onderbreekt de processor het huidige programma en voert hij een routine uit voor een interruptafhandeling. Is de routine voor de interruptafhandeling voltooid, dan kan de processor de uitvoering van het gebruikersprogramma hervatten op het punt van de onderbreking. Er wordt verondersteld dat de tijd die nodig is voor de I/O-bewerking relatief kort is: korter dan de tijd die nodig is voor het voltooien van de uitvoering van instructies tussen schrijfbewerkingen in het gebruikersprogramma. Meestal echter zal de I/O-bewerking veel meer tijd kosten dan de uitvoering van meerdere gebruikersinstructies. 1.4.2. Interruptverwerking Eenvoudige interruptverwerking: 1. Apparaatcontroller of andere systeemhardware geeft een interrupt 2. Processor voltooit de uitvoering van de huidige instructie 3. Processor bevestigt de ontvangst van de interrupt 4. Processor plaatst het programmastatuswoord (PSW) en de programmateller (PC) op de besturingsstack 5. Processor laadt nieuwe PC-waarde op basis van de interrupt 6. Sla het restant van de informatie over de processtatus op 7. Verwerk de interrupt 8. Herstel de informatie over de processtatus 9. Herstel het oude PSW en de oude PC 1 te.m. 5: Hardware 6 t.e.m. 9: Software 1.4.3. Meervoudige interrupts Stel dat er een interrupt optreedt terwijl een andere interrupt wordt afgehandeld. 2 benaderingen: 1. Uitschakelen van interrupts terwijl een interrupt wordt verwerkt. Interrupts worden in strikt sequentiële volgorde afgehandeld. 2. Het definiëren van prioriteiten voor interrupts en toestaan dat een interrupt met een hogere prioriteit een interruptafhandeling met een lagere prioriteit onderbreekt 1.4.4. Multiprogrammering - De processor wordt niet altijd erg efficiënt gebruikt, zelfs met interrupts. - De processor kan meer dan één programma uitvoeren. De volgorde waarin de programma’s worden verwerkt is afhankelijk van hun relatieve prioriteit en van het feit of ze wachten op I/O. Na het voltooien van de interruptafhandelings routine hoeft de besturing niet altijd onmiddellijk te worden teruggegeven aan het gebruikersprogramma dat op dat moment wordt uitgevoerd. 1.5. De geheugenhiërarchie De ontwerpbewerkingen voor het geheugen in drie vragen: 1. Hoeveel? 2. Hoe snel? 3. Hoe duur? - Kortere toegangstijd: hogere kosten per bit - Hogere capaciteit: lagere kosten per bit - Hogere capaciteit: lagere toegangssnelheid Dit kan allemaal opgelost worden door de geheugen hiërarchie. Van boven naar onder gebeurt het volgende: a. De kosten per bit dalen b. De capaciteit neemt toe c. De toegangstijd neemt toe d. De frequentie van de processortoegang tot het geheugen neemt af. Lokaliteit van verwijzingen (locality of reference) 1.6. Cachegeheugen - Cachegeheugen is onzichtbaar voor het besturingssysteem, het werkt samen met andere hardware voor geheugenbeheer. - Processor heeft minstens 1 keer toegang tot het geheugen per instructiecyclus Processorssnelheid is sneller dan de toegangssnelheid van geheugen Grondbeginselen van cachegeheugen De cache bevat een kopie van een deel van het hoofdgeheugen. Als de processor een byte in het geheugen te lezen, dan wordt gecontroleerd of de byte zich in de cache bevindt. Zo ja, dan wordt de byte doorgegeven aan de processor. Zo nee, dan wordt eerst een blok uit het hoofdgeheugen naar de cache geschreven en wordt dan ook doorgegeven aan de processor. Door de lokaliteit van verwijzingen is het waarschijnlijk dat wanneer een blok gegevens in de cache wordt geplaatst, toekomstige geheugenverwijzingen zullen verwijzen naar andere bytes in dat blok. Bij het ontwerp van cachegeheugen kunnen we de volgende aandachtspunten onderscheiden: - Cachegrootte: Kleine caches hebben een duidelijke invloed op prestaties - Blokgrootte: De eenheid gegevens die wordt uitgewisseld tussen het cachegeheugen en het hoofdgeheugen Grotere blokken betekenen grotere hit-ratio Te grote blokken minimaliseren kansen om gegevens te hergebruiken die al in de cache staan - Adresseringsfunctie: Bepaalt welke locatie het nieuwe blok zal innemen in de cache 2 beperkingen: 1. Bij het inlezen van een nieuwe blok kan een andere blok worden vervangen 2. Flexibelere adresseringsfunctie vereist ingewikkeldere elektronische schakelingen voor het doorzoeken van de cache - Vervangingsalgoritme: Kiest het blok dat wordt vervangen Liefst een blok vervangen dat in de nabije toekomst niet nodig is onmogelijk te garanderen Effectieve strategie: het vervangen van een blok dat zich het langst in de cahce bevindt zonder gebruikt te zijn = Least Recently Used (LRU) - Schrijfstrategie: Bepaalt wanneer de geheugenschrijfbewerking plaatsvindt o Elke keer dat het blok wordt bijgewerkt o Als het blok wordt vervangen Minimaliseert schrijfbewerkingen Laat het hoofdgeheugen in een verouderde toestand 1.7. I/O-technieken 3 technieken die worden toegepast: 1. Geprogrammeerde I/O 2. Interruptgestuurde I/O 3. Directe geheugentoegang (DMA) 1.7.1. Geprogrammeerde I/O De I/O-module voert eerst de gevraagde actie uit en plaatst vervolgens de juiste bits in het I/Ostatusregister, maar onderneemt verder geen actie om de processor te waarschuwen. De module stuurt zelfs geen interrupt naar de processor. Als de I/O-instructie is uitgevoerd, moet de processor zelf actie ondernemen om te bepalen wanneer de I/O-instructie is voltooid. De instructieset bevat de volgende categorieën I/O-instructies: - Besturen: extern apparaat activeren en zeggen wat te doen - Status controleren: diverse statuscondities testen - Lezen en schrijven: overdracht van gegevens tussen de processorregisters en externe apparaten 1.7.2. Interruptgestuurde I/O De processor geeft een opdracht aan een I/O-module en doet daarna ander nuttig werk. De I/O-module zal de processor onderbreken met een interrupt als de module gereed is om gegevens uit te wisselen met de processor. 1.7.3. Directe geheugentoegang (DMA) De DMA-functie kan worden uitgevoerd door een aparte module op de systeembus. Wil de processor een blok gegevens lezen of schrijven, dan geeft hij de DMA-module een opdracht door de volgende informatie te verzenden naar de module: - Of wordt gevraagd om te lezen of te schrijven - Het adres van het betrokken I/O-apparaat - De beginlocatie in het geheugen waaruit data moet worden gelezen of waarnaar data moet worden geschreven - Het aantal woorden dat moet worden gelezen of geschreven De processor heeft deze I/O-bewerking gedelegeerd aan de DMA-module en die zal de bewerking verder afhandelen. De processor is alleen betrokken bij het begin en het einde van de overdracht. 2. Overzicht van besturingssystemen Besturingssysteem = programma dat de uitvoering van toepassingsprogramma’s regelt en de functie vervult van een interface tussen de gebruikers en de computerhardware. 2.1. Doel en functies van besturingssystemen Een besturingssysteem heeft 3 doelstellingen: 4. Gemak: een besturingssysteem maakt een computer makkelijk te gebruiken 5. Efficiëntie: dankzij een besturingssysteem kunnen de systeembronnen van een computer efficiënt worden gebruikt 6. Flexibiliteit: een besturingssysteem moet zo zijn gemaakt dat het ontwikkelen, testen en introduceren van nieuwe systeemfuncties goed mogelijk is, zonder dat bestaande diensten verstoord worden 2.1.1. Het besturingssysteem als interface tussen gebruiker en computer Het besturingssysteem verzorgt doorgaans diensten op de volgende gebieden: Ontwikkelen van programma’s: het besturingssysteem biedt uiteenlopende voorzieningen en diensten, zoals editors en debuggers, die de programmeur helpen bij het maken van programma’s Uitvoeren van programma’s: Instructies en gegevens moeten in het hoofdgeheugen worden geladen. I/O-apparaten en bestanden moeten worden geïnitialiseerd en andere bronnen moeten worden voorbereid besturingssysteem verzorgt deze taken voor de gebruiker Toegang tot I/O-apparaten: Elk I/O-apparaat vereist voor een correcte werking een eigen, specifieke verzameling instructies of besturingssignalen. Het besturingssysteem voorziet in een uniforme interface die alle details verbergt Beheerde toegang tot bestanden: bij bestanden moet het besturingssysteem kennis hebben van de aard van het I/O-apparaat, maar ook van de bestandsindeling op het opslagmedium. Bij een systeem dat meerdere gebruikers tegelijk ondersteunt, kan het systeem daarnaast voorzien in beveiligingsmechanismen voor het beheren de toegang tot bestanden. Toegang tot het systeem: de toegangsfunctie moet voorzien in de beveiliging van bronnen en gegevens tegen ongeautoriseerd gebruik en moet bij te zware belasting conflicten oplossen Opsporen en afhandelen van fouten: interne en externe hardwarefouten, diverse softwarefouten. Bij elk probleem moet het besturingssysteem zo reageren dat de fouttoestand wordt verwijderd met zo min mogelijk invloed op de toepassingen die worden uitgevoerd Administratie: verzamelt gebruiksstatistieken, bewaakt prestatiemeters, informatie is nuttig voor het anticiperen op de behoefte aan toekomstige verbeteringen en het bijstellen van het systeem voor het verbeteren van de prestaties. Ook kan de informatie worden gebruikt voor het toerekenen van kosten bij een systeem met meerdere gebruikers 2.1.2. Het besturingssysteem als beheerder van bronnen Het besturingssysteem werkt hetzelfde als gewone computersoftware. Het is een programma dat wordt uitgevoerd door de processor. Het besturingssysteem geeft de besturing veelvuldig uit handen en is voor het terugkrijgen van de besturing afhankelijk van de processor. Een deel van het besturingssysteem bevindt zich in het hoofdgeheugen. Daartoe behoren de kernel of nucleus, die de meest gebruikte functies in het besturingssysteem bevat, en andere delen van het besturingssysteem die op dit moment worden gebruikt. 2.1.3. Ontwikkelingsmogelijkheden van een besturingssysteem Een veelgebruikt besturingssysteem zal zich om een aantal redenen in de loop van de tijd ontwikkelen: Hardwarevernieuwing en nieuwe typen hardware Nieuwe diensten Verbeteringen 2.2. Evolutie van besturingssystemen 2.2.1. Seriële verwerking Besturingssystemen bestonden vroeger nog niet. Deze machines werden bestuurd via een bedieningspaneel dat bestond uit lampjes, schakelaars, een invoerapparaat en een printer 2 problemen: Scheduling: via een inschrijflijst Insteltijden: het laden van de compiler in het geheugen en het bronprogramma, het opslaan van het gecompileerde programma, en het laden en koppelen van het objectprogramma en algemene functies. Trad er een fout op, dan moest de gebruiker teruggaan naar het begin van de instelprocedure. Daardoor werd veel tijd besteed aan alleen al het instellen van het uit te voeren programma 2.2.2. Eenvoudige batchsystemen De eerste computers waren duur en daarom was het belangrijk om het gebruik van een machine te maximaliseren. Belangrijkste gedachte: monitor. Deze software combineerde jobs sequentieel tot een batch en de gehele batch in een invoerapparaat plaatste voor gebruik door de monitor. Elk programma keert na het voltooien van de verwerking terug naar de monitor. De monitor bepaalt de volgorde van gebeurtenissen. Hiertoe moet een groot deel van de monitor zich altijd in het hoofdgeheugen bevinden en beschikbaar zijn voor de uitvoering = resident monitor. De monitor leest per keer één taak in. Na het inlezen, wordt deze in het gebied van het gebruikersprogramma geplaatst en wordt de besturing overgegevn aan deze taak. Na het voltooien van de taak, wordt de besturing teruggegeven aan de monitor. Jobbesturingstaal (job control language, JCL) is een speciaal soort programmeertaal die wordt gebruikt voor het opgeven van instructies aan de monitor. - - Ook enkele andere mogelijkheden van de hardware zijn gewenst: Geheugenbeveiliging: terwijl het gebruikersprogramma wordt uitgevoerd, mag dit het geheugengebied met de monitor niet wijzigen. Timer: voorkomt dat één taak onbeperkt beslag legt op het hele systeem Geprivilegieerde instructies: deze kunnen uitsluitend uitgevoerd worden door de monitor Interrupts: verhogen de flexibiliteit van het besturingssysteem bij het afstaan en terugkrijgen van de besturing aan en van gebruikersprogramma’s. Werkingsmodi: - Gebruikersmodus: Gebruikersprogramma wordt uitgevoerd in een gebruikersmodus Bepaalde gebieden in het geheugen zijn niet beschikbaar voor de gebruiker Bepaalde instructies mogen niet worden uitgevoerd - Kernelmodus: Monitor wordt uitgevoerd in een systeemmodus (= kernelmodus) Bevoorrechte instructies kunnen worden uitgevoerd Beveiligde gebieden in het geheugen kunnen benaderd worden 2.2.3. Batchsystemen met multiprogrammering Zelfs bij de automatische taakverwerking van een eenvoudig batchbesturingssysteem wordt de processor vaak niet gebruikt. De I/Oapparaten zijn vergeleken met de processor relatief langzaam. Uniprogrammering = de processor moet wachten tot de I/O-instructie is voltooid voordat hij kan doorgaan. Multiprogrammering = als een taak moet wachten op I/O, dan kan de processor overschakelen naar een andere taak, die waarschijnlijk niet wacht op I/O. 2.2.4. Systemen met timesharing Bij timesharing wordt multiprogrammering gebruikt voor het afhandelen van meerdere interactieve taken. De processortijd wordt gedeeld door meerdere gebruikers. Meerdere gebruikers hebben via werkstations tegelijkertijd toegang tot het systeem en het besturingssysteem geeft afwisselend elk gebruikersprogramma een korte rekenperiode. 2.3. Belangrijke prestaties Besturingssystemen behoren tot de meeste complexe stukken software die zijn ontwikkeld. Er zijn vijf belangrijke intellectuele prestaties verricht op het gebied van: Processen Geheugenbeheer Bescherming en beveiliging van informatie Scheduling en beheer van bronnen Systeemstructuur 2.3.1. Processen Een proces is essentieel voor de structuur van besturingssystemen. Een programma dat wordt uitgevoerd Een geactiveerd programma dat op een computer draait De entiteit die kan worden toegewezen aan en worden uitgevoerd door een processor Een eenheid van activiteit die wordt gekenmerkt door: - een enkelvoudige sequentiële verwerking (thread) - een actuele toestand - een aantalbijbehorende systeembronnen Het ontwerpen van systeemsoftware bleek uiterst moeilijk te zijn. In het algemeen worden 4 hoofdoorzaken onderscheiden voor de fouten: 7. Onjuiste synchronisatie 8. Mislukte wederzijdse uitsluiting (mutual exclusion) 9. Niet-vastomschreven programmawerking 10.Dodelijke omarming (deadlock Een proces bestaat uit 3 onderdelen: 1. Een uitvoerbaar programma 2. De bijbehorende gegevens die het programma nodig heeft 3. De uitvoeringscontext van het programma: alle informatie die het besturingssysteem nodig heeft om het proces te controleren en te regelen 2.3.2. Geheugenbeheer Het besturingssysteem heeft 5 hoofdtaken bij het beheer van opslag: 1. Procesisolatie: voorkomen dat onafhankelijke processen elkaars geheugen, zowel gegevens als instructies, verstoren 2. Automatische toewijzing en beheer: programma’s moeten waar nodig dynamisch worden verdeeld over de geheugenhiërarchie. De toewijzing moet transparant zijn voor de programmeur. Het besturingssysteem kan efficiënt werken door geheugen alleen toe te wijzen aan taken die het nodig hebben 3. Ondersteuning van modulair programmeren: programmeurs moeten programmamodules kunnen definiëren en modules dynamisch kunnen maken, verwijderen en vergroten en verkleinen 4. Bescherming en toegangsbeheer: toestaan dat gedeelten van het geheugen op verschillende manieren toegankelijk zijn voor verschillende gebruikers 5. Langetermijnopslag: veel gebruikers en toepassingen vereisen middelen voor het opslaan van informatie gedurende langere periodes Meestal gebruiken besturingssystemen virtueel geheugen en bestandssystemen om aan deze vereisten te voldoen. Het bestandssysteem zorgt voor de opslag op lange termijn. Virtueel geheugen is een voorziening waarmee programma’s geheugen op logisch niveau kunnen adresseren. Om grote processen op te delen in een aantal blokken van vaste lengte, werden pagineringssystemen ontwikkeld. Een programma verwijst naar een woord met behulp van een virtueel adres dat bestaat uit een paginanummer en een relatieve locatie binnen de pagina (offset). Iedere pagina kan overal binnen het hoofdgeheugen geplaatst worden. Het pagineringssysteem voorziet in een dynamische vertaling van het virtuele adres binnen het programma naar een reëel of fysiek adres binnen het hoofdgeheugen. 2.3.3. Bescherming en beveiliging van informatie Veel van het werk m.b.t. beveiliging en bescherming in besturingssystemen kan verdeeld worden in 4 categorieën: 1. Beschikbaarheid: het beveiligen van het systeem tegen onderbrekingen 2. Vertrouwelijkheid: garandeert dat gebruikers geen gegevens kunnen lezen waarvoor ze geen toestemming hebben 3. Gegevensintegriteit: bescherming van gegevens tegen ongewenst wijzigen 4. Authenticiteit: hangt samen met de correcte verificatie van de identiteit van gebruikers en de geldigheid van berichten of gegevens 2.3.4. Scheduling en beheer van bronnen Het beheren van de verschillende bronnen die beschikbaar zijn is een hoofdverantwoordelijkheid van het besturingssysteem. Elke strategie voor de toewijzing en de scheduling van bronnen moet zijn gebaseerd op 3 overwegingen: 1. Rechtvaardigheid 2. Gedifferentieerd reactievermogen 3. Efficiëntie Kortetermijnwachtrij: processen die zich in het hoofdgeheugen bevinden en die gereed zijn om te worden uitgevoerd. Langetermijnwachtrij: lijst van nieuwe taken die wachten om het systeem te gebruiken. Voor elk I/O-apparaat is er een I/O-wachtrij. Alle processen die wachten op het gebruik van het apparaat, worden toegevoegd aan de wachtrij van dat apparaat. 2.3.5. Systeemstructuur Een systeem kan worden beschouwd als een reeks niveaus. Elk niveau voert een specifieke deelverzameling uit van functies die het besturingssysteem moet uitvoeren. Elk niveau is afhankelijk van het volgende, lagere niveau voor het uitvoeren van meer primitieve functies. Hierdoor is een probleem gesplitst in enkele beter hanteerbare deelproblemen. Ontwerphiërarchie van een besturingssysteem: Niveau 1: elektronische schakelingen. De objecten waarmee worden gewerkt zijn registers, geheugencellen en logische poorten. De bewerkingen die voor deze objecten worden gedefinieerd, zijn acties zoals het wissen van een register of het lezen van een geheugenlocatie Niveau 2: instructieset van de processor. Hier zijn het de bewerkingen die zijn toegestaan in de instructieset van de machinetaal, zoals add, subtract, load en store Niveau 3: voegt het concept van een procedure of subroutine toe, plus de bewerkingen voor aanroep en terugkeer Niveau 4: introduceert interrupts. Die zorgen ervoor dat de processor de huidige context opslaat en een interruptafhandelingsroutine activeert De 1e 4 lagen zijn geen onderdeel van het besturingssysteem maar vormen de processorhardware. Op niveau 5 bereiken we echt het besturingssysteem en beginnen de concepten die samenhangen met multiprogrammering te verschijnen Niveau 5: introduceert het concept van een proces als een programma dat wordt uitgevoerd. De fundamentele vereiste waaraan een besturingssysteem moet voldoen om meerdere processen te ondersteunen, is de mogelijkheid processen te onderbreken en voort te zetten Niveau 6: wordt gebruikt voor de secundaire opslagapparaten van de computer. Hier treden de functies voor het positioneren van de lees- en schrijfkoppen en de feitelijke overdracht van blokken gegevens op. Niveau 7: maakt logische adresruimte voor processen. Dit niveau verdeelt de virtuele adresruimte in blokken die kunnen worden verplaatst tussen het hoofdgeheugen en het aanvullend geheugen Tot en met niveau 7 heeft het besturingssysteem te maken met de bronnen van 1 processor. Vanaf niveau 8 houdt het besturingssysteem zich bezig met externe objecten zoals randapparaten en eventueel netwerken en computers die met het netwerk verbonden zijn. Niveau 8: verzorgt de communicatie van informatie en berichten tussen processen Niveau 9: ondersteunt de opslag voor lange termijn van benoemde bestanden Niveau 10: zorgt voor de toegang tot externe apparaten m.b. v. gestandaardiseerde interfaces Niveau 11: verantwoordelijk voor het onderhouden van de associatie tussen externe en interne identifiers van de bronnen en objecten van het systeem Niveau 12: biedt een complete voorziening voor het ondersteunen van processen Niveau 13: vormt de interface tussen het besturingssysteem en de gebruiker 2.4. Ontwikkelingen in de aanloop naar moderne besturingssystemen Er zijn tal van uiteenlopende benaderingen en ontwerpelementen toegepast in zowel experimentele als commerciële besturingssystemen, maar de meeste daarvan kunnen worden ondergebracht in de volgende categorieën. Microkernelarchitectuur De meeste besturingssystemen hadden één kolossale monolithische kernel. Deze grote kernels verzorgen het overgrote deel van de functionaliteit van het besturingssysteem. Bij een microkernel architectuur worden slechts enkele essentiële functies toegewezen aan de kernel: - Adresruimten - Communicatie tussen processen (interprocess communication, IPC) - Basisscheduling Andere diensten van het besturingssysteem worden verzorgd door processen Multithreading Proces wordt verdeeld in draden (threads) die tegelijkertijd kunnen worden uitgevoerd - Thread: inzetbare eenheid werk, wordt sequentieel uitgevoerd en kan worden onderbroken - Proces: verzameling van 1 of meer threads en de bijbehorende bronnen Symmetrische multiprocessing - Meerdere processors - Deze processors delen hetzelfde hoofdgeheugen en dezelfde I/O-voorzieningen - Alle processors kunnen dezelfde functies uitvoeren Het besturingssysteem van een SMP verdeelt processen of threads over alle processors. Voordelen: - Prestaties: meerdere processen tegelijkertijd actief - Beschikbaarheid: het uitvallen van één processor stopt het systeem niet - Stapsgewijze groei: de prestaties kunnen verbeteren door extra processoren toe te voegen - Schaalbaarheid Gedistribueerde besturingssystemen - Verzameling computers die elk hun eigen geheugen en I/O-modules hebben - Wekt de illusie van 1 hoofdgeheugenruimte, 1 secundaire geheugenruimte en andere gelijkgeschakelde toegangsvoorzieningen Objectgeoriënteerd ontwerp Proces waarbij modulaire uitbreidingen worden toegevoegd aan een kleine kernel. Het geeft de mogelijkheid een besturingssysteem aan te passen zonder de integriteit van het systeem in gevaar te brengen 3. Beschrijving en besturing van processen Het besturingssysteem beheert de uitvoering van toepassingen ordelijk zodat: - Bronnen beschikbaar gemaakt worden voor verschillende toepassingen - De fysieke processor schakelt tussen verschillende toepassingen - De processor en I/O-apparaten efficiënt kunnen worden gebruikt 3.1. Wat is een proces? Verschillende definities: - Programma in uitvoering - Instantie van een programma die op een computer wordt uitgevoerd - Entiteit die aan een processor kan worden toegewezen en op die processor kan worden uitgevoerd - Eenheid van activiteiten, die gekenmerkt wordt door de uitvoering van een reeks instructies, een huidige toestand en een bijbehorende verzameling systeembronnen Een proces is een entiteit die bestaat uit een aantal elementen: - Programmacode (die met andere processen die hetzelfde programma uitvoeren gedeeld wordt) - Verzameling gegevens Tijdens de uitvoering van het programma, heeft het proces een aantal elementen: - Identificatienummer - Toestand - Prioriteit - Programmateller - Geheugenwijzers - Contextgegevens - I/O-toestandsinformatie - Beheersinformatie Al het voorgaande wordt opgeslagen in een procesbesturingsblok, die door het besturingssysteem gecreëerd en beheerd wordt. Het bevat voldoende informatie om een proces te onderbreken en er later mee verder te gaan. Hierdoor wordt multiprocessing mogelijk. 3.2. Procestoestanden Spoor (trace): volgorde van instructies die voor dat proces worden uitgevoerd Dispatcher: wisselt de processor van 1 proces naar een ander De belangrijkste taak van het besturingssysteem is het besturen van de procesuitvoering: - Het bepalen van het patroon waarin de uitvoering ervan wordt verweven - Het toewijzen van bronnen aan processen 3.2.1. Procesmodel met 2 toestanden Een proces kan zich in 2 toestanden bevinden: actief (running) of niet-actief (not running) 3.2.2. Creëren en beëindigen van processen Redenen voor het creëren van een proces: - Nieuwe batchtaak - Interactieve aanmelding - Gecreëerd door het besturingssysteem om een dienst te verzorgen - Verwekt door een bestaand proces Redenen voor het beëindigen van een proces: - Normale voltooiing - Tijdslimiet overschreden - Onvoldoende geheugen beschikbaar - Overtreding geheugengrens - Beschermingsfout - Rekenkundige fout - Tijd verstreken - I/O-fout Ongeldige instructie Geprivilegieerde instructie Onjuist gebruik gegevens Ingreep van de gebruiker of het besturingssysteem Beëindiging van het ouderproces Verzoek van het ouderproces 3.2.3. Procesmodel met 5 toestanden - Actief (running): het proces dat op dit moment wordt uitgevoerd - Gereed (ready): een proces dat direct kan worden uitgevoerd wanneer het daartoe de gelegenheid krijgt - Geblokkeerd (blocked): een proces dat niet kan worden uitgevoerd totdat een bepaalde gebeurtenis optreedt - Nieuw (new): een proces dat onlangs is gecreëerd maar nog niet door het systeem is toegevoegd aan de verzameling met uitvoerbare processen - Einde (exit): een proces dat door het besturingssysteem wordt ontslagen uit de groep uitvoerbare processen, omdat het is beëindigd of omdat het om een bepaalde reden is afgebroken Soorten overgangen: - Niets Nieuw: een nieuw proces wordt gecreëerd voor het uitvoeren van een programma - Nieuw Gereed: het besturingssysteem zal een proces verplaatsen van de toestand Nieuw naar de toestand Gereed wanneer het toestaat dat nieuwe proces in uitvoering te nemen - Gereed Actief: als men een nieuw proces moet selecteren voor uitvoering, dan kiest het besturingssysteem een van de processen met de toestand Gereed - Actief Einde: het proces dat op dat moment wordt uitgevoerd, wordt door het besturingssysteem beëindigd als het proces aangeeft dat het is voltooid of als het wordt afgebroken - Actief Gereed: deze overgang treedt meestal op doordat het actieve proces de maximaal toegestane tijd voor een ononderbroken uitvoering heeft bereikt - Actief Geblokkeerd: een proces wordt in de toestand Geblokkeerd geplaatst als het vraagt om iets waarop het moet wachten - Geblokkeerd Gereed: een proces in de toestand Geblokkeerd wordt verplaatst naar de toestand Gereed wanneer de gebeurtenis optreedt waarop het heeft gewacht - Gereed Einde: bij sommige processen kan een ouderproces een kindproces beëindigen. Bovendien kunnen alle kindprocessen die aan een bepaald ouderproces zijn verbonden, worden beëindigd wanneer de ouder wordt beëindigd - Geblokkeerd Einde: zelfde als voor de vorige overgang 3.2.4. Opgeschorte processen Processor is zoveel sneller dan de I/O dat het vaak zal voorkomen dat alle processen in het geheugen wachten op I/O. Oplossing: wisselen (swapping): het verplaatsen van een deel of het geheel van een proces van het hoofdgeheugen naar schijf. Bevindt geen enkel proces in het hoofdgeheugen zich in de toestand Gereed, dan verplaatst het besturingssysteem 1 van de geblokkeerde processen naar een wachtrij Opgeschort (suspend) = wachtrij van bestaande processen die tijdelijk uit het hoofdgeheugen zijn verwijderd 2 nieuwe toestanden: - Geblokkeerd – opgeschort: het proces bevindt zicht in het secundaire geheugen en wacht op een gebeurtenis - Gereed – opgeschort: het proces bevindt zich in het secundaire geheugen maar is beschikbaar voor uitvoering zodra het in het hoofdgeheugen is geladen - - - - - - Nieuwe overgangen: Geblokkeerd Geblokkeerd-opgeschort: zijn er geen processen gereed, dan wordt ten minste 1 geblokkeerd proces uit het hoofdgeheugen geswapt om ruimte te maken voor een ander proces dat niet geblokkeerd is Geblokkeerd-opgeschort Gereed-opgeschort: een proces in de toestand Geblokkeerd-opgeschort wordt verplaatst naar de toestand Gereed-opgeschort als de gebeurtenis optreedt waarop het proces heeft gewacht Gereed-opgeschort Gereed: bevindt zich geen proces in de rij Gereed, dan moet het besturingssysteem een proces binnenhalen om de uitvoering te kunnen voortzetten Gereed Gereed-opgeschort: het kan noodzakelijk zijn een gereed proces te swappen als dat de enige mogelijkheid is om een voldoende groot blok hoofdgeheugen vrij te maken Nieuw Gereed-opgeschort en Nieuw Gereed: wordt een nieuw proces gecreëerd, dan kan het worden toegevoegd aan de wachtrij Gereed of aan de wachtrij Gereed-opgeschort. In beide gevallen moet het besturingssysteem enkele tabellen maken voor het beheren van het proces en een adresruimte toewijzen aan het proces Geblokkeerd-opgeschort Geblokkeerd: er bevindt zich in de wachtrij Geblokkeerd-opgeschort een proces dat een hogere prioriteit heeft dan alle andere processen in de wachtrij Gereedopgeschort en het besturingssysteem heeft een goede reden om aan te nemen dat de blokkade voor dat proces binnenkort zal zijn opgeheven. Onder deze omstandigheden kan het zinvol zijn een geblokkeerd proces in plaats van een gereed proces in het hoofgeheugen te laden Actief Gereed-opgeschort: behandelt het besturingssysteem een actief proces preëmptief omdat een proces met een hogere prioriteit in de wachtrij Geblokkeerd-opgeschort zojuist niet-geblokkeerd is geworden, dan kan het besturingssysteem het actieve proces rechtstreeks verplaatsen naar de wachtrij Gereed-opgeschort om extra geheugen vrij te maken Diverse toestanden Einde: bij sommige besturingssystemen kan een proces worden beëindigd door het ouderproces dat het proces heeft gecreëerd of door beëindiging van het ouderproces zelf. Is dit toegestaan, dan kan een proces vanuit elke toestand worden verplaatst naar de toestand Einde Definitie opgeschort proces 1. Het proces is niet onmiddellijk beschikbaar voor uitvoering 2. Het proces kan al of niet wachten op een gebeurtenis. Wacht het, dan is deze toestand Geblokkeerd onafhankelijk van de toestand Opgeschort en zal het optreden van de blokkerende gebeurtenis het proces niet automatisch geschikt maken voor uitvoering 3. Het proces werd in de toestand Opgeschort geplaatst door het proces zelf of door een ander (ouderproces of besturingssysteem) om de uitvoering van het proces te verhinderen 4. Het proces kan deze toestand niet verlaten tenzij een ander hiervoor expliciet een opdracht geeft Redenen voor het opschorten van processen: - Swapping - Andere reden van het besturingssysteem - Verzoek van een interactieve gebruiker - Timing - Verzoek van het ouderproces 3.3. Beschrijving van processen 3.3.1. Beheersstructuren in het besturingssysteem Als het besturingssysteem processen en bronnen wil kunnen beheren, dan moet het informatie bezitten over de huidige status van elk proces en elke bron. Hiervoor maakt en onderhoudt het besturingssysteem tabellen met informatie over elke entiteit die het beheert Alle besturingssystemen werken in essentie met informatie over de volgende 4 categorieën: Geheugentabellen (memory tables) Geheugentabellen worden gebruikt voor het bijhouden van het hoofdgeheugen (het reële geheugen) en het secundaire geheugen (het virtuele geheugen). De geheugentabellen bevatten de volgende informatie: - De toewijzing van hoofdgeheugen aan processen - De toewijzing van secundair geheugen aan processen - Beschermingsattributen voor welke processen toegang mogen krijgen tot bepaalde gedeelde geheugengebieden - Alle informatie die nodig is voor het beheren van het virtuele geheugen I/O-tabellen (I/O tables) I/O-tabellen worden door het besturingssysteem gebruikt voor het beheren van de I/O-apparaten en I/O-kanalen van het computersysteem. De I/O-tabellen bevatten de volgende informatie: - Of een I/O-apparaat beschikbaar is of toegewezen is aan een bepaald proces - Status van de I/O-bewerking - Locatie in het hoofdgeheugen die wordt gebruikt als bron of bestemming van de I/O-overdracht Bestandstabellen (file tables) Deze tabellen verschaffen informatie over: - Het bestaan van bestanden - Hun locatie in het secundaire geheugen - Hun huidige status - Andere attributen. Vaak wordt al deze informatie bijgehouden en gebruikt door het bestandsbeheersysteem (file management system) Procestabellen (process tables) Voor het beheren en besturen van een proces, moet een besturingssysteem bepaalde dingen weten: - Procesidentificatienummer - Procestoestant - Waar het proces zich bevindt Het procesbeeld (process image) is de verzameling die bestaat uit het programma, de gegevens, de stack en de attributen 3.3.2. Beheersstructuren voor processen We kunnen de informatie in het procesbesturingsblok groeperen tot drie algemene categorieën: 1. Procesidentificatie 2. Processortoestandsinformatie 3. Procesbesturingsinformatie Procesidentificatie Aan elk proces is een unieke, numerieke identificatiecode toegewezen, wat niet meer hoeft te zijn dan een eenvoudige index in de primaire procestabel. Veel andere tabellen die worden beheerd door het besturingssysteem, kunnen procesidentificatie gebruiken voor kruisverwijzing naar procestabellen. Processortoestandsinformatie Processortoestandsinformatie bestaat uit de inhoud van processorregisters: - Registers die zichtbaar zijn voor de gebruiker - Beheer- en statusregisters - Stackwijzers Voor belangrijk is dat alle processorontwerpen een register of verzameling registers bevatten waarin statusinformatie is opgeslagen, het programmastatuswoord (program status word, PSW) genoemd. Het PSW bevat statusinformatie. Procesbesturingsinformatie Dit is de aanvullende informatie die het besturingssysteem nodig heeft voor het beheren en coördineren van de diverse actieve processen. Rol van het procesbesturingsblok Het procesbesturingsblok is de belangrijkste gegevensstructuur in een besturingssysteem. Het verschaffen van toegang is niet moeilijk. Elke procesidentificatiecode kan worden gebruikt als idex in een tabel. De moeilijkheid zit hem in de bescherming: - Een fout in één routine kan procesbesturingsblokken beschadigen, waardoor het systeem de betreffende processen niet meer kan beheren - Een aanpassing van het ontwerp van de structuur van het procesbesturingsblok kan invloed hebben op meerdere modules in het besturingssysteem. Deze problemen kunnen worden opgelost door alle routines in het systeem te laten werken via één afhandelingsroutine. 3.4. Procesbesturing 3.4.1. Uitvoeringsmodi Gebruikersmodus (user mode) - Minder geprivilegieerde modus - Gebruikersprogramma’s worden meestal in deze modus uitgevoerd Systeemmodus (system mode) - Meer geprivilegieerde modus - Kernel van het besturingssysteem - Synoniemen: besturingsmodus (control mode), kernelmodus (kernel mode) 3.4.2. Creëren van processen 1. Het besturingssysteem wijst een unieke procesidentificatie toe aan het nieuwe proces 2. Het besturingssysteem wijst ruimte toe aan het proces 3. Het procesbesturingsblok moet worden geïnitialiseerd 4. De juiste koppelingen moeten worden ingesteld 5. Soms moeten andere gegevensstructuren worden gemaakt of uitgebreid 3.4.3. Wisselen van processen Wanneer moeten processen worden gewisseld: - Klokinterrupt - I/O-interrupt - Geheugenfout - Val (trap) - Supervisor-aanroep Wisseling van procestoestand: 1. Opslaan van de context van het proces, inclusief de programmateller en andere registers 2. Bijwerken van het procesbesturingsblok van het afgebroken proces. Dit omvat het wijzigen van de toestand Actief in 1 van de andere toestanden (Gereed, Geblokkeerd, Gereed-opgeschort, Einde) 3. Het verplaatsen van het betreffende procesbesturingsblok naar de juiste wachtrij (Gereed, Geblokkeerd, Gereed-opgeschort) 4. Selecteren van een ander uit te voeren proces 5. Bijwerken van het procesbesturingsblok van het geselecteerde proces 6. Bijwerken van de gegevensstructuren voor het geheugenbeheer 7. Terugbrengen van de context van dit proces naar de context zoals deze was op het moment dat het geselecteerde proces het laatst uit de toestand Actief werd gewisseld, door het laden van de opgeslagen waarden van de programmateller en andere registers 3.4.4. Uitvoering van het besturingssysteem Procesloze kernel Het uitvoeren van de kernel van het besturingssysteem buiten alle processen. De code van het besturingssysteem wordt uitgevoerd als een afzonderlijke entiteit die werkt in een geprivilegieerde modus Uitvoering binnen gebruikersprocessen Diverse functies van het besturingssysteem worden uitgevoerd binnen de omgeving van het gebruikersproces Op processen gebaseerd besturingssysteem Implementeren van het besturingssysteem als een verzameling systeemprocessen. Dit is nuttig in een omgeving met meerdere processen of meerdere computers, waarbij een deel van de functies van het besturingssysteem kan worden verplaatst naar speciale processors, hetgeen de prestaties verbetert 4. Bestandsbeheer 4.1. Overzicht 4.1.1. Bestanden en bestandssystemen In de meeste toepassingen is het bestand het centrale element. Vanuit het oogpunt van de gebruiker is het bestandssysteem een van de belangrijkste onderdelen van een besturingssysteem. Het bestandssysteem stelt gebruikers in staat bestanden met volgende eigenschappen te maken: Langdurig bestaand Deelbaar tussen processen Structuur Functies die kunnen worden toegepast op bestanden: Maken, wissen Openen, sluiten Lezen, schrijven Aantal attributen aan het bestand: Eigenaar Tijd waarop het bestand werd gemaakt Tijd waarop het bestand voor het laatst werd gewijzigd Toegangsrechten Bestandsstructuur Bij het bespreken van bestanden worden 4 begrippen algemeen gebruikt: Veld (field): - Basiselement van gegevens - Bevat 1 waarde, vb. achternaam van een werknemer, datum,... - Onderscheid zich door de lengte en gegevenstype Record: - Verzameling gerelateerde velden - Kan als eenheid worden behandeld Bestand (file): - Verzameling vergelijkbare records - Wordt behandeld als 1 entiteit - Hebben unieke bestandsnamen - Toegangscontrole en restricties worden doorgaans toegepast Database: - Verzameling gerelateerde gegevens - Relaties bestaan tussen gegevenselementen - Bestaat uit een of meer soorten bestanden 4.1.2. Systemen voor bestandsbeheer Systeem voor bestandsbeheer (file management system) = verzameling systeemsoftware die diensten verzorgt voor gebruikers en toepassingen bij het gebruiken van bestanden. De gebruiker of programmeur moet geen speciale software ontwikkelen voor elke toepassing. Een systeem voor bestandsbeheer moet voldoen aan de volgende doelstellingen: - Voorzien in de behoeften en vereisten voor het gegevensbeheer van de gebruiker - Garanderen dat de gegevens in de bestanden geldig zijn - Prestaties optimaliseren - Voorzien in I/O-ondersteuning voor diverse soorten opslagapparaten - Minimaliseren of elimineren van de mogelijkheid dat gegevens verloren gaan of vernietigd worden - Voorzien in een gestandaardiseerde verzameling interfaceroutines voor I/O - Ondersteuning van I/O bieden aan meerdere gebruikers bij systemen voor meerdere gebruikers - - - Minimale verzameling van eisen: Elke gebruiker moet bestanden kunnen creëren, verwijderen en wijzigen Elke gebruiker moet gecontroleerde toegang kunnen krijgen tot bestanden van andere gebruikers Elke gebruiker moet kunnen bepalen welke soorten toegang zijn toegestaan voor zijn bestanden Elke gebruiker moet de structuur van zijn bestanden kunnen aanpassen tot een vorm die aansluit op het op te lossen probleem Elke gebruiker moet gegevens kunnen verplaatsen tussen bestanden Elke gebruiker moet een reservekopie van zijn bestanden kunnen maken en de bestanden in geval van schade kunnen herstellen Elke gebruiker moet toegang kunnen krijgen tot zijn bestanden via een symbolische naam 4.1.3. Architectuur van bestandssystemen Apparaatstuurprogramma’s (device drivers) - Laagste niveau Communiceert rechtstreeks met randapparaten Verantwoordelijk voor het starten van I/O-bewerkingen op een apparaat Verwerkt de voltooiing van een I/O-opdracht Basisbestandssysteem (basic file system) - Fysieke I/O Behandelt de gegevensblokken die worden uitgewisseld Verzorgt de plaatsing van die blokken Buffert de blokken in het hoofdgeheugen Basis-I/O (basic I/O supervisor) - Verantwoordelijk voor het starten en beëindigen van alle bestand-I/O Besturingsstructuren worden bijgehouden Selecteert het apparaat waarop bestands-I/O wordt uitgevoerd Verzorgt de scheduling van schijf- en tapetoegangen om de prestaties te optimaliseren Onderdeel van het besturingssysteem Logische I/O - Verschaft gebruikers en toepassingen toegang tot records - Vormt een algemene voorziening voor record-I/O - Houdt basisgegevens over bestanden bij Toegangsmethode (access methode) - Verschillende toegangsmethoden voor verschillende bestandsstructuren - Verschillende methoden om gegevens te lezen en verwerken 4.2. Bestandsorganisatie en –toegang De term bestandsorganisatie wordt gebruikt voor de logische structuur van de records zoals die wordt bepaald door de manier waarop ze worden benaderd. De fysieke indeling van het bestand in het secundaire geheugen is afhankelijk van de strategie voor blokvorming en bestandstoewijzing. Diverse criteria zijn belangrijk: - Korte toegangstijd - Gemak van bijwerken - Efficiënt gebruik van opslagruimte - Onderhoudsgemak - Betrouwbaarheid 4.2.1. Stapelbestand - Gegevens worden verzameld in de volgorde waarin ze binnenkomen - De gegevensmassa vergaren en opslaan - Records kunnen verschillende velden hebben - Geen structuur - Recordtoegang vindt plaats via volledig zoeken Stapelbestanden worden toegepast wanneer gegevens voorafgaan aan de verwerking worden verzameld en opgeslagen, of wanneer gegevens niet gemakkelijk zijn in te delen. Voordelen: - Efficiënt gebruik van de ruimte als de grootte en structuur van de opgeslagen gegevens variëren - Uitstekend geschikt voor volledige zoekbewerkingen - Gemakkelijk bij te werken Dit soort bestand is echte ongeschikt voor de meeste toepassingen 4.2.2. Sequentieel bestand - Vaste indeling van records - Alle records hebben dezelfde lengte - Hetzelfde aantal velden met vaste lengte in een specifieke volgorde - Veldnaam en lengte zijn attributen van het bestand - Meestal 1 veld in elk record = sleutelveld (key field) - Unieke identificatie van de record - Records worden opgeslagen in sleutelvolgorde Sequentiële bestanden worden gebruikt in batchtoepassingen of toepassingen die bij verwerking alle records gebruiken. Voordeel: kan gemakkelijk opgeslagen worden op tapes en schijven Nadeel: - Slechte prestaties bij afzonderlijke records - Toevoegingen aan het bestand leiden tot problemen 4.2.3. Index-sequentieel bestand - Behoudt de hoofdkenmerken van het sequentiële bestand - Records zijn ingedeeld in volgorde op basis van het sleutelveld - Een index naar het bestand voor het ondersteunen van willekeurige toegang - Een overloopbestand (record kan worden gevonden door het volgen van een verwijzing in de voorafgaande record) Meerdere niveaus van indexering kunnen worden gebruikt. Het index-sequentiêle bestand vermindert de tijd die nodig is voor de toegang tot een record sterk, zonder dat dit ten koste gaat van het sequentiële karakter van het bestand. 4.2.4. Geïndexeerd bestand - Gebruikt meerdere indexen voor verschillende velden: Volledige index bevat één ingang voor elke record in het hoofdbestand Gedeeltelijke index bevat ingangen voor records waarin het gewenste veld voorkomt - Wordt een nieuwe record toegevoegd aan het hoofdbestand, dan moeten alle indexbestanden worden bijgewerkt Geïndexeerde bestanden worden vooral gebruikt in toepassingen waarbij snelle verwerking van informatie cruciaal is en waarbij zelden alle gegevens worden verwerkt. Vb.: reserveringssystemen voor luchtvaartmaatschappijen, systemen voor voorraadbeheer De index zelf is voor het zoekgemak ingedeeld als sequentieel bestand. Nadeel: records zijn uitsluitend toegankelijk via hun indexen. 4.2.5. Direct of hashed bestand - Wordt gebruikt wanneer snelle toegang vereist is, wanneer records met vaste lengte worden gebruikt en wanneer de toegang altijd beperkt blijft tot één record tegelijk - Vb.: directory’s, prijstabellen, roosters en naamlijsten - Directe toegang tot elk blok met een bekend adres - Sleutelveld in elk record vereist - Geen sequentiële volgorde 4.3. Bestandsdirectory’s 4.3.1. Inhoud - Bevat informatie over bestanden zoals attributen, locatie en eigendom - Een bestand dat door allerlei bestandsbeheerroutines kan worden benaderd - Voert een vertaalslag uit tussen bestandsnamen en de bestanden zelf Informatie-elementen van een bestandsdirectory: Basisinformatie - Bestandsnaam: naam gekozen door de maker, moet uniek zijn binnen een specifieke directory - Bestandstype: vb. tekst, binair of laadmodule - Bestandsorganisatie: voor systemen die verschillende bestandsorganisaties ondersteunen Adresinformatie - Volume: geeft het apparaat aan waarop het bestand is opgeslagen Beginadres: fysiek beginadres op secundaire opslag (vb. cilinder, spoor en bloknummer op schijf) Gebruikte grootte: huidige bestandsgrootte in bytes, woorden of blokken Toegewezen grootte: de maximale grootte van het bestand Toegangscontrole-informatie - Eigenaar: kan toegang toestaan of weigeren aan andere gebruikers en hun privileges veranderen - Toegangsinformatie: kan de naam en het wachtwoord van iedere geautoriseerde gebruiker bevatten - Toelaatbare acties: controleert het lezen, schrijven, uitvoeren en verzenden via een netwerk Gebruiksinformatie - Datum gecreëerd: datum waarop het bestand voor het eerst in de directory werd geplaatst Identiteit van de maker: meestal, maar niet noodzakelijk, de huidige eigenaar Datum laatste leestoegang: datum waarop een record het laatst werd gelezen Identiteit van laatste lezer: gebruiker die het lezen uitvoerde Datum laatste wijziging: datum van de laatste bijwerking, invoeging of verwijdering Identiteit voor laatste wijziging: gebruiker die de wijziging uitvoerde Datum laatste reservekopie: datum waarop voor het laatst een reservekopie van het bestand werd gemaakt op een ander medium - Huidig gebruik: informatie over de huidige activiteit voor het bestand, zoals het proces dat het bestand geopend heeft, of het bestand is vergrendeld door een proces en of het wel is bijgewerkt in het hoofdgeheugen maar nog niet op schijf 4.3.2. Structuur - De manier waarop de informatie wordt opgeslagen, verschilt sterk van systeem tot systeem De eenvoudigste structuur - Lijst van ingangen, met 1 ingang voor elk bestand - Sequentieel bestand, waarbij de naam van het bestand dienst doet als sleutel - Biedt geen hulp bij het ordenen van de bestanden - Dwingt de gebruiker erop te letten dat hij niet dezelfde naam gebruikt voor 2 verschillende types bestanden Soorten bewerkingen die met de directory kunnen worden uitgevoerd: - Zoeken - Bestand creëren - Bestand verwijderen - Directory weergeven - Directory bijwerken De eenvoudige lijst is niet geschikt voor de ondersteuning van al deze bewerkingen. Schema met 2 niveaus - 1 directory voor iedere gebruiker en 1 hoofddirectory (masterdirectory) Hoofddirectory bevat 1 ingang voor elke gebruikersdirectory Heeft adres- en toegangscontrole-informatie Elke gebruikersdirectory is een eenvoudige lijst met bestanden van die gebruiker - Geen middel om verzamelingen bestanden te structureren - Namen hoeven alleen uniek te zijn binnen de verzameling bestanden van één gebruiker Hiërarchische of boomstructuurbenadering - 1 hoofddirectory met daarin enkele gebruikersdirectory’s - Elke gebruikersdirectory kan op zijn beurt subdirectory’s en bestanden bevatten. Dit geldt voor elk niveau. 4.3.3. Naamgeving - Gebruikers moeten met een naam naar een bestand kunnen verwijzen - Elk bestand moet een unieke naam hebben - Elk bestand in het systeem kan worden gevonden door een pad te volgen langs verschillende takken totdat het bestand is bereikt - Verschillende bestanden kunnen dezelfde bestandsnamen hebben, zolang ze maar een unieke padnaam hebben Werkdirectory - De volldige padnaam uitspellen is lastig voor een gebruiker - Een interactieve gebruiker of een proces is verbonden aan een huidige directory 4.4. Gemeenschappelijk gebruik van bestanden Een systeem met meerdere gebruikers vereist bijna altijd dat bestanden gedeeld kunnen worden door een aantal gebruikers. Hierbij spelen 2 kwesties een rol: toegangsrechten en het beheer van gelijktijdige toegang 4.4.1. Toegangsrechten - Geen: de gebruiker weet niet dat het bestand bestaat en krijgt geen toestemming voor het lezen van de gebruikersdirectory waarin dit bestand voorkomt - Kennis: de gebruiker kan vaststellen dat het bestand bestaat en wie de eigenaar is - Uitvoeren: de gebruiker kan een programma laden en uitvoeren maar het niet kopiëren - Lezen: de gebruiker kan het bestand voor elk doel lezen, onder andere om het te kopiëren of uit te voeren - Toevoegen: de gebruiker kan gegevens toevoegen aan het bestand, maar kan niets van de inhoud van het bestand wijzigen of verwijderen - Bijwerken: de gebruiker kan gegevens in het bestand wijzigen, verwijderen en toevoegen - Beveiliging wijzigen: de gebruiker kan de toegangsrechten van andere gebruikers wijzigen - Verwijderen: de gebruiker kan het bestand verwijderen uit het bestandssysteem De eigenaar heeft alle toegangsrechten en kan rechten verlenen aan anderen: - Specifieke gebruiker - Gebruikersgroepen - Alle 4.4.2. Gelijktijdige toegang - Gebruiker kan het volledige bestand vergrendelen wanneer dat wordt bijgewerkt - Vergrendelen van afzonderlijke records tijdens het bewerken - Wederzijdse uitsluiting (mutual exclusion) en dodelijke omarming (deadlock) zijn problemen voor gedeelde toegang 4.5. Blokvorming van records - Records moeten worden ingedeeld als blokken - Records zijn de logische eenheid bij toegang tot een bestand - Blokken zijn de eenheid van I/O met secundaire opslag 3 methoden voor blokvorming (blocking): 1. Blokvorming met vaste lengte: hierbij worden records met vaste lengte gebruikt en wordt een geheel aantal records opgeslagen in een blok. Er kan ongebruikte ruimte zijn aan het einde van elk blok. Dit wordt aangeduid als interne fragmentatie 2. Gekoppelde blokvorming met variabele lengte: hierbij worden records met variabele lengte gebruikt en samengepakt in blokken. Alle ruimte wordt gebruikt. Sommige records kunnen daarbij meerdere blokken omspannen, waarbij het vervolg wordt aangegeven door een verwijzing naar het volgende blok 3. Niet-gekoppelde blokvorming met variabele lengte: hierbij worden records met variabele lengte gebruikt, maar deze worden niet gekoppeld opgeslagen. De meeste blokken bevatten loze ruimte, omdat het onmogelijk is de rest van een blok te gebruiken als de volgende record groter is dan de resterende, ongebruikte ruimte Blokvorming met vaste lengte is de gebruikelijke vorm voor sequentiële bestanden. Gekoppelde blokvorming met variable lengte gebruikt opslagruimte efficiënt en beperkt de grootte van records niet. Dit is echter moeilijk te implementeren. Niet-gekoppelde blokvorming met variabele lengte leidt tot verspilde ruimte. 4.6. Beheer van secundaire opslag Het besturingssysteem is verantwoordelijk voor het toewijzen van blokken aan bestanden. 2 aandachtspunten: - Ruimte op secundaire opslag moet worden toegewezen aan bestanden - Noodzakelijk bij te houden welke ruimte beschikbaar is voor toewijzing 4.6.1. Bestandstoewijzing Bij bestandstoewijzing spelen verschillende kwesties een rol: - Als een nieuw bestand wordt gecreëerd, wordt de maximumruimte in één keer toegewezen? - Ruimte wordt toegewezen aan een bestand als een of meer aaneengesloten porties. Welke portiegrootte moet worden gebruikt bij de bestandstoewijzing? - Welke gegevensstructuur wordt gebruikt voor het bijhouden van de porties? Toewijzing vooraf of dynamisch - De maximale grootte van een bestand wordt gedeclareerd bij de creatie van het bestand - Bij veel toepassingen is het moeilijk de maximale grootte van het bestand te schatten - Programmeurs hebben de neiging te overschatten om te voorkomen dat ze ruimte tekortkomen Portiegrootte Twee uitersten: - Een portie wordt toegewezen die groot genoeg is voor het gehele bestand - Ruimte wordt toegewezen op de schijf met één blok tegelijk Bij het kiezen van de portiegrootte moet een balans worden gevonden tussen de efficiëntie, gezien vanuit één bestand en de algehele systeemefficiëntie 4 aspecten die in overweging moet worden genomen: - Aaneengesloten ruimte verbetert de prestaties - Een groot aantal porties vergroten de tabellen die nodig zijn voor het beheren van de toewijzingsinformatie - Porties met een vaste grootte vereenvoudigen de toewijzing van ruimte - Porties met variabele grootte minimaliseren de verspilling voor ongebruikte opslagruime Twee alternatieven: - Variabele, grote, aaneengesloten porties Betere prestaties Voorkomt verspilling Tabellen voor bestandstoewijzing zijn klein Hergebruiken van ruimte is lastig - Blokken (kleine, vaste porties) Hogere flexibiliteit Kan grote tabellen vereisen Geen aaneensluiting (blokken worden toegewezen zodra ze nodig zijn) Methoden van bestandstoewijzing Aaneengesloten toewijzing (contiguous allocation): - 1 aaneengesloten verzameling blokken toegewezen aan een bestand op het moment dat het bestand wordt gecreëerd - De tabel voor bestandstoewijzing hoeft slechts 1 ingang voor elk bestand te bevatten, die het beginblok en de lengte van het bestand aangeeft - Er kan externe fragmentatie optreden - Nu en dan noodzakelijk een algoritme voor samenpakken (compaction) uit te voeren om voldoende aanvullende ruimte op schijf vrij te maken Kettingtoewijzing (chained allocation): - De toewijzing vindt meestal plaats op basis van afzonderlijke blokken - Elk blok bevat een wijzer naar het volgende blok in de ketting - De tabel voor bestandstoewijzing hoeft slechts 1 ingang voor elk bestand te bevatten, die het beginblok en de lengte van het bestand aanduidt - Geen externe fragmentatie - Meest geschikt voor sequentiële bestanden - Selecteren van een afzonderlijk blok van een bestand vereist het volgen van de keten naar het gewenste blok Indextoewijzing (indexed allocation): - Lost veel van de problemen op van aaneengesloten en kettingtoewijzing - De tabel voor bestandstoewijzing bevat een afzonderlijke index van 1 niveau voor elk bestand - De index heeft 1 ingang voor elke portie die aan het bestand is toegewezen - De bestandsindex voor een bestand wordt bijgehouden in een apart blok en de bestandsingang verwijst in de tabel voor bestandstoewijzing naar dat blok Bootproces Het besturingssysteem is een programma dat op extern geheugen staat en moet gekopieerd worden naar het werkgeheugen (= inladen). Het besturingssysteem inladen is een speciale procedure, want om iets in te laden moet er al programmatuur zijn. Partities Deel van de harde schijf: opeenvolgende cilinders. - Maximum 4 primaire partities. - In partities indelen gebeurt bij het begin van de installatie van het besturingssysteem. - Eventueel kan men achteraf partities wijzigen, mits speciale tools. In een partitie kan je een besturingssysteem installeren. Er kan maximum 1 partitie actief zijn. Bij opstarten zal het besturingssysteem starten in de actieve partitie. MBR = Master Boot Record (Record = sector). MBR bevat: - MBR-startprogramma (Initial Program Loader, IPL) - Partitietabel - Magisch getal Bij het booten start het besturingssysteem in de actieve partitie Partitietabel De partitietabel kan 4 partitie-records bevatten die ieder een primaire partitie beschrijven. De partitietabel bevat per partitie: - Bootable flag : actief / niet actief - Cylinder/Head/Sector van 1e sector - Partitie-type : geeft aan welk bestandssysteem op de partitie staat - Cylinder/Head/Sector van laatste sector - LBA-nummer van 1e sector - LBA-nummer van laatste sector Logische partities 4 primaire partities is soms te weinig. Een primaire partitie kan onderverdeeld worden in logische partities (= extended) Medium Schijf Extended partitie Verdeeld in Primaire partities Info staat in MBR Max aantal partities 4 Logische partities EMBR 24 EMBR = Extended Master Boot Record EMBR voor de extended partities EMBR voor elke logische partitie Elke EMBR heeft 2 items: - Info over de partitie zelf - Info over de rest Welke info? - Type - Chs 1e sector - Chs laatste sector - Grootte PBR Partitie wordt geformatteerd (bestandssysteem opgeven) 1e sector van de partitie is de Partition Boot Sector (sector = record; PBR = PBS) PBR bevat: - Sprongbevel (spring x aantal bytes verder, naar PBR-startprogramma) - Info over de partitie - PBR-startprogramma Wat gebeurt als je computer start? 1. Interne voeding wordt geïnitialiseerd - Testen van de geleverde spanningen - Reset-signaal naar CPU sturen 2. Wanneer spanning O.K.: “Power Good” signaal naar moederbord (= stoppen met reset) 3. Processor begint bevelen uit te voeren - Welke mode? Reële mode (Intel) - Welk bevel? Op adres FFFF:0000 - Wat betekent dit? FFFF0 segmentadres +0000 verplaatsing FFFF0 (in register CS staat FFFF) FFFF0 is een adres in het werkgeheugen, toegewezen aan het BIOS (vroeger ROM, nu EEPROM). BIOS EEPROM: - Soms nog “CMOS” genoemd (Complementary Metal-Oxide Semiconductor) - Eigenlijk is “de CMOS” 1 van de weinige chips in een computer die geen CMOS-technologie gebruikt - Vroeger CMOS-geheugen dat door batterijen onder spanning werd gehouden - Bevat: Opstartvolgorde Informatie over randapparaten BIOS-paswoord … Processor begint met BIOS-startprogramma (op adres FFFF0) Wat doet dit startprogramma? 4. Power on self test uitvoeren, POST controleert vitale systeemonderdelen : - CPU - Toetsenbord (verbonden, controller O.K.?) - RAM (lezen, schrijven) - Video,… 5. 6. 7. 8. Bios-startprogramma gaat na wat het boot-apparaat is MBR kopiëren naar werkgeheugen (bevat IPL) Sprong naar 1e bevel in IPL IPL : - Leest partitietabel (gaat na welke de actieve partitie is) - Kopieert PBR (met PBR-startprogramma) van deze partitie naar werkgeheugen - Sprong naar bevel vanaf 1e byte van PBR 9. 1e bevel in PBR : sprong naar PBR-startprogramma 10.PBR-startprogramma : ntldr inladen - Indien niet gevonden : “ntldr missing” op het scherm zetten 11.Ntldr : processor naar protected mode en Windows starten