Operativsystem

Et operativsystem (OS) er den grunnleggende programvaren på en datamaskin, og det som tildeler de forskjellige ressursene i datamaskinen til andre programmer. Én type ressurs er eksterne enheter, som en skriver.  Operativsystemet passer for eksempel på at to programmer ikke samtidig sender informasjon til samme skriver, men at de legges i en venteliste før utskrivning. En annen type ressurs er interne enheter som minne og prosessorer. Dette er svært grunnleggende komponenter som operativsystemet også holder styr på.
Man kan betrakte programvare som å være én av to typer: applikasjonsprogramvare eller systemprogramvare. Applikasjonsprogramvare er slikt som tekstbehandlere, regneark og andre programmer som brukeren har direkte kontakt med. Av systemprogramvare er operativsystemet den viktigste. Det holder styr på systemressursene og gjør programmererens jobb enklere. Tilleggsenheter som er koblet til datamaskinen er ofte kompliserte å bruke. En harddisk, for eksempel, trenger detaljerte instruksjoner om å starte motoren sin, stoppe den, flytte på lesehodene og mye annet. Operativsystemet bruker harddisken ved å kommunisere på en standard måte med et driverprogram laget spesielt for enheten. Et annet program som ønsker å skrive noe til harddisken gir bare beskjed til operativsystemet om for eksempel «å skrive teksten 'kongle' til filen "kongle.txt" på katalogen c:\». Operativsystemet, i samarbeid med driverprogrammet, tar seg så av resten av oppgaven.
Operativsystemet er et program som alle andre i datamaskinen. Det er skrevet i et programmeringsspråk og følger vanlige regler for programmer. Forskjellen er at det er det første som lastes inn i minnet når maskinen startes, og det styrer «hverdagen» for alle programmer som lastes inn senere.

Vanlige operativsystem

Microsoft Windows er et av de mest brukte operativsystemene for personlige datamaskiner. Dets forløpere kom på begynnelsen av 1980-tallet med MS-DOS fra Microsoft og DR-DOS fra Digital Research. Forkortelsen DOS står for Disk Operating System. 
Unix er blant de eldste operativsystemene som fortsatt er i bruk.  Det frie operativsystemet Linux brukes også til personlige datamaskiner, men særlig tjenere, superdatamaskiner og forbrukerelektronikk. Linux er en avart av Unix. Blant andre Unix-varianter finner vi Berkeley Software Distribution (BSD).
IBM hadde en periode suksess med sitt OS/2, og Macintosh-maskiner bruker Mac OS (tidligere rett og slett kalt systemet). Nye Macer kjører imidlertid Mac OS X, som er BSD-basert.

Bakgrunn

Et moderne datasystem består av komponenter som prosessorer, hovedminne, klokker, inn- og utenheter, lagringsenheter med mer.  Operativsystemet holder styr på komponentene og gir applikasjonsprogrammer tilgang til dem.  På denne måten behøver ikke hver programmerer kjenne til detaljene ved å bruke de ofte komplekse enhetene, eller hvordan et program skal dele disse med andre programmer.  Operativsystemet kan sees på som et lag som skiller applikasjonsprogramvaren fra den ofte mer komplekse maskinvaren.
Forskjellige datamaskiner bruker forskjellige typer maskinvare. En applikasjon skrevet til en type datamaskin vil da ikke nødvendigvis kjøre på en annen. Imidlertid kan et operativsystem finnes til flere typer maskiner, noe som gjør at operativsystemet fungerer som en felles plattform utvikleren av en applikasjon kan benytte seg av, uten å tenke på de forskjellige typene maskinvare brukeren kan tenkes på ha.

Kjente operativsystemer

Operativsystemer kan grupperes på flere måter.  En av dem er etter bruksområde.  Stormaskiner har operativsystemer som er tilpasset deres bruk, minimaskiner sitt og tjenere har sine operativsystemer.  Felles for alle disse er at de ikke har interaksjon med brukeren som fokus.  På skrivebord og i private hjem finner vi det som tidligere kaltes mikrodatamaskiner, senere kalt hjemmedatamaskin og så PC.  Disse har egne operativsystemer, og fra sent på 1980-tallet ble Microsoft sine operativsystemer markedsledende der.  Håndholdte enheter som PDAer og mobiltelefoner har operativsystemer som er spesielt tilpasset maskinvaren.  En annen kategori OSer er sanntidsoperativsystemer.  Disse siste tilbyr tjenester hvor de garanterer responstid.  Eksempler er datamaskinen som kontrollerer tenning og drivstofftilførsel i en moderne bil.
I tillegg til systemene nevnt i innledningen, som er de mest kjente, finnes det også flere alternative operativsystemer. Blant disse finner vi BeOS, som ikke lenger blir utviklet, men det er flere nye operativsystemer under utvikling som er kloner av eller inspirert av BeOS, et av disse er Haiku. Andre alternative operativsystemer under utvikling er Syllable og SkyOS.
Også samtidens store teknologiske nyhet mobiltelefonen bruker operativsystem. Tidligere var disse ganske primitive, men etter hvert som mobilene har blitt kraftigere og fått flere bruksområder har også mobiltelefonoperativsystemene også blitt mer utbygde. Dette er særlig noe som har kommet samtidig med fargeskjermen og kameramobilene. Eksempler på operativsystemer for mobil er: Symbian, Windows CE, Linux, Android, IOS

Tidslinje

Merk at tabellen mangler de fleste operativsystemer for stormaskiner, for eksempel ICL George, IBM MFT, IBM MVS, IBM VM, Univac, Tandem, og minidatamaskiner som Digital PDP, etc. Flere av disse har nå mest historisk betydning, da moderne trender er å kjøre Unix/Linux på stor- och superdatamaskiner.

Oppbygging

Oppbyggingen av et typisk datasystem vises i figuren til høyre.  Underst er den fysiske maskinvaren.  Den består av kretser, kabler, strømforsyning og lignende fysiske innretninger.  Over denne ligger det første, enkle programvarelaget, kalt et mikroprogram.  Denne ligger som oftest i minne som bare kan leses.  Mikroprogrammet er en liten tolk, som henter inn maskinkodeinstruksjonene og sender de til prosessoren.  For eksempel bestemmer mikroprogrammet hvordan to tall skal legges sammen, ved å hente en ADD-instruksjon, hente de to tallene fra sine plasser i minnet, legger de sammen og lagrer resultatet et sted i minnet.
Maskinspråket består som regel av mellom 50 og 300 forskjellige instruksjoner, hvor de fleste brukes til å flytte rundt på tall, gjøre enkel aritmetikk og sammenligne tall.  Som et eksempel kan man styre en ekstern enhet som en disk ved å flytte inn verdier i forskjellige register, bestemte lokasjoner i minnet.  Man putter kanskje inn verdier for adressen på disken, adressen i hovedminnet dataene skal flyttes til, antall bytes som skal flyttes og retningen disken skal leses.  I praksis kreves enda flere parameter, og for mange eksterne enheter spiller også timingen en viktig rolle.
En viktig oppgave for operativsystemet er å skjule alle denne kompleksiteten.  For eksempel så er kommandoen LES DATABLOKK FRA DISK enklere å forholde seg til enn å sysle med posisjonen til lesehodet, ventetid før lesehodet er på plass og lignende.
Oppå operativsystemet ligger resten av systemprogramvaren.  Her er kompilatorer, kommandolinjen, teksteditorier og lignende.  Disse programmene er ikke en del av operativsystemet, selv om de ofte behandles som det i hverdagen.  Operativsystemet er den delen av systemprogrammene som kjøres i kjernemodus eller supervisor mode, altså en tilstand hvor den har tilgang til alt fysisk i datasystemet.  Kompilatorer og lignende kjører i brukermodus, altså hvor operativsystemet styrer tilgangen på ressurser.
På toppen ligger applikasjonsprogramvaren.  Denne er til for at brukeren av systemet skal kunne løse sine problemer, om det er snakk om tekstbehandling, regneark eller høre på musikk.
Hva som betraktes som en del av operativsystemet og hva som er applikasjonsprogramvare forandrer seg over tid. Tidlige operativsystemer var lite annet enn en samling rutiner som håndterte de forskjellige maskinvareenhetene. Etterhvert som forskjellige applikasjoner fikk forskjellige måter å behandle ting som filhåndtering, ble disse standardiserte og ble en del av operativsystemet. Microsoft Windows begynte som et skall som lå over operativsystemet MS-DOS (noe som gjorde Windows til en applikasjon), senere var det Windows som faktisk ble selve operativsystemet etter å ha svelget MS-DOS et sted på veien. På samme måte begynte nettlesere som applikasjoner, mens det i dag er en uklar linje mellom nettleseren og systemet i mange operativsystemer.

Grunnleggende konsepter

Et grunnleggende konsept innenfor alle operativsystemer er prosessen.  En prosess er i utgangspunktet et program som kjører.  Den har sin kjørbare kode, sine data og stakk, sin programteller og andre registre og all annen informasjon den trenger for å kjøre.  Operativsystemet sysler med å styre prosessene, først og fremst ved å skape og terminere dem. Noen ganger kan en prosess lage andre prosesser, kalt barn. Prosessene kommuniserer med hverandre med signaler. En prosess som venter på at noe skal skje, for eksempel at en skriver skal gjøre jobben sin, kan gå i dvale og ble vekt opp igjen av operativsystemet når maskinvaren mottar et avbruddssignal. I et flerbrukerssystem har hver bruker et eierforhold til sine egne prosesser, noe som kan være med på å styre hva slags signaler prosessene i systemet kan sende til hverandre.
Et annet grunnleggende konsept er filer. Åpning og lukking, sletting og skriving av filer styres av OSet. De fleste operativsystemer i dag støtter kataloger for å gruppere filer sammen.  Både prosessene og filene er gruppert hierarkisk, men mens filene har lang levetid (dager, måneder og år), så blir prosesser ofte skapt og destruert innenfor sekunder.  Hver prosess har sitt eget arbeidsområde, altså den katalogen prosessen i utgangspunktet ser etter filer som ikke har et fullstendig filnavn i. OSet holder også rede på tilstanden til filene i tillegg til selve innholdet og plasseringen. For eksempel har filer i Unix et sett med boolske tilstander kalt RWX, hvor R er rett til å lese filen, W er rett til å skrive til filen og X er rett til å kjøre filen (altså om den anses som et program). For kataloger betyr X rett til å liste opp innhold. Filer eies av en eier og en gruppe, og det er et sett med RWX-tilstander for eieren, gruppen, andre enn disse, samt et sett som angir eventuelle  spesialegenskaper. Slik sikres forskjellige brukere og deres prosesser fra å tråkke hverandre på tærne. Ofte er eksterne enheter også representert som filer, for å gjøre jobben til programmererne lettere. To typer slike filer finnes, med blokkskriving og tegnskriving. Blokkskriving brukes til å modellere enheter hvor man kan bevege seg fram og tilbake og lese og skrive vilkårlig, slik som en harddisk. Tegnskriving innebærer at man må lese og skrive i en bestemt rekkefølge, slik som til en skriver. Den siste spesialfilen er en pipe (engelsk for rør). Denne kobler sammen to prosesser, slik at mens én prosess skriver til pipen som om det var en fil, leser en annen prosess fra den, også som om det var en fil.
Brukernes programmer kommuniserer med operativsystem og ber om tjenester ved hjelp av systemkall. For programmereren ser dette ut som vanlige prosedyrekall, mens operativsystemet kjører sine grunnleggende funksjoner på bakgrunn av kallet. Eksempler er skaping av prosesser, allokering av minne og behandling av eksterne enheter.

Arkitektur

Med arkitektur menes den overliggende strukturen på hvordan operativsystemet er bygget.  Et lite antall arkitekturer dominerer fagfeltet.  I 2006 bruker Linux og Windows en monolittisk kjerne, mens Mac OS X er basert på Mach og bruker en mikrokjerne.

Monolittiske systemer

Den mest vanlige arkitekturen er et monolittisk system.  Her er det ingen bestemt struktur, da all funksjonaliteten til operativsystemet ligger i ett enkelt program.  For å lage det faktisk kjørbare operativsystemet, blir alle individuelle filer med kildekode kompilert sammen og lenket sammen til én enkelt kjørbar fil.  Grensesnittet til operativsystemet er da skrevet som et antall prosedyrer, og applikasjonsprogramvaren kaller prosedyrene.  Når operativsystemet kalles, skiftes kjøremåten til datamaskinen fra brukermodus, hvor programvaren har en rekke begrensninger, til kjernemodus, hvor operativsystemet har tilgang på alle instruksjoner og eksterne enheter.
Monolittiske systemer har som regel delt inn prosedyrene i flere typer eller lag.  Man har hovedprosedyren, som kaller de forskjellige tjenestene.  Tjenestene består av prosedyrer som utfører systemkall.  Tjenestene benytter seg av forskjellige hjelpefunksjoner, som inneholder funksjonalitet som benyttes av flere tjenester.
Fordelen med monolittiske systemer er at ytelsen blir noe bedre.  Ulempene inkluderer at de tar større plass.  Moderne monolittiske kjerner som Linux, FreeBSD og Solaris kan laste komponenter inn i minnet mens operativsystemet kjører, noe som reduserer størrelseskravet.  Eldre eksempler på monolittiske kjerner er MS-DOS og Mac OS fram til versjon 8.6.  Et eksempel på et OS til undervisningsbruk som nytter en monolittisk kjerne er Agnix.

Klient-tjener-systemer

En tredje arkitektur kalles klient-tjener eller mikrokjerne.  Den tar lagdelingen et skritt videre.  Her er så mye som mulig av funksjonaliteten flyttet fra operativsystemet, og det gjenværende kalles kjernen.  Man implementerer her mye av funksjonaliteten i brukerprosesser.  En applikasjon (klienten) som trenger å bruke en tjeneste, for eksempel for å lese en fil, sender en forespørsel til tjenerprosessen, som gjør arbeidet og sender tilbake et svar.  Alt kjernen ideelt sett gjør er å håndtere kommunikasjon mellom klienter og tjenere.  På denne måten blir kjernen liten og håndterbar.
En fordel med klient-tjener-modellen er at en feil i en komponent kan forårsake et krasj av den tjenesten, men det vil vanligvis ikke føre til at hele maskinen stanser.  En annen fordel er at klient-tjener-modellen kan lettere tilpasses bruk i distribuerte systemer.
Eksempler på moderne mikrokjerne-systemer inkluderer QNX, Mach og senere Mac OS X.  Et eksempel på et OS for undervisningsformål som har en mikrokjerne er Amoeba.

Mangfoldet av operativsystemer og kompatibilitet

Programvare er generelt skrevet for bruk på et bestemt operativsystem, og noen ganger også for bestemt maskinvare. Når programmet porteres til å kjøre på et annen operativsystem kan funksjonaliteten programmet krever bli implementert annerledes av det andre systemet (navn på funksjoner, betydningen av argumenter osv.) Dette krever at programmet må tilpasses, endres eller annen måte opprettholdes. 
Kostnaden det innebærer å sørge for støtte i flere operativsystemer kan unngås ved i stedet å skrive programmer mot en programvareplattform som for eksempel Java, eller Qt for nettlesere. Disse abstraksjonene har allerede båret kostnadene ved tilpasning til bestemte operativsystemer og deres systembibliotek.