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 Pokud se zkratka vyskytne v textu, je nahrazena řetězcem plny_tvar. Zkratka se zruší příkazem: :una zkratka :set autoindent (ai) :set ignorecase (ic) :set number (nu) :set readonly (ro) :set showmatch (sm) :set showmode :set wrapmargin=n (wm=n)
Procesy v operačním systému UNIX Znalost a sledování procesů běžících v systému může správci pomoci při různých činnostech: - zvyšování výkonu systému (hledání procesů s největšími časovými nároky, jejich odkládání) - odstranění některých procesů (které blokují) - automatické spouštění procesů (volba času spuštění, pravidelné spouštění) Proces je běžící program. Při přihlášení do systému je uživateli přidělena jedna kopie shellu, běžící až do jeho odhlášení. Proces může být spuštěn pouze z jiného procesu. Původní proces - rodičovský, nově vytvořený - dětský. Hovoříme o narození procesu, smrti procesu. Rodičovský proces může spouštět mnoho dětských procesů, každý dětský proces má jednoho rodiče. Jestliže rodičovský proces zanikne dříve než jeho potomek, je tento potomek adoptován rodičem zaniknuvšího procesu. at - spouštění v určitém čase crontab - pravidelné opakování spouštění $ who | wc -l spuštění dvou procesů, komunikace prostřednictvím kolony
Procesy v operačním systému UNIX Procesy jsou jednoznačně identifikovány svým PID, který je přidělen jádrem při vytvoření. Jádro eviduje procesy pomocí datových struktur: - tabulka procesů - kontext procesu - adresový prostor procesu Pro uživatele je viditelný pouze adresový prostor, ostatní jsou v péči jádra. Tabulka procesů je součástí jádra, musí být stále dostupná v operační paměti počítače, obsahuje informace: - PID procesu a jeho rodiče - stav procesu - prioritu procesu - jméno procesu (příkaz, kterým byl spuštěn) - UID, GID vlastníka procesu - jméno řídícího terminálu - … Informace lze zobrazit pomocí příkazu ps. ps [-ef]
Operační systém UNIX V kontextu procesu je uložena ta část informace o procesu, která může být společně s adresovým prostorem procesu odložena na disk do oblasti swap: - prostředí procesu - systémové proměnné - jméno pracovního adresáře - stav všech otevřených datových souborů Informace o kontextu jsou procesu dosažitelné pomocí speciálních systémových volání. Adresový prostor procesu je složen ze tří částí: - textu programu (instrukce a konstanty) - datové části (globální proměnné) - programového zásobníku Všechny datové soubory, které proces otevřel nebo vytvořil, jsou evidovány v kontextu procesu. Na otevřený soubor se proces dívá prostřednictvím deskriptoru (při vytváření).
Operační systém UNIX $ps PID TTY TIME CMD ttyq2 0:00 ksh ttyq2 0:00 ps $ps -f UID PID PPID C STIME TTY TIME CMD vdumek :31:44 ttyq2 0:00 -ksh vdumek :00:01 ttyq2 0:00 ps -f $ps -l F S UID PID PPID C PRI NI P SZ:RSS WCHAN TTY TIME CMD b0 S * 104: db5c ttyq2 0:00 ksh b0 R :146 - ttyq2 0:00 ps
Operační systém UNIX $ps -e PID TTY TIME CMD 0 ? 0:01 sched 1 ? 3:11 init 2 ? 0:01 vhand 3 ? 11:50 bdflush 4 ? 0:00 munldd 5 ? 21:55 vfs_sync 6 ? 0:02 unmountd 7 ? 0:01 shaked 8 ? 0:00 tiled 9 ? 0:00 crmswapbu 10 ? 0:12 xfsd 11 ? 0:13 xfsd 12 ? 0:13 xfsd 13 ? 0:14 xfsd 14 ? 0:03 pdflush...
Operační systém UNIX $ps -u root UID PID PPID C STIME TTY TIME CMD root Nov 15 ? 0:01 sched root Nov 15 ? 3:11 /etc/init root Nov 15 ? 0:01 vhand root Nov 15 ? 11:50 bdflush root Nov 15 ? 0:00 munldd root Nov 15 ? 21:55 vfs_sync root Nov 15 ? 0:02 unmountd root Nov 15 ? 0:01 shaked root Nov 15 ? 0:00 tiled root Nov 15 ? 0:00
Operační systém UNIX Popis stavu procesu Fstatus procesu, hexadecimální informace o výskytu procesu v paměti nebo odkládacím prostoru. každá vlastnost je popsána jedním bitem. Sstav procesu (O - run, S - sleep, R - ready, I - idle, Z - zombie, T - traced, X - sxbrk) UIDčíslo uživatele PIDčíslo procesu PPIDčíslo procesu - rodiče Cpoužívá se při zařazování procesů do prioritní fronty READY PRI priorita procesu NIhodnota nice pro úpravu priority SZvelikost paměti, kterou proces zabírá, neobsahuje velikost sdílených prostředků WCHANhexadecimální popis situace, na kterou proces čeká, pokud je položka prázdná, proces nečeká, tedy běží nebo je ready TTYterminál (pro démony ?) TIMEspotřebovaný čas procesoru CMDpříkaz, kterým se proces spustil STIMEčas vytvoření procesu
Operační systém UNIX Procesy v Unixu vznikají na základě volání systémové služby fork tak, že jádro vytvoří kopii volajícího procesu. Systémová služba fork vytvoří novému procesu kopii všech datových struktur. Mezi kopií a původním procesem existuje jediný rozdíl, hodnota proměnné PID. Protože nový proces zdědil kontext rodičovského procesu, má stejné prostředí, pracovní adresář a stejné otevřené datové soubory. Protože nový proces zdědil i adresový prostor, je řízen stejným programem, jako rodičovský proces. Systémová služba exec umožní procesu výměnu obsahu adresového prostoru, tedy textu programu a dat, nikoliv však výměnu řídících struktur procesu. Kontext procesu zůstává, mění se jen program. Tímto mechanismem se postupně vytvářejí všechny procesy z procesu číslo 0, který je vytvořen jádrem ve fázi zavádění systému. Proces 0 vytvoří proces 1 řízený programem /etc/init, který nadále vykonává funkci dispečera všech ostatních procesů (prarodič).
Operační systém UNIX Při použití oddělovače ; nebo operátoru | se čeká na dokončení každého příkazu nebo celé kolony (procesy v ní běží paralelně). Existuje způsob, jak rodičovský proces nečeká na dokončení potomka a oba pokračují nezávisle na sobě. Mechanismus, při kterém shell nečeká na dokončení předchozího příkazu - znak & na konci příkazového řádku. Vypíše se pouze číslo procesu a vypíše se prompt. sleep [n]pozdržení vykonání procesu o n sekund waitčekání na dokončení všech procesů kill PIDpředčasné ukončení procesu PID nice commandprovedení příkazu se sníženou prioritou nohup commandnelze ukončit z klávesnice, nebo ukončením shellu at time commandprovedení příkazu v zadaném čase time commandměření doby provedení příkazu
Operační systém UNIX Každý proces je spouštěn s určitou prioritou, priorita procesů je většinou stejná, jak proces stárne, jeho priorita klesá. Uživatel nemůže (s vyjímkou roota) zvýšit prioritu procesu, který vytváří, ale může ji snížit pomocí příkazu nice. Proces obvykle vzniká s prioritou 20, příkazem nice se snižuje o 10. Lze však zadat i přesnou hodnotu snížení priority $nice -15 grep oto /etc/passwd Maximální snížení priority je 19. Root může prioritu zvýšit použitím záporného čísla. $nice --14 grep oto /etc/passwd
Operační systém UNIX Unix umožňuje spouštění procesů na pozadí, proces běží, ale shell je uživateli zároveň k dispozici k zadávání dalších příkazů. $who & $who > who.out & 1213 $ Pokud je potřeba odhlásit uživatele, který má na pozadí spuštěné nějaké procesy, hrozí těmto dětským procesům zánik. Porušení vazby se provádí pomocí příkazu nohup, který zajistí pokračování procesu i po odhlášení. $nohup who | nohup wc -l > kolik.out &
Operační systém UNIX $uptime 6:05pm up 124 days, 5:47, 0 user, load average: 0.16,0.09,0.02 Počet procesů čekajících na procesor (procesy ve stavu READY), využití procesoru. - aktuální čas - doba běhu OS od posledního bootování - počet přihlášených uživatelů - průměrný počet procesů čekajících na procesor během poslední: - 1 minuty - 5 minut - 15 minut Při velkém množství procesů je vhodné odložit spouštění náročných aplikací na dobu menšího zatížení. Počet procesů čekajících na procesor by neměl přesáhnout 3.
Operační systém UNIX #include main() { int i; time_t t; char *c; for(i=0;i<100;i++) { printf("Cas je bestie"); } Použití kompilátoru $cc test.c -o bert zadání výstupního souboru $cc test.c -S vytvoření assembleru Zdrojový soubor test.c
Operační systém UNIX.verstamp7 0.optionpic2.rdata.align2.align0 $$5:.ascii"Cas je bestie\X00".text.align2.file2 "test.c".globlmain.loc2 5 # 1#include # 2 # 3 # 4main() # 5{.entmain 2 main:.optionO1.set noreorder.cpload$25.set reorder subu$sp, 48 sw$31, 28($sp).cprestore24.mask0x , -20.frame$sp, 48, $31.loc2 5.loc2 10 # 6 int i; # 7 time_t t; # 8 char *c; # 9 # 10 for(i=0;i<100;i++) sw$0, 44($sp) $32:.loc2 11 # 11 {.loc2 12 # 12 printf("Cas je bestie"); la$4, $$5.livereg0x E,0x jalprintf.loc2 10 # 10 for(i=0;i<100;i++) lw$14, 44($sp) addu$15, $14, 1 sw$15, 44($sp) blt$15, 100, $32.loc2 14 # 11 { # 12 printf("Cas je bestie"); # 13 } # 14} move$2, $0.livereg0x2000FF0E,0x00000FFF lw$31, 28($sp) addu$sp, 48 j$31.endmain Soubor test.s
Operační systém UNIX Komunikace mezi uživateli mail, talk, write
Operační systém UNIX