2 Indledning 5
2.1 Hovedkarakteristika 5
2.1.1 Linux er: 5
2.1.2 Linux er ikke: 7
2.2 Hvorfor Linux? 8
2.3 Linux historie 8
2.4 Installation af Linux 9
3 Proces management 10
3.1 Processtruktur 10
3.1.1 Procesrelationer 12
3.1.2 Proces ID 13
3.1.3 Procestabel 13
3.2 Interrupts 14
3.2.1 Bottom halves 14
3.2.2 Timer interruptet 14
3.3 Scheduler 15
3.3.1 Prioritet 15
3.4 Systemkald 16
3.5 Interproces-kommunikation 16
3.5.1 Synkronisering i kernen 17
3.5.2 Signaler 17
3.5.3 Kommunikation via filer 18
3.5.4 Pipes 19
3.5.5 System V IPC 19
4 Memory management 20
4.1 Virtual memory 20
4.2 Swapping 20
4.3 Paging 21
4.4 Segmentering 22
4.4.1 Selector'er i 80386 23
4.4.2 Segment descriptor'er 24
4.5 Generering af fysisk adresse 26
4.5.1 Konvertering af virtuel adresse 26
4.5.2 Konvertering af lineær adresse 27
4.5.3 Konvertering af lineær adresse i x86 27
4.6 Page replacement algoritmer 29
4.6.1 Simulation af LRU i software 29
4.7 Page fault handling 30
5 Filsystemer 31
5.1 Historien bag Linux filsystemer
32
5.2 Fundamentale filsystemkoncepter
33
5.2.2 Inodes 33
5.2.3 Biblioteker 34
5.2.4 Links 35
5.2.5 Device specialfiler 35
5.2.6 FIFO´s (navngivne pipes) 35
5.2.7 Sockets 36
5.3 VFS-laget 37
5.3.1 Mounting af filsystemer 37
5.3.2 Inodes og inodeoperationer 38
5.3.3 Filstrukturen og filoperationer 40
5.4 Ext2 filsystem 41
5.4.1 Fysisk struktur af Ext2 filsystem 41
5.5 Proc filsystemet 42
6 Input/Output 43
6.1 I/O i Linux 44
6.2 Data-overførsel mellem perifere enheder og CPU 45
6.2.1 Buffer cache 45
6.2.2 DMA 45
6.2.3 IRQ 46
6.2.4 I/O adresser 47
6.2.5 IOCTL 47
6.2.6 Spooling 47
6.3 Hardware detect ved opstart 48
6.4 Mount 48
7 Boot 49
7. 1 Bootstrapping 49
7.1.1 Master Boot Record 49
7.2 Opstart af Linux 50
7.2.1 LILO 50
7.2.2 Systemfiler i Linux 51
7.2.3 Login og logout 51
8 Brugergrænseflade 53
8.1 Kommandofortolker 53
8.1.1 Shell scripts 53
8.1.2 Andre faciliteter 53
8.2 X-windows 54
8.2.1 Opbygning 54
8.2.2 Konfiguration af X-windows 55
9 Interfacing med MS-DOS 56
9.1 Emulering af MS-DOS 56
9.2 Emulering af MS-Windows 3.1 57
10 Efterskrift 58
11 Litteraturliste 59
Bilag 2 Major numbers i Linux 62Bilag 3 GNU GENERAL PUBLIC LICENSE 63
I rapporten vil vi beskrive hvordan de vigtigste områder i et OS i hovedtræk er implementeret i Linux:
* Process management
* Memory management
* Filsystemer
* I/O
Desuden vil der være en kort beskrivelse af boot og systemfiler, brugergrænseflade samt interfacing med MS-DOS.
Vi vil undlade at beskæftige os nærmere med netværksdelen, selvom denne er meget grundlæggende for Linux, da det ville være alt for omfattende at forsøge at dække dette område i en rapport af denne størrelse.
Bekendtgørelse fra Linus Torvalds i forbindelse med frigivelsen
af den første officielle version af Linux, version 0.02, 5. Oktober
1991:
Don't try this at home, kids! (red.)
Linux er fra og med version 1.2 kompatibel med POSIX 1003.1 standarden. Denne standard definerer en minimums-grænseflade for et UNIX-type operativsystem. Software skrevet i UNIX kan generelt direkte anvendes til Linux. Da det omvendte også er tilfældet, kan Linux sagtens benyttes som f.eks. udviklingssytem for UNIX-programmer.
Store dele af Linux-kernen er skrevet af en finsk studerende ved navn Linus Torvalds. Han placerede programkoderne under GNU Public License, hvilket bl.a. betyder, at alle har retten til at bruge, kopiere og ændre på programmerne. Det er desuden tilladt at distribuere Linux gratis, eller at tage penge for den; blot er det ikke tilladt at fratage modtageren nogle af de rettigheder, der følger med. Det vil bl.a. sige at kildekoden skal være tilgængelig for slutbrugeren (se bilag 3 for GNU General Public License). Der findes i dag mange forskellige distributioner af Linux, men selve kernen er stort set den samme i alle distributionerne.
Linux er hovedsageligt skrevet i C, men enkelte hardware-specfikke eller specielt hastighedskrævende dele er skrevet i assembler-sprog.
Multi-user access
Linux tillader et antal brugere at benytte systemet samtidigt.
Demand load executables
Kun de dele af et program, som faktisk er påkrævet for
eksekveringen er load'et ind i hukommelsen. Når en ny proces er skabt
ved hjælp af fork(), afsættes der ikke straks hukommelse,
men i stedet bruges hukommelsen fra "parent" processen af begge processer.
Hvis den nye proces så på et tidspunkt søger adgang
til en del af hukommelsen i "write mode", kopieres denne sektion før
den ændres. Dette koncept kendes som "copy-on-write"; det er med
til at øge hastigheden og sænke hukommelsesforbruget.
Paging
På trods af forsøg på at anvende fysisk hukommelse
effektivt, kan det ske, at den tilstedeværende hukommelse er brugt
op. Linux ser så efter 4 kbyte hukommelses-pages, som kan frigives.
Pages med deres indhold lagret på harddisk (f.eks. koden for program
filer) frigives. Alle andre pages kopieres ud på harddisken. Hvis
der herefter søges adgang til en af disse hukommelses-pages, load'es
den igen. Denne procedure kaldes paging. Den adskiller sig fra swapping,
som anvendes i ældre UNIX-systemer, hvor hele hukommelsen for en
proces skrives til harddisken, hvilket er betydeligt mindre effektivt.
Shared libraries
Libraries er samlinger af rutiner, som er nødvendige for data-processing
for et program. Linux har et antal standard libraries, der bruges af flere
processer ad gangen. Det er derfor fornuftigt at load'e programkoden for
disse libraries ind i hukommelsen én gang for alle. Dette muliggøres
ved hjælp af shared libraries. Da disse kun loades til programkoden
når processen eksekveres, kendes de også som dynamisk linked
libraries (dll).
Understøttelse for POSIX 1003.1 standard og delvis System
V og BSD
POSIX 1003.1 definerer et minimum interface for et UNIX type operativsystem.
Dette interface er beskrevet i C-funktion deklarationer. Denne standard
understøttes nu af alle nyere og relativt sofistikerede UNIX-systemer.
Linux i dag understøtter tilnærmelsesvis POSIX 1003.1.
Yderligere system-grænseflader for UNIX udviklingsliner System V
og BSD er også implementeret.
Forskellige formater for eksekverbare filer
Da det meste software i dag er skrevet til MS-DOS eller MS-Windows,
er det ønskværdigt at kunne køre programmer til disse
systemmiljøer under Linux. Derfor er emulatorer for MS-DOS og MS-Windows
under udvikling. Linux kan også eksekvere programmer fra andre INTEL-baserede
UNIX-systemer, som går under iBCS2 standard. Dette inkluderer f.eks.
mange kommercielle programmer brugt under SCO UNIX. iBCS2 emulering er
endnu ikke del af standard kernen, men den kan download'es fra Internettet.
Emulering af matematisk co-processorer i kernen
Linux kan emulere den matematiske co-processor i387, hvis den ikke
findes i systemet. Det vil sige, at programmer ikke behøver at checke,
om der er co-processor til stede. Hvis der ikke er, udføres de relevante
kommandoer i exception handle rutiner. Fra programmørens side er
tilstedeværelsen af en co-processor altså transparent.
Understøttelse for nationale keyboards og fonte
Under Linux kan mange nationale keyboards og fonte anvendes. ISO-standarden
definerer Latin1 sættet, som bl.a. også inkluderer europæiske
specialtegn.
Forskellige filsystemer
Linux understøtter forskellige filsystemer. Det mest almindeligt
brugte filsystem er Second Extended (Ext2) File System. Dette understøtter
filnavne op til 255 tegn, og har et antal træk der gør det
mere sikkert end almindelige UNIX filsystemer. Et andet filsystem, som
også er implementeret, er MS-DOS filsystemet FAT. Det betyder, at
man kan få adgang til data i en MS-DOS-partition på samme måde
som i en Linux-partition, men i MS-DOS systemet understøttes ejerskab
kun for hele filsystemet. Desuden understøtter Linux UMSDOS filsystemet,
som også tillader pseudofiler og UNIX access autorisationer inden
for et MS-DOS filsystem. Ved hjælp af ISO 9660 filsystemet kan brugeren
få adgang til data på CD-rom. I netværk kan man få
adgang til filsystemet på andre systemer transparent ved hjælp
af NFS (Network File System). Linux understøtter desuden VFAT systemet,
som bruges af Windows 95 til lange filnavne. Andre filsystemer, der understøttes
er OS/2's HPFS (read only) og System V filesystem. Grunden til at HPFS
er read-only er at dokumentationen for det ikke er tilgængelig. Ingen
har turdet tage ansvaret for at lave en implementering der måske
kunne ødelægge nogens filsystem. Linux kernel 2.0 understøtter
ikke NTFS og FAT32, men det er på vej i kernel 2.2.
BSD sockets
Netværkskommunikation kræver naturligvis midler til interproces-kommunikation
mellem forskellige computere. Interfaces hertil er i BSD sockets.
System V IPC
Linux bruger dette til at lave message queues, semaforer og shared
memory. Disse er klassiske varianter til interproces-kommunikation.
Virtuelle konsoller
Linux understøtter virtuelle konsoller. Tastekombinationen <ALT>
+ <Function key> bruges til at skifte imellem dem.
Multiprocessing
Fra kernel 2.0 understøtter Linux symmetrisk multiprocessing
- samtidig kørsel af processer på et antal processorer - op
til 16 processorer.
Linux er ikke en microkernel (minimal kerne med veldefinerede grænseflader, så ydre dele nemt kan skiftes ud), men er opbygget som en monolitisk kerne.
Linux er ikke et distribueret operativsystem - alting foregår på én maskine.
Linux er ikke sikret efter de strengeste sikkerhedsprincipper, men der er indbygget en vis beskyttelse mod uforvarende at komme til at ødelægge systemet.
Linux kan ikke køre på en '286 eller ældre maskine, da den udnytter '386's virtual memory faciliteter.
Man kan ikke få nær så mange applikationer til Linux
som til f.eks. MS-operativsystemerne. Dette ser dog ud til at være
ved at ændre sig, så der bliver flere applikationer til Linux.
Prisen for den frihed anvendelsen af Linux giver er, at Linux til tider kan være lidt finurligt at håndtere, og at det ikke altid fungerer ordentligt på alle typer hardware. Til gengæld er det nemt at få hjælp på Internettet, hvis man har problemer eller spørgsmål - men det kræver selvfølgelig at man har et system, der kører først, så man kan komme på Internetttet... Linux går som andre UNIX-systemer ud fra at man som bruger ved hvad man gør. Man er trods alt et menneske, imens Linux blot er et operativsystem. Når man siger, at man vil slette en fil, går Linux ud fra at man mener det - der er ingen undelete. Hvis man ikke er opmærksom, kan man risikere at ødelægge systemfiler mm., så Linux er på mange måder ikke rent legetøj. Bruger man Linux på sin hjemme-PC fungerer man selv som en slags UNIX-systemadministrator, hvilket er et stort ansvar og kræver et godt overblik over systemet.
Da Linux i dag må siges at være et godt og stabilt system, giver det en god introduktion til UNIX-verdenen. For folk som allerede er kendt med UNIX, kan det ofte anvendes som alternativ til UNIX, hvis man f.eks. ønsker et UNIX-lignenede system på sin hjemme-PC, eller i et kontormiljø, hvor man måtte ønske en billig adgang til goderne ved et UNIX-baseret operativsystem. Linux giver desuden en nem og billig adgang til Internet og det øvrige informationsnetværk.
Systemet bærer præg af, at det ikke er designet og planlagt, men har udviklet sig uden en direkte styring. Folk har skrevet de ting til systemet, som de havde lyst til, og det kan derfor virke lidt tilfældigt hvilke ting der er arbejdet på. Dog er kommunikationen omkring udviklingen intens over nettet, og der er meget dygtige og seriøse mennesker, som tager sig af at teste og justere de nye bidrag til systemet, før de kommer med i en ny version. Pga. denne udviklingsform er Linux i konstant udvikling. Der ligger nye versioner af kernen på nettet hele tiden, og et problem, som bliver præsenteret på nettet den ene dag, er måske løst den næste.
Et resultat af, at det mest har været computer-interesserede studerende med Internet-adgang, som har udviklet systemet, er de forholdsvis små maskinkrav, som Linux stiller. Udviklerne har simpelthen ikke haft den nyeste hardware til rådighed; de har kun haft deres egen lille PC.
På grund af Linux usædvanlige udviklingsgrundlag, er det et meget robust og gennemtestet system - der er simpelthen så mange mennesker, der har set kildekoden, at de værste fejl er blevet rettet.
I dag findes der meget kommercielt software til Linux såvel som
GNU software, og flere PC-interesserede fatter interesse for systemet.
De værste fejl er rettet - Linux er ved at blive voksen. Det er dog
ikke sandsynligt at Linux vinder den store udbredelse blandt almindelige
mennesker lige foreløbig, da den stadig kræver et langt større
indblik i PC'ens indre liv end f.eks. MS-Windows 95 gør, og da der
stadig er færre applikationer.
Det letteste er at benytte en færdig distribution, som man for
eksempel køber på CD-ROM. Den vil som regel indeholde et installationsprogram,
samt compiler og andre værktøjer (spil), Window Manager mm.
Disse findes i forskellige udgaver - nogle er gratis (følger f.eks.
med en bog eller kan hentes på nettet), mens andre sælges til
meget forskellige priser. Selv med et af de dyre installationsprogrammer
spørger Linux under installationen om nogle tekniske ting, som f.eks.
MS-DOS eller MS-Windows aldrig ville drømme om at forlange, at brugeren
skulle vide. For at få X-Windows til at køre kan man for eksempel
risikere at blive spurgt om chipsettet på sit skærmkort.
Denne side vedligeholdes af Hanne Munkholm (<hanne@sslug.dk>)