06 - Procesy a vlákna - synchronizace
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