C2110 Operační systém UNIX a základy programování 3. lekce / modul 1 -1C2110 Operační systém UNIX a základy programování Petr Kulhánek kulhanek@chemi.muni.cz Národní centrum pro výzkum biomolekul, Přírodovědecká fakulta Masarykova univerzita, Kamenice 5, CZ-62500 Brno 3. lekce / modul 1 PS/2020 Distanční forma výuky: Rev1 C2110 Operační systém UNIX a základy programování 3. lekce / modul 1 -2- Procesy C2110 Operační systém UNIX a základy programování 3. lekce / modul 1 -3Vnitřní schéma počítače severní můstek severní můstek jižní můstek jižní můstekUSB myš, klávesnice hodiny reálného času řadiče SATA pevné disky BIOS grafický systém paměť řadič paměti periferie s rychlým přístupem přes PCI Express síť (ethernet) zvuk PCI sběrnice výpočetní jádra (CPU jádro, CPU core) procesor počet CPU jader > 1 = SMP počítač Operační systém zajišťuje běh programů (procesů) na procesorech a optimální využití dalších zdrojům (paměť, disková kapacita). Při správě procesů se používá technika multitaskingu. C2110 Operační systém UNIX a základy programování 3. lekce / modul 1 -4Proces a multitasking Proces (anglicky process) je v informatice název pro spuštěný počítačový program. Proces je umístěn v operační paměti počítače v podobě sledu strojových instrukcí vykonávaných procesorem. Obsahuje nejen kód vykonávaného programu, ale i dynamicky měnící se data, která proces zpracovává. Jeden program může v počítači běžet jako více procesů s různými daty (například vícekrát spuštěný webový prohlížeč zobrazující různé stránky). Správu procesů vykonává operační systém, který zajišťuje jejich oddělený běh, přiděluje jim systémové prostředky počítače a umožňuje uživateli procesy spravovat (spouštět, ukončovat atp.). Multitasking (z angličtiny, multi = mnoho, task = úloha, používán ve víceúlohovém systému) označuje v informatice schopnost operačního systému provádět několik procesů současně (přinejmenším zdánlivě). Jádro operačního systému velmi rychle střídá na procesoru či procesorech běžící procesy (tzv. změna kontextu), takže uživatel počítače má dojem, že běží současně. upraveno z wikipedia.org C2110 Operační systém UNIX a základy programování 3. lekce / modul 1 -5SMP – Symetrický multiprocesing paměť procesor Symetrický multiprocesing (SMP, anglicky Symmetric multiprocessing) je v informatice označení pro druh víceprocesorových systémů, u kterých jsou všechny procesory v počítači rovnocenné. Zvýšení počtu procesorů, které v počítači sdílí stejnou operační paměť, vede ke zvýšení výkonu počítače, i když ne lineárním způsobem, protože část výkonu je spotřebována na režii (zamykání datových struktur, řízení procesorů a jejich vzájemnou komunikaci). výpočetní jádra (CPU core) V minulosti se rychlost výkonu procesorů zvyšovala kromě lepší architektury i rychlostí zpracovávání instrukcí (frekvence procesoru), což v dnešní době naráží na fyzikální omezení používané technologie (spolehlivost, tepelné ztráty, ...). Dalším směrem bylo tedy uvedení více výpočetních jader (cca od roku 2005 pro x86 architekturu) na jednom fyzickém čipu. Dnešní počítače jsou tak již běžně víceprocesorové. CPU – central processing unit upraveno z wikipedia.org C2110 Operační systém UNIX a základy programování 3. lekce / modul 1 -6Přehled běžících procesů Procesy lze vypsat příkazy: ps vypíše procesy běžící v daném terminálu nebo podle zadaných specifikací (ps -u user_name) top průběžně zobrazuje procesy setříděné podle zátěže procesoru (ukončení klávesou q) pstree výpis znázorňující hierarchii procesů $ ps PID TTY TIME CMD 8763 pts/5 00:00:00 bash 8852 pts/5 00:00:00 gimp 8857 pts/5 00:00:00 ps číslo procesu terminál, ve kterém proces běží spotřebovaný strojový čas jméno spuštěného příkazu C2110 Operační systém UNIX a základy programování 3. lekce / modul 1 -7Přehled běžících procesů - top Příkazem top je možné v pravidelných intervalech monitorovat běžící procesy. Běh příkazu se ukončuje klávesou q (quit). top - 13:05:58 up 16 days, 2:27, 2 users, load average: 2.95, 3.10, 3.03 Tasks: 150 total, 3 running, 147 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.1 sy, 10.6 ni, 88.9 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 8138412 total, 8005624 used, 132788 free, 210168 buffers KiB Swap: 4194300 total, 168 used, 4194132 free. 7239188 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3351 ivo 39 19 46784 29872 772 R 100.0 0.4 24:16.67 sc 30745 root 20 0 51732 1228 400 S 13.0 0.0 8:15.87 systemd-udevd 1 root 20 0 104664 4984 2736 S 6.5 0.1 6:36.74 init 383 root 20 0 19596 948 628 S 6.5 0.0 4:30.06 upstart-udev-br 2 root 20 0 0 0 0 S 0.0 0.0 0:00.70 kthreadd číslo procesu vlastník procesu priorita stav: S – sleeping, R – running, D – nepřerušitelný spánek (čeká na zařízení) paměť využití CPU a paměti spotřebovaný CPU čas jméno programu zatížené CPU ve zlomku (1.0 = 100%) v poslední 1, 5 a 15 minutách odezva systému může být pomalá, pokud je používána swapovací paměť C2110 Operační systém UNIX a základy programování 3. lekce / modul 1 -8Spouštění příkazů a aplikací 1. Cesta k příkazu se nejdříve hledá v tabulce s již použitými příkazy: $ hash hits command 1 /bin/rm 3 /bin/ls 2. Pokud není příkaz nalezen, hledá se v adresářích uvedených v systémové proměnné PATH, které jsou odděleny dvojtečkou. $ echo $PATH 3. Pokud není příkaz nalezen, je indikována chyba. V opačném případě je příkaz spuštěn a cesta uložena do tabulky. pořadí prohledávání adresářů Tabulku lze smazat příkazem: $ hash -r Aby mohl shell zadaný příkaz spustit, potřebuje znát cestu k souboru, který obsahuje binární program nebo skript. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin: /bin:/usr/games:/usr/local/games:/snap/bin:/usr/bin $ prt bash: prt: command not found C2110 Operační systém UNIX a základy programování 3. lekce / modul 1 -9Úprava proměnné PATH Manuální změna proměnné PATH $ export PATH=/moje/cesta/k/mym/prikazum:$PATH oddělující znak Cesta k adresáři obsahující příkazy, u kterých chci, aby byly přístupné bez uvádění cesty. Cesta se vždy uvádí absolutně! (uvádění relativních cest je bezpečnostním rizikem) Původní hodnota proměnné PATH (nutné pro nalezení systémových příkazů) Automatizovaná změna proměnné PATH Automatizovanou změnu proměnné PATH (a případně jiných systémových proměnných) provádí příkaz module. $ module add vmd Budeme probírat v Lekci 4 C2110 Operační systém UNIX a základy programování 3. lekce / modul 1 -10Cestu k příkazu či aplikaci, pokud existuje, lze zjistit příkazem type nebo whereis $ type ls ls is aliased to ‘ls --color=auto’ $ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz $ type pwd pwd is a shell builtin $ whereis pwd pwd: /bin/pwd /usr/include/pwd.h /usr/share/man/man1/pwd.1.gz Cesta k příkazům, dokumentace příkaz pwd je implementován jako vnitřní příkaz shellu (dokumentace příkazu pwd je v man bash) příkaz ls je program uložen v souboru /bin/ls (man ls) některé příkazy mohou mít více implementací (man pwd), přednost mají vnitřní příkazy shellu ls je v shellu alias na příkaz ls s volbou color C2110 Operační systém UNIX a základy programování 3. lekce / modul 1 -11Procesy na popředí a pozadí Spouštění aplikací na popředí Spouštění aplikací na pozadí $ gimp & na konec (za argumenty a přesměrování) příkazu uvedeme ampersand $ gimp procesy běžící na popředí blokují terminál, protože používají jeho standardní vstup a výstup Ctrl+Z pozastaví běh procesu, další osud procesu lze kontrolovat pomoci příkazů: jobs vypíše procesy, které shell spravuje bg přesune proces do pozadí fg přesune proces do popředí disown zruší vazbu procesu na shell (proces není ukončen při ukončení shellu) Terminál (užitečné klávesové zkratky): procesy běžící na pozadí neblokují terminál C2110 Operační systém UNIX a základy programování 3. lekce / modul 1 -12jméno programu nebo skriptu udáváme včetně cesty (absolutní nebo relativní) Spouštění příkazů a aplikací ... Uživatelské programy a skripty $ ./muj_script $ ~/bin/my_application Zrušení výpisu do terminálu $ kwrite &> /dev/null přesměrování výstupu uvádíme na konec příkazu (za argumenty) Spouštění aplikací na pozadí $ gimp &> /dev/null & na konec (za argumenty a přesměrování) příkazu uvedeme ampersand C2110 Operační systém UNIX a základy programování 3. lekce / modul 1 -13Signály a procesy číslo procesu, kterému se má signál zaslat (lze zjistit příkazem ps, top, pstree Terminál (užitečné klávesové zkratky): Ctrl+C běžícímu procesu zašle signál SIGINT (Interrupt), proces je ve většině případů násilně ukončen Příkaz kill: $ kill [–signal] PID specifikace signálu: -N (číslo signálu), -NAME (jméno signálu), -SIGNAME (SIG+jméno signálu) Užitečné signály: TERM 15 žádost o ukončení (proces na signál může reagovat) INT 2 žádost o přerušení (ekvivalent Ctrl+C) (proces na signál může reagovat) KILL 9 ukončení (proces nemůže signál ignorovat, je násilně ukončen) STOP pozastaví proces (proces nemůže signál ignorovat) (ekvivalent Ctrl+Z) CONT obnoví běh pozastaveného procesu (proces nemůže signál ignorovat) ! C2110 Operační systém UNIX a základy programování 3. lekce / modul 1 -14Přehled příkazů top průběžně zobrazuje procesy setříděné podle zátěže procesoru (ukončení klávesou q) ps vypíše procesy běžící v daném terminálu nebo podle zadaných specifikací (ps -u user_name) pstree vypíše procesy (stromový výpis) type vypíše cestu k standardní aplikaci/příkazu (včetně vnitřních příkazů shellu) whereis vypíše cestu k standardní aplikaci/příkazu time vypíše délku běhu procesu sleep čeká po zadanou dobu kill zašle signál procesu, lze použít k ukončení problematických programů ssh spustí příkaz na vzdáleném počítači jobs vypíše procesy na pozadí fg převede proces do popředí bg převede proces do pozadí nohup spustí proces bez interakce s terminálem (C2115) wait čeká na dokončení procesů na pozadí (C2115) C2110 Operační systém UNIX a základy programování 3. lekce / modul 1 -15Cvičení 1 1. Otevřete nový terminál na pracovní stanici wolf02.ncbr.muni.cz 2. Vypište tabulku s již použitými příkazy (Výpis by měl být prázdný). 3. Spusťte příkaz ls a opět vypište tabulku s již použitými příkazy. 4. Kde se nalézá soubor obsahující program k příkazu ls. Použijte příkaz type a whereis. Jaký je mezi oběma příkazy rozdíl? 5. Jakou velikost a přístupová práva má soubor, který obsahuje program ls. 6. Vypište obsah proměnné PATH (echo $PATH). 7. Je ve výpisu cesta k adresáři, ve kterém je příkaz ls? 8. Vytvořte kopii souboru s programem ls do vašeho domovského adresáře pod názvem my_ls. 9. Spusťte program my_ls a porovnejte jeho výstup s příkazem ls. V čem se výstupy liší? 10. Soubor my_ls smažte. C2110 Operační systém UNIX a základy programování 3. lekce / modul 1 -16Cvičení 2 1. Otevřete nový terminál na pracovní stanici wolf03.ncbr.muni.cz 2. Spusťte příkaz sleep 60. Co udává číslo 60? 3. Spusťte příkaz sleep 300. 4. Jeho běh ukončete pomocí Ctrl+C 5. Spusťte příkaz sleep 300 a nechte jej běžet. 6. Otevřete nový terminál na pracovní stanici wolf03.ncbr.muni.cz 7. Vypište vaše běžící procesy (ps –u username) 8. Proces sleep ukončete pomocí příkazu kill 9. Body 5, 7, 8 opakujte pro různé signály (SIGTERM, SIGINT a SIGKILL)