Innhold Om denne boka 1 Hvem er boka skrevet for? 1 Er dette en teoribok? 1 Hvor stort omfang har dette pensumet? 2 Laboratorieøvinger 2 Web-ressurser til denne boka 2 Om forfatteren 3 Kapittel 1 Operativsystemer og mellomvare 5 Hvorfor trenger vi et operativsystem? 5 Oppgavene til et operativsystem 6 Deling 6 Abstraksjon 7 Styring 8 Mellomvare 9 Distribusjon 10 Hvorfor ønsker vi distribusjon? 11 Distribuerte operativsystemer 11 Sanntids operativsystemer 12 Historien om Windows 12 Xerox Star 12 GEM, MacOS 13 Windows v.3, OS/2 14 Windows NT 15 Sikkerhetsproblemer 15 Historien om Linux 15 Linus Torvalds, Richard Stallman 17 Dugnadsånd 17 iii
Kommersiell distribusjon av Linux 18 Open Source vs. kommersiell utvikling 18 Linux 21 Windows 21 Kapittel 2 Oppbygging av maskinvaren 23 CPUen bestemmer 24 CPUens oppgaver 24 CPUens instruksjoner 25 CPUens interne organisering 26 Pipelining - overlappet instruksjonsutføring 27 Adresserbare celler 28 Minneceller 28 i/o-celler 28 Adresseres likt 28 Minne lagrer, i/o knytter til omverdenen 28 Bussene 29 Databussen 29 adressebussen 30 Kontrollbussen 31 En buss-syklus 31 Sammenheng mellom adresselinjer og minnestørrelse 32 Bussenes hastighet 34 Bruk av caching 34 Multiprosessorer 36 Tett eller løst koplet? 38 Når trenger vi multiprosessorer? 38 Blue Gene 39 Avbrudd 39 Telefonen ringer.. 41..mens du leser en bok 41 Timere 41 Direct Memory Access 42 Får være "sjef" en liten stund 42 Kapittel 3 Oppbyggingen av operativsystemet 47 Konstruksjonskriterier 47 iv
Ytelse, vedlikehold, korrekthet, standarder 47 Skillet mellom virkemåte og grensesnitt 48 Grunnfunksjoner i operativsystemet 49 Prosesshåndtering 49 Minnehåndtering 50 Filhåndtering 50 Utstyrshåndtering 51 (Meldingshåndtering) 53 Konstruksjonsstrategier 53 Inndeling i moduler - abstrakte datatyper 53 Objektorientering 54 Konfigurasjon av operativsystemet 55 Mikrokjerne 56 Bootstrap 57 Grensesnitt til operativsystemet 57 API og SPI 58 Programvareavbrudd - INT-instruksjonen 59 User mode / supervisor mode 60 Funksjonsgrensesnitt eller meldingsgrensesnitt? 61 Programmering i høynivåspråk 62 Kompilator 63 klassebibliotek 63 Kjøremiljø 64 Organisering av variabler og objekter 64 Stakkenogheapen 66 Java Virtual Machine 67 Skallet 68 Tegnbasert skall 68 Symbolbasert skall 69 Kapittel 4 Prosesser og tråder 73 Hva er en prosess? Hva er en tråd? 73 Kjøkkenet 73 En definisjon 74 Kan vi se en prosess eller en tråd? 74 Prosessens tilstand 75 Lagring og gjenskaping 75 Prosess-deskriptorer 76 Trådenes tilstand 76 Slektskap mellom prosesser 77 v
Administrasjon og styring av prosesser og tråder 78 Kontekst svitsj 78 Kjøreplanen 79 Avbruddshåndtering 80 Kjernetråder vs. brukertråder 82 Init-prosessen 84 Tråder i Java 84 Bakgrunnsartikkel: Hvorfor er java-tråder så nyttige? 87 utføring og beskyttelse 88 Portabilitet 89 Kapittel 5 Minnestyring 93 Behov og prinsipper 93 Hva mener vi med minne? 94 Beskyttelse og deling 94 Relokasjon 95 CPUens adresseringsmekanismer 96 Beskyttede registre 97 deling av minne med segmentregistre 99 Mulige tildelingsstrategier 100 Stiv tildeling 101 Fleksibel tildeling 102 Fragmentering 104 Virtuelt minne 104 Lagringshierarkiet 105 Paging 107 Segmentering 112 Minnebruk i et høynivåspråk 115 Minnestyring i Intel Pentium 116 Kapittel 6 Synkronisering I 121 Hva mener vi med synkronisering? 121 Samordning i tid 121 Vente/varsle i Java - 1.utkast 123 Tre typer av synkronisering 126 Reservasjon 126 Vente/varsle i Java - 2.utkast 130 Klient/tjener 131 vi
Bufret dataflyt 134 Synkronisering internt i operativsystemet 140 Kritiske mikroregioner 142 Kapittel 7 Synkronisering II 145 Hvorfor innebygget synkronisering? 145 Semaforer 147 Javas synkroniseringsmekanismer 148 Synchronized-ordet 148 wait/notify 150 Spesielle forhold ved monitorer 152 join 154 Sikker versjon av FIFO 156 Andre synkroniseringsvarianter 157 Mange-til-én 157 Én-til-mange - notifyall 158 Tidsgrenser 159 Vranglås 160 Eksempler på vranglås 160 Fire forutsetninger 161 Reservasjonsgrafer 163 Unngå vranglås? 165 Synkronisering i multiprosessorer 165 Kapittel 8 Permanent lagring 169 Behovet for permanent lagring 169 Hvordan ser det permanente lageret ut? 171 Navnesystem 171 Dataorganisering 171 Tilgangsmodell 172 Oppbyggingen av en disk 173 Geometri 174 Ytelse 176 Feilkorreksjon 176 Bruk av det permanente lageret 177 Java-kode for lesing av en tekstfil 178 Deling av filer 180 Fil-låsing 181 Atomiske operasjoner 182 vii
Filsystemets oppbygging 182 Lagringstjenesten 183 Administrasjon av plassen 183 Fysisk og logisk integritet 183 Utnytte lagringshierarkiet 184 Tilby et API til omgivelsene 184 Bufring av lese- og skriveoperasjoner 185 Katalogtjenesten 187 Hierarkiske kataloger 188 Metadata 189 Eksistenskontroll (livssykluskontroll) 189 inode-tabellen 190 Ytelse / caching 190 Kapittel 9 Distribusjon 195 Hvorfor distribusjon? 195 Datadeling 195 Ressursdugnad 197 Nettverksøkonomi 197 Feiltoleranse 199 Eksempel på distribuerte anvendelser 199 Fjernlagring 199 Programmerte tjenere 200 Fjernutføring av kommandoer 200 Tjenerklynger 200 Peer-to-peer 201 Hierarkiske kataloger 202 Spesielle problemer i distribuerte applikasjoner 204 Ingen felles tilstand 205 Uavhengig krasj og feil 205 Ingen felles klokke 206 Tilstandsløse tjenere 207 Operativsystemets rolle 208 Abstraksjon - single system image 208 Styring 210 Deling 212 Meldingsorientert synkronisering 213 Andre synkroniseringsvarianter 214 Multiprosessor-miljø 215 Bruk av Java for distribuert programmering 216 viii
Sockets 216 Stikkordsregister 225 ix
x