Jak Začít?

Máš v počítači zápisky z přednášek
nebo jiné materiály ze školy?

Nahraj je na studentino.cz a získej
4 Kč za každý materiál
a 50 Kč za registraci!




06 - Procesy a vlákna - synchronizace

PDF
Stáhnout kompletní materiál zdarma (174.15 kB)

Níže je uveden pouze náhled materiálu. Kliknutím na tlačítko 'Stáhnout soubor' stáhnete kompletní formátovaný materiál ve formátu PDF.

Down(): Pokud je čítač větší než nula, hodnota se sníží o 1, pokud je 
hodnota nulová, proces/vlákno se zablokuje a uloží do fronty.

Up(): Pokud nějaké procesy/vlákna čekají ve frontě, potom se první z 
nich probudí. Pokud je fronta prázdná, čítač se inkrementuje o 1. 

A7B38UOS   Úvod do operačních systémů 06 - Procesy a vlákna - synchronizace

Mutex, monitor

Mutex (Mutual Exclusion)
ƒ

synchronizační objekt typu binární semafor (hodnota čítače 1 nebo 0)

Monitor = datová struktura + operace pro čtení/změnu stavu
ƒ

synchronizační objekt realizovaný jako speciální konstrukce 
programovacího jazyka (musí ho tedy implementovat překladač), typicky 
implementovaná pomocí jiného synchronizačního primitiva

výhodou monitoru oproti jiným objektům je jeho vysokoúrovňovost –
snadněji se používá a je bezpečnější

operace wait (zablokuje volající proces uvnitř monitoru,uvolní monitor 
pro jiný proces)

Operace signal (odblokuje zablokované procesy, ale neuvolňujemonitor, odblokované procesy musí nejprve získat monitor)

A7B38UOS   Úvod do operačních systémů 06 - Procesy a vlákna - synchronizace

České vysoké učení technické Fakulta elektrotechnická

KONEC 6. přednášky

ÚVOD DO OPERAČNÍCH SYSTÉMŮ

A7B38UOS   Úvod do operačních systémů 06 - Procesy a vlákna - synchronizace

A7B38UOS   Úvod do operačních systémů 06 - Procesy a vlákna - synchronizace

Vznik nového procesu v Unixu

int main(...)
{

...
if ((pid = fork()) == 0) 

// vytvoření nového procesu 

{

fprintf(stdout, "Child pid: %i\n", getpid());
err = execvp(command, arguments); 

// toto je nový proces („dítě“)

fprintf(stderr, "Child error: %i\n", errno);
exit(err);

}
else if (pid > 0)

// toto je rodičovský proces

{

fprintf(stdout, "Parent pid: %i\n", getpid());
pid2 = waitpid(pid, &status, 0); 

// čekání na ukončení procesu

}
...
return 0;

}

Příklad: implementace 

příkazu shellu v Unixu pomocí volání jádra a knihovních funkcí jazyka C

Témata, do kterých materiál patří