Prosesser i Prosesstabeller (PCB - Prosess Control Block) Se på PD: kommandoene ps og top Bakgrunns Opprettelse av : fork og exec pid og ppid Foreldre, barn og barnebarn Utførelse av kommando i Eksempler på fork og exec Operativsystemer 1
Prosess-tabellen prosess-tabell prosessdeskriptorer køer PD 1 PD 2 PD 3 PD 4 PD 5 cpu-registre ressurser programkode date etc cpu-registre ressurser programkode date etc cpu-registre ressurser programkode date etc cpu-registre ressurser programkode date etc cpu-registre ressurser programkode date etc cpu-kø i/o-kø cpu-registre ressurser programkode date etc Operativsystemer 2
Prosess-tilstander og overganger Operativsystemer 3
Prosesstabell Prosesstabellen består av alle PD hvert innslag inneholder en PD PD lages ved opprettelsen av prosessen hele tid i minnet PD fjernes når prosessen termineres danner flere ventekøer: Prosesser, CPU og I/O Operativsystemer 4
Prosess-tabell Prosess-tabell Prosess-kø cpu-kø i/o-kø Første prosess i cpu-køen er kjørende prosess Prosess-tabellen inneholder adresser (pekere) til hver prosessdeskriptor-blokk PD 1 PD 2 PD 3 PD 4 PD 5 Operativsystemer 5
Plassering av PDer CPU Register 1 Register 2 Instruksjonspeker: PCB1 PCB2 Minne klsa fd l ksadf lkasdfj lasdkjflsdkjfg lsdkjfg lsdkjg lsdkjg lsdkj progra m glskdj glskdj glskdj glskdj glksjd glskjd glskdjg lskdk l data data klsa fd l ksadf lkasdfj lasdkjflsdkjfg lsdkjfg lsdkjg lsdkjg lsdkj cpu -regi stre prog ram dat aomr åde st akk neste in struks jon åpn e fi ler cpu -ti d forbrukt start- tids punkt cpu -regi stre prog ram progra m data prosess-id cpu-registre program dataområde stakk neste instruksjon åpne filer cpu-tid forbrukt start-tidspunkt kjør ende prosess bruker cpu en PCB3 dat aomr åde st akk neste in struks jon åpn e fi ler cpu -ti d forbrukt start- tids punkt cpu -regi stre prog ram dat aomr åde st akk neste in struks jon åpn e fi ler cpu -ti d forbrukt start- tids punkt Operativsystemer 6
Kommandoen ps -ef (prosess status) UID PID PPID %CPU STIME TTY TIME CMD root 0 0 5.9 Oct 08?? 08:49:34 [kernel idle] root 1 0 0.0 Oct 08?? 01:01:41 /sbin/init -a roberttl 8978 23485 0.0 Feb 17 ttypb 0:03.40 -bash (bash) root 18129 19175 0.0 12:39:13 ttypc 0:00.18 ps -ef walterk 19175 21772 0.0 12:38:38 ttypc 0:00.18 -bash (bash) sveinef 4896 13762 0.0 11:44:42 ttype 0:01.73 joe ov3.html sveinef 13762 22765 0.0 11:01:16 ttype 0:00.37 -tcsh (tcsh) Operativsystemer 7
UNIX prosesstilstander Operativsystemer 8
Kommandoen top (top cpu ) load averages: 0.11, 0.28, 0.26 12:52:49 103 processes: 1 running, 27 sleeping, 75 idle Memory: Real: 144M/183M act/tot Virtual: 32M/576M use/tot Free: 2048K PID USERN PRI NICE SIZE RES STATE TIME CPU COMMAND 7370 andersea 44 0 2856K 786K sleep 3:43 1.10% irc-2.8.2 19973 walterk 44 0 3056K 278K run 0:00 0.10% <top> 28 root 44 0 1592K 57K sleep 164:23 0.00% update 288 root 44 0 1760K 155K sleep 108:49 0.00% ypserv 1 root 44 0 440K 40K sleep 61:41 0.00% init 27275 luct 44 0 6272K 1359K sleep 18:55 0.00% ircd 492 root 44 0 1752K 147K sleep 8:09 0.00% cron 10374 oleas 44 0 2624K 573K sleep 3:26 0.00% irc-2.8.2 17043 andersn 44 0 2288K 368K sleep 2:52 0.00% irc-2.8.2 Operativsystemer 9
Bakgrunns - daemons Prosesser som jobber i bakgrunn og startes når systemet starter opp cron daemon Brukes for å sette opp jobber til periodisk kjøring Våkner en gang i minuttet og sjekker om den har noe å gjøre: Dersom det er det kjører den jobben, ellers legger den seg og sover igjen Kan sette opp jobber for kjøring om f. eks. 2 måneder Typisk bruk er backuprutiner som kjøres på tidspunkter med lite belastning En prosess kan legges i bakgrunn ved å legge til tegnet & etter kommandonavnet Eks.: xemacs & Operativsystemer 10
Opprettelse av Alle kommandoer/programmer som utføres i UNIX startes som egne For å starte en prosess må man allerede være i en prosess. Eks.:Skall tar imot kommando ved å starte en ny prosess (pskommando) Prosessen som starter er en ny prosess kalles foreldreprosessen. Prosessen som blir startet av foreldre-process kalles en barneprosess. Systemkallene som brukes er fork og exec. For å identifisere brukes pid (prosess id) og ppid (parent process id) Operativsystemer 11
Foreldre, barn og barnebarn Operativsystemer 12
Foreldre, barn og barnebarn Foreldreprosess Barneproses s Barnebarn Operativsystemer 13
Opprettelse av : metode Foreldreprosessen foretar systemkall fork og lager dermed en eksakt kopi av seg selv. Eneste forskjell er pid - process id En eksakt kopi betyr at en ny identisk PCB for denne barneprosess lages Barneprosessen foretar deretter exec systemkall som bytter ut koden den fikk fra foreldreprosessen med koden for den kommandoen den skal utføre Operativsystemer 14
Opprettelse 1 Rett etter fork-systemkallet har begge prosessene, både foreldre og barn, akkurat samme programkode (shellkoden). Etter at barneprosessen har utført exec-kallet skifter barne-prosessen over til å bruke ls sin programkode. Minne shellprogram data data ls-program Prosesstabell med PD er til prosessene foreldre 231 barn 233 Operativsystemer 15
Opprettelse av 2 opprinnelig prose ss: csh pid: 231 ppid: 1 før fork og exec fork fore ldreprosess: csh pid: 231 ppid: 1 barnepros ess: csh pid: 233 ppid: 231 etter fork exec ppid: parent process-id pid: process-id barnepros ess: ls pid: 233 ppid: 231 etter exec Operativsystemer 16
Utførelse av kommando under UNIX Foreldre-prosess wait Zombieprosess Foreldreprosess Barne-prosess fork execve Foreldreprosess Barneprosess Barneprosess fork - oppretter ny prosess execve - skifter ut programkoden exit - terminerer wait - suspenderer seg sjøl, venter på barneprosess exit Operativsystemer 17
Eksempel 1: printf("hei\n"); fork(); printf("paa deg\n"); Utskrift fra programmet: hei paa deg paa deg Operativsystemer 18
Eksempel 2 Start printf("hei\n"); printf("hei\n"); printf("hei\n"); printf("hei\n"); fork(); fork(); fork(); fork(); printf("paa deg\n"); printf("paa deg\n"); printf("paa deg\n"); printf("paa deg\n"); fork(); fork(); fork(); fork(); printf("gamle venn\n"); printf("gamle venn\n"); printf("gamle venn\n"); printf("gamle venn\n"); Utskrift fra programmet: hei paa deg gamle venn gamle venn paa deg gamle venn gamle venn Operativsystemer 19
Utførelse av kommando Det samme som å starte ny prosess dvs. det trengs fork og exec systemkall shell-prosessen venter hele tid shell utfører et wait-systemkall, mens barneprosessen ls utføres kommando ls > tullfil & går i bakgrunnen Operativsystemer 20
Hvordan fungerer shellprogrammet? Shellet går i en løkke (while (1) ) kommandoen leses og syntaks skjekkes etter fork er det ny prosess (med egen PCB) barneprosess får ny kode (ikke foreldeprosessen) dette oppnås med forskjellig retur verdi nr: foreldreprosess: positiv tall, barneprosess: null Operativsystemer 21
Shell - pseudokode Bruk av fork og execve fra skallet: int int nr; nr; while while (1) (1) { vis_prompt(); les_kommando(kom, param); } nr nr = fork(); if if (nr (nr!=!= 0) 0) wait(&status); /* /* foreldre */ */ else else execve(kom, param, 0); 0); /* /* barn barn */ */ Etter fork - kallet har vi to identiske fork-kallet returnerer en verdi til kallende program: Foreldreprosess får returnert barneprosess sitt pid Barneprosess får returnert verdien 0 (null) Operativsystemer 22
Ny kommando utføres Foreldre (shell), pid = 21 Barn (shell), pid = 31 nr 31 while (1) { vis; les; nr = fork(); if (nr!= 0) wait(...); else execve(...): } fork nr while (1) { vis; les; nr = fork(); if (nr!= 0) wait(...); else execve(...): } nr main() { 0 exec Barn (ls), pid = 31 0 programkode for ls-programmet } exit() Operativsystemer 23
uid og setuid Enhver prosess har en eier. Prosessen for rettighetene til eieren. Av sikkerhetsmessige hensyn er det mange funksjoner som kun spesielt priviligerte brukere har lov til å utføre. Eksempel er å aksessere infoen i PCB-ene For at en vanlig bruker skal kunne gjøre dette lages en kommando ps med såkalt setuid-bit satt. Dette betyr at prosessen får rettighetene til eieren av programfilen og ikke til den som startet programmet som er det vanlige. UID PID PPID %CPU STIME TTY TIME CMD walterk 19175 21772 0.0 12:38:38 ttypc 0:00.18 -bash (bash) root 18129 19175 0.0 12:39:13 ttypc 0:00.18 ps -ef Operativsystemer 24
Neste leksjon: Administrasjon av utstyrsenheter Klikk her for å se på neste leksjon. Operativsystemer 25