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