1 Inledning 1. Inledning 1.1. Allmänt om operativsystem Några inledande reflexioner om ordbruk, program- och maskinvara, motiv och metamotiv för operativsystem kommer här. Sist i kapitlet finns ett exempel på (vertikal) mikroprogrammering. 1.1.1. Maskin- och programvara Ett operativsystem består av den maskin- och programvara som bedöms behövas för alla aktiviteter i ett datorsystem. Det fungerar som en gränssnitt mellan "den nakna maskinen" och tillämpningarna. Tillämpningarna kan vara program som är skrivna av (slut)användarna i godtyckliga programspråk eller systemprogram som kompilatorer, interpretatorer, länkningsprogram, editorer, 'debuggers', databashanterare, fönsterhanterare och kommunikationssystem. I många arkitekturer, dock inte i RISC, finns maskininstruktioner eller underliggande interna operationer (mikro-subrutiner) som är inkorporerade på initiativ av operativsystemkonstruktörer. Även om man i huvudsak tänker sig operativsystemet som programvara så slirar ordbruket lite så att även dessa funktioner brukar sägas ingå i operativsystemet. I mikroprogrammerbara system är det ju också möjligt att placera delar av operativsystemet i mikrokod efteråt. Somliga räknar (dock) mikrokoden till maskinvaran. De funktioner som bedöms behövas för alla tillämpningar, oberoende av språk, sorteras alltså av konvention in under hatten operativsystem. 1.1.2. Varför studera operativsystem ? Följande anledningar, förutom den att operativsystem (OS) är ett väldefinierat delområde inom datorvetenskapen, kan anföras. i. I en del situationer kan befintliga system behöva modifieras. God kännedom om allmänna principer för området gör detta möjligt. ii. Ju mer bekant ett verktyg är, desto lättare är det att använda. iii. Operativsystemet är ett viktigt utvärderingskriterium av system inför tex inköp. iv. Slutligen stöter vi på begrepp och principer som abstraktioner, resurshanteringsmetoder och säkerhetsfrågor som kan ha mer allmängiltigt intresse. 1.1.3. Motiv för operativsystem Operativsystem finns av minst tre skäl; bekvämlighet, effektivitet, säkerhet: De kan tillsammans säga utgöra grunden för pålitlig ('dependable') datoriserad bearbetning. i. De abstraktioner (abstrakta datatyper, 'extended type objects') som ett operativsystem erbjuder gör användandet av datorsystemet enklare än om de inte fanns. ii. Ett operativsystem ger i allmänhet också ett bättre maskinutnyttjande än en dator utan operativsystem skulle ge. iii. Slutligen finns säkerhetsfrågor som hanteras bäst av ett operativsystem. 1.1.4. Ordbruk Uttrycket operativsystemet A kan avse två förhållanden. Somliga avser det gränssnitt som systemet erbjuder i form av synliga operationer (funktioner) uttryckta i dessas syntax (≈ utseende) och semantik (≈ betydelse); andra tänker sig en konkret implementering av operationerna. Eftersom samma funktioner kan framställas på olika sätt så kan fler implementeringar svara mot en specifikation. Det finns tex många olika konkreta realiseringar av operativsystemet Unix. Den exakta framställningen kan vara avgörande tex för systemets effektivitet även om den normalt inte är synlig utåt. 2 Inledning 1.2. Externa attribut Det yttre synsättet på ett operativsystem avser de grundläggande abstraktioner som ett system realiserar och hur dessa kan användas. 1.2.1. Abstraktioner I skenet av de huvudsakliga ingredienserna i ett datorsystem; processorer (cpu-er), minnen, sekundärminnen och kommunikationskanaler, är det naturligt att de abstraktioner som förekommer är de som utgår från dessa: Vi talar om i. aktiva program med tillhörande data som processer, ii. delar av minnet som segment eller abstrakta datatyper, iii. långtidslagrade enheter på sekundärminnen som filer och iv. sekvenser av in/ut-symboler som 'streams'. Abstraktionerna brukar delas in i subjekt och objekt. Subjekten utgörs av de aktiva delarna i systemet, tex processer, funktioner och instruktioner, medan objekten är de element som subjekten opererar på, tex filer, terminaler och kanaler. Alla subjekt betraktas samtidigt som objekt eftersom subjekt själva kan vara föremål för operationer som utförs av andra subjekt. Ibland stöter man på benämningen virtuell maskin. Begreppet har två snarlika tolkningar. Den ena (allmänna) består i att definiera begreppet som "den nakna maskinen" tillsammans med de programmerade objekt som ett operativsystem implementerar. Den andra (från IBM) är det förhållande att ett 'control program' ('virtual machine monitor') endast åstadkommer en simulerad mångfald av "nakna maskiner". Tanken med detta är (var) att kunna köra flera operativsystem samtidigt på varsin virtuell maskin ovanpå en reell maskin; tex vid övergång från ett operativsystem till ett nytt. Den nödvändiga tidsmultiplexeringen som ligger som bas för detta är också en grundfunktion i de flesta operativsystem. Lite modernare namn på komponenter i samma anda är 'microkernel' och 'hardware abstraction layer'. 1.2.2. Användning Utifrån sett används operativsystem på två sätt: Via anrop (systemanrop) från program/processer eller via interaktiva kommandon. Anropen brukar vara några fler än kommandona, men kommandona brukar alltid ha en ekvivalent som systemanrop. Några olika klasser av utförbara funktioner/tjänster (metaoperationer, yttre operationer) framgår av följande tabell i ii iii iv v vi vii Klass processhantering minneshantering filhantering in-- och utmatning kommunikation tidshantering administration Exempel starta processen B när A nått till punkt P tilldela mer minne till en datastruktur läs från fil till area i minnet läs från tangentbord skicka ett meddelande från dator A till B starta en process kl 12:00 ta 'back-up' av filsystemet I många tillämpningar når man dessa funktioner indirekt via bibliotek, 'macros' eller systemprogram tex editorer, 'shell', kompilatorer, interpretatorer, fönstersystem och databassytem. Ett operativsystem tjänstgör alltså som ett gränssnitt mellan maskinvaran och tillämpningen vare sig den senare är ett systemprogram eller ett användarprogram. Exempel: a. Ett XcSc i emacs tolkas av detta systemprogram som i sin tur gör ett anrop till operativ- systemets filhanteringsdel, b. ett anrop print i ett C-program går till en bibliotektsrutin som i sin tur anropar operativsystemets i/o-del, c. en accept-sats i Ada kompileras till systemanrop för processkommunikation, et cetera. 3 Inledning 1.3. Funktionalitet Ett operativsystem kan beskrivas/definieras av de funktioner det antas utföra, vad det är tänkt att användas för och i termer av den historiska utecklingen. 1.3.1. Grundfunktioner Dessa kan formuleras i följande kravlista. Operativsystemet ska: i. Skapa, övervaka och ta bort processer (≈ aktiva program). ii. Tilldela och avallokera resurser; fysiska tex primärminne och logiska tex filer. iii. Ge skydd, säkerhet och tillförlitlighet. iv. Ombesörja datautbyte mellan olika program eller mellan program och användare. v. Ta hand om avbrott och 'traps'; kallas ibland 'exceptions'. Operativsystemet aktiveras endast via avbrott och 'traps'. - Avbrott är de asynkrona händelser som uppstår då en yttre enhet vill påkalla uppmärksamhet av processorn, då den yttre enheten har fullgjort sin uppgift och alltså är redo för en ny transaktion, eller av en 'timer', som kan ses som en yttre enhet med en enda uppgift: att generera avbrott med fix frekvens. - Ett 'trap' som är en relativt processorn synkron händelse kan endera skapas av en 'trap'instruktion (kallas ibland 'supervisor call', svc) eller av ett fel; försök att exekvera en privilegierad instruktion i 'user state', försök att dividera med 0, försök att skriva i skyddat minne, mm. Olika processorer har mycket olika "felvillkor". Systemanrop slutar i en 'trap'instruktion oberoende av om de har en anpassning till omvärlden med hjälp av 'macros', biblioteksrutiner eller används direkt. Några av de vanligaste "tillståndsövergångarna" med avbrott och 'traps' visas i figur 1.1. Övergångstyper 1. ist 2. est 3. iax 4. ist 5. iax 6. iax 7. ist A = användareprocess F 4 1 6 A 2 S 7 3 I/O 5 OBS. "Returer" visas inte S = service (diverse) F = felhanterare I/O = in/utmatere Normalt i OS En överggång kan vara - explicit (e) eller implicit (i) - synkron (s) eller asynkron (a) - avbrott (x) eller 'trap' (t) Figur 1.1 Avbrott och 'traps' För den nogranna/e: En sk kallstart är den tredje orsaken till att operativsystemet aktiveras. Den vidtas när systemet initialstartas, efter att ha varit frånslaget. 'Software interrupts' är programavbrott orsakade av os-rutiner, som överför kontrollen till platser som kan anges via systemanrop; tex vid inmatning av Cc. 1.3.2. Typer av operativsystem En klassificering av operativsystem kan utgå från olika grunder. i. Tänkt användningsområde. Realtidsoperativsystem. Dessa används bla för processtyrning, datainsamling och experimentstyrning, sk 'hard real time', och för databasutvinning och i transaktionssystem, sk 'soft real time'. Den viktiga aspekten är här att systemen och tillämpningarna växelverkar med en omgivning som består av yttre processer med givna tidskonstanter som kan vara korta (millisekunder) eller långa (år) och att svarstiderna från program via operativsystemet måste uppfylla de externa krav som följer av dessa för att systemet överhuvudtaget ska fungera. 4 Inledning 'Job shop' system. Den andra huvudtypen innefattar satsvisbearbetande system och interaktiva en- eller fleranvändarsystem. Här är rikligheten på verktyg viktig. Hastigheten är en smakfrågan; inte en absolut nödvändighet för korrekt systembeteende. De flesta system av denna typ är idag interaktiva (visavi människor), men för vissa syften kan sk satsvisbearbetande system fortfarande vara funktionellt rimliga; tex utskrift av kontosaldon en gång per månad. ii. Given maskin- och programkonfiguration. Distribuerade. Flera processorer eller datorer sammankopplas via kommunikationsmedier, tex bussar, lokala nät eller 'wide area networks', och det finns ett för alla maskiner genemsamt operativsystem som ger en extern illusion av ett enda snabbt och tillförlitligt datorsystem i vilket användarna oberoende av var de sitter har tillgång till alla resurser i systemet oavsett plats. Centraliserade. All kontroll och alla data samlade på en maskin bestående av processor, minne, skivminne, kanaler och yttre enheter. iii. Funktionell ram. Interaktiva. Program växelverkar med användaren under körningen. 'Embedded'. Växelverkan är (i huvudsak) riktad mot fysikaliska enheter; bilar, fabriker, osv. 'Batch'. Satsvis bearbetning i vilken ingen interaktion förekommer. Ett exempel på ett distribuerat, 'embedded' realtidssystem är telenätets växlar. Ett exempel på ett interaktivt, centraliserat 'job shop' system är en persondator. 1.3.3. Historik Några viktiga historiska hörnpelare (med mycket grova tidsangivelser) är följande. - Binärkodning och binärladdare, ca 1945. Datorerna kördes utan något som helst understöd i programvara. Programmering sker i begynnelsen med handgripliga kopplingar. Man kan hävda att detta användningssätt var interaktivt. - 'Assemblers', i/o program och 'debuggers', ca 1950. Symboliska maskinspråk, allmänt tillgängliga drivrutiner för in- och utmatning och felsökningshjälpmedel gör sin entré. - Bibliotek, "högnivåspråk" (tex Fortran), separatkompilering, relokering och länkning, ca 1955. Speciellt bestod dåtidens bibliotek av rutiner för beräkning av matematiska funktioner. - Satsvisbearbetande ('batch') system, ca 1957. Här släpps den direkta interaktionen mellan användaren och datorn. Programmerare och operatörer är ej längre samma individer. Jobben definieras av program och data som stansas på hålkort och som läses in och körs av operativsystemet. Kompileringslistningar och beräknade resultat presenteras vanligen i skriven form på radskrivare. - Kövisbearbetande system ('spooling'), ca 1960. En generalisering av satsvisbearbetningen som använder avancerad buffring på skivminnen av sekventiella jobb. Spool = Simultaneous peripheral operations on line. DMA-kanaler och goda avbrottsystem gav förutsättningarna. - Multiprogrammerade 'batch' eller 'spooling' system (OS/360), ca 1962 (fördröjt). Samtidig körning av flera jobb ökar maskinutnyttjandet. Samtidigheten innebär att ett jobb som väntar på tex in/utmatning tillfälligtvis åsidoläggs till dess transaktionen är klar. Under väntetiden körs ett annat jobb. Enkla former av minnesskydd utvecklas. - Tidsdelande system ('time sharing') och realtid ('real time'), ca 1962. Tidsmultiplexing av resurser, inkl cpu, är naturligtvis en central teknik, men det intressanta var nog i alla fall att interaktivitet återinfördes (på högre nivå). 5 Inledning Ett exempel: Tidsdelade, interaktiva Basic-system. De var mycket populära under en tid. Ett annat: Realtidsystem för styrning av ett oljeraffinaderi. - Multics 1965 -- 1972. OS-områdets mest inflytelserika system/projekt. Inte någon stor kommersiell framgång, men frågan är om något system genererat så många nya idéer som detta, tex hierarkiskt filsystem, 'shell'-programmering, processhantering, segmentering, ringskydd, implementering i högnivåspråk, mm. I allt väsentligt ett tidsdelat system. - Unix, 1969 --. En från början "strippad" variant av Multics för en interaktiv enanvändarmiljö (på en PDP-7). Fick stor spridning bla pga att källkoden distribuerades nästan gratis till universitet. - Flerprocessorsystem 1970 -- . Flera cpu-er delar (refererar samma) minne. Tanken är att åstadkomma bättre prestanda och större tillförlitlighet. Experiment med sk vektormaskiner för numeriska beräkningar; Σi aibi, så att för varje produkt det finns en ALU. - Datornät; Arpa 1965, Ethernet 1976. Kommunikation (mha filer) över stora eller små avstånd är drivkraften. Elektronisk post (email) var inte ett av de tänkta tillämpningarna vid specifikationen av Arpanätet. - Distribuerade system, början av 80-talet. Systemen utnyttjar datornät men uppfattas utifrån mha operativsystemet som en enhet; 'virtual uniprocessor'. Uppdelningen av exekvering och lagring är helt transparant för användaren och sköts av ett sk distribuerat opertativsystem. Ett stort forskningsområde idag. I de flesta kommersiella systemen delas bara filsystemet; man får ett sk 'network operating system'. - Arbetsstationer och persondatorer, början av 80-talet, med fönstersystem och många andra 'utilities'. Den första arbetsstationen Xerox Alto från 1974 blev inte så spridd. - Windows NT, 1993, OSF/DCE, ... . Idag rör forskningen inom området bland annat säkerhet, 'non uniform memory mangement', 'memory consistency', 'file caching', 'remote procedure calls', mm. Det brukar ta så där 5 - 10 år innan en del bra idéer når kommersiell status. Utvecklingen inom tidsdelade system, datornät och processorarkitekturer har samverkat och samverkar för att ge distribuerade system, som i sin tur accentuerar behov av nya säkerhetsfunktioner och realtidsegenskaper som tex predikterbarhet. 1.4. Interna attribut En process står för ett programs beteende, dvs är en aktivitet. Ett program är en text; en statisk enhet. I ett system finns vanligen fler processer samtidigt, dvs det är fler som börjat men (ännu) inte avslutats. 1.4.1. Processtillstånd Processer har olika tillstånd under sin livstid. Följande är de mest basala; i en del system delas de upp i underordnade tillstånd. Benämning E: Exekverande, 'running',' executing' R: Redo, 'ready,' 'scheduled' Karakteristika Processen körs på någon cpu Processen skulle kunna köras om tillgång till cpu fanns (men alla processorer är upptagna av andra exekverande processer) 6 Inledning B: Blockerad, 'blocked', 'suspended', Processen kan inte köra därför att den väntar på någon resurs (cpu:n 'waiting' undantagen) som för tillfället inte finns tillgänglig, tex en upptagen i/o enhet, en synkroniseringssignal, utrymme i minnet eller en fil som någon annan process håller på att skriva på. Detta tillstånd brukar delas upp i deltillstånd; ett per vänteorsak. F: Fördröjd, 'delayed' Processen är "inaktiverad" i väntan på ett visst klockslag. Tillståndet kan i någon mån ses som en variant av B, men särbehandlas av praktiska skäl i många system 1.4.2. Tillståndsövergångar Under en process' livscykel förekommer tillståndsövergångar: Övergång och benämning R→E 'dispatching' E→R 'preemption' E→B 'suspension' B→R Beskrivning Operativsystemet kan orsaka denna övergång då en processor blir ledig pga att en exekverande process blir klar eller blockeras Operativsystemet kan göra denna då en process med högre prioritet än den exekverande anländer till R från B eller då en process' sk tidskvantum gått till ända och den återplaceras i tillstånd R Orsakas av den exekverande processen själv då denna begär en resurs, tid eller synkroniseringssignal som den för tillfället inte kan få Operativsystemet gör denna då väntevillkoret inte längre föreligger 'scheduling' Tillståndsövergångarna initieras alltid av avbrott/'traps' och effektueras av den modul i operativsystemet som kallas kärnan ('kernel', 'nucleus'). Sista instruktionen i varje program är (sista } i ett C-program eller end. i Pascal kompileras till) en trap-instuktion ('process end'). Tidstyrd 'preemption' realiseras via en 'timer', som genererar avbrott med fix frekvens, tex var 10:e ms. Figur 1.2 visar i diagramform tillstånden och tillståndsövergångarna. 2 1 6 R E 3 4 5 B Övergångarna är 1. Processen anländer 2. Processen körs igång ('dispatching') 3. Processen uppehålls tillfälligtvis ('preemption') 4. Processn blockeras ('suspension'); självorsakat 5. Processen schemaläggs ('scheduling') 6. Processen avslutas; självorsakat Figur 1.2 Processtillstånd(sövergångar) Tillstånden är R = redo ('ready') E = exekverande ('running') B = blockerat ('waiting') 7 Inledning 1.4.3. Egenskaper Ett operativsystem karakteriseras (bland annat) av följande. - Parallellism ('concurrency'). Detta betyder att det finns fler processer som påbörjat men inte avslutat sin exekvering och utgör en logisk beskrivning eller implementering av den verklighet som ett datorsystem simulerar. Ett parallellt system av sekventiella processer (de flesta i branschen kallar detta lite oriktigt för "parallella processer": processerna i sig är ju inte parallella!) uppstår. - Automatisk, dvs operativsystemkontrollerad, resurshantering. En resurs kan vara: a. Återanvändbar eller konsumerbar. Exempel: Processor respektive synkroniseringssignal. b. Exklusivt kontrollerad eller delbar. Exempel: Skrivare respektive minne som bara läses (tex reentrant procedur). c. Fysisk (maskinvara) eller logisk (programmerad). Exempel: Skivmimne respektive fil och procsessor respektive process. Varje resurs delas in i enheter (resursen minne består tex av enheter sk 'block'). Resurstypen påverkar operativsystemets hantering av resursen. - Delning. Betyder att ett objekt ingår i fler subjekt. Kan vara endera sann delning av resurs som inte är exklusivt kontrollerbar eller realiseras via tidsmultiplexering av resursen. - Multiplexering implementeras endera via naturlig delning eller via 'preemption'. Några tekniker är a. 'Multi programming'; cpu och minne delas mellan fler processer. b. 'Multi access'; hela datorsystemet delas av flera (interaktiva) användare. c. 'Multi tasking'; cpu delas mellan fler samtidiga processer. d. 'Multi processing' står för att datorsystemet har flera (hårt kopplade) cpu-er ! En viss begreppsförvirring råder när det gäller dessa egenskaper, så se upp när du läser andra böcker, manualer osv. - Interaktivitet. En egenskap som tillfredställer systemutvecklare (och andra). Kan vara avlägsen, 'remote', via tex datornät. - Långtidslagring via objekthanterare, filsystem eller databassystem. - Kommunikation i (intra) och mellan (inter) system. Både vad avser kommunikation processer emellan och vad avser kommunikation mellan processer och användare. - Säkerhet mot avsiktiga intrång eller oavsiktliga felaktigheter. Det övergripande målet är att konstruera pålitliga ('dependable') system. Delområden är tillförlitlighet, feltolerans, skydd, redundans, tillgänglighet, bekvämlighet, snabbhet, mfl. 1.4.4.'Policy/mechanism' Man brukar dela upp funktionerna i ett operativsystem på detta sätt. Mekanism. Ger svar på frågan 'Hur?' Funktionerna bör vara snabba, fixa, säkra och antas användas ofta (≈ mikro - millisekundsintervall). 'Policy'. Ger svar på frågan 'Vad?'. Kan variera från stund till annan, används sällan (sek) och är inte lika säkerhetskänsliga. 8 Inledning Anledningen till uppdelningen är att man vill åstadkomma abstraherande förenklingar både när man beskriver systemet och när man konstruerar det. Policyn definierar de situationsanpassade aspekterna, medan mekanismerna kan betraktas som en ren utvidgning av en "naken maskin". Mekanismer har ofta realiserats i mikroprogramform eller tom i extra maskinvara. Gränsen mellan operativsystemet och maskinvaran är, som sagts, flytande. 1.4.5. Nödvändig maskinvara För att rimliga, dvs bekväma, skyddade och effektiva, operativsystem ska kunna byggas bör de mest centrala mekanismerna finnas i maskinvara. Vanligt är att följande ingår. - Avbrottshantering och 'traps', inklusive 'supervisor call'. - Realtidsklocka. Avbryter med fix frekvens tex var 10:e ms. - Privilegierade (skyddade) instruktioner; tex för i/o och HALT. - Minnesskydd mellan program inkl operativsystemet som samtidigt finns i minnet. Processorer ser dock mycket olika ut i dessa avseenden. En del (RISC) innehåller ett minimun av funktioner, andra (CISC) har omfattande funktioner; en del system är så omfattande att operativsystem- kärnan, dvs mekanismer för process-, minnes- och skyddshantering, kan sägas finnas i maskinvara eller i mikroprogram. Eftersom en del processorer som är/var vanliga i PC helt saknade tex minnesskydd i maskinvara så uppstod plågan med virus och maskar, så snart dessa PC inkorporerades i de stora system de från början inte var tänkta att användas i. Anledningen var att ingen ville implementera minnesskydd i programvara; det skulle bli för ineffektivt. 1.4.6. Skiktad arkitektur. Abstraktionsnivåer Ett sätt att hantera komplexiteten i ett operativsystem är att specificera funktionerna hierarkiskt ordnade och att bygga eller analysera skikten nästan oberoende av varandra: Ju mer fundamental en funktion är desto mer åtkomlig måste den vara. Exempel: PSOS, Provably Secure Operating System. Skikten 1, 2 och 3 och 5, 6, och 7 "syns ej" för användaren av operativsystemet. Skikten 0, 1, 2, 3, och 4 är maskinvara. 0. 'Capabilities'. Ett bassätt att adressera. 1. Fysiskt minne och register. 2. Avbrott och 'traps'. 3. Realtidsklocka. 4. Maskininstruktioner. 5. Primitiv i/o. 6. Systemprocesser. 7. Sidindelning av primärminnet. 8. Virtuellt minne. 9. Abstrakta datatyper. 10. Katalogsystem för filer. 11. Användarobjekt. 12. Användarprocesser. 13. Procedurer. 14. Användar i/o. 15. Användares omgivningar och namn. 16. Kommandotolk ('shell'). En enklare skiktning utgörs av i. Maskinvara. ii. Processhantering. iii. Minneshantering. iv. In- och utmatning. v. Filhantering. Många termer och begrepp är (kanske)obekanta här. De kommer att få sina förklaringar under kursens gång. Dessutom är det ju bara ett exempel. 9 Inledning Denna senare skiktning är dock mindre lämpad för en operativsystemkonstruktör, eftersom tex skikten ii. och iii. karakteriseras av inre ömsesidiga beroenden: En exekverande process måste tex ha tillgång till primärminne, medan minnet hanteras av en process. Det är just en sådan cirkularitet man vill undvika med en mer ändamålsenlig skiktindelning (om det går). Skiktning och abstrakta datatyper är inte samma sak. En abstrakt datatyp kan innehålla flera skikt och olika typers skikt kan interfolieras. Ett system är sällan renodlat hierarkiskt. Ett tredje framställningssätt visas i figur 1.3. A n v ä n d a r e A n v ä d a r p r o g r a m S y s t e m p r o g r a m O P E R A T I V S Y S T E M Filer O Processer S - i/o-enheter Minnen k ä r n a Avbrottsoch 'trap'hantering Servicerutiner Aktuator ('Dispatcher') M a s k i n v. Minne Processor(er) Port Disk Nät Nät Figuren visar strukturen av ett datorsystem och (några av) anropsvägarna. En aktiv enhet (subjekt) i ett skikt behandlas av underliggande skikt som ett passivt objekt (en datastruktur) och som en tjänst från överliggande. Figur 1.3 Operativsystemöversikt 1.4.7. Systemgenerering De flesta operativsystem är konstruerade för att kunna användas till olika maskinkonfigurationer; olika antal processorer, mer eller mindre minne, olika yttre enheter och nätanslutningar mm. Det system som levereras (vanligen på disk eller band) måste anpassas för den aktuella konfigurationen. Vanligen sker detta utifrån kompilerade objektmoduler via ett speciellt program; systemgeneratorn (sysgen) . Detta tillåter maskinoperatören att ge relevanta parametervärden, som lagras i tabeller i systemet. Systemgenereringen sker vanligen endast vid leverens och då maskinkonfigurationen ändras. Då genereringen är klar finns ett körbart (länkat och initierat) operativsystem lagrat på disk vi kan bortse från programmet sysgen. För att starta operativsystemet, dvs ladda in [delar av] detta till primärminnet och överföra kontrollen till dess startpunkt, sker en sms 'boot strap'-process. Följande sekvens är typisk. M a s k i n v. 10 Inledning När maskinen slås till utförs automatiskt ett rom-lagrat [mikro]program (en elementär drivrutin, kanske 100 bytes stort) som läser in ett ladd-program från en fix plats på disken ('boot sector'). Detta program läser i sin tur in ett program som läser in operativsystemet. Samma process används för att köra sysgen. 'Booting' kan bli nödvändigt om systemet "hänger sig", vilket kan ske pga att det naturligtvis som alla andra programsystem innehåller felaktigheter (som inte kan åtgärdas av systemet utan yttre ingrepp). Med hjälp av operativsystemet skapas alla andra systemprogram som kompilatorer, editorer etc och sedan användarnas egna program. 1.5. Vertikal mikroprogrammering; HP21MX Minidatorn 21MX från Hewlett-Packard lanserades i mitten av 70-talet. Den exogena arkitekturen var mycket vanlig för sin tid. Intressantare var att denna maskin var en av de få som tillät dynamisk mikroprogrammering från användarnivå; leverantören tillochmed uppmuntrade detta. 1.5.1. Styrenheten &c Primärminnet. 16 bitars maskinord används genomgående. Adresser är i ursprungsutförandet 16 bitar, där en bit används för att indikera indirekt adressering, varför högst 32K kunde adresseras. I senare versioner utökades den fysiska adressrymden till 1M ord via en MMU. Enkelt minnesskdd i form av ett 'fence register' användes. Aritmetisk/logisk enhet. De vanliga fixpunktsoperatioerna fanns. Flyttalsoperationer implementeras i mikroprogram. A- och B- registren är (de primära) ackumulatorerna; dataregistren. In/utsystemet innehåller två oberoende DMA-kanaler och samverkar med avbrottssystemet. Styrenheten är nästan fullständigt genomgående mikroprogrammerad. Vissa operationer utförs visserligen direkt av maskinvaran, med de initieras alltid via mikroprogram. Maskinen är byggd runt en 16 bitars systembuss; S-bussen. En T- och en i/o- buss ingår dessutom. IR är instruktionsregistret; 16 bitar. Mikroprogrammet för hämtfasen lagrar aktuell instruktion i detta register genom att ladda minnesadressregistret MAR, eller M i HP:S terminologi, från programräknaren P och initiera en läsoperation i primärminnet. Minnesdata hamnar i minnesdataregistret MDR, eller T ('transfer') i HP:s terminologi. Operationskoden används för att (indirekt, visas inte i figuren) ta fram adressen till mikroprogrammet för aktuell instruktion. Efter det att en instruktion exekverats utförs en returinstruktion i mikroprogrammet vars innebörd är att sätta mikroprogramräknaren i CSAR till hämtfasens startadress 0. Mikroinstruktionerna läses ut från styrminnet till dataregistret CSDR som avkodas för att generera styrsignaler till de grindar som i figuren illustreras med pilar. (CS = 'control store' = mikroprogramminnet.) Ett speciellt ROM som innehåller ett 'bootstrap' program exekveras då maskinen startas (från frontpanelen). Registerfilen innehåller 12 stycken 'scratch registers' S1 - S12 som mikroprogrammen kan använda. X och Y är indexregister som kan användas av aseemblerinstruktioner. Registret S är kopplat direkt till maskinens frontpanel; kan användas som "i/o". S-bussen och en 'latch' L föder ALU:n med data. Resultatet kan skiftas eller roteras (artimetiskt eller logiskt i en 'shifter') innan det lagras i något register. Till ALU:n är kopplat ett 'extend' (E) och ett 'overflow' (O) register, som fungerar på vanligt sätt. 11 Inledning CIR, 'central interrupt register' levererar kanalnumret för avbrytande enhet. Styrminnet, mikroprogramminnet, består ev en ROM-del där mikrokoden för hämt- avbrottsoch utförandefaserna för de av arkitekturen definierade maskininstruktionerna återfinns. Resterade del kan installeras som ROM eller som skrivbart minne (WCS, 'writable control store') för användarens egna mikrogrogram. WCS kan ändras dynamiskt under programkontroll. Registret SR används för att lagra återhoppsadressen vid subrutinhopp i mikroprogram; en nivås subprogram är möjliga med denna mekanism. 1.5.2. Mikroprogrammering Mikroinstruktionerna är av en av fyra olika typer. Store-fältet anger var data ska lagras från någon av bussarna. S-buss fältet anger varifrån data ska hämtas till S-bussen. Maskinen är som synes verikalt mikroprogrammerad med kort ordlängd (24 bitar) och höggradigt kodade format på mikroinstruktionerna. Figur 1.4 visar "mikroarkitekturen" i form av en för våra ändamål lämplig abtraktionsnivå. Här kommer några exempel på mikroprogram i mikroassemblerform. De är lite förenklade. Hämtfasen 0 1 2 read read inc jtab pnm ir m p t adr Instruktion vid adressen 0 innebär följande. P-registrets värde för över till S-bussen, körs genom alu:n där det ökas med ett (inc) för att återlagras i P och i M (pnm = P and M). Sist i denna instruktion initieras en läsning i primärminnet; instruktionsläsning. När läsningen är klar överförs (via rad 1) innehållet i T-registret via S-bussen till IR. Sista instruktionen i hämtfasen innebär att adressdelen (adr) från instruktionen i IR-registret överförs till minnesadressregistret M och en ny läsning startas; en läsning som avser instruktionens operand. jtab innebär att operationskoden i IR avkodas och att mikroprogramräknaren sätts till det värde som svarar mot operationens utförandefas, tex LDA:s. Kommentar. I det verkliga programmet sker också en test på huruvida det föreligger ett avbrott. I så fall överförs kontrollen till den sk avbrottsfasen, som kontrollerar avbrottsorsaken (kanalnumret för avbrytande enhet) och överför kontrollen till motsvarande avbrottshanterare, som normalt finns som en del av operativsystemet, men som naturligtvis alternativt kan mikroprogrammeras i denna maskin. Utförandefas för LDA (load accumulator, A) 144 rtn pass a t Instruktionen innebär kort och gott att det värde som pekas ut av instruktionens adressdel kopieras över till A-registret: Det värde som just påbörjades läsas i slutet av hämtfasen finns nu tillgängligt i T-registret och kan utan modifikation (pass) överföras till A-registret via Sbussen. RTN betyder returhopp; eftersom ingen tidigare subrutinnivå i detta fall finns registrerad innebär detta att mikroprogramräknare nollställs och kontrollen återförs till hämtfasen (för nästa instruktion). 12 Inledning Utförandefas för memory swap sw read mpck read mpck wrte wrte rtn inc pass pass inc pass pass pass inc pass m s1 m s2 tab m tab a m tab b m tab s1 a s2 Denna instruktion fanns inte i standardutförandet av maskinen. Den representerar alltså vad man skulle kunna kalla ett mikroprogram på användarnivå. Programmet byter ut innehållet i två minnesceller vars adresser finns i A- respektive B-registret. S1 och S2 används som temorärer. Operationen mpck betyder att kontroll sker så att inte minnesskyddat område ändras. wrte står naturligvis för en skrivoperation i minnet. tab överför innehållet i antingen A, B eller T till S-bussen beroende på "styrbitarna" aaf (= 1 ger A) och baf (= 1 ger B). Adressen för detta program definieras (via jtab) av vald operationskod. Ett fjärde exempel påvisar hur villkorliga hopp kan användas. Utförandefas för block move bmv jmp read loop cndx read wrte jmp out cndx rtn pass tbz inc pass inc pass inc inc pass inc inc tbz inc s1 m s2 m s3 m s2 t b s1 rjs p a out p tab b tab s2 s2 s3 b s1 loop p Vid anrop antas A-registret innehålla negativa värdet av det antal ord som ska flyttas, register B innehåller blockadresen varifrån ord ska flyttas och destinationsadressen anges/pekas ut av det ord vars adress finns i P-registret (i ordet efter "anropande" maskininstruktion, alltså). 1.5.3. Mikroprogrammerbarhet Följande programvara finns för utveckling av egna mikroprogram. - En assembler så att mikrokod kan skrivas på symboliskt format enligt ovan. - En 'debug editor' för uttestning av mikroprogram. - En operativsystemkompatibel 'driver' för att programmera WCS; mikrokod som är översatt till binär form och lagrad i en 'array' i primärminnet överförs till WCS. Det finns ett antal "lediga operationskoder" som svarar mot förutbestämda platser i 'control store' för att användas på maskininstruktionsnivå. Tyvärr, eller naturligt nog, känner inte den vanliga assemblern till dessa, så anrop till mikrokod måste ske via binärkodade maskininstruktioner. Mikroinstruktionstiden är (ungefär) hälften av minnets cykeltid; ett förhållande som gör att mikroprogrammeraren måste ta hänsyn till 'timing', tex då data skrivs/läses till/från primärminnet. 13 Inledning 15 0 0 I/O kort DMA Primärminne ei, mm MDR (T) CIR P M s k y d d 32K MAR (M) 4 st loader ROMs C I/O b u s s F r o n t p a n e l 4'*256 bits S-buss IR S1 S2 . . S12 X Y S P SR 12 0 CSAR Klocka, Öka med 1 Mikroprogram minne A L B AAF BAF ALU Statusbitar CSDR 24*4K bitar 23 Shifter 0 Avkodare Styrsignaler T-buss är en förkortning av data and styrsignal Mikroinstruktionsformat Typ 1 = alu operationer från s-buss till register Typ 3 = villkorliga hopp med div. specialare 23 1 2 3 4 Typ 2 = lagrar konstanter Typ 4 = hopp/sub-hopp 0 op imm. op cond jmp jmp alu s-bus immediate operand condition F operand operand store store special special special modif Mikroassemblerinstruktionsformat 1 2 3 4 label label label label op IMM JMP/JSB JMP special special CNDX modif alu modif condition store store jmp sense s-bus operand operand operand comments comments comments comments O E 14 Inledning Repetition 1. Varför studera OS ? 1. Möjliggöra modifiering 2. Viktigt för utvärdering 3. Allmänna begrepp 4. OS är ett eget område (bland ca 10 inom CS) 2. Varför OS ? 1. Enklare att använda 2. Effektivare utnyttjande 3. Säkerhet 3. Abstraktioner 1. Processer 2. Segment 3. Filer 4. Kanaler 4. Användning 1. Systemanrop (från program) 2. Kommandon (från terminal) 5. Klasser 1.Filhantering 2. In- och utmatning 3. Processhantering 4. Minneshantering och 5. Kommunikation 6. Tidshantering 7. Administration 6. Kravspecifikation OS ska 1. Skapa, övervaka och ta bort processer 2. Tilldela och frånta objekt 3. Ge skydd och säkerhet 4. Ombesörja datautbyte 5. Ta hand aom avbrott och 'traps' 7. Avbrott vs 'traps' Asynkront vs synkront Avbrott: a. Yttre enheter b. 'Timer' 'Traps': a. Instruktion (svc) b. Fel ENDA SÄTTEN ATT 'AKTIVERA' OS tex via en sk avbrottsvektor 8. Typer av OS 1. Realtid a. hrt; processtyrning b. srt; transaktionssystem 2. 'Job shop' a. satsvis b. interaktiva Kan vara: centraliserade eller distribuerade 9. Historik (1945 - ) 1. Inga hjälpmedel 2. 'Assemblers', 'debuggers', 'drivers' 3. Högnivåspråk, bibliotek och länkning 4. Satsvis ('batch') 5. Kövis ('spooling') 6. Multiprogrammering 7. Tidsdelning och realtid 8. Flerprocessorsystem 9. Dätornät 10. Arbetsstationer (och PC) 11. Distribuerade system 12. Multimedia 10. Processer 1. Tillstånd - Exekverande (E) - Redo (R) - Blockerade (B), fördröjda (F) 2. Övergångar - R -> E; 'dispatch' - E -> R, 'preempt' - E -> B, 'suspend' - B - > R, 'schedule' 11. OS-egenskaper 1. Parallellism 2. Automatisk resurshantering 3. Delning 4. Multiplexering 5. Långtidslagring 6. Kommunikation 7. Säkerhet 12. Viktig maskinvara 1. Avbrottsystem 2. 'Timer' 3. Minnesskydd 4. Privilegierade instruktioner 5. Nätverksfunktioner 13. Mikroprogrammering