Inte bara ett fönstersystem

Windows är både ett operativsystem och ett grafiskt gränssnitt, ett fönstersystem. Men så var det inte från början. Då var Windows bara ett grafiskt påhäng ovanpå operativsystemet MS-DOS, som inte ens hade multikörning. Inte förrän med Windows NT (New Technology) avskaffades MS-DOS i botten och infördes en ny kärna.

Familjen Windows NT är vad som överlevt utvecklingen. En motsvarighet till MS-DOS har dock alltid funnits tillgängligt inuti Windows, då man alltid kunnat starta en kommandotolk i ett särskilt fönster. Det finns fortfarande saker man bara kan göra i tolken som inte kan göras i grafiska Windows.

Ett programsystem som Windows och dess olika tillbehör och applikationer kan i stort sett indelas i två programklasser: applikationsprogrammen, som Office, Photoshop och liknande samt systemprogrammen, som drivrutinerna, kärnan, fönstersystemet med mera. Applikationsprogrammen är direkt avsedda för användaren att manipulera, medan systemprogrammen inte kan manipuleras, eller i varje fall inte på något enkelt sätt.

windowsprincip.jpg

Ett fönstersystem tillhandahåller olika tjänster till applikationerna, men är inget annat än en uppsättning rutiner och parametrar som anger hur fönster ska konstrueras, vad olika knappar ska göra och hur musrörelser översätts till muspilen på skärmen och att det exempelvis ska kunna finnas en skrivbordsbakgrund. Exakt hur fönstret ska se ut, dess design, typ av muspil, skivbordsbakgrundens bild och så vidare hanteras av konfigurationsfiler.

Applikationsprogrammen får aldrig hantera periferienheterna direkt utan måste tilldelas enheterna via drivrutiner, så att det inte kan uppstå intressekonflikter. Drivrutinerna vet hur de olika periferienheterna ska hanteras och kan tolka svaren de ger. Drivrutinen presenterar därefter svaren på ett enhetligt sätt för applikationsprogrammen. Windows levereras med ett antal inbyggda drivrutiner, men när någon ny maskinvara tillkommer, måste man installera den nya drivrutinen.

Andra tillverkare marknadsför bara ett operativsystem, som de olika Linux-varianterna, och låter användaren välja ett fönstersystem från tredje part, medan Microsoft marknadsför båda i ett paket och kallar alltihop för Windows. Det kan finnas både för- och nackdelar med det. Fördelen är naturligtvis att Microsoft har full kännedom om båda komponenterna och gränssnittet dem emellan och kan styra alla uppdateringar så att det inte blir konflikter.

Tyvärr spärrar de också all insyn och kan i stort sett påstå vad som helst, som att Internet Explorer inte skulle gå att skilja från Windows, vilket man senare fick backa på. Nackdelen är, utöver den bristande insynen, att man inte enkelt kan välja fönstersystem som man skulle önska.

En annan fördel är att programutvecklarna får en enda källa att gå till för information om gränssnitt och API:er, vilket utan tvivel har gjort att det finns så många windowsprogram idag, som faktiskt fungerar utan mankemang och kan installeras helt utan kommandorads-kunskaper.

Tidsdelning och multikörning

Om flera program, ska kunna köras samtidigt måste någon sorts tidsdelning användas mellan dem, eftersom det bara finns en (eller traditionellt i alla fall) processor, som måste dela sin uppmärksamhet mellan programmen. Under MS-DOS fanns ingen tidsdelning eftersom man bara kunde köra ett program åt gången, och när det programmet kördes, stod kommandotolken still.

Det förändras inte om man lägger ett enkelt grafiskt skal ovanpå MS-DOS och startar program genom att klicka på ikoner i det grafiska skalet. Vill man ha någonting som liknar multikörning måste programmen själva medverka till att det sker och från början sköttes det med sk cooperative multitasking, alltså att applikationsprogrammen själva lämnade ifrån sig körkontrollen till en schemaläggare (sk yield), som lämnade den vidare till nästa. Om något program är illa skrivet och vägrar lämna ifrån sig kontrollen, stannar hela systemet. Eftersom DOS-program inte hade någon möjlighet att göra yield hanterades dock detta av Windows.

Det moderna sättet att tidsdela är att någon del av maskinvaran avbryter körningen med en hård knuff, en så kallad interrupt, som tvingar in processorn i en avbrottsrutin, som lämnar över kontrollen till nästa program. Detta infördes inte förrän med Windows NT. Varje applikationsprogram får en kort tidsskiva (time slice eller run burst). Skulle ett applikationsprogram krascha, stöta på en otillåten instruktion eller liknande, tas kontrollen ifrån det och Windows visar ett meddelande om att det har kraschat eller utfört en otillåten operation.

Det kan duga för mänskliga operatörer, men driver man systemet till sin yttersta spets, som i stridsflygplan eller en satellit, så eliminerar man operativsystemet helt och hållet och låter en avbrottsstyrd (interrupt) schemaläggare sköta driften.

schedulerare.jpg

Schemaläggaren i stridsflygplanet Gripens motor RM12.

Programvaran består av en uppsättning drivrutiner och applikationsprogram som körs med olika avbrottsintervaller på millisekundnivå, ofta eller sällan beroende på hur kritiskt det som ska styras är. I en rymdfarkost som Voyager körs rutinerna för att stega stegmotorer och puffa attitydmotorerna (thrusters) var 10:e millisekund, den övergripande logiken för attitydstyrning var 20:e ms, medan olika vridrörelser utvärderas var 60:e ms och kommandotolken var 240:e ms.

Den sistnämnda metoden kallas för deterministisk (pre-emptive multi-tasking), vilket betyder att man alltid kan veta hur lång tid det tar att utföra en åtgärd. Med Windows metod tycker väl gemene man att allting alltid tar för lång tid ...