Projektpresentation

Untitled Document Projektets namn: Educational Operating System (EOS)
Uppdragsgivare: Virtutech

Gruppmedlemmar:
Jens Lind (Projektledare)
Peter Wåhlander (Sekreterare)
Åke Wallebom
Gilbert Netzer
Daniel Eklöf
Karl Berglund
Daniel Felke

Hemsida: http://www.nada.kth.se/projects/proj03/EOS/

Sammanfattning

På uppdrag av Virtutech [VIR] har vi skapat ett enkelt operativsystem som vi har valt att kalla Educational Operating System (EOS). Operativsystemet är skrivet i C++ och koden är i första hand inriktat på att ge en enkel inblick i hur de inre delarna av ett operativsystem ser ut. Koden ska vara så enkel och väl kommenterad att den som är intresserad lätt ska kunna se hur den fungerar och även utöka operativsystemet med ytterligare funktionalitet. Operativsystemet innehåller följande saker:

EOS är en programvara med öppen källkod.

Bakgrund

Linux och andra operativsystem, som är vitt spridda och gratis att använda, är inte designade för att vara enkla att förstå och de illustrerar inte heller de inre delarna hos ett operativsystem på ett bra sätt. Bakgrunden till det här projektet är att skapa ett operativsystem med kod som är enkel att följa och utöka för att kunna utnyttjas i studiesyften. EOS riktar sig i första hand till utvecklare av operativsystem, datorteknikstuderande samt Simicsanvändare. Trots att mycket tid har lagts ner på att göra koden så enkel som möjligt går det inte att komma ifrån att någon som vill lära sig av systemet bör ha goda kunskaper i både C och C++. En viss grundläggande kännedom om hur ett operativsystem fungerar är också en förutsättning.

Ansvarsfördelning

Datormiljö

EOS kan köras på en dator med x86 processor (Intel Pentium eller AMD). För full funktionalitet krävs också ett tangentbord och en monitor. Dessutom behövs en diskettstation eftersom operativsystemet ligger på en diskett. Om man inte vill köra operativsystemet på riktigt kan ett simulatorprogram som Simics [SIM] användas istället.

Under utvecklingen av operativsystemet använde vi Simics [SIM] vilket är ett program som kan simulera flera olika datorsystem. Fördelarna med att köra i en simulerad miljö är många. Den största är att om systemet kraschar så kraschar inte hela datorn. Simics ger utvecklaren möjlighet att debugga systemet. Man kan sätta breakpoints där systemet ska stanna eller så kan man låta simulatorn stega igenom koden rad för rad. Vid en systemkrasch kan det vara särskilt intressant att kunna inspektera olika tillstånd. Då kan man t.ex. få se vilka de senaste kodraderna som processorn har utfört är (fig. 1) och vad som finns i processorns register (fig. 2). Simics tillhandahålls av vår uppdragsgivare Virtutech [VIR].


fig. 1: Simics visar de fem raderna av kod körda från och med programräknaren 0x0020149c


fig. 2: Simics visar innehållet i processorns register.

Vi sparade all kod i ett gemensamt CVS-träd [CVS]. CVS (Concurrent Versions System) är ett fleranvändarsystem för versionshantering. Alla filer lagras tillsammans med alla gjorda förändringar på en central plats (CVS-trädet) medan användarna arbetar med lokala arbetskopior av filerna. CVS-trädet är strukturerat som ett filträd och de lokala kopiorna har en liknande katalogstruktur. Varje person checkar ut filer till sin lokala lagringsplats och när ändringar har gjorts checkas filerna in. När en fil checkas in så uppdateras dess versionsnummer. Det är möjligt att få tag på äldre versioner av en fil om den nya visar sig vara buggig eller instabil. Andra personer kan uppdatera sina arbetsfiler för att ta del av eventuella förändringarna. Om flera personer ändrar samma fil kommer CVS att försöka lägga samman filerna så att alla förändringar kommer med. CVS är ett open-source program.

För att starta upp själva operativsystemet används GNU GRUB [GRU]. GRUB står för Grand Unified Bootloader som bygger på Multiboot Specification [MUL]. En bootloader är det första som körs när en dator startas. Den laddar in själva kärnan av operativsystemet som sedan initialiserar resten av systemet. Multiboot är en specifikation som beskriver hur gränssnittet mellan bootloader och operativsystem ska se ut.

Själva koden är till största delen skriven i C++ med vissa mindre bitar i Assembler och C.

Kommentarerna i koden är skrivna så att Doxygen [DOX] automatisk kan skapa ett systemdesigndokument. Doxygen är ett dokumenteringssystem för en mängd olika programspråk, t.ex. C++, C och Java. Det kan användas för att generera dokumentation i t.ex. HTML direkt från en mängd kommenterad källkod. Eftersom dokumentationen tas direkt från koden är det enklare att hålla dokumentationen konsistent med själva källkoden. Doxygen kan även användas för att extrahera kodstruktur från okommenterad källkod. Kodstrukturen gör det enklare att leta efter särskilda delar av större program. Utöver kodstrukturen kan även diverse diagram, som visar samband mellan olika delar av källkoden, genereras automatiskt.

Funktionalitet

För ett operativsystem kan funktionaliteten delas upp i två delar. Dels för användare som kör operativsystemet som vanligt, på samma sätt som t.ex. Linux, Windows o.s.v. och dels för programmerare som vill utveckla operativsystemet vidare eller skriva program för det.

Användargränsnittet för ”vanliga” användare är ganska begränsat. När operativsystemet har initierats startar ett mini-shell där användaren kan köra olika program genom att skriva kommandon vid prompten. För mer information om användargränssnittet se användarhandledningen [ANV]. De kommandon som för tillfället finns är:


fig. 3: Output från kommandot help i EOS shell.

Det användargränssnitt som finns för programmerare är ett begränsat, men enkelt utbyggbart, c-bibliotek med funktioner. Funktionerna i c-biblioteket är till största del ett sätt att få tjänster från operativsystemet. Gränssnittet mellan operativsystemet och c-biblioteket består av ett antal systemcalls. Systemcalls genererar mjukvaruavbrott som tas hand av kärnan som då exekverar önskad funktion.

De som är intresserade av den något mer avancerade informationen kring kärnans uppbyggnad och funktionalitet bör ta del av EOS systembeskrivningsdokumentet [SYS].

Körexempel


fig. 4: Output från ett antal kommandon i EOS shell.


fig. 5: Output från kommandot ps med både programmet "yes" och "no" körande i bakgrunden.


fig. 6: Exempel på kommandot kill.

Referenser

[VIR] Virtutech, http://www.virtutech.se, 2003-05-10
[SIM] simics.net, https://www.simics.net/, 2003-05-10
[CVS] Concurrent Versions System, http://www.cvshome.org, 2003-05-10
[GRU] GNU GRUB, http://www.gnu.org/software/grub/, 2003-05-10
[MUL] Multiboot Specification, http://www.mcc.ac.uk/grub/multiboot_toc.html, 2003-05-10
[DOX] Doxygen, http://www.stack.nl/~dimitri/doxygen/, 2003-05-11
[SYS] EOS Systembeskrivning, http://www.nada.kth.se/projects/proj03/EOS/doc/systembeskrivning.html, 2003-05-13
[ANV] EOS Användarhandledning, http://www.nada.kth.se/projects/proj03/EOS/doc/anvandarhandledning.html, 2003-05-13

Appendix A: Projektutvecklingsmetod

Vi har valt att använda oss av vissa delar från eXtreme Programming (http://www.extremeprogramming.org/). Varje gång ny kod lagts till i systemet så har operativsystemet kompilerats om och testats. Redan två dagar efter första mötet hade vi en prototyp, mycket tack vare GNU GRUB. Alla har kunnat ta del av varandras kod och göra ändringar i den (med hjälp av CVS). Målet har varit att ha ett möte i veckan och det har vi nästan lyckats med (se appendix B). När det gäller att själva programmeringen ska ske i par så har vi nog till större del inte följt den rekommendationen. På grund av tidsbrist har vi inte heller hunnit med att restrukturera koden (refactoring) förutom att gå igenom kommentarerna och förbättra dessa.

Appendix B: Projektmötesprotokoll

Protokoll 2003-01-30

Protokoll 2003-02-12


Närvarande: Peter, Daniel E, Daniel F, Åke, Jens, Kalle, Gilbert

  1. Mentor och projektledare
    Maila lassekj angående mentorn och projektledaren.
  2. Projektnamn
    Projektnamn ska vara EOS (Educational Operating System)
  3. Projektaccount
    Sätta upp en projektaccount på NADA (Gilbert)
  4. Versionshantering
    Använda oss av cvs för hantering av källkode/dokument, repesitory ska ligger på afs (projektaccount), Gilbert fixar account.
  5. Dokumentering
    Kolla på doxygen för dokumentation ( http://www.stack.nl/~dimitri/doxygen/index.html)
  6. Targetprocessor
    Som första target-processorn bestämde vi oss för IA32 (x86)
  7. Uppdagsgivaren
    Möjliga tider för möte med uppdragsgivaren är 4/2 efter kl. 11, 5/2 efter kl. 13, 10/2 efter kl. 13. Jens mailar till uppdragsgivaren om tid för möte. Vi föredrar en tid så tidigt som möjligt.
    Frågor till uppdragsgivaren:
    * Förväntningar
    * Omfattning
    * Kunskaper
    * Tillgång till Simics och andra mjukvaran
    * Mentor
    * C++ ok?
    * Säkerhet, Stabilität, Multi-User
    * Tidigare försök
    * Avtal
    * Boka nästa möte
  8. Våra uppgifter
    Gilbert, noname, 073 9568401
    Peter, pewa, 0733 502063
    Jens, jlindh, 0709 664122
    Daniel F., fellke, 070 4970058
    Kalle, kab, 070 7770187
    Daniel E., d00-dek, 073 6389463
    Åke, akew, 070 4972800

$Id: 2003-01-30.html,v 1.8 2003/02/19 10:02:24 d00-pwa Exp $

Protokoll 2003-02-10

Protokoll 2003-02-12


Närvarande: Peter, Daniel E, Daniel F, Åke, Jens, Kalle, Gilbert

  1. Måldefinering
    Os:et ska helst kunna boota på en riktig maskin. Multitasking där de olika programmen har egna skyddade minnesrymder. Till största del är det upp till oss hur mycket som ska finnas med.
  2. Forum
    Projektnamn ska vara EOS (Educational Operating System)
  3. Genomgång av några punkter
    - device drivers: iallafall keyboard och monitor.
    - boot: försöka hålla oss till floppystorlek.
    - debug: det är här Simics kommer in.
    - Simics -> HW: Noterat att Simics använder egen BIOS.
  4. Versionshantering
    Använda oss av cvs för hantering av källkode/dokument, repesitory ska ligger på afs (projektaccount), Gilbert fixar account.
  5. Andra OS
    Athens96 - Dokumentation finns på forumet.
    Nachos - http://www.cs.washington.edu/homes/tom/nachos/.
  6. Simics-demo
    10 raders instruktionslista, register-dump, magic breakpoints, configure-files, etc.
  7. Nästa möte (Med Virtutech)
    Nästa möte är preliminärt satt till 3/3 kl 14.00

$Id: 2003-02-10.html,v 1.5 2003/02/20 15:17:26 d00-jli Exp $

Protokoll 2003-02-12

Protokoll 2003-02-12


Närvarande: Peter, Daniel E, Daniel F, Åke, Jens, Kalle, Gilbert

  1. Mentor
    Vi kom fram till att vi inte behöver en mentor. Vi tror att vi kommer få tillräckligt med hjälp från folket på Virtutech.
  2. Preliminär prioritering
    Prio 0
    - Build environment + GRUB. Åke har en linuxdator där vi kan sätta upp ett build environment. Åke fixar konton till alla.

    Prio 1
    - Scheduler (Daniel F, Peter)
    - Device drivers för tangentbord och skärm. (Åke)
    - Minneshantering, fysiskt och virtuellt, minimalt. (Jens, Kalle)
    - Std lib, minimalt d v s stränghantering, minnesfunktioner, standard input och output.
    - Nano kärna (Daniel E, Gilbert)
    - Boota på Simics.

    Prio 2
    - IPC
    - Std lib, utökat
    - Debug funktioner d v s att man ska kunna dumpa OS info på skärmen.
    - Boota på floppy.

    Prio 3
    - Fil system.
    - Loader.

  3. Nästa möte
    Nästa möte ska vara 2003-02-18


$Id: 2003-02-12.html,v 1.4 2003/02/20 18:51:26 d00-awa Exp $

Protokoll 2003-02-18

Protokoll 2003-02-18


Närvarande: Peter, Daniel E, Daniel F, Åke, Jens, Kalle, Gilbert

  1. Preleminär specifikation
    Vi sammanställde en preleminär specefikation. Denna ska renskrivas och läggas ut på nätet. (Jens)
  2. TODO-filer
    Varje modul ska ha en TODO-fil som ska ligga på nätet. Daniel fixar till en katalog i www modulen och lägger upp ett template.
  3. Diskutioner
    Alla diskutioner ska hållas på forumet. Viktigt att alla så fort som möjligt får ett konto.
  4. Backup
    Vi ska ta backup på CVS-trädet en gång i veckan och lägga backupen på Åkes dator. (Åke)
  5. Protokoll
    Föregående mötesprotokoll ska naturligtvis vara med på varje möte. (Peter
  6. Nästa möte
    25/2 10.00

$Id: 2003-02-18.html,v 1.1 2003/02/19 10:02:25 d00-pwa Exp $

Protokoll 2003-02-25

Protokoll 2003-02-25


Närvarande: Peter, Daniel E, Daniel F, Åke, Jens, Kalle, Gilbert

  1. Begreppsdokument
    Vi måste skriva ett begrepps dokument där alla begrepp vi använder oss av finns beskrivna. Detta dokument ska finnas på projekthemsidan och uppdateras under projektets gång. (Daniel Eklöf)
  2. CVS
    Alla har nu tillgång till CVS. Det finns en ny module 'eos' som kommer vara den module som innehåller koden. Just nu finns där ett litet hello world. :-)
  3. Preliminär spec
    Den preliminära specefikationen är nu klar. Vi visar den för killarna på VirtuTech nu på måndag och om de inte har något att invända blir den denvi redovisar.
  4. Byggmiljö på blixten
    Vi måste få fart på byggmiljön på Blixten. Alla ska kunna checka ut och kompilera eos där. (Åke och Gilbert)
  5. Daniel Fellke
    Daniel Fellke meddelar att han kommer vara bortrest under April månad.
  6. Nästa möte
    Tid för nästa möte är 12/3 13.00

$Id: 2003-02-25.html,v 1.1 2003/02/26 14:09:06 d00-pwa Exp $

Protokoll 2003-03-03

Protokoll 2003-03-03


Närvarande: Peter, Daniel E, Daniel F, Åke, Jens, Kalle, Gilbert, Bengt Werner

  1. Prelimenär specifikation
    Vi går igenom den preliminära specifikationen tillsammans med Bengt. Hans kommentar är lite kort och kanske att vi siktar för högt. Men överlag verkar han nöjd.
  2. Tekniska detaljer
    Vi går igenom endel tekniska detaljer om Simics.
  3. Status nanokärna
    Gilbert informerar att han nästan är klar med specifikationen av nanokärna
  4. Status keyboard driver
    Åke informerar att han har en keyboard driver som fungerar i DOS. Det som är kvar är att göra den EOS kompatibel.
  5. Status montior driver
    Åke informerar att monitio drivern i princip är klar. Den finns med i 'Hello World' versionen av EOS.
  6. Status minneshantering
    Jens och Kalle informerar att de fortfarande håller på att studera in hur minneshanteringen ska fungera.
  7. Status scheduler
    Peter och Daniel F informerar att det har satt sig in i hur en scheduler ska fungera och börjat implementera det som går att implementera just nu.
  8. Nästa möte
    Tidpunkten för nästa möte med Virtutech ska bestämmas i forumet.

$Id: 2003-03-03.html,v 1.1 2003/03/05 17:29:49 d00-pwa Exp $

Protokoll 2003-03-12

Protokoll 2003-03-12


Närvarande: Daniel E, Daniel F, Jens, Kalle, Gilbert

  1. Statusgenomgång
    Jens och Kalle - på väg att sätta igång med den fysiska minneshanteraren
    Daniel F och Peter - så gott som klara med schedulern. Det som fattas är funktioner ur stdc++-implementationen (t.ex. exceptions) samt kopplingen till nanokärnan
    Daniel - försöker se hur en implementation av C++-exceptions skulle kunna se ut.
  2. Nästa möte planeras på forumet
  3. I övrigt var det ganska händelselöst... kan bero på att det varit tentaperiod :-)

$Id: 2003-03-12.html,v 1.1 2003/03/13 19:39:05 d00-dek Exp $

Protokoll 2003-03-19

Protokoll 2003-03-19


Närvarande: Peter, Daniel E, Daniel F, Åke, Jens, Kalle

  1. Prel. Specifikation
    Lars har klagat på vår specifikation. Han tycker den är för stolpartad, att den saknar en tidsplanering, att formatet var fel (html istället för word eller pdf) och att han vill ha minnesanteckningar från våra mötet. Vi håller med om att den är stolpartad och att den saknar en tidsplan. Vi kommer åtgärda detta, se specefikationen. När det gäller formatet tycker vi det är larvigt att kräva pdf eller word. Vi tycker html duger bra, men vi kommer se till att den finns en pdf version. Minnesanteckningar och dagböcker för varje person har alltid funnits på vår projekthemsida.
  2. Status minneshantering
    Jens och Kalle meddelar att de har läst in sig på ämnet och är redo att börja implementera minneshanteringen. Återstående tid beräknas till 2 veckor.
  3. Status Scheduler
    Peter och Daniel F meddelar att de i princip är klara med implementringen av schedulern. Det som återstår att integrera den med övriga delar i EOS, främst med de delar som är ansvariga för själva bytet av trådar.
  4. Status I/O
    Åke meddelar att O:et är klart. Det går att skriva ut saker på skärmen i EOS. I:et bestämde vi oss att vänta med tills slutskedet av projektet då vi tänkt oss att implementera en console.
  5. Status Exceptions
    Daniel E har kollat på hur svårt det är att implementera exceptions. Hans bedömning är att detta är svårt och vi beslutar därför att skjuta detta på framtiden. Vi ska istället införa en return klass som returnerar utfallet från funktioner och metoder. Åke skriver denna klass.
  6. Status Nanokernel
    Gilbert var inte med på mötet. Vi har därför inte någon information om denna punkt.
  7. Kommande arbetsupgifter
    - Jens, Kalle Börja implementera minneshanteringen.
    - Peter, Daniel F Checka in schedulelern i eos modulen och se till att det funkar som det ska.
    - Åke, Daniel E Börja titta på interupts.
    - Gilbert ???
  8. Nästa möte
    Datum för nästa möte är 26/3 10.00 i E-ljusgården.

$Id: 2003-03-19.html,v 1.1 2003/03/19 10:44:21 d00-pwa Exp $

Protokoll 2003-04-09

Protokoll 2003-04-09


Närvarande: Peter, Daniel E, , Åke, Jens, Gilbert

  1. Syftet med möte
    Syftet med detta möte är att få klarhet i vad som måste göras i påsk för att vi ska bli klara med vårt projekt. Vi gör även en uppdelning av det återstående arbetet.
  2. Tidigare protokoll
    Det har slarvats med protokoll skrivandet. Protokoll saknas från de två senaste mötena och det kommer så förbli.
  3. Status
    Arbetet flyter på. Interupts fungerar nu, kvar att göra är ett snyggt interface så att användare kan sätta upp egna interupts. En första version av schedulern är kommitad och fungerar tillsammans med timerinterupts. Kvar att göra på den är en thread handeler klass, samt att när context switches fungerar få schedulern att utföra de verkliga context switcharna.
  4. Arbets planering
    - Minneshanteringen (Jens, Kalle, Gilbert )
    Eventuellt kommer vi här släppa målet med vituellt minne.
    - Context switches (Daniel E)
    - Keyboard (Åke)
    - Interupts (Daniel E)
    - Scheduler (Peter)
    - System calls (Åke)
    - Dokumentation (Alla)
  5. Påsklovs planer
    Åke hemma
    Jens borta vecka 1, hemma resten
    Gilbert hemma i Österrike, nåbar via email
    Daniel E hemma
    Kalle hemma
    Peter borta vecka 3
    Daniel F hemma första veckan i maj

$Id: 2003-04-09.html,v 1.2 2003/04/09 10:22:36 noname Exp $

Protokoll 2003-05-07

Protokoll 2003-05-07


Närvarande: Peter, Daniel E, Daniel F, Åke, Jens, Kalle, Gilbert

  1. Lägesrapport
    Saker som är klara:
    - Interupts
    - System calls
    - Skärm device
    - Tangentbords device
    - Scheduler (Så när som att den inte utför context-switches)

    Saker som inte är klara:
    - Virtuellt minne
    - Context-switches. Virtuellt minne måste vara klart först

  2. Dokumentation
    Dokumentationen måste bli klar. Följande uppdelning av arbetet gäller
    Doxygen - Alla måste se till att deras kod är korrekt kommenterad i cvs. Daniel E ser till att html-filerna genereras och läggs upp på hemsidan
    Projektrapport - Jens och Kalle
    Användarhandeledning - Åke och Daniel F
    Systemrapport - Jens och Kalle. Det ska skrivas en inledning till doxygenmanualen.
  3. Slutförandet av projektet
    Minneshantering - Gilbert räknar med att ha virtuellt minne klart på fredag
    Context switches - När det är klart fixar Daniel E till så vi kan utföra context-switches
    Program - Peter user program så vi har nått att köra.
  4. Nästa möte
    Nästa möte blir måndagen den 12 maj

$Id: 2003-05-07.html,v 1.3 2003/05/09 09:09:34 d00-dek Exp $

Protokoll 2003-05-14

Protokoll 2003-05-14


Närvarande: Peter, Daniel E, Daniel F, Åke, Jens, Gilbert

  1. Status (Nya saker sedan förra mötet)
    Virtuelltminne
    Virtuelltminne fungerar nu. Det finns en virtuell minneskontext som alla thread groups exekverar i. Det finns en bugg med null pekare som vi inte kunnat lokalisera än.
    Multitasking
    Multitasking fungerar nu. Shedulerd är uppdaterar så att den utför context switches
    Program
    Det finns en ny katalog /program med alla user program vi kommer ha med till redovisningen.
  2. Planering inför förhandsredovisning
    Doxygen kommentarer (Jens printar, Daniel E lägger upp på webben)
    Nullpointer Exceptions (Daniel E och Gilbert )
    Screenshoots användar handledning (Daniel F och Åke)
    Systembeskrivning (Jens)
    Bärbar dator med Simics (Peter)
    Bärbar dator utan Simics (Åke)
  3. Slutredovisningen
    Slutredovisningen planeras på fredag efter förhandsredovisningen
  4. Nästa möte
    Nästa möte är förhandsredovisningen på fredag den 16 maj klockan 10.00

$Id: 2003-05-14.html,v 1.1 2003/05/14 10:40:30 d00-pwa Exp $


$Id: projektpresentation.html,v 1.11 2003/05/15 22:03:13 d00-jli Exp $