UNIX 6. Procesy a jejich správa

Slides:



Advertisements
Podobné prezentace
HYPERTEXT PREPROCESSOR. PROGRAMOVÁNÍ. DEFINICE POJMŮ Problém Problém nevyřešený, nežádoucí stav obvykle vyžaduje nějaké řešení Neřešitelný problém Neřešitelný.
Advertisements

SOFTWARE dálkové studium PODNIKÁNÍ 2. listopad 2006.
Správce virtuálních strojů Martin Sloup Natalia Rubinova Jiří Kučera.
M. Štulc, J. Šváb, J. Kolena SIMULACE OPERAČNÍHO SYSTÉMU
Operační systémy. OPERAČNÍ SYSTÉMY pomoc operátorovi, podpora vlastností reálného času, víceuživatelských a více úlohových systémů.
Bezpečnost v Linuxu Zpracoval: Roman Danel. Balíčkovací systém Způsob distribuce SW Ošetřuje a řeší závislosti Díky „podepisování“ balíčků nehrozí podstrčení.
Příkazový řádek Windows
Operační systém Adam Greguš, 4.A.
Vzdělávací materiál / DUMVY_32_INOVACE_02B17 Příkazový řádek: procesy AutorIng. Petr Haman Období vytvořeníÚnor 2013 Ročník / věková kategorie3. ročník.
Co je Linux? Základní pojmy
13AMP 6. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled Synchronizace procesů Synchronizace procesů Producent-Konzument Producent-Konzument.
Základy algoritmizace a programování
Štěpán Lískovec, 4.A.  =základní programové vybavení počítače (tj.software)  hlavní úkol:  A, zajistit uživateli možnost ovládat PC  B, vytvořit pro.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Informatika / programování
Operační systémy.
Operační systémy.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
13AMP 2. přednáška Ing. Martin Molhanec, CSc.. Stav procesu (kontext) Stav procesu je úplná informace, kterou je nutné uschovat při přerušení procesu,
Správa procesů.
Gymnázium, SOŠ a VOŠ Ledeč nad Sázavou I NFORMAČNÍ A KOMUNIKAČNÍ TECHNOLOGIE Ing. Jan Roubíček.
13AMP 3. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled I. Co je to kontext úlohy Co je to kontext úlohy Task switching (přepnutí úlohy)
Správce virtuálních strojů Natalia Rubinova Martin Sloup Jiří Kučera.
Algoritmizace a programování Úvod do Delphi - 04 Mgr. Josef Nožička IKT Algoritmizace a programování
Stránkový editor vi Makra Pro často používané sekvence příkazů lze použít makra. :map makro sekvence_prikazu :unmap makro Zkratky :ab zkratka plny_tvar.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
UNIX Shell skripty Roman Danel VŠB TU Ostrava, Hornicko – geologická fakulta.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Správa procesů.
Operační systém GNU Linux Příkazy pro správu procesů.
1/28 PB153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ Vlákna 06.
OPERAČNÍ SYSTÉMY.
Základy operačních systémů Meziprocesová komunikace a synchronizace Jakub Yaghob.
Základy operačních systémů
Kontakty slajdy: ftp://ulita.ms.mff.cuni.cz/predn/POS.
Operační systém GNU Linux
Počítačová bezpečnost Cvičení 1: Zabezpečení startu PC © Milan Keršláger
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
Překladače 1. Překladače a programovací jazyky © Milan Keršlágerhttp:// Obsah:
Uvedení autoři, není-li uvedeno jinak, jsou autory tohoto výukového materiálu a všech jeho částí. Tento projekt je spolufinancován ESF a státním rozpočtem.
Počítačová bezpečnost 2. Bezpečnost v OS © Milan Keršlágerhttp:// Obsah: ● jádro,
Překladače Operační paměť © Milan Keršláger
UNIX 12. Komunikace mezi procesy © Milan Keršláger
Stránkování MATĚJ JURIČIČ 2015/2016 EP1 SPŠ A VOŠ JANA PALACHA KLADNO.
Paměti PC HDD, CD/DVD, USB Flash RAM a ROM Vnější paměť Disková paměť
Vypracoval / Roman Málek
Operační systém Windows
Programování mikropočítačů Platforma Arduino
Služby Windows Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Moduly.
Operační Systém Operační systém je v informatice základní programové vybavení počítače (tj. software), které je zavedeno do paměti počítače při jeho.
Operační systémy 9. Spolupráce mezi procesy
Vlastnosti souborů Jaroslava Černá.
Operační systémy - úvod
Soubor Soubor v informatice označuje pojmenovanou sadu dat uloženou na nějakém datovém médiu, se kterou lze pracovat nástroji operačního systému jako.
Překladače 3. Zápis programu
UNIX 10. Procesy © Milan Keršláger
Počítačová bezpečnost 2. Bezpečnost v OS
Operační systémy 13. Knihovny, spustitelné soubory
Překladače 3. Zápis programu
Operační systémy 9. Spolupráce mezi procesy
UNIX 7. Deskriptory a proudy
1. ročník oboru Mechanik opravář motorových vozidel
Operační systémy 13. Knihovny, spustitelné soubory
Překladače Zápis programu
UNIX 10. Procesy Obsah: algoritmus, program, proces, thread
Práce s procesy Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí Autor:
Operační systémy.
Přepínání procesů Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Správa procesů.
Transkript prezentace:

UNIX 6. Procesy a jejich správa Obsah: algoritmus, program, proces, thread spustitelný soubor (ELF), knihovny, loader, ABI stavy procesů, priority, nice vznik procesů, hierarchie skupiny procesů a jejich správa fork(), exec(), exit(), wait(), thready plánování úloh (nohup, at, cron) © Milan Keršláger http://www.pslib.cz/ke/slajdy 20.5.2011 http://creativecommons.org/licenses/by-nc-nd/3.0/

Co je proces algoritmus zápis postupu pro vyřešení úlohy program zápis algoritmu v nějakém programovacím jazyce proces spuštěný program thread (vlákno) odlehčený proces (proces má jeden či více vláken)

Algoritmus Al-Chorezmí perský matematik – algebra – algoritmy výpočtů 1145 přeloženo do latiny (Algorithmi...) původně návody, jak pracovat s čísly (včetně nuly) vlastnosti algoritmů konečnost obecnost (hromadnost) determinovanost stejné vstupy produkují stejné výsledky výstup (resultativnost)

Program realizace algoritmu v programovacím jazyce tomu však nerozumí procesor (CPU) nutný převod z prog. jazyka do instrukcí CPU překladač – kód vytvořen předem interpret – kód vytvářen průběžně za běhu souhrnně označováno jako software systémový zajišťuje chod počítače (režie chodu počítače) aplikační software konkrétní užitečná činnost (vlastní činnost)

Proces spuštěný program jeden program lze spustit vícekrát s různými daty umístěn v operační paměti počítače je prováděn procesorem proces se skládá z: vlastního kódu programu proměnlivých dat typicky v OS prováděno více procesů zároveň multitasking – rychlé střídání procesů na CPU

Thread (vlákno) odlehčený proces nižší režie při změně kontextu (střídání procesů na CPU) sdílí společný paměťový prostor stejná oprávnění, otevřené soubory, proměnné prostředí, ... rychlé vytváření a rušení vlákna efektivnější sdílení dat, synchronizace za cenu komplikací (tzv. souběh) využití v masivním paralelismu oblíbené ve Windows klasické procesy mají velkou režii problém bezpečnosti → webový prohlížeč s taby, Flash

Spustitelný soubor program ve vykonatelné podobě typicky soubor se strojovým kódem různé formáty (ELF, EXE, ...) též bytecode (Java) nebo skript (interpretace) specifické odlišení od ostatních souborů unixové systémy: nastaveno oprávnění „spustitelný“ Windows: přípona .EXE, .COM atd. specifický obsah pro danou platformu, architekturu systémová volání, instrukční sada, metadata → ABI (binární rozhraní) → též Wine na Linuxu

ELF Executable and Linkable Format původně pro Unix System V jako definované ABI 1999 – zvoleno pro unixové systémy spustitelné soubory, sdílené knihovny, object kód, core flexibilní a rozšiřitelný formát hlavička, segmenty, sekce, data není vztažen k jedné architektuře Linux, PlayStation, Nintendo, OpenVMS, ... nástroje: readelf, objdump, file

Knihovny soustředění často používaných funkcí snaha o opakované použití kódu první úspěšný pokrok ve stylu programování v Pascalu tzv. unity v jazyce C je standardní knihovna (libc) zjednodušuje jazyk, standardizuje šířeji jazyk nemusí být klíčová slova pro I/O apod. problém API, ABI, chyb v knihovních funkcích vydávání nových verzí (opravy, vylepšení) rozhraní se může změnit → čísla verzí knihoven

API Application Programming Interface způsob volání funkcí a návratové hodnoty funkce má parametry různých typů obvykle snaha o obecnost, přenositelnost, nezávislost API v unixových systémech definuje POSIX Windows mají vlastní Win32 (Windows API) kromě knihoven i systémová volání jádra (syscall) Windows skrývají syscall za meziprocesovou komunikaci mění se s novými verzemi (knihoven) API pak vzájemně nekompatibilní použité API volí programátor

Typy knihoven statické knihovny soubory s příponou .a knihovna se po překladu „přilepí“ k programu obstarává tzv. linker (dovede „přilepit“ i část ze .so) dynamické knihovny soubory s příponou .so (ve Windows DLL) program obsahuje jen seznam knihoven a funkcí při spuštění musí loader zavést též knihovnu bez knihovny program nefunguje knihovna může být sdílena mezi více procesy

Sdílené knihovny sdílet lze jen dynamické knihovny 1 knihovna = 1 soubor = 1 instance v paměti knihovna namapována do operační paměti proces, který ji využívá, ji má namapovánu také mapování provádí dynamický zavaděč (loader) relokovaná knihovna narušuje sdílení při kolizi umístění potřebuje nový proces knihovnu jinde kvůli efektivitě je vhodné rozmístění předpočítat v Linuxu prelink ideální rozmístění dle nároků dynamických binárek nutné zejména pro 32bitové systémy (jen 2 či 4 GiB)

Zavaděč (loader) neplést se zavaděčem jádra OS při bootu část v jádře OS rozpoznání formátu spustitelného souboru nakopírování spustitelného souboru do RAM typicky jen malý začátek skok na začátek zavedeného programu druhá část obsluhuje dynamické knihovny velký měnící se počet knihoven, netriviální optimalizace specializovaný program (dynamický linker) volá se ještě před spuštěním vlastního programu jeho umístění do binárky zajišťuje překladač (resp. linker) rozhodne o umístění dynamických knihoven v paměti nastaví sdílení knihoven s ostatními procesy

Dynamic loading knihovna se zavádí až za běhu programu využívá se speciální knihovní funkce nezajišťuje OS, ale sám program rozhoduje programátor modularizace programů při startu nemusí být všechny knihovny k dispozici → úspora paměti, automatické přizpůsobení problém: co když se knihovna změní za běhu programu?

ABI Application Binary Interface rozhraní na úrovni binárních souborů formát binárky (ELF, typ knihovny, …) začátek programu, rozlišení programu, datové části, ... konvence volání (knihovních) funkcí předávání parametrů v jistých registrech, zásobníku ABI vytváří kompilátor (překladač) změna ABI → nutno znovu přeložit (aplikace, knihovny) v Linuxu poměrně běžné s novou generací překladače není problém, protože ke všemu jsou zdrojové kódy u komerčních aplikací lze řešit statickým linkováním nezaměňovat s API (→ zaměřeno na data)

Životní cyklus procesu Vytvořený Ukončený Běžící Změna kontextu Připravený Blokovaný Fronta připravených procesů Fronta blokovaných procesů

Stavy procesů R – running (běžící) S – sleeping (spící) proces nevyužívá procesor D – uninterruptible sleep (nepřerušitelný spánek) během čekání na dokončení I/O operace T – stopped (zastavený) pozastavený běh procesu nebo krokování (ladění) Z – zombie ukončený proces, ale rodič nevyzvedl návratový kód

Ukázka výpisu procesů

Priority procesů nastavené uživatelem uživatel (správce) ovlivňuje běh úloh scheduler podle toho přiděluje procesu čas CPU nastavené jádrem používá interně scheduler pro svůj algoritmus scheduler zajišťuje změnu kontextu obsluhuje frontu připravených procesů při rozhodování o pořadí respektuje priority procesů

nice změna priority procesu běžný uživatel může prioritu jen snížit hodnoty -20 (nejvyšší) až 19 (nejnižší priorita) záporné hodnoty jen root používají se na systémové procesy (swapper atp.) nižší priorita → méně času CPU ovlivňuje krátkodobé plánování CPU nejnižší znamená, že běží jen je-li CPU iddle typicky např. zálohování nebo dlouhodobé úlohy příklad použití: nice program změna za běhu → příkaz renice

Vznik procesů unixové jádro umí vytvořit jen první proces typicky je to /sbin/init vytvořen ihned po počáteční inicializaci jádra v Linuxu lze parametrem jádra změnit, např.: init=/bin/bash ostatní procesy jsou potomci buď přímý potomek nebo „přes koleno“ hierarchii lze zobrazit jako strom následuje výstup příkazu: pstree -ap přepínač -a → všechny procesy, -p → včetně PID

init,1 |-acpid,1020 |-anacron,1605 -s |-atd,1221 |-crond,1210 |-dbus-daemon,1010 --system | `-{dbus-daemon},1012 |-dhcpd,1188 eth0 |-exim,1201 -bd -q1h |-mingetty,1243 tty4 |-mingetty,1244 tty5 |-mingetty,1245 tty2 |-mingetty,1246 tty3 |-mingetty,1247 tty1 |-mingetty,1248 tty6 |-ntpd,1177 -u ntp:ntp -p /var/run/ntpd.pid -g |-restorecond,937 |-rsyslogd,945 -c 4 | |-{rsyslogd},946 | |-{rsyslogd},947 | `-{rsyslogd},948 |-smartd,1238 -q never `-sshd,1169 `-sshd,1632 `-bash,1635 `-pstree,1679 -ap

Výpis procesů příkaz ps bez parametru jen vlastní a tohoto terminálu x – i procesy odpojené nebo jiného terminálu a – i cizí procesy u nebo l – doplňující informace O – třídění výstupu T – čas spuštění, v – virtuální paměť, r – rezidentní paměť

ps xu USER – jméno uživatele vlastnícího proces, též jeho oprávnění USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND ke 11406 0.0 0.0 139736 2148 ? Sl May19 0:00 gnome-keyring-daemon ke 11413 0.0 0.1 319604 3588 ? Ssl May19 0:01 gnome-session ke 11427 0.0 0.0 19932 80 ? S May19 0:00 dbus-launch --sh-syntax ke 11428 0.0 0.0 97968 1520 ? Ssl May19 0:03 dbus-daemon --fork ke 11463 0.0 0.1 134596 3412 ? S May19 0:08 gconfd-2 ke 11469 0.0 0.2 549588 7244 ? Ss May19 0:14 gnome-settings-daemon ke 11474 0.0 0.0 143940 772 ? S May19 0:00 gvfsd ke 11477 0.0 0.5 436120 17912 ? S May19 0:17 gnome-panel ke 11487 0.0 0.0 274240 276 ? Ssl May19 0:00 gvfs-fuse-daemon ke 12273 2.4 4.4 1188200 136756 ? Sl 08:27 17:49 firefox USER – jméno uživatele vlastnícího proces, též jeho oprávnění PID – číslo procesu %CPU – aktuální zátěž CPU %MEM – nepoužito (jinak obsazení paměti) VSZ – celková alokovaná paměť (včetně virtuální na disku) RSS – obsazeno v RAM (rezidentní) TTY – připojeno k terminálu č. (např. shell, příkazový řádek) STAT – stav procesu (S – sleeping, R – running, Z – zombie, ...) START – čas spuštění procesu (starší je zkrácen) TIME – kumulovaný čas CPU (spotřebovaný strojový čas) COMMAND – název spuštěného příkazu (lze změnit)

Skupiny procesů definuje POSIX číslo skupiny stejné, jako PID prvního ve skupině proces se může do skupiny připojit (nebo ji zdědit) skupině lze posílat signál → všem ve skupině skupiny usnadňují práci v terminálu celou skupinu procesů lze pozastavit → uvolní se terminál, lze spustit jiné procesy → opětovné obnovení běhu skupiny → skupiny se střídají, jedna vždy blokuje terminál je to obdoba přepínání oken v GUI

Správa úloh v shellu využívá skupiny procesů skupinou je jeden proces nebo kolona procesů tj. vždy najednou spuštěný příkaz spuštěný(-é) procesy blokují terminál např: grep slovo soubor.txt | less stiskem CTRL+z je skupina pozastavena objeví se znovu výzva shellu → lze zadat jiný příkaz skupiny jsou číslovány (viz výstup příkazu jobs) bg → odsunutí skupiny na pozadí + obnova běhu fg → přesunutí do popředí (připojení k terminálu) kill SIG %číslo → poslání signálu celé skupině

jobs správa úloh pomocí shellu původně pro znakové terminály cyklus: editor → kompilátor → spustit → editor → … správa úloh umožňuje úlohu: spustit → vim program.c pozastavit → stisknu CTRL+z → odpojí se od terminálu (vstup) spustit na pozadí → příkaz bg (úloha zůstane odpojená) vypsat spravované úlohy → příkaz jobs přesunout úlohu na popředí → fg úloha na pozadí se pozastaví, pokusí-li se o vstup úloha na pozadí vypisuje volně na aktuální pozici kurzoru může dojít k promíchání výstupu akt. programu a úlohy na pozadí

Vznik nového procesu nový proces vždy je potomkem jiného procesu proces si eviduje PPID (Parent PID) potomek dědí prostředí rodičovského procesu oprávnění, proměnné prostředí, otevřené soubory, ... skončí-li rodič, je novým rodičem PID=1 (init) init je univerzální „adopce“ existují dvě základní systémová volání: fork() a exec() ještě knihovní funkce, které je využívají či kombinují

fork() jediný skutečný vznik nového procesu dojde k rozdvojení procesu dále pokračují dva identické procesy potomek získá nové PID a dědí prostředí rodiče oprávnění, proměnné prostředí, otevřené soubory, paměťový prostor, … (jsou též výjimky, co se nedědí) fork() vrací v potomkovi 0 a v rodiči PID potomka pokračuje se následující instrukcí (příkazem) to je typicky if → potomek dělá něco jiného, než rodič potomek typicky následně volá exec()

exec() nahrazení běžícího procesu jiným programem parametrem volání je cesta k binárce zůstává zachováno prostředí procesu PID, oprávnění, otevřené soubory, ... k dispozici v podobě několika knihovních funkcí execl, execp, clone, …

exit(), wait() exit() ukončení běžícího procesu uvolní se paměť procesu, zavřou se soubory, ... lze předat návratovou hodnotu → integer do vyzvednutí návratové hodnoty je zombie wait() čekání na změnu potomka → blokující ukončení, pozastavení, obnovení běhu neblokující varianta je waitpid() přebírá návratovou hodnotu

fork(), exec(), wait() getty() exec('/bin/bash') shell fork() jméno + heslo Místo getty může čekat ssh démon (přihlášení ze sítě). exec('/bin/bash') shell ls fork() exec('ls') ls výpis adresáře wait()

Vytváření threadů thread je odlehčený proces thready sdílí stejnou paměť při přepínání mezi thready je nižší režie POSIX Threads – 1995 asi 100 funkcí pthread_*() 4 skupiny: správa threadů (vytvářejí, připojování atp.) mutexy podmíněné proměnné synchronizace mezi thready pomocí zámků a bariér

Plánování úloh snaha o rovnoměrné využití počítače dříve dávkové systémy dnes plánování běhu úloh v čase různé přístupy k řešení nohup cron at jobs

nohup vyloučení účinku signálu HUP původně generováno při zavěšení (dial-up, modem) signál ukončí skupinu procesů (potomky shellu) uživatel je odříznut, nemůže úlohy již řídit zajištěn „automatický úklid“ po (násilném) odpojení někdy je potřeba, aby úloha ukončena nebyla příkaz nohup nastaví ignorování signálu HUP shell pošle HUP, ale proces neskončí, signál ignoruje nohup příkaz & nohup příkaz > výstup.txt 2>&1 &

at slouží k odloženému jednorázovému spuštění vstupem příkazy at je série příkazů nebo dávka série příkazů se ukončuje CTRL+d příklad použití: at now + 15 min < skript.sh at -f skript.sh MMDDYY teatime na pozadí běží démon atd v celé minuty (nebo po 5 minutách) spouští příkazy uložené ve frontě v adresáři /var/spool/at atq – výpis fronty příkazů atrm – smazání příkazu z fronty (podle čísla)

cron slouží k periodickému spouštění úloh příkazem crontab se pracuje se speciální tabulkou crontab -e editace tabulky, implicitně je použit editor vi lze změnit definováním proměnné VISUAL či EDITOR využijeme aliasy nebo inicializační soubory shellu zde je nutné vytvořit proměnnou prostředí: export VISUAL VISUAL=mcedit crontab -e výpis tabulky: crontab -l formát tabulky je explicitně určen

Formát tabulky pro cron jeden řádek = jeden záznam, několik položek: minuty: 0 – 59 hodiny: 0 – 23 den v měsíci: 1 – 31 měsíc: 1 – 12 nebo anglický název den v týdnu: 0 – 7 (0 a 7 je neděle) nebo angl. zkr. příkaz: exec /cesta/ke/skriptu/či/binárce místo položky může být hvězdička („vše“) 0 0 * * * exec $HOME/bin/skript případný výstup je zaslán uživateli e-mailem proto je výstup příkazu typicky přesměrován