OPERATIVSYSTEM OCH PRAKTISK LINUX Föreläsning 2 - 4.11.2010 INNEHÅLL Operativsystemarkitekturer Processer Kommandotolkar
Operativsystemarkitektur Operativsystem är otroligt stora (i Mb) och komplexa OS/360 (En av de första operativsystemen som utvecklades av IBM) utvecklades av ca 5000 olika programmerare under en period av fem år och innehöll drygt 1 miljon rader kod!!! Linux-kärnan (med Linus Torvalds som chefsutvecklare) har tusentals programmerare världen över Version 2.6.22 av Linuxkärnan , lanserad i Juli 2007, innehåller 8 259 076 rader vilket är tre miljoner fler än i version 2.4.22 som lanserades 2003 Jämfört med andra operativsystem är Linux litet!!
Operativsystemarkitektur Finns i huvudsak fyra olika arkitekturmodeller Monolitisk Skiktad Mikrokärna (Den virtuella maskinen)
Monolitisk arkitektur Många program och operativsystemkärnor brukar beskyllas för att vara monoliter!!! Med monolit menas att hela programmet består av ett block med kod Varje del är innesluten i kerneln och kan direkt kommunicera med andra delar, t.ex. Filsystemet kan direkt kalla på minnesallokeringssystemet De flesta monolitiska operativsystemkärnor är dock inte till arkitekturen rena monolitkonstruktioner Utvecklarna har i stället ofta skapat en logisk struktur som placerar viss funktionalitet i block och sedan blocken i ett antal lager/skikt
Skiktad arkitektur I praktiken realiseras ofta lagerbaserad/skiktad struktur på det sättet att källkoden delas in i olika underkataloger och så finns det regler för vilka variabler som får användas och vilka funktioner som får anropas En äkta skiktad konstruktion är dock baserad på ett antal lager där ett lagar bara kan anropa ett angränsande lager och bara genom ett visst antal förutbestämda anrop
Mikro- och nanokärnor Tanken är att själva kärnan endast skall hantera den mest basala funktionaliteten och att allt annat skall skötas av processer som exekveras utanför kärnan Funktionaliteten är uppdelad så att mikrokärnan har ansvar för att skicka meddelanden mellan alla processer + att schemalägga dem Resten av funktionaliteten sköts av serverprocesserna I vissa fall har mikrokärnan inte ens ansvar för att schemalägga processerna (kallas för nanokärna)
Mikrokärna vs monolitisk kärna En monolitisk kärna är mycket effektivare eftersom ingen kommunikation behövs mellan olika serverprocesser (kärntrådar) En mikrokärna är dock mycket stabilare och har klarare design (För ett praktiskt exempel, se sid 55-56 i kursboken)
Arkitekturen i Windows och Linux Ursprungligen baserat på en mikrokärna Har modifierats mot monolitisk konstruktion bl.a. p.g.a kravet grafikprestanda Linux Ursprungligen designad av Linus enligt den monolitiska arkitekturen Fick kritik bl.a. av Tanenbaum (pappan bakom Minix) Rör sej dock mer och mer mot en mikrokernelkonstruktion Kerneltrådar (servrar) Moduler
Virtuell omgivning för operativsystem Inte egentligen en operativsystemarkitektur enligt den rätta bemärkelsen men ändå värt att nämnas! Ett tidsdelande system (timesharing system) erbjuder en exakt kopia av den existerande hårdskivan till en virtuell dator Innebär att på en fysisk dator kan man köra många virtuella datorer där alla datorer i princip har samma hårdvara som värddatorn De olika virtuella maskinerna kan köra olika operativsystem Exempel på virtualiseringsprogramvara är VMWare Server och WMWare Player
Virtuell omgivning för operativsystem
Processhantering En process är ett program som exekveras på en dator En process blir till/startas på flera olika sätt: Av operativsystemet vid uppstart av dator (t.ex. en printerserver- process) Av en annan process Interaktivt av en användare Operativsystem Operativsystem Printerserver Terminal Pico
Processhierarkin i Linux I Linux upprätthålls en processhierarki som ser ut ungefär som ett släktträd: Föräldraprocess Barnprocess Barnprocess Barnbarnproc. Barnbarnproc. Barnbarnproc. Barnbarnproc.
Processhierarkin i Linux Init-processen är förälder till alla processer i Linux-systemet Init (process 1) Barnprocess Barnprocess Barnbarnproc. Barnbarnproc. Barnbarnproc. Barnbarnproc.
Processhierarkin i Linux En process kan ha flera barn men endast en förälder En föräldraprocess i Linux känner till alla sina barnprocesser och tillsammans kallas dessa för en processgrupp Om en föräldraprocess ”kraschar” förvandlas barnen till s.k. ”orphanprocesser” (föräldralösa) Barnen ”adopteras” i detta fall av init-processen En annan variant av processer är zombie- eller ”defunced-” processer: En process som utfört sin uppgift men som inte fått sin avslutningsstatus avläst av sin förälder Uppstår t.ex. Om en föräldraprocess fastnat i en oändlig loop
Processhantering: Schemaläggare En processor i en dator är inte speciellt smart Processorn utför helt enkelt bara de uppgifter den blir tilldelad Det är operativsystemets uppgift att tilldela uppgifter åt processorn Man kan jämföra en processor med metalldetektorn i säkerhetskontrollen på ett flygfält! Metalldetektorn är processorn Varje människa i kö är en instruktion i en process som i tur och ordning ska hanteras av processorn I multiprogrammering system har vi flera processer (köer) och instruktioner (människor i kö) och plockas från de olika processerna(köerna) i tur och ordning enligt operativsystemets schemaläggare
Processhantering: Schemaläggare Dagens operativsystem möjliggör exekvering av flera program samtidigt Dagens datorer kan inte göra detta!!!!! (skulle i så fall behövas minst lika många processorer som exekverande program) Operativsystemet möjliggör dock samtidig exekvering m.h.a. multiprogrammering: Multiprogrammering innebär att vi har en schemaläggare som föredelar processortiden mellan de olika processerna som körs på datorn
Processhantering: Schemaläggare Schemaläggarens grunduppgift är att se till att alla processer får tillgång till datorns processor så att de kan utföras
Processhantering: Schemaläggare Mera faktorer en schemaläggare bör ta hänsyn till: Faktor Innebörd Interaktivitet Hur snabbt användaren uppfattar att datorn reagerar på t.ex. En tangenttryckning. Grundregeln för att optimera interaktivitet är att låta alla processer exekvera ofta men en kort stund varje gång. Genomströmmning Hur får man igenom så många jobb som möjligt på kortast möjliga tid? Detta är mera intressant på en server än på en arbetsstation. Förutsägbarhet Om samma uppgift utförs flera gånger skall den ta ”ungefär” lika lång tid varje gång. Rättvisa På ett system med många samtidiga användare kan det vara vettigt att låta var och en av användarna få tillgång till lika stor del av kapaciteten. Resursutnyttjande Vissa processer använder processorn mycket och andra använder den lite. Det kan vara effektivt att låta en process som gör exempelvis mycket diskarbete schemaläggas före en som utnyttjar processorn mycke. Om den bara utför lite processorarbete och sedan lämnar tillbaka den igen Prioritering Det skall vara möjligt för användarna och systemet att avgöra vilka processer som är viktigast och vilka som är minst viktiga.
Vad är en kommandotolk? Man kan säga att kommandotolken fungerar som en länk mellan användaren och operativsystemet Hanterar information som användaren skriver in från tangentbordet
Vad är en kommandotolk? Brukar även kallas kommandoskal eller “command shell” på engelska Är precis vad namnet säger, dvs. ett program som tolkar de kommandon som en användare ger och utför kommandona på enligt operativsystemet det bästa sättet Det goda med kommandotolken i Linux är att man kan via den effektivt använda operativsystemet såsom: hantera filer hantera processer skapa automatiska processer (t.ex. backup-kopiering av filer) konfigurera operativsystemet (uppstartskript odyl.)
Shellskript Förutom kommandon klarar kommandoskalet av att även tolka s.k. shellskript som är en sorts tolkat programspråk Ett shellskript skapas av vanliga kommandotolkskommandon som sparas i en fil med exekveringsrättigheter (chmod 700 filnamn) Ett skript kan t.ex. användas för att: att köras vid systemstart för att starta upp vissa program/processer automatiskt. skapa automatiska backup kopior av en viss katalog i filsystemet
Olika kommandotolkar Det finns flera olika kommandotolkar (program för att tolka kommandon) i Unix/Linux-världen, bl.a: Bourne Shell (/bin/sh) Bourne Again Shell (/bin/bash) C Shell (/bin/csh) Korn Shell (/bin/ksh) TC Shell (/bin/tcsh) Zsh (/bin/zsh) Bourne Again Shell (bash) är den abolut vanligaste kommandotolkaren idag
Tillgång till kommandotolken lokalt På ett Linux-system har man tillgång till kommandotolken via ett textgränssnitt (textbaserat program) som kan startas upp t.ex. via en meny ur operativsystemests GUI (Graphical User Interface) Man kan också starta operativsystemet utan GUI om man t.ex. kör Linux på en server och vill att systemet skall kräva så lite prestanda som möjligt Kommandotolken är också oftast det ända tillgängliga gränssnittet efter en systemkrasch vid försök att starta upp systemet från en installations-CD/DVD
Tillgång till kommandotolken över nätverk Administratörer av Linux-servrar ansluter sej ofta till en servers kommandotolk över ett nätverk (lokalnät/Internet) via gränssnittet SSH (Secure Shell) Det även finns SSH-klienter för Windows som tillåter SSH inloggning till en Linux-dator från en Windows-dator, bl.a. Putty, se http://www.putty.org/ (kan laddas ner gratis)
Distansinloggning med Putty
Distansinloggning med Putty