Operativsystem

I början av kursen har vi konstaterat att datorkomponenter är flera och när man ser detaljer på var och en så ser vi att dem i sin tur består av ännu flera komponenter. Hur hanteras så många komponenter och hur kommunicerar dem med varandra och vi med dem?

Datorns hårdvara hanteras via små program som kallas ” drivrutiner”. När du installerar en ny maskinvara måste du installera dess drivrutiner. Förutom drivrutiner använder vi applikationer för olika ändamål exempelvis Microsoft Word. Men drivrutiner och applikationer ensamma kan inte avgöra hantering av datorns hårdvara, det krävs ett större program som kallas operativsystem.

Ett operativsystem fungerar som ett gränssnitt mellan användare/program och datorns hårdvara. Med andra ord kan operativsystemet betraktas som förmedlare mellan användare och datorns hårdvara.

Bild 1: Interface eller gränssnitt

Då kan vi säga att ett operativsystem består av ett antal program som ser till att datorsystemets olika delar fungerar tillsammans. Operativsystemet innehåller också många gemensamma drivrutiner och resurser som andra program kan anropa och använda sig av. Operativsystemet hanterar bland annat sex viktiga funktioner:

Bild 2: Ett operativsystem består av flera program
  • Boot-process
  • Hanteringen av tillämpningsprogramvara
  • Minneshanteringen
  • Hanteringen av input och output
  • Processhantering
  • Användargränssnittet

Boot-processen

Det första som händer när du startar en dator är att maskinens komponenter identifieras och väckas till liv en efter den andra, till exempel processor, minne, hårddisk, grafikkort och andra enheter. Boot-processen kan sammanfattas i följande steg:

  1. Först förses processor och andra enheter med lämpliga spänningsnivåer. Därefter söker processor efter BIOS som gör att nödvändiga komponenter testas och sätts igång bland annat tangentbordet och grafikkortet så att meddelande visas på skärmen.
  2. BIOS startar ett litet program (POST) som testar dators hårdvara och kontrollerar att komponenterna fungerar.
  3. Bootstrap, ett annat litet program, sätts igång med syfte att söka efter operativsystemet.
  4. När operativsystemet har lokaliserats och identifierats sätts igång ett program (Bootloader)som kan kopiera och flytta dessa kopior till RAM-minnet. NTLOADER ser till att systemfilerna startas från RAM-minnet.
  5. Det är nu som användaren får en inloggningsruta så att användare kan interagera med operativsystemet.

Användarläge och kärnaläge

Det är nu som operativsystemet är igång, redo att hantera kommunikationen mellan användare och dators hårdvara och mjukvara. Detta görs i två skilda läge: Användarläge (user mode) och Kärnaläge (kernel mode). 

Bild 3: Användarläge och Kärnaläge

När en applikation exekveras i Användarläge (user mode) har den inte direkt tillgång till datastrukturer och funktionalitet i kernel. När ett program körs i kärnaläge (kernel mode) finns däremot inte denna begränsning. CPU innehåller en speciell instruktion för att byta från Användarläge till kärnaläge och vice versa. Applikationer exekverar till största delen i Användarläge och byter till kärnaläge endast när den kräver en tjänst som finns i kärnan. Processer som körs av operativsystemet behöver tjänster som bara finns i kärnaläge och dem kan ”anropas” vid behov.

Singel och multitasking

Tidigare operativsystem kunde hantera endast ett program i taget. Detta kallas singletasking. Moderna operativsystem kan hantera fler program på samma gång, vilket kallas multitasking. Egentligen kör operativsystemet ett program åt gång, men väldigt snabbt så att det uppfattas som flera program körs samtidigt. Detta kallas multitasking. Multitasking möjliggörs att operativsystemet kan köra olika processer och delprocesser via exekveringsenheter kallade trådar eller thread på engelska.

Hardware Abstraktion Layer – HAL

Operativsystemet kontrollerar även kommunikationen mellan dators olika kringenheter, såsom skrivare, bildskärmar etc. För att göra detta behöver operativsystemet drivrutiner för enheterna. I de flesta moderna operativsystemen så finns drivrutiner för de vanligaste hårdvara, annars laddar man in önskade drivrutiner när man kopplar in en ny hårdvara. Drivrutinerna kan antingen finnas i t ex en CD-ROM som följer vid köpet eller så laddar man ner drivrutiner från nätet. Windows operativsystem har utvecklat ett separat uppdateringssystem som automatiserar dators uppdateringar.

Varierande hårdvara och dess mjukvara har oftast egna arbetssätt och då kan det vara problem för operativsystemet att exekvera olika instruktioner för olika hårdvara. Detta kan vara ännu mer komplicerat när flera olika program anropar olika hårdvara. För att förenkla detta finns en del av operativsystemet som matchar de olika arbetssätt, denna del kallas på engelska Hardware Abstraction Layer eller HAL. Den fungerar som en virtuell dator som passar alla sorter hårdvara och mjukvara. Det är just via denna lager som applikationer tar sig till dators hårdvara.

Bild 4: Hardware Abstraction Layer

Ett annat sätt att definiera HAL är att den fungerar som en tolk mellan applikationer i Användarläge och dators hårdvara i kärnaläge. Det största fördelen med HAL är att operativsystemet behöver inte specifika drivrutiner till varje hårdvara istället kan operativsystemet använda samma drivrutiner till flera liknande hårdvara, det är det som kallas för generic.

Cooperate Multitasking

Cooperative eller Non-Preemptive multitasking var den enda tillgängliga typen av multitasking så den kördes i de äldre operativsystemet. Ordet cooperative betyder samarbete, vilket visar att i den typen av multitasking finns det ett samarbete mellan de olika processer i systemet för att de ska kunna komplettera sina uppgifter. Ett operativsystem i cooperative multitasking bygger på att en process tar kontrollen över CPU så länge som önskas men den bör samarbeta och lämna kontrollen ifrån sig innan någon annan process ska köras.  Att processen ska lämna kontrollen är inte något tvång utan den görs frivilligt.

Det finns en implementerad tidspunkt då ska kontrollen överförs till schemaläggaren vilket leder till att en schemaändring slås igenom hos CPU. Schemaändringen ger ett tecken på att processen växlade från running tillstånd till waiting tillstånd, efter ett tag kan schemaläggaren återupptar processen för att den ska vidare exekveras men ibland händer det att processen avslutas. Om kontrollen inte överförs från aktuella processen till schemaläggaren inom tidspunkten blir processen låst i systemet och det medför att hela systemet blir låst. Eftersom det är en process som styr processorn (CPU) så kan cooperative multitasking tolkas som programstyrd multikörning.

Bild 5: Cooperativ multitasking

Bilden ovan illustrerar tre processer som kör cooperative multitasking:

  • process nummer 1 (Task #1) returnerar kontrollen till schemaläggaren vid tiden t1
  • schemaläggaren bestämmer att process 2 (Task #2) som ska ta kontrollen, vid tiden t2 returneras kontrollen.
  • schemaläggaren bestämmer att process 3 (Task 3) tar över kontrollen.

I en sådan scenario försätter multitasking tills den pågående process avslutar sin driftstid, efteråt kan den tas bort från schemaläggaren.

Preemptive Multitasking

Denna typ av multitasking brukar köras i moderna operativsystemet. Preemptive multitasking skyddar operativsystemet från att bli helt låst vilket är fallet när operativsystemet använder sig av cooperative multitasking. Man kan säga att preemptive multitasking skiljer sig från cooperative multitasking i att operativsystemet tar kontrollen över CPU utan processernas samarbete, således efter en viss tid tvingas en process att lämna ifrån sig kontrollen till andra processer.

Vid någon tidpunkt bestämmer schemaläggaren när en process ska avbrytas, när en väntande process ska köras vidare och när en ny ska börja exekveras. Preemptive multitasking beslutas när en process växlar från tillståndet waiting till tillståndet ready eller från tillståndet running till tillståndet ready.

Den huvudsakliga fördelen med preemptive multitasking är att den garanterar att alla processer blir utförda, oavsett dess prioritet och den även ger snabb svarstid beroende på CPU-tid som processen behöver. I preemptive händer det att en process som låser sig inte låser resten av systemet.

Applikationshantering

Vi använder applikationer som kräver åtkomst till datorns hårdvara och när applikationer inte kan detaljer av varje datorkomponent är de begränsade i sitt fungerande. Samtidigt kan de  inte tillåtas ett fullständigt åtkomst till dators hårdvara och därmed kan de inte heller tillåtas fullständigt kontroll över drivrutinerna. Lösningen till detta är det att dela upp hårdvaruåtkomst i Användarläge och systemläge (user mode och kernel mode).

Det är här man ser hur ett operativsystem styr kommunikationen mellan användare och applikationer med datorns hårdvara.

Bild 4 visar två olika datorer (A och B) med olika hårdvara. Operativsystemet skapar ett underlag för kommunikationsmöjligheter så att applikationer kan komma åt hårdvara. Det handlar egentligen om fyra skikt som är självständiga men öppna till samarbete, se tredje bilden.

Bild 6: Applikationshantering

Utifrån detta perspektiv kan nämnas att det finns flera olika operativsystem (OS) för lika varierande datorarkitektur (se som datorns hårdvara och hur de hanteras).

  • Batchsystem var den första typen av enkla OS som bara skickade in program och data till datorn, dåförtiden lagrades program på hålkort eller magnetband och datorn körde programmet och levererade utdata också på hålkort eller magnetband eller liknande. Batch på engelska betyder ”grupp” eller ”bunt” och refererar troligen till att man hade en bunt hålkort som man laddade i datorn. Batch-processing idag betyder ”En sak i taget och avbryt inte denna sak.”
  • En-användarsystem eller Single-task operativsystem innebär att det utförs en sak i taget, men den sak som görs kan avbrytas. Med sak menas antingen genomförande av någon kommando eller ett program som bygger på flera instruktioner till kommandoexekveringar. I praktiken kör operativsystem endast en process i taget men ger möjlighet till avbrytning i fall en annan process kräver uppmärksamhet.
  • Fler-användarsystem eller multitasking operativsystem möjliggörs via körning av flera självständiga processer samtidigt. Varje process tilldelas en del av datorns resurser eller datorhårdvara och mjukvara som hanterar dessa resurser. Processer kan startas av användaren via program eller processer själva kan starta andra processer via operativsystemet. Alla processer schemaläggas så att användning av resurser styrs tidsbaserat. Det finns olika metoder för schemaläggning:
    • Round-robin: Varje process tilldelas ett fixt tidskvanta och sedan tilldelas CPU:n dessa processer i ett cykliskt förlopp, en process exekveras inom en viss tid och sedan ställer sig sist i kön för att återkomma senare.
    • FIFO: First-In-First-Out, är en schemaläggningsteknik som inte är cyklisk, en process (eller ett jobb som det då kallas) schemaläggs och kör tills den är klar, det gäller att vara först i kön.
    • Lottoschemaläggning: En rättvis form av schemaläggning där CPU-tid lottas ut. I längden jämnar det ut sig och blir som round robin. Slumpmässigt resurstilldelning sker så att alla processer i kön får en del varje gång vad de begär.