Operační systémy Tomáš Hudec. 6 Komunikace procesů (IPC) Obsah: 6.1 Klasické problémy souběhu Obědvající filosofové

Rozměr: px
Začít zobrazení ze stránky:

Download "Operační systémy Tomáš Hudec. 6 Komunikace procesů (IPC) Obsah: 6.1 Klasické problémy souběhu. 6.1.1 Obědvající filosofové"

Transkript

1 Operační systémy Tomáš Hudec 6 Komunikace procesů (IPC) Obsah: 6.1 Klasické problémy souběhu, Obědvající filosofové, Producenti a konzumenti, Problém spících holičů, Problém pisatelů a čtenářů, 6.2 Podpora meziprocesové komunikace operačním systémem, 6.3 Semafor, Použití semaforu pro řízení přístupu do kritické sekce, Použití semaforu pro synchronizaci, Binární semafor, Hodnocení semaforu, Použití semaforu pro řešení problémů souběhu, 6.4 Fronta zpráv, Obědvající filosofové řešení pomocí semaforů, Producenti a konzumenti řešení pomocí semaforů, Problém spících holičů řešení pomocí semaforů, Použití fronty zpráv pro řízení přístupu do kritické sekce, Použití fronty zpráv pro synchronizaci, Použití fronty zpráv pro řešení problémů souběhu, 6.5 Opakování Producenti a konzumenti řešení pomocí fronty zpráv, Pro řešení určitých úloh je výhodné použít více kooperujících procesů (případně vláken). Zjednoduší se tím programování (možnost používat blokujících systémových volání), ale klade to nároky na prostředky komunikace takových procesů. Kooperující procesy si potřebují obvykle vyměňovat informace a řídit přístup ke sdíleným prostředkům. Při výměně informací hraje důležitou roli synchronizace. Pokud jeden proces vygeneruje data pro druhý proces, musí se druhý proces s prvním synchronizovat, tedy počkat na platná data. Přitom se nemůže spoléhat na plánovač operačního systému, nelze předpokládat, že plánovač přidělí procesor nejprve prvnímu procesu a pak teprve druhému. Komunikaci a synchronizaci procesů obvykle podporuje operační systém poskytnutím speciálních systémových volání, případně lze nalézt podporu v některých programovacích jazycích. 6.1 Klasické problémy souběhu Zde budou představeny klasické konkurenční problémy, které budou následně řešeny v dalších kapitolách Obědvající filosofové Zadání U kulatého stolu s jídlem sedí pět (obecně n) filosofů. Každý buď přemýšlí nebo jí. Na stole je pouze pět vidliček umístěných mezi filosofy. Pro jedení potřebuje každý filosof dvě vidličky. 1/13

2 Původní znění formuloval roku 1965 Edsger Dijkstra jako cvičení na zkoušku studentům. Dnešní podobu formuloval později (1985) Tony Hoare. Obědvající filosofové Problém Představíme li si filosofy jako procesy a vidličky jako sdílené prostředky, je třeba navrhnout algoritmus procesů tak, aby: byl řízen přístup ke sdíleným vidličkám a zároveň nedošlo k uváznutí či vyhladovění. Proces filosof i (pro i {0,, n 1, kde n je počet filosofů): think(); // přemýšlení take_fork(i); // zvednutí vidličky po levé straně take_fork((i+1) % n); // zvednutí vidličky po pravé straně eat(); // jedení release_fork((i+1) % n); // položení vidličky po pravé straně release_fork(i); // položení vidličky po levé straně Snadno lze zjistit, že bez řízení přístupu k vidličkám může dojít ke zvednutí stejné vidličky dvěma filosofy, což je nepřípustné (vidlička je prostředek s exkluzivním přístupem). Po vyřešení vzájemné výlučnosti prostředků je třeba dále uvažovat i případ, kdy se rozhodnou filosofové současně jíst: Každý ve stejném okamžiku zvedne vidličku po své levé straně a následně bude čekat na uvolnění vidličky po své pravé straně deadlock Producenti a konzumenti Zadání Máme jeden nebo více procesů generujících data (producenti) a několik procesů zpracovávajících vygenerovaná data (konzumenti). Pro snížení prodlev (zvýšení efektivity) je zaveden mezisklad, kam budou producenti data ukládat a odkud si je konzumenti budou vybírat. Problém Přístup do skladu musí být řízen tak, aby producenti ukládali data pouze na volná místa a konzumenti vybírali každý jiná data z obsazených míst. Konzumenti musejí čekat, pokud je sklad prázdný, producenti musejí čekat, pokud je zaplněný. Pro sklad použijeme kruhový buffer reprezentovaný polem o dané kapacitě n položek. 2/13

3 Sklad: Kruhový buffer Sdílená data: buffer[n]; in = 0; out = 0; count = 0; // sklad: pole o kapacitě n položek // index následující volné pozice (pro uložení producentem) // index následující obsazené pozice (pro vyzvednutí konzumentem) // počet položek ve skladě Proces producenta i (pro i {0,, p 1, kde p je počet producentů): item = produce(); // vyprodukování položky while (count == n); // čekání na uvolnění místa ve skladě buffer[in] = item; // uložení položky do skladu na pozici in in = (in + 1) % n; // posunutí indexu na následující místo count++; // zvýšení počtu položek ve skladě Proces konzumenta i (pro i {0,, c 1, kde c je počet konzumentů): while (count == 0); // čekání na neprázdný sklad item = buffer[out]; // vyzvednutí položky ze skladu na pozici out out = (out + 1) % n; // posunutí indexu na následující místo count--; // snížení počtu položek ve skladě consume(item); // zpracování položky Takto navržené algoritmy mají zásadní nedostatky: Producenti mohou současně vložit data na stejnou pozici, konzumenti mohou číst ze stejné pozice (položka bude zpracována vícekrát) a následně některé položky nemusejí být zpracovány vůbec. V neposlední řadě je synchronizace neefektivně řešena aktivním čekáním Problém spících holičů Zadání V hypotetickém holičství jsou tři křesla pro stříhání, tři holiči, jedna pokladna, čekárna s pohovkou pro čtyři čekající zákazníky a místo pro další čekající ve stoje. Dovnitř holičství se vejde nejvýše 20 zákazníků, další musejí čekat venku nebo odejít. Na začátku jsou v holičství pouze holiči, kteří spí ve svých křeslech. Přijde li zákazník, zkontroluje čekárnu, a je li neprázdná, zůstane v ní čekat. Pokud najde čekárnu prázdnou, zkontroluje křesla. Jsou li křesla obsazena jinými zákazníky, usadí se nově příchozí v čekárně, jinak vzbudí holiče a usadí se do křesla. Zákazník v křesle čeká na dostříhání a pak se odebere k pokladně zaplatit, počká na stvrzenku a odchází. 3/13

4 Holič po probuzení novým zákazníkem tohoto ostříhá, následně přijme platbu a vydá stvrzenku. Pak zkontroluje, zda nečeká v čekárně další zákazník. Je li čekárna neprázdná, vybere holič nejdéle čekajícího zákazníka, usadí jej do křesla a obslouží jej. Nečeká li žádný zákazník, holič se uloží ke spánku do svého křesla. Problém spících holičů Problém Na první pohled problém není zřejmý, ale je třeba: hlídat kapacitu holičství, pohovky, křesel a pokladny, řešit synchronizaci při umisťování nového zákazníka do křesla, při dokončení stříhání a při placení. Snadno se může stát, že dva současně příchozí zákazníci se pokusí vzbudit stejného holiče a použít stejné křeslo, případně se usadit na stejné místo v čekárně. Tedy dva procesy současně zjistí volný prostředek a následně se pokusí jej použít. Další problém nastane v případě prázdné čekárny a obsazených křesel: nově příchozí zákazník se po zjištění stavu jde posadit do čekárny, ale než se usadí, proces holiče dokončí obsloužení předchozího zákazníka a stihne zkontrolovat čekárnu ještě před tím, než se nový zákazník usadí. Výsledkem je, že se holič odebere ke spánku, zatímco nový zákazník zbytečně čeká v čekárně Problém pisatelů a čtenářů Zadání Do sdílené paměti přistupují procesy, které z ní čtou nebo do ní zapisují data. Data je třeba udržet v konzistentním stavu. Problém Integrita dat může být porušena současným přístupem zapisujícího procesu a jakéhokoliv jiného (zapisujícího nebo čtecího). Čtecí proces může přečíst část dat původních a část nově zapsaných; druhý zapisující proces může přerušit první proces uprostřed jeho zápisu, takže výsledkem budou kombinovaná data druhého a prvního zapisujícího procesu. 6.2 Podpora meziprocesové komunikace operačním systémem Operační systém poskytuje procesům prostředky pro řešení problému kritické sekce, synchronizace i sdílení paměti. Skupina těchto prostředků se označuje jako IPC (Inter Process Communication). Mezi nástroje IPC patří podpora sdílené paměti mezi procesy, semafor nástroj pro synchronizaci i řízení přístupu do kritické sekce, fronty zpráv nástroj pro komunikaci procesů, který lze využít i pro synchronizaci a řízení přístupu do kritické sekce. 4/13

5 6.3 Semafor Semafor je nástroj IPC pro řešení problémů synchronizace a kritické sekce. Jedná se o datovou strukturu s celočíselným čítačem, frontou procesů a operacemi inicializace, snižování a zvyšování čítače. typedef struct { // struktura semaforu int count; // celočíselný čítač fifo_t *q; // fronta (čekajících) procesů sem_t; void sem_init(sem_t *s, int v); // inicializace čítače void sem_wait(sem_t *s); // atomická operace wait void sem_post(sem_t *s); // atomická operace signal K čítači se přistupuje výhradně pomocí atomických operací: Operace init inicializuje čítač nezápornou hodnotou. Operace wait (down) snižuje hodnotu čítače, a je li výsledek záporný, volající proces je blokován a zařazen do fronty. Operace signal (up) zvyšuje hodnotu čítače, a je li ve frontě nějaký proces, je vyjmut z fronty a odblokován. void sem_init(sem_t *s, int v) // operace init { s->count = v; // inicializace čítače void sem_wait(sem_t *s) // operace wait { s->count--; // snížení čítače if (s->count < 0) { // je-li čítač záporný, fifo_put(s->q, self); // zařaď volající proces do fronty block_process(self); // a blokuj volající proces void sem_post(sem_t *s) // operace signal { s->count++; // zvýšení čítače if ((p = fifo_get(s->q))) { // je-li ve frontě čekající proces, ready_process(p); // odblokuj jej Nezáporná hodnota čítače udává, kolikrát lze volat operaci wait bez blokování. Absolutní hodnota záporného čítače udává, kolik procesů čeká ve frontě. Všechny operace musejí být prováděny atomicky v jednom okamžiku smí operaci se semaforem provádět nejvýše jeden proces (vlákno) zajišťuje operační systém. Pozn.: Programové bloky operací jsou vlastně také kritické sekce a operační systém musí řídit přístup do nich Použití semaforu pro řízení přístupu do kritické sekce Čítač sdíleného semaforu se inicializuje na počet procesů smějících současně provádět kód kritické sekce (typicky na jedničku). Ve vstupní sekci se volá operace wait, ve výstupní sekci operace signal. Inicializace: sem_init(&s, 1); // inicializace na počet procesů smějících současně do KS 5/13

6 Kód procesů: sem_wait(&s); // kód KS sem_post(&s); // kód ZS // operace wait // operace signal vstupní sekce výstupní sekce Použití semaforu pro synchronizaci Má li jeden proces počkat na dokončení akce jiného procesu (například na vypočtení hodnoty), lze pro synchronizaci použít semafor, jehož čítač se inicializuje na nulu. Proces, který má čekat na provedení akce volá operaci wait a proces provádějící akci po ní volá operaci signal. Inicializace: sem_init(&s, 0); // inicializace na nulu Kód procesu provádějícího akci, např. vypočtení hodnoty sdílené proměnné x: x = calculate(); // provedení akce sem_post(&s); // operace signal synchronizace signalizace Kód procesu čekajícího na dokončení akce: sem_wait(&s); // operace wait synchronizace čekání use(x); // použití hodnoty sdílené proměnné x vypočtené jiným procesem Binární semafor Binární semafor obvykle označovaný jako mutex (z mutually exclusive) nemá čítač, ale Booleovskou proměnnou inicializovanou na false. Operace wait a signal se obvykle označují po řadě jako lock a unlock. 6/13

7 typedef struct { // binární semafor, mutex bool locked; // Booleovská proměnná fifo_t *q; // fronta (čekajících) procesů mutex_t; void mutex_lock(mutex_t *m) { // operace wait if (m->locked) { // je-li mutex již zamčen (jiným procesem) fifo_put(m->q, self); // zařaď volající proces do fronty block_process(self); // a blokuj volající proces else { m->locked = true; // jinak zamkni mutex void mutex_unlock(mutex_t *m) { // operace signal if ((p = fifo_get(m->q))) { // je-li ve frontě čekající proces, ready_process(p); // odblokuj jej else { m->locked = false; // jinak odemkni mutex Hodnocení semaforu Semafor je výkonný nástroj vhodný pro řešení řízení přístupu do kritické sekce (vzájemného vylučování) i synchronizace. Jeho použití je snadné a efektivní nepoužívá se aktivního čekání, čekající procesy jsou v blokovaném stavu a nespotřebovávají tak zbytečně procesorový čas. Řešení složitějších problémů s mnoha procesy a více semafory mohou být obtížnější na porozumění, neboť operace semaforu jsou volány z různých procesů (či vláken). Takové skupiny procesů se obtížně ladí a chybné použití operace se semaforem může způsobit problémy celé skupině procesů. Jediné volání operace wait na nesprávném místě může způsobit uváznutí (deadlock), jediné volání signal na nesprávném místě zase vede k porušení konzistence dat Použití semaforu pro řešení problémů souběhu Obědvající filosofové řešení pomocí semaforů Definice problému vizte výše. Pro řízení přístupu ke sdíleným vidličkám (kritické sekce) lze použít semafory pro každou vidličku jeden inicializované na jedničku (v každém okamžiku smí vidličku používat nejvýše jeden filosof): sem_t fork[n]; // deklarace pole semaforů pro vidličky for (i = 0; i < n; ++i) // čítač každého semaforu sem_init(&fork[i], 1); // inicializujeme na jedničku Proces filosof i (pro i {0,, n 1, kde n je počet filosofů): 7/13

8 think(); // přemýšlení sem_wait(&fork[i]); // exkluzivní alokace vidličky po levé straně sem_wait(&fork[(i+1) % n]); // exkluzivní alokace vidličky po pravé straně take_fork(i); // zvednutí vidličky po levé straně take_fork((i+1) % n); // zvednutí vidličky po pravé straně eat(); // jedení release_fork((i+1) % n); // položení vidličky po pravé straně release_fork(i); // položení vidličky po levé straně sem_post(&fork[(i+1) % n]); // uvolnění vidličky po pravé straně sem_post(&fork[i]); // uvolnění vidličky po levé straně vstupní sekce výstupní sekce Výše uvedené řešení však nebude funkční v případě, že se ve stejný okamžik rozhodnou všichni filosofové současně najíst: Každý ve stejném okamžiku alokuje a zvedne vidličku po své levé straně a následně bude čekat na uvolnění vidličky po své pravé straně, k čemuž nemůže dojít deadlock. Jedním z řešení je přidat ještě jeden semafor, který nedovolí zvednout vidličku všem, takže alespoň jedna bude vždy volná pro některého z filosofů, který se nají a následně uvolní vidličky dalším. sem_t waiter; // deklarace semaforu omezujícího počet současných jedlíků sem_init(&waiter, n 1); // nejvýše smí zahájit jedení n 1 filosofů Proces filosof i (pro i {0,, n 1, kde n je počet filosofů): think(); // přemýšlení sem_wait(&waiter); // omezení počtu současných jedlíků sem_wait(&fork[i]); // exkluzivní alokace vidličky po levé straně sem_wait(&fork[(i+1) % n]); // exkluzivní alokace vidličky po pravé straně take_fork(i); // zvednutí vidličky po levé straně take_fork((i+1) % n); // zvednutí vidličky po pravé straně eat(); // jedení release_fork((i+1) % n); // položení vidličky po pravé straně release_fork(i); // položení vidličky po levé straně sem_post(&fork[(i+1) % n]); // uvolnění vidličky po pravé straně sem_post(&fork[i]); // uvolnění vidličky po levé straně sem_post(&waiter); // konec omezení počtu současných jedlíků vstupní sekce 1 vstupní sekce 2 výstupní sekce 2 výstupní sekce Producenti a konzumenti řešení pomocí semaforů Definice problému vizte výše. Pro výlučný přístup do skladu lze použít mutex, pro synchronizaci při prázdném a plném skladu semafory, jejichž použití navíc odstraní aktivní čekání. Neúplné řešení: Sdílená data: 8/13

9 buffer[n]; // sklad: pole o kapacitě n položek in = 0; // index následující volné pozice (pro uložení producentem) out = 0; // index následující obsazené pozice (pro vyzvednutí konzumentem) sem_t mutex; // řízení vzájemně výlučného přístupu do skladu sem_t item_count; // synchronizace při vložení položky do skladu sem_init(&mutex, 1); // do skladu smí pouze jeden proces sem_init(&item_count, 0); // na začátku je sklad prázdný Proces producenta i (pro i {0,, p 1, kde p je počet producentů): item = produce(); // vyprodukování položky sem_wait(&mutex); // exkluzivní přístup do skladu buffer[in] = item; // uložení položky do skladu na pozici in in = (in + 1) % n; // posunutí indexu na následující místo sem_post(&mutex); // konec exkluzivního přístupu do skladu sem_post(&item_count); // signalizace neprázdného skladu vstupní sekce výstupní sekce synchronizace signalizace Proces konzumenta i (pro i {0,, c 1, kde c je počet konzumentů): sem_wait(&item_count); // čekání na neprázdný sklad sem_wait(&mutex); // exkluzivní přístup do skladu item = buffer[out]; // vyzvednutí položky ze skladu na pozici out out = (out + 1) % n; // posunutí indexu na následující místo sem_post(&mutex); // konec exkluzivního přístupu do skladu synchronizace čekání vstupní sekce výstupní sekce consume(item); // zpracování položky Zamyslete se nad uvedeným neúplným řešením a dokončete je Problém spících holičů řešení pomocí semaforů Definice problému vizte výše. Pro synchronizaci se inicializují semafory: 9/13

10 sem_init(max_capacity, 20); // celková kapacita holičství sem_init(sofa, 4); // počet volných míst na pohovce sem_init(chair, 3); // počet křesel sem_init(cash_register, 1); // omezení přístupu k pokladně sem_init(cust_ready, 0); // připravenost zákazníka ke stříhání for (i = 0; i < chairs; i++) sem_init(finished[i], 0); // dokončení stříhání holičem sem_init(payment, 0); // synchronizace platby zákazníka s holičem sem_init(receipt, 0); // předání účtenky Proces zákazníka: sem_wait(max_capacity); // čekání venku, pokud se nevejde dovnitř enter_barbershop(); // vstup do holičství sem_wait(sofa); // kontrola místa na pohovce sit_on_sofa(); // posadí se na pohovku sem_wait(chair); // kontrola volného křesla ke stříhání get_up(); // uvolnění pohovky sem_post(sofa); // signalizace volného místa na pohovce ch = sit_in_chair(); // posazení zákazníka do křesla ch sem_post(cust_ready); // signalizace připravenosti ke stříhání (vzbuzení holiče) sem_wait(finished[ch]); // čekání na dokončení stříhání leave_chair(); // opuštění křesla sem_post(chair); // signalizace volného křesla sem_wait(cash_register); // čekání na uvolnění pokladny pay(); // přesun k pokladně a platba sem_post(payment); // signalizace platby sem_wait(receipt); // čekání na převzetí platby a přijetí účtenky sem_post(cash_register); // uvolnění místa u pokladny exit_shop(); // opuštění holičství sem_post(max_capacity); // signalizace volné kapacity v holičství řešení Proces holiče: sem_wait(cust_ready); // čekání na zákazníka (holič spí) ch = go_to_chair(); // přesun k zákazníkovi cut_hair(); // stříhání sem_post(finished[ch]); // signalizace dokončení stříhání go_to_cash_register(); // přesun k pokladně sem_wait(payment); // čekání na platbu accept_pay(); // přijetí platby sem_post(receipt); // vydání účtenky řešení Výše uvedený návrh není úplný: chybí řešení akceptace platby správným holičem, pokud je současně dokončena obsluha více zákazníků. Přesto je vidět, že celý problém je poměrně složitý a je třeba důkladného rozboru možných situací. 6.4 Fronta zpráv Pro podporu komunikace procesů může operační systém poskytovat fronty zpráv. Jedná se v podstatě o prostředek k předávání 10/13

11 dat mezi procesy, přičemž se používají dvě základní operace: send zasílá zprávu do fronty, receive přijímá zprávu z fronty. Typická implementace je taková, že volání send je neblokující, je li ve frontě místo, a blokující v případě plné kapacity fronty. Volání receive je neblokující, je li ve frontě dostupná zpráva, a blokující, je li fronta prázdná. Blokování končí, jakmile je do fronty zaslána zpráva. Pro stanovení kapacity fronty se ještě používá inicializační volání. Inicializace a předávání zpráv může vypadat např. takto: mq_t mq; // deklarace identifikátoru fronty zpráv mq_init(mq, 5); // nastavení kapacity fronty zpráv mq_send(mq, msg); // zaslání zprávy msg do fronty mq mq_receive(mq, &msg); // přijetí zprávy z fronty mq Operační systém zajišťuje výlučný přístup k frontě zpráv, takže ji lze využít pro řešení synchronizace i řízení přístupu do kritické sekce Použití fronty zpráv pro řízení přístupu do kritické sekce Do fronty zpráv zašleme tolik inicializačních zpráv, kolik procesů smí současně provádět kód kritické sekce (typicky jednu). Ve vstupní sekci se volá operace receive, ve výstupní sekci operace send. Inicializace: mq_send(mq, "go"); // zaslání inicializační zprávy do fronty Kód procesů: mq_receive(mq, &msg); // operace receive // kód KS mq_send(mq, msg); // operace send vstupní sekce výstupní sekce // kód ZS První proces přijme inicializační zprávu a vstoupí do kritické sekce. Každý další je na volání receive blokován, dokud není kritická sekce zase uvolněná zasláním zprávy do fronty Použití fronty zpráv pro synchronizaci Inicializace: na začátku je fronta zpráv prázdná. Kód procesu provádějícího akci, např. vypočtení hodnoty sdílené proměnné x: x = calculate(); // provedení akce mq_send(sync, "done"); // operace send, signalizace dokončení výpočtu synchronizace signalizace 11/13

12 Kód procesu čekajícího na dokončení akce: mq_receive(sync, &msg); // operace receive, čekání na dokončení výpočtu synchronizace čekání use(x); // použití hodnoty sdílené proměnné x vypočtené jiným procesem Použití fronty zpráv pro řešení problémů souběhu Řešení mnohých problémů pomocí fronty zpráv je v mnohém analogické použití semaforů. Pro inicializaci je třeba zaslat do fronty tolik inicializačních zpráv, na kolik je inicializován semafor, a všude nahradit volání wait voláním receive a volání signal voláním send. Některé problémy lze však pomocí fronty zpráv řešit elegantněji a jednodušeji Producenti a konzumenti řešení pomocí fronty zpráv Definice problému vizte výše. Jako sklad lze použít přímo frontu zpráv. Je třeba inicializovat maximální počet položek ve frontě na kapacitu skladu a použít operace send pro vkládání do skladu a receive pro vybírání ze skladu. Výlučný přístup k frontě zpráv (skladu) je automaticky zajištěn operačním systémem. Při prázdném skladě bude konzument automaticky blokován při použití receive a stejně tak bude blokován producent po zaplnění kapacity při volání send. Inicializace: mq_t storage; // deklarace identifikátoru fronty zpráv mq_init(storage, n); // nastavení kapacity fronty zpráv (skladu) na n položek Proces producenta i (pro i {0,, p 1, kde p je počet producentů): item = produce(); // vyprodukování položky mq_send(storage, item); // zaslání položky do skladu synchronizace signalizace Proces konzumenta i (pro i {0,, c 1, kde c je počet konzumentů): mq_receive(storage, &item); // vyzvednutí položky ze skladu synchronizace čekání consume(item); // zpracování položky Jak je vidět, řešení problému svázaných producentů a konzumentů pomocí fronty zpráv je triviální. 6.5 Opakování 1. Definujte semafor a popište operace na něm používané. 2. Definujte frontu zpráv a popište operace na ní používané včetně informace, kdy blokují. 3. Popište řešení řízení přístupu do kritické sekce pomocí semaforu. 4. Popište řešení řízení přístupu do kritické sekce pomocí fronty zpráv. 12/13

13 5. Řešte synchronizaci procesů pomocí semaforu. 6. Řešte synchronizaci procesů pomocí fronty zpráv. 7. Popište řešení problému obědvajících filosofů pomocí semaforů. 8. Popište řešení problému svázaných producentů a konzumentů pomocí semaforů. 9. Popište řešení problému svázaných producentů a konzumentů pomocí fronty zpráv. Naposledy změněno: Pondělí, 7. říjen 2013, /13

Řada programovacích jazyků nabízí prostředky pro řešení meziprocesové komunikace jako je synchronizace a řízení přístupu do kritické sekce.

Řada programovacích jazyků nabízí prostředky pro řešení meziprocesové komunikace jako je synchronizace a řízení přístupu do kritické sekce. Operační systémy Tomáš Hudec 7 Prostředky programovacích jazyků pro IPC Obsah: 7.1 Monitor, 7.1.1 Použití monitoru pro řízení přístupu do kritické sekce, 7.1.2 Použití monitoru pro synchronizaci, 7.1.3

Více

Principy operačních systémů. Lekce 6: Synchronizace procesů

Principy operačních systémů. Lekce 6: Synchronizace procesů Principy operačních systémů Lekce 6: Synchronizace procesů Kritická sekce Při multitaskingu (multithreadingu) různé procesy často pracují nad společnou datovou strukturou (např. zápis a čtení do/z fronty)

Více

Semafory Zobecněním operací WAKEUP a SLEEP přidáním celočíselného čítače vzniknou semafory a jejich atomické operace DOWN a UP.

Semafory Zobecněním operací WAKEUP a SLEEP přidáním celočíselného čítače vzniknou semafory a jejich atomické operace DOWN a UP. Semafory Zobecněním operací WAKEUP a SLEEP přidáním celočíselného čítače vzniknou semafory a jejich atomické operace DOWN a UP. Dvě sémantiky vzhledem k hodnotám čítače: 1. čítač >= 0 Operace DOWN zkontroluje

Více

Operační systémy. Přednáška 5: Komunikace mezi procesy

Operační systémy. Přednáška 5: Komunikace mezi procesy Operační systémy Přednáška 5: Komunikace mezi procesy 1 Semafory Datový typ semafor obsahuje čítač a frontu čekajících procesů. Nabízí tři základní operace: Init(): Čítač se nastaví na zadané číslo (většinou

Více

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end; Cvičení 9 - Monitory na rozdíl od semaforů je monitor jazyková konstrukce monitor = Pascalský blok podobný proceduře nebo fci uvnitř monitoru jsou definovány proměnné, procedury a fce proměnné monitoru

Více

Procesy a vlákna - synchronizace

Procesy a vlákna - synchronizace ÚVOD DO OPERAČNÍCH SYSTÉMŮ Ver.1.00 Procesy a vlákna - synchronizace České vysoké učení technické Fakulta elektrotechnická 2010 Studijní materiály a informace o předmětu http://measure.feld.cvut.cz/vyuka/predmety/bakalarske/navody

Více

PARA Filozofové, kuřáci a holič

PARA Filozofové, kuřáci a holič PARA Filozofové, kuřáci a holič Lenka Carr Motyčková 22. duben 2014 PDS Semafory 1 1. Večeřící filozofové (Dijkstra 1968) Problém: N (typicky 5) flozofů sedí u kulatého stolu, přemýšlí nebo jedí pomocí

Více

Procesy a vlákna IPC Komunikace mezi procesy (IPC = Inter-Process Communication)

Procesy a vlákna IPC Komunikace mezi procesy (IPC = Inter-Process Communication) ÚVOD DO OPERAČNÍCH SYSTÉMŮ Ver.1.00 Procesy a vlákna IPC Komunikace mezi procesy (IPC = Inter-Process Communication) České vysoké učení technické Fakulta elektrotechnická 2010 Studijní materiály a informace

Více

Paralelní programování

Paralelní programování Paralelní programování přednášky Jan Outrata únor duben 2011 Jan Outrata (KI UP) Paralelní programování únor duben 2011 1 / 16 Semafory Await synchronizace používající await běží na železe = využívají

Více

Principy počítačů a operačních systémů

Principy počítačů a operačních systémů Principy počítačů a operačních systémů Operační systémy Synchronizace procesů, zablokování Zimní semestr 2011/2012 Přístup ke sdíleným datům Terminologie: souběžné vs. paralelní zpracování Paralelní provádění

Více

ZOS 9. cvičení, ukázky kódu. Pavel Bžoch

ZOS 9. cvičení, ukázky kódu. Pavel Bžoch ZOS 9. cvičení, ukázky kódu Pavel Bžoch Obsah Komunikace mezi procesy Atomické operace TSL a CAS Zámky Semafory Semafory vypsání věty Monitor Bariéra pomocí monitoru Implementace semaforu pomocí monitoru

Více

Management procesu II Mgr. Josef Horálek

Management procesu II Mgr. Josef Horálek Management procesu II Mgr. Josef Horálek Vlákna = Vlákna (Threads) = proces je definován množinou zdrojů výpočetního systému, které používá a umístěním, kde je spuštěn; = vlákno (thread) nazýváme lehký

Více

Paralelní programování

Paralelní programování Paralelní programování přednášky Jan Outrata únor duben 2011 Jan Outrata (KI UP) Paralelní programování únor duben 2011 1 / 17 Monitor Semafor vedle aktivní (čekací smyčka, busy-wait) i pasivní implementace

Více

OS Konkurence procesů a IPC

OS Konkurence procesů a IPC OS Konkurence procesů a IPC Tomáš Hudec Tomas.Hudec@upce.cz http://asuei01.upceucebny.cz/usr/hudec/vyuka/os/ Tomáš Hudec OS: Konkurence procesů a IPC 2 / 133 Konkurence procesů (vláken) a problémy současného

Více

Přednáška 4. Klasické synchronizační úlohy. Implementace procesů, vláken.

Přednáška 4. Klasické synchronizační úlohy. Implementace procesů, vláken. Přednáška 4 Klasické synchronizační úlohy. Implementace procesů, vláken. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012 Příprava studijního programu Informatika

Více

Konstruktory a destruktory

Konstruktory a destruktory Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,

Více

Synchronizace Mgr. Josef Horálek

Synchronizace Mgr. Josef Horálek Synchronizace Mgr. Josef Horálek Synchronizace procesu = Kooperující proces je proces, který může ovlivnit nebo být ovlivněn jiným procesem právě spuštěným v systému = Spolupracující procesy mohou sdílet:

Více

Operační systémy - modelování a algoritmy paralelních výpočtů

Operační systémy - modelování a algoritmy paralelních výpočtů Operační systémy - modelování a algoritmy paralelních výpočtů texty pro distanční studium Doc. Ing. Cyril Klimeš, CSc. Ostravská univerzita v Ostravě, Přírodovědecká fakulta Katedra informatiky a počítačů

Více

TÉMATICKÝ OKRUH TZD, DIS a TIS

TÉMATICKÝ OKRUH TZD, DIS a TIS TÉMATICKÝ OKRUH TZD, DIS a TIS Číslo otázky : 15. Otázka : Paralelní procesy v databázích. Transakce, zamykání, uváznutí. Dvoufázový protokol, časová razítka. Obsah : 1 Úvod 2 Paralelní procesy v databázích

Více

2010/2011 ZS. Operační systém. procesy a vlákna. interakce a synchronizace

2010/2011 ZS. Operační systém. procesy a vlákna. interakce a synchronizace Principy počítačů a operačních systémů Operační systém procesy a vlákna plánování interakce a synchronizace Základní pojmy proces vykonávaný program vlákno (thread) oddělení místa vykonávání instrukcí

Více

04. Mutexy, monitory. ZOS 2006, L. Pešička

04. Mutexy, monitory. ZOS 2006, L. Pešička 04. Mutexy, monitory ZOS 2006, L. Pešička Administrativa změna termínů zápočtových testů 7.11.2006 (út), EP130, 18:30 12.12.2006 (út), EP130, 18:30 Semafory Ošetření kritické sekce ukázka více nezávislých

Více

Paralelní programování

Paralelní programování Paralelní programování cvičení Jan Outrata únor duben 2011 Jan Outrata (KI UP) Paralelní programování únor duben 2011 1 / 13 Cvičení 1 Jazyk C POSIX Threads (UNIX) hlavičkový soubor pthread.h, knihovna

Více

Synchronizace paralelních procesů

Synchronizace paralelních procesů SU Media: Student Středník ČWUT AVC SH Akropolis ikariéra Synchronizace paralelních procesů z ČWUT Obsah 1 Časově závislé chyby, kritické sekce, vzájemné vyloučení 2 Metody vzájemného vyloučení

Více

Při překrývání se využívá toho, že ne všechny moduly programu jsou vyžadovány současně. Jakmile skončí využívání jednoho

Při překrývání se využívá toho, že ne všechny moduly programu jsou vyžadovány současně. Jakmile skončí využívání jednoho Operační systémy Tomáš Hudec 9 Správa paměti, metody alokace paměti, virtualizace paměti Obsah: 9.1 Techniky přidělování paměti, 9.1.1 Pevné dělení paměti, 9.1.1.1 Stejně velké oblasti, 9.1.1.2 Různě velké

Více

Databázovéa informačnísystémy NÁVRH IMPLEMENTACE 3 PARALELNÍ PROCESY V DATABÁZÍCH

Databázovéa informačnísystémy NÁVRH IMPLEMENTACE 3 PARALELNÍ PROCESY V DATABÁZÍCH Databázovéa informačnísystémy NÁVRH IMPLEMENTACE 3 PARALELNÍ PROCESY V DATABÁZÍCH 1 teorie dosud -aplikace jednouživatelské praxe - databáze současně přístupná více uživatelům, paralelní běh aplikací příklady

Více

Vlákna a přístup ke sdílené paměti. B4B36PDV Paralelní a distribuované výpočty

Vlákna a přístup ke sdílené paměti. B4B36PDV Paralelní a distribuované výpočty Vlákna a přístup ke sdílené paměti B4B36PDV Paralelní a distribuované výpočty Minulé cvičení: Paralelizace nám může pomoct... 1 Minulé cvičení: Paralelizace nám může pomoct... B4B36PDV: Ale ne všechny

Více

C++ 0x aka C++11. Základním kamenem je třída std::thread

C++ 0x aka C++11. Základním kamenem je třída std::thread C++ 0x aka C++11 Jako jiné jazyky, např. Free/Object Pascal, se C++ ve standardu ++0x dočkal podpory vláken Výhodou je, že standardní knihovna je platformě nezávislá na úrovni zdrojového kódu Základním

Více

Spojová implementace lineárních datových struktur

Spojová implementace lineárních datových struktur Spojová implementace lineárních datových struktur doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB

Více

Operační systémy. Přednáška 4: Komunikace mezi procesy

Operační systémy. Přednáška 4: Komunikace mezi procesy Operační systémy Přednáška 4: Komunikace mezi procesy 1 Časově závislé chyby Dva nebo několik procesů používá (čte/zapisuje) společné sdílené prostředky (např. sdílená paměť, sdílení proměnné, sdílené

Více

PREPROCESOR POKRAČOVÁNÍ

PREPROCESOR POKRAČOVÁNÍ PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,

Více

Distribuovaná synchronizace. Paralelní a distribuované systémy. 11. Přednáška Vzájemné vyloučení. Centralizovaný algoritmus - fronta procesů

Distribuovaná synchronizace. Paralelní a distribuované systémy. 11. Přednáška Vzájemné vyloučení. Centralizovaný algoritmus - fronta procesů Distribuovaná synchronizace Využití kritické sekce při vzájemném vyloučení v distribuovaném systému Paralelní a distribuované systémy 11. Přednáška Vzájemné vyloučení Logicky distribuovaný systém s vlákny

Více

Linux a vlákna - Linuxové noviny 8-9/1998. Linuxové noviny 08-09/98

Linux a vlákna - Linuxové noviny 8-9/1998. Linuxové noviny 08-09/98 Page 1 of 9 - předchozí článek - následující článek - obsah - úvodní stránka - Linuxové noviny 08-09/98 Linux a vlákna Vladimír Michl, 7. srpna 1998 Tento článek si klade za úkol seznámit čtenáře s vlákny

Více

Lineární datové struktury

Lineární datové struktury Lineární datové struktury doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 5. března 2019 Jiří Dvorský (VŠB TUO) Lineární datové

Více

Teoretické minimum z PJV

Teoretické minimum z PJV Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov

Více

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615) IB108 Sada 1, Příklad 1 ( ) Složitost třídícího algoritmu 1/-Sort je v O n log O (n.71 ). Necht n = j i (velikost pole, které je vstupním parametrem funkce 1/-Sort). Lehce spočítáme, že velikost pole předávaná

Více

Lineární datové struktury

Lineární datové struktury Lineární datové struktury doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB TUO) Lineární datové

Více

Paměti a jejich organizace

Paměti a jejich organizace Kapitola 5 Paměti a jejich organizace 5.1 Vnitřní a vnější paměti, vlastnosti jednotlivých typů Vnější paměti Jsou umístěny mimo základní jednotku. Lze je zařadit mezi periferní zařízení. Zápis a čtení

Více

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti. Intervalové stromy Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme průběžně provádět tyto dvě operace: 1. Změna jednoho čísla v posloupnosti. 2. Zjištění součtu čísel

Více

PB071 Programování v jazyce C Jaro 2013

PB071 Programování v jazyce C Jaro 2013 Programování v jazyce C Jaro 2013 Uživatelské datové typy, dynamické struktury a jejich ladění Organizační Organizační Vnitrosemetrální test 7.4. Dotazník k domácím úkolům informační, nebodovaný, pomáhá

Více

Knihovna DataBoxLib TXV 003 56.01 první vydání prosinec 2010 změny vyhrazeny

Knihovna DataBoxLib TXV 003 56.01 první vydání prosinec 2010 změny vyhrazeny Knihovna DataBoxLib TXV 003 56.01 první vydání prosinec 2010 změny vyhrazeny 1 TXV 003 56.01 Historie změn Datum Vydání Popis změn Prosinec 2010 1 První vydání, popis odpovídá DataBoxLib_v14 OBSAH 1 Úvod...3

Více

PES lib (C + PASCAL) KNIHOVNY KOMUNIKAÈNÍCH FUNKCÍ 03/2000. 1 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 1

PES lib (C + PASCAL) KNIHOVNY KOMUNIKAÈNÍCH FUNKCÍ 03/2000. 1 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 1 PES lib (C + PASCAL) KNIHOVNY KOMUNIKAÈNÍCH FUNKCÍ 03/2000 1 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 1 PESlib Popis knihoven PASCAL a C 03.2000 2. verze dokumentu Zmìny a doplòky proti 1.

Více

Dynamické datové struktury III.

Dynamické datové struktury III. Dynamické datové struktury III. Halda. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované

Více

OS Konkurence procesů a IPC

OS Konkurence procesů a IPC OS Konkurence procesů a IPC Tomáš Hudec Tomas.Hudec@upce.cz http://asuei01.upceucebny.cz/usr/hudec/vyuka/os/ Konkurence procesů sdílení prostředků paměť, CPU, soubory komunikace procesů přístup ke sdílené

Více

IB109 Návrh a implementace paralelních systémů. Kolektivní komunikační primitava. RNDr. Jiří Barnat, Ph.D.

IB109 Návrh a implementace paralelních systémů. Kolektivní komunikační primitava. RNDr. Jiří Barnat, Ph.D. IB109 Návrh a implementace paralelních systémů Kolektivní komunikační primitava RNDr. Jiří Barnat, Ph.D. Kvantitativní parametry komunikace B109 Návrh a implementace paralelních systémů: Kolektivní komunikační

Více

Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21

Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21 Stručný obsah 1. Hardware, procesory a vlákna... 19 2. Programování s ohledemna výkon... 45 3. Identifikování příležitostí pro paralelizmus... 93 4. Synchronizace a sdílení dat... 123 5. Vlákna v rozhraní

Více

ADT/ADS = abstraktní datové typy / struktury

ADT/ADS = abstraktní datové typy / struktury DT = datové typy obor hodnot, které může proměnná nabývat, s operacemi na tomto oboru určen: obor hodnot + výpočetní operace např. INT = { 2 147 483 648 až +2 147 483 647} + {+,,*,/,} ADT/ADS = abstraktní

Více

Anotace. Dynamické programování, diskrétní simulace.

Anotace. Dynamické programování, diskrétní simulace. Anotace Dynamické programování, diskrétní simulace. Problémy, které byly Přednášející jde tentokrát do M1, počet platných uzávorkování pomocí n párů závorek, počet rozkladů přirozeného čísla na součet

Více

Paralelní programování

Paralelní programování Paralelní programování přednášky Jan Outrata únor duben 2011 Jan Outrata (KI UP) Paralelní programování únor duben 2011 1 / 11 Literatura Ben-Ari M.: Principles of concurrent and distributed programming.

Více

Homer. prvky. délka. přední 0 zadní 4. Použití fronty BUS STOP. 3 Lisa. 2 Bart. 4 Maggie. 1 Marge. Grafické znázornění předchozí animace:

Homer. prvky. délka. přední 0 zadní 4. Použití fronty BUS STOP. 3 Lisa. 2 Bart. 4 Maggie. 1 Marge. Grafické znázornění předchozí animace: Fronta Fronta je sekvence first-in-first-out (první do fronty první z fronty) prvků. Prvky mohou být vkládány pouze nakonec (rear) fronty a odstraňovány pouze zpočátku (front) fronty Délka fronty je počet

Více

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu Ukazatel a dynamické datové struktury v prostředí DELPHI Důležitým termínem a konstrukčním programovým prvkem je typ UKAZATEL. Je to vlastně

Více

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář Vazba (binding) Tabulka symbolů Miroslav Beneš Dušan Kolář vazba = spojení mezi entitou a vlastností okamžik vazby (binding time) při návrhu jazyka při implementaci jazyka během překladu/spojování/zavádění

Více

Abstraktní datové typy

Abstraktní datové typy Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní datové typy BI-PA2, 2011, Přednáška 10 1/27 Abstraktní datové typy Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky,

Více

Programování v C++, 2. cvičení

Programování v C++, 2. cvičení Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule

Více

Služba ve Windows. Služba (service) je program

Služba ve Windows. Služba (service) je program 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 www.rvp.cz, ISSN: 1802-4785. Provozuje Národní ústav pro vzdělávání, školské

Více

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) 28. prosince Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) 28. prosince Fakulta elektrotechniky a informatiky Katedra softwarových technologií 9 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 28. prosince 2009 Struktury Struktury heterogenní struktura položky mohou být různých datových typů vystupuje jako jediný objekt

Více

OS Deadlock a prevence

OS Deadlock a prevence OS Deadlock a prevence Tomáš Hudec Tomas.Hudec@upce.cz http://asuei01.upceucebny.cz/usr/hudec/vyuka/os/ Prostředky poskytované OS OS poskytuje procesům systémové prostředky (zdroje, resources) HW zařízení,

Více

5 Rekurze a zásobník. Rekurzivní volání metody

5 Rekurze a zásobník. Rekurzivní volání metody 5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Vyhledávání, vkládání, odstraňování Vyhledání hodnoty v nesetříděném poli Vyhledání hodnoty v setříděném poli Odstranění hodnoty z pole Vkládání hodnoty do pole Verze pro akademický

Více

Kolekce, cyklus foreach

Kolekce, cyklus foreach Kolekce, cyklus foreach Jen informativně Kolekce = seskupení prvků (objektů) Jednu již známe pole (Array) Kolekce v C# = třída, která implementuje IEnumerable (ICollection) Cyklus foreach ArrayList pro

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Jedenácté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Gabriela Nečasová, inecasova@fit.vutbr.cz

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Třídy v C++ Třídy jsou uživatelsky definované typy podobné strukturám v C, kromě datových položek (proměnných) však mohou obsahovat i funkce

Více

Správa procesoru. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/YOS: Přednáška III. 7. listopad, / 23

Správa procesoru. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/YOS: Přednáška III. 7. listopad, / 23 Operační systémy Správa procesoru Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci Petr Krajča (UP) KMI/YOS: Přednáška III. 7. listopad, 2014 1 / 23 Procesy (1/2) neformálně: proces = běžící

Více

Grafické znázornění vláken a klasické problémy synchronizace

Grafické znázornění vláken a klasické problémy synchronizace Grafické znázornění vláken a klasické problémy synchronizace Naďa Jašíková Vít Koumar Jindřich Samec 1 Grafické znázornění vláken a jejich komunikace v UML Unified Modelling Language (UML) se používá k

Více

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2 PI JE JEDNODUCHÝ IMPERATIVNÍ PROGRAMOVACÍ JAZYK OBSAHUJE PODPORU ANOTACÍ NEOBSAHUJE NĚKTERÉ TYPICKÉ KONSTRUKTY PROGRAMOVACÍCH JAZYKŮ JAKO JSOU REFERENCE, UKAZATELE, GLOBÁLNÍ PROMĚNNÉ PODOBÁ SE JAZYKU C

Více

Petr Štěpán, K13133 KN-E-129 Téma 5. Synchronizace a deadlock

Petr Štěpán, K13133 KN-E-129 Téma 5. Synchronizace a deadlock Operační systémy a sítě Petr Štěpán, K13133 KN-E-129 stepan@fel.cvut.cz Téma 5. Synchronizace a deadlock A4B33OSS 1 Problém synchronizace vláken Souběžný přístup ke sdíleným datům může způsobit jejich

Více

Spuštění instalace. nastavení boot z cd v BIOSu vložení CD s instal. médiem spuštění PC. nastavení parametrů instalace (F2 čěština)

Spuštění instalace. nastavení boot z cd v BIOSu vložení CD s instal. médiem spuštění PC. nastavení parametrů instalace (F2 čěština) Instalace OS Linux Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu www.rvp.cz, ISSN: 1802-4785. Provozuje Národní ústav pro vzdělávání,

Více

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: 4.10.2011 8:01:48

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: 4.10.2011 8:01:48 LED_007.c Strana: 1/5 Nyní již umíme používat příkazy k větvení programu (podmínky) "if" a "switch". Umíme také rozložit program na jednoduché funkce a používat cyklus "for". Co se týče cyklů, zbývá nám

Více

PROGRAMOVÁNÍ ŘÍDÍCÍCH SYSTÉMŮ

PROGRAMOVÁNÍ ŘÍDÍCÍCH SYSTÉMŮ VYSOKÁ ŠKOLA BÁŇSKÁ TECHNICKÁ UNIVERZITA OSTRAVA FAKULTA STROJNÍ PROGRAMOVÁNÍ ŘÍDÍCÍCH SYSTÉMŮ Ing. Ivo Špička, Ph.D. Ostrava 2013 Ing. Ivo Špička, Ph.D. Vysoká škola báňská Technická univerzita Ostrava

Více

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr Seminář z IVT Algoritmizace Slovanské gymnázium Olomouc Tomáš Kühr Algoritmizace - o čem to je? Zatím jsme se zabývali především tím, jak určitý postup zapsat v konkrétním programovacím jazyce (např. C#)

Více

B4B35OSY: Operační systémy

B4B35OSY: Operační systémy B4B35OSY: Operační systémy Lekce 4. Synchronizace a deadlock Petr Štěpán stepan@fel.cvut.cz 25. října, 2018 1 / 57 Outline 1 Plánování procesů/vláken 2 Synchronizace 2 / 57 Plánování procesů/vláken Obsah

Více

Základy algoritmizace. Hašování

Základy algoritmizace. Hašování Základy algoritmizace Hašování Problematika hašování Hašování - nástroj na jednoduchý způsob "zakódování vstupních dat. Vstupní data jsou zpracována hašovací funkcí jsou jistým způsobem komprimována. Relativně

Více

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort. A4B33ALG 2010/05 ALG 07 Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated Quicksort Stabilita řazení 1 Selection sort Neseřazeno Seřazeno Start T O U B J R M A K D Z E min

Více

Cvičení č. 6. Synchronizace ve Windows. 3 Body

Cvičení č. 6. Synchronizace ve Windows. 3 Body Cvičení č. 6 Synchronizace ve Windows 3 Body Datum: 3.4.2008 1 Obsah 1. Úvod...2 2. Pokyny pro odevzdání...2 3. Příprava...2 4. Úlohy...3 4.1 Doporučení pro implementaci...3 4.5 Přehled použitých funkcí

Více

Programování v C++ 2, 4. cvičení

Programování v C++ 2, 4. cvičení Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Deváté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 27.11.2017,

Více

Synchronizace procesů

Synchronizace procesů Synchronizace procesů Tomáš Vojnar vojnar@fit.vutbr.cz Vysoké učení technické v Brně Fakulta informačních technologií Božetěchova 2, 612 66 BRNO 11. dubna 2011 Operační systémy Synchronizace procesů Současný

Více

Synchronizace vjj 1

Synchronizace vjj 1 Synchronizace 13.06.18 vjj 1 13.06.18 vjj 2 Synchronizace obraz a zvuk 13.06.18 vjj 3 Synchronizace procesy/vlákna 13.06.18 vjj 4 čeho?!?!?! Synchronizace dvou (a více) paralelně běžících procesů dvou

Více

Paralelní programování

Paralelní programování Paralelní programování přednáška 3 Michal Krupka 1. března 2011 Michal Krupka (KI UP) Paralelní programování 1. března 2011 1 / 14 Ještě k atomickým proměnným Další neatomické proměnné Mohou to být proměnné,

Více

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou

Více

Možnosti programování se sdílenými proměnnými. Týden 6 Programování se sdílenými proměnnými (Shared Variables, SV) Procesy a vlákna.

Možnosti programování se sdílenými proměnnými. Týden 6 Programování se sdílenými proměnnými (Shared Variables, SV) Procesy a vlákna. Možnosti programování se sdílenými proměnnými Týden 6 Programování se sdílenými proměnnými (Shared Variables, SV). Sekvenční jazyk + paralelizující kompilátor = zatím málo efektivní (implicitní paralelismus).

Více

Téma 36. Petr Husa

Téma 36. Petr Husa Přesné zadání: Téma 36 Petr Husa husap1@fel.cvut.cz Sdílení prostředků, časově závislé chyby, kritické sekce procesu. Synchronizační nástroje, uváznutí - původ, detekce, prevence. Komponenty JOS pro podporu

Více

UNIVERZITA OBRANY. Knihovna HLAGate. Programátorská dokumentace. Petr Františ 24.1.2011

UNIVERZITA OBRANY. Knihovna HLAGate. Programátorská dokumentace. Petr Františ 24.1.2011 UNIVERZITA OBRANY Knihovna HLAGate Programátorská dokumentace Petr Františ 24.1.2011 Programátorská dokumentace knihovny HLAGate, výsledek projektu DISIM Popis knihovny Knihovna HLAGate je určena pro propojení

Více

Pavel Procházka. 3. prosince 2014

Pavel Procházka. 3. prosince 2014 Jazyk C# (seminář 11) Pavel Procházka KMI 3. prosince 2014 Motivace Dnes už se prakticky nedělají jednojádrové procesory pokud potřebujeme výkon, musíme zapojit všechna jádra Často potřebujeme dělat více

Více

Základy C++ I. Jan Hnilica Počítačové modelování 18

Základy C++ I. Jan Hnilica Počítačové modelování 18 Základy C++ I 1 Přechod z C na C++ jazyk C++ je nadmnožinou jazyka C z hlediska syntaxe se jedná o velmi podobné jazyky, spolu s dalšími jazyky "céčkovské" rodiny, jako je např. C# každý platný program

Více

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí: Metody řazení ve vnitřní a vnější paměti. Algoritmy řazení výběrem, vkládáním a zaměňováním. Heapsort, Shell-sort, Radix-sort, Quicksort. Řazení sekvenčních souborů. Řazení souborů s přímým přístupem.

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++ Globální konstantní proměnné Konstantní proměnné specifikujeme s klíčovým slovem const, tyto konstantní proměné

Více

Jarníkův algoritmus. Obsah. Popis

Jarníkův algoritmus. Obsah. Popis 1 z 6 28/05/2015 11:44 Jarníkův algoritmus Z Wikipedie, otevřené encyklopedie Jarníkův algoritmus (v zahraničí známý jako Primův algoritmus) je v teorii grafů algoritmus hledající minimální kostru ohodnoceného

Více

Architektury paralelních počítačů II.

Architektury paralelních počítačů II. Architektury paralelních počítačů II. Sekvenční konzistence paměti Implementace synchronizačních událostí Ing. Miloš Bečvář s použitím slajdů Prof. Ing. Pavla Tvrdíka, CSc. Osnova přednášky Opakování definice

Více

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1 1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1 1. Prvocisla: Kratky ukazkovy priklad na demonstraci baliku WEB. Nasledujici program slouzi pouze jako ukazka nekterych moznosti a sluzeb,

Více

Interpret jazyka IFJ2011

Interpret jazyka IFJ2011 Dokumentace projektu Interpret jazyka IFJ2011 Tým číslo 093, varianta b/3/i: 20 % bodů: Cupák Michal (xcupak04) vedoucí týmu 20 % bodů: Číž Miloslav (xcizmi00) 20 % bodů: Černá Tereza (xcerna01) 20 % bodů:

Více

Singleton obsah. Motivace Základní myšlenka Implementace Problémy. Dědičnost Obecná implementace Shrnutí. destrukce vícevláknovost

Singleton obsah. Motivace Základní myšlenka Implementace Problémy. Dědičnost Obecná implementace Shrnutí. destrukce vícevláknovost Singleton Singleton obsah Motivace Základní myšlenka Implementace Problémy destrukce vícevláknovost Dědičnost Obecná implementace Shrnutí Singleton motivace Co mají následující příklady společného? DatabaseConnectionPool

Více

Přednáška 3. Synchronizace procesů/vláken. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Přednáška 3. Synchronizace procesů/vláken. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012 Přednáška 3 Synchronizace procesů/vláken. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012 Příprava studijního programu Informatika je podporována projektem financovaným

Více

Téma 4. Synchronizace a deadlock

Téma 4. Synchronizace a deadlock A3B33OSD 2016/2017 Operační systémy a databáze Petr Štěpán, K13133, KN-E-129 stepan@fel.cvut.cz Michal Sojka, K13135, KN-G-203 sojkam1@fel.cvut.cz Téma 4. Synchronizace a deadlock A3B33OSD 2016/2017 Meziprocesní

Více

Paralelní programování

Paralelní programování Paralelní programování přednášky Jan Outrata únor duben 2011 Jan Outrata (KI UP) Paralelní programování únor duben 2011 1 / 14 Atomické akce dále nedělitelná = neproložitelná jiným procesem izolovaná =

Více

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI EVROPSKÝ SOCIÁLNÍ FOND Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI Úvod do PHP PHP Personal Home Page Hypertext Preprocessor jazyk na tvorbu dokumentů přípona: *.php skript je součást HTML stránky!

Více

Téma 5 Synchronizace procesů a problém uváznutí

Téma 5 Synchronizace procesů a problém uváznutí Téma 5 Synchronizace procesů a problém uváznutí Obsah 1. Problém soupeření, kritické sekce 2. Vzájemné vyloučení 3. Semafory 4. Klasické synchronizační úlohy 5. Problém uváznutí a časově závislých chyb

Více

Obsah: KR2 - Uživatelská příručka -1-

Obsah: KR2 - Uživatelská příručka -1- KR2 - Uživatelská příručka -1- Obsah: 1. Obecné... 2 2. Funkce řadiče...2 2.1. Obecný popis... 2 2.2. Režimy řízení...2 2.2.1. Řízení na konstantní teplotu...2 2.2.2. Pseudoekviterm...2 2.2.3 Řízení dle

Více

setup() { I = 0; } loop() { I = I + 1; }

setup() { I = 0; } loop() { I = I + 1; } PŘERUŠENÍ Procesor pracuje tak, že načítá z paměti jednotlivé instrukce a ty následně zpracovává. Instrukce se zpracovávají v pořadí v jakém jsou uloženy v paměti. Vezměme jednoduchý program, který v nekonečném

Více

Programování v C++ 2, 7. cvičení

Programování v C++ 2, 7. cvičení Programování v C++ 2, 7. cvičení spojový seznam 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené látky Dědění

Více