4. Folyamatok A folyamat (processzus) fogalma Folyamat ütemezés (scheduling) Folyamatokon végzett "mûveletek" Folyamatok együttmûködése, kooperációja Szálak (thread) Folyamatok közötti kommunikáció 49
A folyamat (processzus) fogalma A folyamat (processzus): végrehajtás alatt álló program. Betölthetô program (jellemzôi) passzív lemezen tárolt betöltési cím belépési pont Processzus (jellemzôi) aktív a memóriában van/volt program címszámláló értéke regiszterek értéke lokális/globális változók értéke verem állapota core dump A processzus állapotai új (new) felvéve interrupt befejezett (terminated) futásra kész (ready) ütemezô intézkedése futó (running) I/O vagy esemény befejezôdése várakozó (waiting) 50 I/O eredménye vagy esemény kell
Processzus - vezérlô blokk (Process Control Block PCB) processzus állapot (process state) : new, ready, running, waiting, halted, sleeping, Program címszámláló (PC) értéke CPU regiszterek tartalma memória foglalási adatok account/user adatok I/O státusz információ (a folyamathoz rendelt I/O erôforrások, állományok listája) Processzus állapot információk (UNIX: ps, top; NT: Task manager) TOP: last pid: 9099; load averages: 0.00, 0.00, 0.01 11:33:35 29 processes: 28 sleeping, 1 on cpu CPU states: 99.6% idle, 0.2% user, 0.2% kernel, 0.0% iowait, 0.0% swap Memory: 128M real, 58M free, 120M swap free PID USERNAME THR PRI NICE SIZE RES STATE TIME CPU COMMAND 9099 fazekas 1 58 0 2608K 1952K cpu 0:00 0.42% top 226 root 1 58 0 912K 672K sleep 0:00 0.02% utmpd 4081 root 1 58 0 1904K 1648K sleep 0:00 0.02% sshd 4084 fazekas 1 48 0 2600K 2160K sleep 0:00 0.00% tcsh 583 root 1 45 0 1760K 1024K sleep 3:30 0.00% sshd 1 root 1 58 0 680K 312K sleep 0:02 0.00% init 166 root 5 58 0 2720K 2144K sleep 0:01 0.00% automountd 8895 root 1 59 0 9208K 10M sleep 0:01 0.00% Xsun 239 root 5 22 0 2296K 1928K sleep 0:00 0.00% vold 212 root 3 22 0 1168K 848K sleep 0:00 0.00% powerd 170 root 8 35 0 3608K 1936K sleep 0:00 0.00% syslogd 592 root 1 38 0 1560K 1120K sleep 0:00 0.00% ttymon 51
PS: USER PID %CPU %MEM SZ RSS TT S START TIME COMMAND fazekasg 513 1.1 2.012192 9848? S 15:00:12 0:38 /usr/openwin/bin/xsun :0 -nobanner -auth /var/dt/a:0-0s6gpt root 989 0.2 0.2 1184 1064 pts/6 O 08:41:39 0:00 ps -augx fazekasg 722 0.1 0.4 1992 1784 pts/6 R 15:39:28 0:00 /bin/tcsh fazekasg 719 0.1 0.7 3840 3128?? S 15:39:28 0:00 /usr/openwin/bin/cmdtool fazekasg 984 0.1 0.7 4528 3424? S 08:40:53 0:00 /usr/openwin/bin/textedit root 3 0.1 0.0 0 0? S 14:52:17 0:37 fsflush fazekasg 744 0.1 0.7 3864 3176?? S 15:57:25 0:00 /usr/openwin/bin/cmdtool fazekasg 620 0.1 0.4 2472 2080 pts/2 S 15:01:22 0:00 olwm -syncpid 619 fazekasg 733 0.1 0.7 3848 3120?? S 15:43:04 0:00 /usr/openwin/bin/cmdtool fazekasg 636 0.0 1.0 5496 4896 pts/2 S 15:01:38 0:03 /usr/openwin/bin/filemgr -Wp 0 291 -Ws 592 439 -WP 81 833 +Wi root 0 0.0 0.0 0 0? T 14:52:16 0:00 sched root 1 0.0 0.1 664 312? S 14:52:17 0:00 /etc/init - root 2 0.0 0.0 0 0? S 14:52:17 0:00 pageout root 119 0.0 0.3 1872 1240? S 14:53:04 0:00 /usr/sbin/rpcbind root 121 0.0 0.3 1992 1296? S 14:53:04 0:00 /usr/sbin/keyserv root 127 0.0 0.3 1920 1488? S 14:53:05 0:00 /usr/sbin/nis_cachemgr root 149 0.0 0.4 1928 1712? S 14:53:18 0:00 /usr/sbin/inetd -s root 154 0.0 0.4 2264 1824? S 14:53:18 0:00 /usr/lib/nfs/statd root 156 0.0 0.3 1864 1528? S 14:53:18 0:00 /usr/lib/nfs/lockd root 174 0.0 0.5 2912 2488? S 14:53:19 0:00 /usr/lib/autofs/automountd root 178 0.0 0.4 3712 2032? S 14:53:20 0:00 /usr/sbin/syslogd root 189 0.0 0.3 1808 1456? S 14:53:20 0:00 /usr/sbin/cron root 201 0.0 0.5 2824 2512? S 14:53:21 0:00 /usr/sbin/nscd root 211 0.0 0.2 2640 952? S 14:53:24 0:00 /usr/lib/lpsched root 229 0.0 0.2 1152 840? S 14:53:27 0:00 /usr/lib/power/powerd root 232 0.0 0.4 2104 1696? S 14:53:27 0:00 /usr/lib/sendmail -bd -q1h root 244 0.0 0.2 888 712? S 14:53:28 0:00 /usr/lib/utmpd root 259 0.0 0.4 2248 1936? S 14:53:29 0:01 /usr/sbin/vold root 289 0.0 0.3 1840 1376? S 14:53:35 0:00 /usr/lib/snmp/snmpdx -y -c /etc/snmp/conf root 298 0.0 0.4 2496 1704? S 14:53:37 0:00 /usr/lib/dmi/dmispd root 299 0.0 0.5 3144 2304? S 14:53:38 0:00 /usr/lib/dmi/snmpxdmid -s pader 52
Folyamat ütemezés (scheduling) Cél: mindig legyen legalább egy processzus, amelyik képes és kész a processzort lefoglalni. Processzus ütemezési sorok: job queue (munka sor) ready queue (készenléti sor) device queue (berendezésre váró sor) Folyamat migráció az egyes sorok között: 53
Folyamat ütemezôk: Hosszútávú ütemezô (long term scheduler, job scheduler) mi kerül a job queue-ba, lehet lassú, a multiprgramozás foka Rövidtávú ütemezô (short term scheduler, CPU scheduler) melyik folyamat kapja meg következô alkalommal a CPU-t, gyorsaság lényeges Szempontok: I/O igényes és CPU igényes folyamatok Context switch (process context a processzus továbbindításához szükséges összes információ rendszerezve, struktúrálva kapcsolódó adatszerkezetek.) 54
Folyamatokon végzett "mûveletek" (operációk) Processzus létrehozása (kezdeti betöltést kivéve processzust csak processzus hozhat létre!) Mechanizmusa: egy szülô (parent) folyamat létrehozhat gyermek (child) folyamatokat, majd a gyermekek további gyermekeket fastruktúra Erôforrás megosztás: Szülô és gyermek közösen használ minden erôforrást. A gyermek a szülô erôforrásainak egy részét használhatja. Nincs közös erôforráshasználat. Végrehajtás: Szülô és gyermek konkurens módon fut. (UNIX: parancs&) Szülô a gyermekre vár. (UNIX: parancs ) Címtér (address space) A gyermek a szülô duplikáltja. A gyermek betölt egy programot önmaga helyett. UNIX példák: fork, execve 55
Processzus megszün(tet)ése (termination) A folyamat végrehajtja az utolsó utasítását, majd megkéri az operációs rendszert, hogy törölje 56