Linuxrapport side 1

 
tilbage  frem
The Linux Way

Indhold


Indhold

1 Forord 4

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



1



The Linux Way

Indhold


                5.2.1 Hovedstruktur 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


2


The Linux Way

Indhold

Bilag 1 VFS-filer 60

Bilag 2 Major numbers i Linux 62Bilag 3 GNU GENERAL PUBLIC LICENSE 63


3



The Linux Way

Forord

1 Forord

Rapporten omhandler Linux som et "case-study" med baggrund i almindelig viden om operativsystemer, samt et vist kendskab til PC-arkitekturen. Rapporten er udarbejdet under datapakke-kurset OS på Ingeniørhøjskolen Københavns Teknikum i perioden 17.02.97 til 14.04.97. Projektet er et rent dokumentationsprojekt, dvs. at der ikke er udført nogen konkret øvelse i forbindelse med projektet.

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:
 

"Do you pine for the nice days of Minix 1.1, when men
were men and wrote their own device drivers? Are you
without a nice project and just dying to cut your teeth
on an OS you can try to modify for your needs? Are you
finding it frustrating when everything works on Minix?
No more all-nighters to get a nifty program working?
Then this post might be just for you.
 

Don't try this at home, kids! (red.) 

4



The Linux Way

2 Indledning

2 Indledning

Linux er et operativsystem, som har sit udspring i UNIX-verdenen, men til forskel fra UNIX stiller Linux forholdsvis små krav til hardwaren. Den kan køre på forskellige hardware-platforme, bl.a. Sparc, Alpha og Mips, men vi vil her kun beskæftige os med dén version, som er beregnet til Intels x86-processorer ('386, '486 og Pentium).

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.

2.1 Hovedkarakteristika

2.1.1 Linux er:

Multi-tasking
Linux understøtter ægte multi-tasking. Alle processer kører helt uafhængigt af hinanden. Ingen processer behøver at tage højde for at sørge for processor-tid til andre processer.

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.


5



The Linux Way

2 Indledning


Dynamisk cache for harddisken
Brugere af MS-DOS er kendt med behovet for at reservere hukommelse af en bestemt størrelse til harddisk cache programmer som SMARTDRIVE. Linux justerer dynamisk størrelsen af cache hukommelse som bruges, for at tilpasse sig den nuværende hukommelsessituation. Hvis der ikke er mere hukommelse tilbage på et givent tidspunkt, reduceres størrelsen af cachen for at frigive hukommelse. Når først hukommelse er frigivet, øges cache området igen.

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.


6



The Linux Way

2 Indledning

TCP/IP, SLIP og PPP understøttelse
Linux kan integreres i lokale UNIX netværk. I princippet kan alle netværk services som NFS og Remote Login bruges. SLIP og PPP understøtter brugen af TCP/IP protokollen over serielle linier. Det betyder at link til Internet via telefonnetværk ved hjælp af modem er muligt.

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.

2.1.2 Linux er ikke:

Linux er ikke et real-time system. Bl.a. virtual memory gør det umuligt for Linux at overholde kravene til et "hard" real-time system, men det kan laves mere real-time end det er i dag, bl.a. ved at arbejde med scheduling'en og optimere interruptene.

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.


7


The Linux Way

2 Indledning

2.2 Hvorfor Linux?

Linux er i dag det eneste frie flerbrugersystem med mulighed for multi-tasking på IBM-PC kompatible hardware-platforme. (Man kan som studerende få en gratis SCO-UNIX og snart også en gratis PC-Solaris, men dette er ikke fri software, kun gratis. Der er nemlig ikke sourcekode med.) Den store styrke ved Linux består i, at det er et system, som ligger uden for den almindelige kommercielle verden. Det betyder bl.a., at man som bruger ikke er låst fast til en dyr opgradering af systemet og af diverse applikationer med jævne mellemrum. Meget software til Linux kan gratis hentes ned fra Internettet. Desuden ligger kildekoden til Linux frit tilgængeligt på Internettet, således at man kan ændre, udvide og eksperimentere med systemet selv.

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.

2.3 Linux historie

Linux blev skrevet af Linus Torvalds (Finland) som afgangsprojekt, og er bl.a. inspireret af Andrew Tanenbaums Minix. Første version var tilgængelig på Internet i oktober 1991. Da kildekoden var frit tilgængelig, blev systemet hurtigt videreudviklet af alle mulige Internet-brugere, som syntes, at det var sjovt at programmere til deres eget lille gratis operativsystem. Derfor blev Linux efterhånden et veludviklet stykke software, med mange bidragsydere.

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.


8



The Linux Way

2 Indledning

2.4 Installation af Linux

Linux stiller ikke særligt store maskinkrav, og den kan sameksistere fredeligt med MS-DOS, enten i samme partition, eller i en anden. Installation af Linux kan dog godt være lidt kompliceret. Har man kun selve Linux-kernen, som er gratis, skal man selv kompilere den og download'e diverse shells og editorer og andet næsten uundværligt værktøj.

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. 

9


 
tilbage  frem

Tilbage til Hanne's Linuxrapport Page
Tilbage til Hanne's Linux Page
Tilbage til Hanne's HomePage

Denne side vedligeholdes af Hanne Munkholm (<hanne@sslug.dk>)