170 likes | 306 Views
Stránkový editor vi. 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
E N D
Stránkový editor vi 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) Makra Pro často používané sekvence příkazů lze použít makra. :map makro sekvence_prikazu :unmap makro
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í) $ who | wc -l spuštění dvou procesů, komunikace prostřednictvím kolony 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í
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 14878 ttyq2 0:00 ksh 14934 ttyq2 0:00 ps $ps -f UID PID PPID C STIME TTY TIME CMD vdumek 14878 14877 0 17:31:44 ttyq2 0:00 -ksh vdumek 14936 14878 4 18: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 1110 14878 14877 0 60 20 * 104:66 8029db5c ttyq2 0:00 ksh b0 R 1110 14943 14878 3 61 20 0 386: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 0 0 0 Nov 15 ? 0:01 sched root 1 0 0 Nov 15 ? 3:11 /etc/init root 2 0 0 Nov 15 ? 0:01 vhand root 3 0 0 Nov 15 ? 11:50 bdflush root 4 0 0 Nov 15 ? 0:00 munldd root 5 0 0 Nov 15 ? 21:55 vfs_sync root 6 0 0 Nov 15 ? 0:02 unmountd root 7 0 0 Nov 15 ? 0:01 shaked root 8 0 0 Nov 15 ? 0:00 tiled root 9 0 0 Nov 15 ? 0:00
Operační systém UNIX Popis stavu procesu F status 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. S stav 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 C používá se při zařazování procesů do prioritní fronty READY PRI priorita procesu NI hodnota nice pro úpravu priority SZ velikost paměti, kterou proces zabírá, neobsahuje velikost sdílených prostředků WCHAN hexadecimální popis situace, na kterou proces čeká, pokud je položka prázdná, proces nečeká, tedy běží nebo je ready TTY terminál (pro démony ?) TIME spotřebovaný čas procesoru CMD pří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 PID předčasné ukončení procesu PID nice command provedení příkazu se sníženou prioritou nohup command nelze ukončit z klávesnice, nebo ukončením shellu at time command provedení příkazu v zadaném čase time command měř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 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 #include <time.h> main() { int i; time_t t; char *c; for(i=0;i<100;i++) { printf("Cas je bestie"); } }
Operační systém UNIX .verstamp 7 0 .option pic2 .rdata .align 2 .align 0 $$5: .ascii "Cas je bestie\X00" .text .align 2 .file 2 "test.c" .globl main .loc 2 5 # 1 #include <time.h> # 2 # 3 # 4 main() # 5 { .ent main 2 main: .option O1 .set noreorder .cpload $25 .set reorder subu $sp, 48 sw $31, 28($sp) .cprestore 24 .mask 0x90000000, -20 .frame $sp, 48, $31 .loc 2 5 .loc 2 10 Soubor test.s # 6 int i; # 7 time_t t; # 8 char *c; # 9 # 10 for(i=0;i<100;i++) sw $0, 44($sp) $32: .loc 2 11 # 11 { .loc 2 12 # 12 printf("Cas je bestie"); la $4, $$5 .livereg 0x0800000E,0x00000000 jal printf .loc 2 10 # 10 for(i=0;i<100;i++) lw $14, 44($sp) addu $15, $14, 1 sw $15, 44($sp) blt $15, 100, $32 .loc 2 14 # 11 { # 12 printf("Cas je bestie"); # 13 } # 14 } move $2, $0 .livereg 0x2000FF0E,0x00000FFF lw $31, 28($sp) addu $sp, 48 j $31 .end main
Operační systém UNIX Komunikace mezi uživateli mail, talk, write