OPERATIVSYSTEM OCH PRAKTISK LINUX Föreläsning 3 – Vecka 45 2010 INNEHÅLL Processtillstånd Avslutning av processer Kommunikation mellan processer Liv och leverne Prioritering Processtillstånd På en dator körs endast en process/processorkärna åt gången Under tiden gör de andra processerna ingenting annat än väntar på sin tur Två grundläggande tillstånd Exekvera Redo att exekveras Process A Exekvera Redo Redo Exekvera Redo Redo Process B Redo Exekvera Redo Redo Exekvera Redo Process C Redo Redo Exekvera Redo Redo Exekvera I figuren ovan delar 3 processer lika på processortiden, de får m.a.o. exekvera 1/3 av tiden och vänta 2/3. Processtillstånd Metoden för att fördela tid mellan processerna, visat i bilden på föregående slide, är fungerande men inte särskilt effektiv. Anta, att vi har två samtidiga processer, den ena processen är en krypteringsalgoritm och den andra processen är en Word-process som strax efter uppstart hämtar ett dokument från hårdskivan. Krypteringsalgoritmen använder processorn under all sin processeringstid Word-processen använder inte processorn alls medan den hämtar data från hårddisken I detta fall skulle processorn utnyttjas väldigt ineffektivt om man fördelade processtiden jämnt mellan word- och krypteringsprocessen. Processtillstånd Man introducerade därför ett nytt tillstånd: blockera (eng. Blocking) Att en process är i blockerande tillstånd innebär att den slutar exekvera och frånsäger sig rättigheten att använda processorn tills en viss händelse Inträffat I exemplet beskrivet på föregående slide skulle då Word-processen ge ifrån sej processortiden medan data laddas upp från hårdskivan och i stället låta krypteringsprocessen jobba i processorn. Processavslutning Alla processer som startas upp måste förr eller senare stängas av En process stängs givetvis av om strömtillförseln till datorn avbryts... Andra sätt att avsluta processer på är följande: När processen gjort det den skall, avslutar den sej själv (alla instruktioner i programmet har utförsts) antingen genom ett s.k. systemanrop (exit()) eller genom att koden helt enkelt tar slut Processen avslutas av en annan process eller av en användare med hjälp av ett systemanrop eller kommandot kill. Kill skickar en signal till operativsystemet och om den som kör anropet har tillräckliga rättigheter avslutas processen Processen uppfört sig ”inkorrekt” och operativsystemet låter inte processen fortsätta (t.ex. Ber om mer minne än det finns tillgängligt) Processkommunikation Processer behöver ofta kunna kommunicera sinsemellan på ett eller annat sätt. Exempel: Processen för filsystemet behöver kommunicera med processen som sköter om kommunikation med hårdskivan IPC (Inter-process Communication) är en samling tekniker för att byta ut data mellan samtidigt exekverande processer Processkommunikation Vanliga IPC tekniker: Teknik Beskrivning Signaler Korta fördefinierade meddelanden. T.ex. STOP (ber en process stanna upp), CONT (ber en stoppad process fortsätta), KILL (slutligen stänga av en process, generaras t.ex. om man trycker ctrl+d på tangentbordet. Rörledning Används för att styra om standard-input/standard output mellan processer Delat minne Processer skriver helt enkelt växelvis till samma minnesplats Filer En process skriver in data i en vanlig fil, och den andra processen avläser innehållet av filen. Schemaläggning: Round robin Är en schemaläggningsalgoritm i den enklaste formen som helt enkelt tilldelar tidskvanta till alla processer som vill exekvera När alla processer exekverats med sitt tilldelade tidskvanta en gång, får igen den första processen exekvera en andra gång enligt tidskvantat. Detta upprepas tills processerna exekverats klart De flesta operativsystem har en schemaläggningsalgoritm som baserar sej på Round robin Problemet som uppstår när man använder Round robin är att bestämma storleken på kvantan Schemaläggning: Round robin Om kvantan är kort, upplevs systemet som mycket responsivt, men mycket tid går åt till att byta mellan processerna (kontext switching) => hög overhead (kräver prestanda av datorn) Om kvantan är lång känns systemet segt att använda, men processorn används mer effektivt (Linuxkärnan bytte storlek på kvantan mellan version 2.4 och 2.6. Duskussionerna var heta och ledde aldrig någonstans. Detta slutade med att Linus torvalds själv bestämde storleken!!!) Schemaläggning: Prioritering Ett tillägg som ofta används till Round robin Används bl.a. i Linux och i standard-Unix I Linux sätts prioriteterna engligt följande skala: Värde för prioritet Betydelse -20 Högsta prioritet 0 Medelprioritet (som standard startas alla processer med prioritet 0) 19 Lägsta prioritet Schemaläggning: Prioritering Gör det möjligt för användaren att berätta år operativsystemet vilka processer hon/han anser vara viktigast och vilka som är mindre viktiga Prioriteten för en process betyder i praktiken hur stort tidskvanta den får vid exekvering Varför vill vi inte starta alla processer med högsta prioritet? Vissa serverprocesser/demoner som är ”osynliga” för användaren är onödiga att köra med hög prioritet, t.ex. e-post, kontroll efter uppdateringar. Man kan därför spara processorkraft genom att ställa in lägsta prioritet för dylika processer Processer för input, t.ex. inmatning från tangentbordet, bör ha högsta prioritet, eftersom det är otroligt störande om ett program inte reagerar genast på ett tangenttryck. Kommandon för processhantering i Linux: ps Listar processer som körs på datorn Exekvering utan flaggor ger följande resultat Förkortning Betydelse PID Ett unikt ID för precessen TTY Namnet på terminalen varifrån processen startats TIME Totala processortiden som en process tagit i anspråk CMD Namnet på processen Kommandon för processhantering i Linux: ps Exekvering med flaggan -f Förkortning Betydelse UID Användarens unika ID PPID Processen som startade denna process C Procent av processorkapaciteten som används STIME Den tid då processen startades Kommandon för processhantering i Linux: ps Mera användbara flaggor till : Flagga Betydelse -A/-e Visar info om alla processer som körs på datorn -a Visar processer som är kopplade till en terminal föurtom startsessionen --help Skriver ut ett hjälpmeddelande om hur ps-kommandot skall användas -l Visar ytterligare info om de körande processerna -N Visar de processer som inte matchar resterande uttryck -p Sorterar alla processer enligt process-ID -u # Visar processer som tillhör användaren # Kommandon för processhantering i Linux: top Visar system- och processinformation Information läses av från /proc katalogen (liksom ps) Vid exekvering uppdateras informationen vanligen var femte sekund (uppdateringsfrekvensen kan styras med flaggan -d) Som standard sorteras processerna som visas på så sätt att den mest processorintensiva processen visas högst upp Kommandon för processhantering i Linux: nice Används för att starta upp en process med en viss prioritet Anta t.ex. att du på en server vid jämna mellanrum kontrollerar att användarna har ett tillräckligt bra lösenord genom att köra en lösenordscracker på filen /etc/passwd. En lösenordscracker använder är en storkonsumerare av processorn men det är irrelevant om det tar t.ex. 5 eller 10h innan crackningen är klar. I detta fall vore det vettigt att starta lösenordscrackern med en låg prioritet Nice används enligt följande: nice –n prioritetsnivå program (t.ex. nice –n -20 kör find-kommandot med högsta prioritet Kommandon för processhantering i Linux: kill Används för att stänga av, eller rättare sagt döda processer! Fungerar på så vis att en signal skickas från en process (t.ex. terminalen ifall användaren skriver kill på kommandotolken) till den process som skall dödas Användning av kill: Option Betydelse kill processnummer Stänger av processen med det specifika processnumret ”på ett snällt sätt” (tar t.ex. hand om osparat arbete) killall processnamn Stänger av alla processer med det specifika namnet kill –HUP processnummer Används för att starta om en process kill -9 processnummer Slår brutalt ihjäl en process (tar t.ex. ej hand om osparat arbete)! Behövs ofta om en process låst sej och inte svarar på vanlig kill Kommandon för processhantering i Linux: at Gör det möjligt att utföra ett specifikt kommando eller starta ett visst program ”i framtiden” Exempel: at 08:00 111210 at> echo ”hej på dej” at> ctrl+d På första raden ställs in att man vill utföra ett kommando 12.11.2010 kl 8.00 På andra raden definieras att man vill att meddelandet ”hej på dej” skall visas på bildskärmen ctrl+d avslutar kommandoinmatningen Kommandon för processhantering i Linux: cron Används när man vill utföra ett kommando upprepade gånger efter ett speciellt mönster exempel: man vill automatiskt göra backup på data en gång / dag Den bakomliggande demonen till cron-kommandot heter crond Inställningar till crond finns i crontab-filen /etc/crontab crontab-filen är uppbydd så att den först visar tidpunkten då ett visst kommando skall utföras och sedan visar den vad som skall utföras Kommandon för processhantering i Linux: cron Crontab kommandon: Kommando Betydelse crontab –e Editera crontab filen crontab –l Visa crontab filen crontab –r Radera crontab filen Använd kommandot : export EDITOR=editor för att definiera vilken editor du vill editera crontab filen i när du kör kommandot crontab –e (t.ex. export EDITOR=pico om du vill använda Pico som texteditor) Kommandon för processhantering i Linux: cron Crontab filen: * * * * * command to execute - - - - | | | | | | | | | +----- veckodag (0 - 6) (Sunday=0) | | | +------- månad (1 - 12) | | +--------- dag (1 - 31) | +----------- timmar (0 - 23) +------------- minuter (0 - 59) Exempel: 30 18 * * * rm /tmp/* Raderar innehållet i /tmp katalogen varje dag, kl 18:30