Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

20. maturitní okruh OS Linux – procesy v UN*Xových systémech správa procesů a systémových zdrojů, jádro a utility, signály, práce s procesy Počítačové.

Podobné prezentace


Prezentace na téma: "20. maturitní okruh OS Linux – procesy v UN*Xových systémech správa procesů a systémových zdrojů, jádro a utility, signály, práce s procesy Počítačové."— Transkript prezentace:

1 20. maturitní okruh OS Linux – procesy v UN*Xových systémech správa procesů a systémových zdrojů, jádro a utility, signály, práce s procesy Počítačové systémy

2 proces je všechen běžící software a je organizován jako množina běžících procesů každý proces má své PID a zná PID svého rodiče (PID je číslo, které jednoznačně určuje přenos)  viz. další snímek  fork- (téměř) vytvoří duplicitní kopii přenosu - otcem nového procesu je proces “fork( )null“  exec- nahradí program v aktuálním procesu jiným programem  wait- rodič čeká na doběhnutí potomka proces spuštěný přímo je záměrně spuštěný program nepřímo je proces spuštěný námi spuštěným procesem uživatelské procesy (ty, co spustil libovolný uživatel) systémové procesy (ty, co spustil systém při startu nebo na základě libovolné události) Procesy

3 Tabulka procesů Uchovává v sobě všechny procesy a informace o nich Operační systém identifikuje procesy na základě jejich PID (jedinečná identifikace) Ke sledování procesů nám výborně poslouží příkaz ps Po spuštění procesu je mu přiděleno číslo, které je jedinečné, jedná se o číslo procesu (PID - process identification), jsou to kladná z množiny integeru od 2 do 32768 Chybí tu číslo 1, to je rezervováno procesu init

4 Určení priority procesu Priorita neboli přednost procesu se určuje podle nice hodnoty Základní hodnota, kterou proces může obdržet, je 10 Pak závisí na běhu programu. Těm, které běží nepřerušeně delší dobu, je přidělována nižší hodnota Chceme-li zjistit tyto hodnoty, použijeme k příkazu ps přepínač -f Aby byla zajištěna rychlá odezva programů, systém sníží nice hodnotu, tím dostane program do popředí a docílí tak jeho rychlé odezvy

5 Životní cyklus procesu  Vznik  Na základě podmínky může být ukončen  Zaniká  Procesy se kopírují pouze virtuálně

6 Přepínání kontextu (stavu procesu) je to stav případného procesu, případně i stav zařízení ke změně kontextu dochází když:  multitasking: jeden proces potřebuje být vyhozen z procesu a jiný naopak musí běžet (OS poskytuje každému procesu určitou dobu – Time Slice)  obsluha přerušení  změna mezi uživatelským a jaderným režimem

7 Přidělování paměti procesům Jádro OS má úplný přístup k systémové paměti a musí umožnit procesům bezpečně přistupovat k této paměti, pokud to tyto procesy vyžadují. Díky virtuálnímu adresování (zvláštní způsob správy operační paměti počítače. Umožňuje operačnímu systému využívat vnitřní paměť, která je významně větší, než je skutečná fyzická velikost paměti) máme zaručenu ochranu paměťového prostoru každého procesu a navíc získáme možnost adresovat více paměti, než má systém fyzicky k dispozici

8 Prostředí procesu Historicky se program skládal z:  Text segment: Strojové instrukce prováděné CPU Tento segment je označen jako read-only -- ochrana proti náhodnému přepisu  Segment inicializovaných dat: Často se jmenuje jen data segment a obsahuje přiřazené proměnné  Segment neinicializovaných dat: bss (block started by symbol) Jádro vyplní tento segment před spuštěním nulami Zde bude uloženo např. pole, deklarované, mimo jakoukoli funkci  Zásobník: Zde budou ukládány lokální proměnné spolu s návratovými adresami funkcí  Hromada: Dynamické přidělování paměti Historicky byla hromada (heap) umístěna mezi konec neinicializovaných dat a zásobník

9 Struktura paměti:

10 Systémové procesy Jak jsme si již řekli, po startu systém spouští procesy, které se starají o jeho řízení, těm se říká systémové Jejich kompletní seznam získáme příkazem ps –ax Nejzákladnější proces, který má PID 1 a jmenuje se INIT Tento proces je spuštěn při startu systému, je rodičem všech dalších procesů Všechny další procesy spouští buď sám init, nebo jeden z jeho potomků. Je jakýmsi řídícím procesem pro celý systém Používá konfigurační soubor /etc/inittab, kde je veškeré jeho nastavení Dále jsou zde služby, jako je třeba httpd démon apache web serveru, databázové démony nebo cron, který se stará o časované spouštění (plánovač)

11 Struktura procesu Proces má své PID (běh programu - execution thread), poté jsou zde data, která program používá, proměnné, otevřené soubory, adresy deskriptorů nebo ukazatelů atd Nakonec jsou zde knihovny, které jsou sdíleny. Takže více procesů může používat jen jednou nahrané knihovny, ale nemusí tomu být vždy Spuštěný proces má 4 GB paměťového prostoru, obvykle bývá nahrán od prvních 128 MB dále, zde má pocit, že je zcela osamocen Každý proces má svůj vlastní zásobník a svou vlastní sadu proměnných

12 Jádro systému Jádro systému (kernel) se zavádí při startu systému a zaručuje nejzákladnější operace Svůj návrh dědí po operačním systému Unix, který ve své době způsobil převrat tím, že jádro jasně oddělil od zbytku systému a vypustil z něj většinu zbytečných služeb  Jádro Linuxu zodpovídá za: Zprostředkování k přístupu k periferiím Správa paměti

13 Zprostředkování k přístupu k periferiím: Je jimi možné počítač zablokovat a nebo i zničit Navíc k jednomu zařízení většinou nemůže přistupovat více programů zároveň Je nutné, aby jádro procesy na hardware nepustilo a všechny přístupy dělalo za ně O jednotlivé zařízení se starají ovladače, které v původním Unixu byly napevno zakomponované do jádra

14 Správa paměti Jádro používá stránkování (umožňuje zobrazit virtuální paměťový prostor (tzv. virtuální paměť) do fyzického adresového prostoru operační paměti ) k vytvoření virtuální paměti Každý proces má svůj oddělený adresní prostor a tak si programy nevidí navzájem "do karet" a nemůžou se navzájem ohrozit Jádro dovoluje procesu jeho adresní prostor modifikovat. Umí "namapovat" soubor na danou pozici - v paměti je pak vidět obsah daného souboru, který jádro v případě potřeby nahraje, nebo obnoví na disku (pokud program paměť modifikoval). Sdílet určitou část paměti mezi procesy apod… Disková cache (vyrovnávací paměť), která se dynamicky mění podle velikosti volné paměti Zavádění programu "po kouskách" - při startu programu se jeho kód nenahraje celý do paměti. Nahraje se pouze jeho první stránka a program se spustí. Pokud potřebuje další stránky, tak se mu nahrají později. Toto zrychluje start programů a šetří paměť Zpožděné přidělování paměti - pokud program požádá o volnou paměť, jádro si to pouze zapamatuje a přidělí ji až v době, kdy ji program začne používat Zpožděné kopírování paměti - když se běžící proces rozdělí na dva, jeho paměť by se měla zkopírovat. To se ale nestane a kopie se vytváří se zpožděním až v situaci, když jeden z programu do ní začne zapisovat Mezi jeho přednosti patří

15 Vlákna Vlákno umožňuje více samostatným segmentům systému (procesům) sdílet proměnné a vůbec data v paměti Navenek se však jedná o více procesů a vypadají a chovají se jako procesy ve vztahu child/parent Jediným rozdílem je, že sdílí ony řečené proměnné a program má díky nim více vláken běhu aplikace (execution threads) Každé vlákno má vyhrazeno svůj vlastní zásobník, na kterém má uloženy lokální proměnné, parametry a návratové adresy aktivních funkcí. Každé vlákno může vyvolat kteroukoli funkci programu a používat kteroukoli globální proměnnou. Skupina vláken v jednom adresovém prostoru pak tvoří proces  Adresové prostory nezávislých procesů a vláken v jednom procesu

16 Signály Jsou velmi mocným nástrojem pro řízení procesů systému Určitě jste si už všimli "hlášky" při vypínání počítače: „INIT: Sending all processes the TERM signal INIT: Sending all processes the KILL signal“ Tento výpis znamená, že proces INIT zasílá všem svým child procesům TERM signál, poté chvíli počká a zašle jim signál KILL. TERM signál "požádá" aplikaci o její ukončení a dá jí čas, aby se ukončila správným způsobem Tento signál nezničí aplikace, které se "zasekly". Když čas vyprší, je zaslán signál KILL (ten nelze odchytit ani ignorovat) a aplikace je nadobro "zabita„ Signál je systémem generovaná událost, kterou používá na základě reakce na podmínku a dává tím procesu šanci provést odezvu Používají se při chybách v programech Vyvolává je shell nebo terminal driver nebo si je procesy posílají mezi sebou Signál můžeme naprogramovat (jeho zaslání), odchytit, reagovat na něj a některé můžeme ignorovat Signály začínají prefixem SIG (u výpisu výše je shellem odstraněn pro snažší čitelnost). Například signál SIGSEGV hlásí špatný přístup k segmentu paměti.

17 Signály 2 Základní signály jsou zhruba tyto:  SIGTERM…………………………žádost o ukončení procesu  SIGSEGV…………………………porušení segmentace paměti  SIGABORT………………………přerušení procesu  SIGHUP…………………………..odříznutí od terminálu (hangup)  SIGKILL…………………………."vražda"  SIGQUIT…………………………ukončení terminálové relace procesu  SIGGINT…………………………přerušení terminálu  SIGGILL………………………….neplatná instrukce  SIGCONT………………………..navrácení procesu ze stavu pozastavení  SIGSTOP…………………………pozastavení procesu (opak SIGCONT)  SIGINT……………………………ukončení procesu na popředí

18 Signály 3 Pokud chceme ukončit proces běžící na popředí, pošleme mu signál SIGINT, učiníme tak stiskem kláves [Ctrl+C] Ukončení procesu na pozadí provedeme zasláním signálu pomocí příkazu kill Pokud chceme procesu 458 poslat signál SIGKILL, uděláme to takto: kill -KILL 458 Můžeme si vybrat libovolný signál, avšak procesy, které jste nespustili vy, nemůžete ukončit, nepodaří se vám to (pokud nejste root) Ještě máme k dispozici alternativu, příkaz killall, který zasílá signál všem procesům, které vykonávají daný příkaz. Když chceme pozastavit všechny procesy libovolných jmen a PIDů, které provádí příkaz:  cat /dev/psaux > /dev/null & provedeme to takto:  killall -STOP cat

19 KONEC!!!


Stáhnout ppt "20. maturitní okruh OS Linux – procesy v UN*Xových systémech správa procesů a systémových zdrojů, jádro a utility, signály, práce s procesy Počítačové."

Podobné prezentace


Reklamy Google