Systemy operacyjne: Różnice pomiędzy wersjami
m interpunkcja |
|||
(Nie pokazano 100 wersji utworzonych przez 4 użytkowników) | |||
Linia 3: | Linia 3: | ||
== Opis == | == Opis == | ||
Celem | Celem zajęć jest przedstawienie roli i zadań systemu operacyjnego w oprogramowaniu komputera oraz omówienie zagadnień realizacji — algorytmów, struktur danych i ich implementacji. Prezentowane są techniki zarządzania podstawowymi zasobami sprzętowymi komputera — procesorem, pamięcią operacyjną oraz wirtualną i urządzeniami wejścia-wyjścia — oraz ich wpływ na efektywność funkcjonowania systemu jako całości. W kontekście zarządzania zasobami wprowadzana jest również koncepcja procesu oraz wątku. Następnie omawiana jest koncepcja pliku oraz realizacja systemu plików — warstwy logicznej i fizycznej — wraz z przykładami konkretnych implementacji (CP/M, FAT-12/16/32, ISO 9660, Unix, NTFS). | ||
Osobnym zagadnieniem, integralnie związanym z realizacją systemu operacyjnego, jest | Osobnym zagadnieniem, integralnie związanym z realizacją systemu operacyjnego, jest współbieżność i synchronizacja w znaczeniu koordynacji przepływu sterowania. W kontekście podstawowych problemów synchronizacji, takich jak wzajemne wykluczanie oraz ograniczone buforowanie, omawiane są podejścia do synchronizacji procesów, bazujące na współdzielonych zmiennych, podejścia wspierane przez system operacyjny — semafory, oraz podejścia wymagające wsparcia w konstrukcjach programowych języków wysokopoziomowych — monitory, regiony krytyczne i spotkania (ang. rendezvous). Następnie realizowane są zadania polegające na zastosowaniu omawianych mechanizmów do rozwiązania klasycznych problemów synchronizacji (problem producenta-konsumenta, czytelników i pisarzy, pięciu filozofów, śpiących fryzjerów itp.). Omawiany jest również problem wynikający z dostępu współbieżnych procesów do zasobów — zakleszczenie oraz podejścia do rozwiązywania tego problemu. | ||
== Sylabus == | == Sylabus == | ||
=== | |||
* Jerzy Brzeziński | === Autorzy === | ||
* Dariusz Wawrzyniak | * Jerzy Brzeziński — Politechnika Poznańska | ||
* Dariusz Wawrzyniak — Politechnika Poznańska | |||
=== Wymagania wstępne === | === Wymagania wstępne === | ||
* Wstęp do programowania | * Wstęp do programowania | ||
* Umiejętność programowania w języku C | * Umiejętność programowania w języku C | ||
* Elementarna wiedza z zakresu | * Elementarna wiedza z zakresu architektury komputerów | ||
=== Zawartość === | === Zawartość === | ||
'''Wykład''' | |||
* | * Pierwsze dwa moduły (4 godz.) są ogólnym wprowadzeniem, obejmującym takie zagadnienia jak: | ||
* | ** rola i zadania systemu operacyjnego, | ||
* | ** umiejscowienie systemu operacyjnego (w szczególności jądra) w strukturze oprogramowania systemu komputerowego, | ||
* | ** klasyfikacja systemów operacyjnych, | ||
* | ** ogólna zasada działania systemu operacyjnego (sposób przekazywania sterowania do programu jądra), | ||
* | ** koncepcja procesu, zasobu i wątku. | ||
* Kolejne dwa moduły (4 godz.) dotyczą planowania przydziału procesora, czyli szeregowania zadań. Pierwszy z modułów rozpoczyna się od omówienia ogólnej koncepcji planowania. Następnie przedstawione są algorytmy planowania z wywłaszczaniem i bez wywłaszczeń oraz kryteria ich oceny. Poruszany jest też problem szeregowania procesów ograniczonych wejściem-wyjściem. Krótko przedyskutowane są również zagadnienia implementacyjne. Drugi moduł prezentuje rozwiązania w zakresie szeregowania zadań (procesów lub wątków) we współczesnych systemach operacyjnych, czyli tradycyjnym systemie UNIX, systemie Linux oraz systemie Windows. | |||
* | * W kolejnych dwóch modułach (5 godz.) omawiane są zagadnienia zarządzania pamięcią. Pierwszy z modułów koncentruje się na zarządzaniu pamięcią operacyjną, obejmującym: podział pamięci, przydział pamięci oraz transformację adresów, w szczególności w systemie pamięci stronicowanej i segmentowanej. Przy tej okazji omawiane jest zjawisko fragmentacji wewnętrznej i zewnętrznej, a także poruszany jest problem ochrony oraz współdzielenia pamięci. Kilka slajdów poświęcono również tworzeniu obrazu procesu w pamięci. Drugi moduł dotyczy realizacji pamięci wirtualnej. Omawiane jest zjawisko błędu strony, jego obsługa i podstawowe problemy z tym związane, tj. problem wymiany stron i problem wznawiania rozkazów. Większa część modułu poświęcona jest algorytmom wymiany — ich klasyfikacji, działaniu, zastosowaniom oraz zagadnieniom implementacyjnym. | ||
* Siódmy moduł dotyczy zarządzania urządzeniami wejścia-wyjścia. Moduł rozpoczyna się od przedstawienia klasyfikacji urządzeń wejścia-wyjścia według różnych kryteriów. Następnie omawiana jest struktura mechanizmu obsługi urządzeń wejścia-wyjścia oraz sposoby interakcji jednostki centralnej z takimi urządzeniami. Poruszane są również zagadnienia poprawy efektywności pracy urządzeń poprzez buforowanie i spooling. Na końcu pojawia się wzmianka o tzw. wirtualnym wejściu-wyjściu, które jest wprowadzeniem do następnego bloku modułów, obejmującego system plików. | |||
* | * W następnych trzech modułach (6 godz.) omawiany jest system plików. Pierwszy moduł dotyczy ujęcia systemu plików od strony logicznej, czyli abstrakcyjnego obrazu informacji, przechowywanej i udostępnianej przez system. W zakresie tym mieści się: pojęcie pliku, pojęcie struktury i typu pliku, organizacja logiczna systemu plików (strefy, katalogi), metody dostępu do pliku oraz interfejs operacji plikowych. W drugim module omawiana jest organizacja fizyczna systemu plików, obejmująca przydział bloków dyskowych, zarządzanie wolną przestrzenią oraz implementację katalogu. W module tym poruszane są również zagadnienia przechowywania podręcznego i wynikające stąd ryzyko utraty integralności oraz kwestie synchronizacji współbieżnego dostępu do pliku. Ostatni moduł prezentuje wybrane przykłady konkretnych implementacji systemu plików: CP/M, DOS, ISO 9660, UNIX, NTFS. | ||
* | * Kolejne dwa moduły (5 godz.) poruszają zagadnienia przetwarzania współbieżnego i synchronizacji procesów. Pierwszy z modułów omawia te zagadnienia na poziomie architektury, bez istotnego wsparcia ze strony systemu operacyjnego (poza realizacją koncepcji procesu). W zakresie tego modułu mieszczą się więc takie zagadnienia, jak: pojęcie instrukcji atomowej oraz przeplotu, istota synchronizacji oraz poprawność programów współbieżnych (bezpieczeństwo i żywotność). Pojęcia te ilustrowane są przykładowymi rozwiązaniami problemu wzajemnego wykluczania, obejmującymi algorytm Petersona, algorytm Lamporta oraz rozwiązania opierające się na instrukcjach atomowych ''test&set'' i ''exchange''. Drugi z modułów obejmuje mechanizmy synchronizacji wspierane przez system operacyjny lub język programowania wysokiego poziomu: | ||
** semafory — ich klasyfikację i implementację, | |||
** mechanizmy standardu POSIX — rygle i zmienne warunkowe, | |||
** monitory i regiony krytyczne. | |||
: Przykłady zastosowania wymienionych mechanizmów pokazano w rozwiązaniach klasycznych problemów synchronizacji: producenta i konsumenta, czytelników i pisarzy, pięciu filozofów, śpiących fryzjerów. | |||
* Ostatnie dwa moduły (4 godz.) poświęcono zakleszczeniu — opisaniu samego zjawiska (pierwszy moduł) i omówieniu metod przeciwdziałania (drugi moduł). Przedstawione zostały: warunki konieczne zakleszczenia w kontekście zasobów odzyskiwalnych i nieodzyskiwalnych, definicja zakleszczenia, opis stanu systemu na potrzeby analizy zakleszczenia — graf przydziału i graf oczekiwania oraz ich specyficzne własności. Jeżeli chodzi o przeciwdziałanie, omówione zostały następujące podejścia: zapobieganie zakleszczeniom, unikanie zakleszczeń (w tym algorytm bankiera), detekcja stanu zakleszczenia i krótko zasady usuwania. | |||
* | '''Laboratoria''' | ||
* | * Pierwszy moduł zajęć laboratoryjnych (1 godz.) poświęcono instalacji systemu operacyjnego Linux wraz z odpowiednim przygotowaniem partycji dysku oraz konfiguracją mechanizmu ładowania (dual boot). | ||
* | * Pierwsza z zasadniczych części zajęć (12 godz.) dotyczy użytkowania uniksopodobnego systemu operacyjnego. Celem tej części jest opanowanie umiejętności użytkowania systemu poprzez wydawanie poleceń na konsoli jako alternatywy dla intuicyjnego graficznego interfejsu użytkownika. Zaletą takiego podejścia jest możliwość automatyzacji pewnych zadań w trybie wsadowym, dlatego większą część czasu poświęcono na przetwarzanie potokowe oraz tworzenie skryptów powłoki. Poszczególne zajęcia obejmują: | ||
* | ** poruszanie się w systemie — logowanie, pomoc systemowa (man), programy pomocnicze (whatis, whereis, apropos), | ||
* | ** obsługę plików i katalogów — identyfikacja plików w drzewie katalogów (pwd, ls, cd), kopiowanie i usuwanie plików (mv, rm, cp, ln), lokalizowanie plików (find, locate), tworzenie i usuwanie katalogów (mkdir, rmdir), | ||
* | ** obsługę procesów — tworzenie wykazu procesów (ps, pstree, pgrep), zmiana priorytetu (nice, renice), przekazywanie sygnałów (kill), obsługa procesów pierwszo- i drugoplanowych (&, fg, bg), | ||
* | ** potoki i filtry — przekierowanie strumieni standardowych, potoki z użyciem filtrów: cat, head, tail, grep, wc, tr, cut, sort, uniq, | ||
* | ** skrypty powłoki — zmienne lokalne i środowiskowe powłoki, tworzenie skryptów i przekazywanie parametrów, konstrukcje strukturalne w skyptach (pętle i instrukcje warunkowe). | ||
* | * Druga część (17 godz.) dotyczy dostępu do usług jądra uniksopodobnego systemu operacyjnego w programie niskopoziomowym. Celem zajęć jest poznanie zasad korzystania z interfejsu jądra dla programów aplikacyjnych (API) w języku C oraz nabycie umiejętności użycia wybranych funkcji jądra w zakresie: | ||
** obsługi plików — tworzenie i dostęp do plików (creat, open, close, read, write), | |||
** obsługi procesów — tworzenie procesów, uruchamianie programów (fork, exec, exit, wait), | |||
** komunikacji strumieniowej za pośrednictwem łączy — tworzenie potoków i zasady ich użycia w komunikacji między procesami (pipe), | |||
** obsługi wątków — tworzenie i synchronizacja wątków (pthread_create, pthread_exit, pthread_join, pthread_mutex_lock, pthread_mutex_unlock, pthread_mutex_trylock, pthread_cond_wait, pthread_cond_signal, pthread_cond_broadcast), | |||
** mechanizmów grupy IPC: | |||
*** kolejek komunikatów (msgget, msgsnd, msgrcv, msgctl), | |||
*** pamięci współdzielonej (shmget, shmat, shmdt, shmctl), | |||
*** semaforów (semget, semop, semctl). | |||
Funkcjonowanie omawianych mechanizmów ilustrowane jest krótkimi przykładami programów. Niektóre z nich mają charakter praktyczny, inne mają tylko demonstrować sposób i skutki użycia określonej funkcji lub mechanizmu. | |||
=== Literatura === | === Literatura === | ||
''' Literatura podstawowa''' | |||
# C. Sobaniec | # A. Silberschatz, J.L. Peterson, G. Gagne, ''Podstawy systemów operacyjnych.'' WNT, Warszawa 2005. | ||
# J. Marczyński | # G. Nutt, ''Operating Systems. A Modern Perspective.'' wydanie 2, Addison Wesley Longman, Inc., 2002. | ||
# | # W. Stallings, ''Systemy operacyjne.'' Robomatic, Wrocław 2004. | ||
# | # A. S. Tanenbaum, ''Modern Operating Systems.'' wydanie 2, Prentice-Hall Inc., 2001. | ||
# C. Sobaniec, ''System operacyjny Linux — przewodnik użytkownika.'' Nakom, Poznań 2002. | |||
# J. Marczyński, ''UNIX użytkowanie i administrowanie.'' wydanie 2, Helion, Gliwice 2000. | |||
# W. R. Stevens, ''Programowania w środowisku systemu UNIX.'' WNT, Warszawa 2002. | |||
# J. S. Gray, ''Komunikacja między procesami w Unixie.'' ReadMe, Warszawa 1998. | |||
# M. J. Rochkind, ''Programowanie w systemie Unix dla zaawansowanych.'' WNT, Warszawa 1993. | |||
''' Literatura uzupełniająca''' | |||
# | # L. Bic, A. C. Shaw, ''The Logical Design of Operating Systems.'' Prentice-Hall Inc., 1988. | ||
# J. | # M. J. Bach, ''Budowa systemu operacyjnego Unix®.'' WNT, Warszawa 1995. | ||
# | # B. Goodheart, J. Cox, ''Sekrety magicznego ogrodu. UNIX® System V Wersja 4 od środka.'' WNT, Warszawa 2001. | ||
# Z. Guźlewski, T. Weiss. ''Programowanie współbieżne i rozproszone w przykładach i zadaniach.'' WNT, Warszawa | # U. Vahalia, ''Jądro systemu UNIX®. Nowe horyzonty.'' WNT, Warszawa 2001. | ||
# R. W. Stevens | # D. A. Solomon, M. E. Russinovich, ''Microsoft Windows® 2000 od środka.'' Helion, Gliwice 2003. | ||
# M. Gabassi, B. Dupouy | # R. Lowe, ''Kernel Linux. Przewodnik programisty.'' Helion, Gliwice 2004. | ||
# P. Silvester, ''System operacyjny Unix™.'' WNT, Warszawa 1990. | |||
# Z. Królikowski, M. Sajkowski, ''UNIX dla początkujących i zaawansowanych.'' Nakom, Poznań 1996. | |||
# Z. Guźlewski, T. Weiss. ''Programowanie współbieżne i rozproszone w przykładach i zadaniach.'' WNT, Warszawa 1993. | |||
# R. W. Stevens, ''Programowanie zastosowań sieciowych w systemie Unix.'' WNT, Warszawa 1995. | |||
# M. Gabassi, B. Dupouy, ''Przetwarzanie rozproszone w systemie Unix.'' Lupus, Warszawa 1995. | |||
== Moduły == | == Moduły == | ||
=== Wykład === | |||
# [[SO-1st-2.3-w1.tresc-1.0-toc|Wstęp]] (2 godz.) - [[media:sop_01_wyk_1.0.pdf|PDF kolor]] | [[media:sop_01_wyk_bw_1.1.pdf|PDF]] | [[media:sop_01_wyk_pyt1.pdf|pytania]] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w01.flash-1.0/player.html Flash] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w01.test-1.0/quizmaker.html Test] | |||
#* Treść wykładu | |||
#*# Definicja systemu operacyjnego | |||
#*# Miejsce systemu operacyjnego w organizacji oprogramowania komputera | |||
#*# Ogólna struktura systemu operacyjnego | |||
#*# Zadania systemu operacyjnego | |||
#*# Klasyfikacja systemów operacyjnych | |||
#*# Zasada działania systemu operacyjnego | |||
#* Najważniejsze pojęcia i zagadnienia: wielowarstwowa organizacja oprogramowania komputera, system operacyjny (wsadowy, interaktywny, wielozadaniowy), jądro systemu operacyjnego, cykl rozkazowy, przerwanie (zewnętrzne, programowe, diagnostyczne), pierścienie ochrony, ochrona pamięci. | |||
# [[SO-1st-2.3-w2.tresc-1.0-toc|Procesy, zasoby i wątki]] (2 godz.) - [[media:sop_02_wyk_1.0.pdf|PDF kolor]] | [[media:sop_02_wyk_bw_1.1.pdf|PDF]] | [[media:sop_02_wyk_pyt1.pdf|pytania]] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w02.flash-1.0/player.html Flash] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w02.test-1.0/quizmaker.html Test] | |||
#* Treść wykładu | |||
#*# Koncepcja procesu i zasobu | |||
#*# Zarządca procesów i zarządca zasobu | |||
#*# Struktury danych na potrzeby zarządzania procesami i zasobami | |||
#*# Klasyfikacja zasobów | |||
#*# Stany procesu i cykl zmian stanów | |||
#*# Kolejki procesów | |||
#*# Przełączanie kontesktu | |||
#*# Planiści: krótkoterminowy, śrdednioterminowy i długoterminowy | |||
#*# Wątki | |||
#* Najważniejsze pojęcia i zagadnienia: proces, kontekst procesu, deskryptor procesu, zarządca procesów, stan procesu, kolejka procesów, planista, zasób (odzyskiwalny, nieodzyskiwalny, wywłaszczalny, niewywłaszczalny), deskryptor zasobu, zarządca zasobu, wątek. | |||
# [[SO-1st-2.3-w3.tresc-1.0-toc|Planowanie przydziału procesora]] (2 godz.) - [[media:sop_03_wyk_1.0.pdf|PDF kolor]] | [[media:sop_03_wyk_bw_1.2.pdf|PDF]] | [[media:sop_03_wyk_pyt1.pdf|pytania]] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w03.flash-1.0/player.html Flash] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w03.test-1.0/quizmaker.html Test] | |||
#* Treść wykładu | |||
#*# Ogólna koncepcja planowania przydziału procesora | |||
#*# Komponenty jądra na potrzeby planowania przydziału procesora | |||
#*# Planowanie wywłaszczające i niewywłaszczające | |||
#*# Funkcja priorytetu i jej parametry | |||
#*# Kryteria oceny algorytmów planowania przydziału procesora | |||
#*# Przykłady algorytmów planowania przydziału procesora | |||
#*# Implementacja algorytmów planowania | |||
#* Najważniejsze pojęcia i zagadnienia: priorytet procesu, wywłaszczanie, planowanie priorytetowe, planowanie rotacyjne, wykorzystanie procesora, przepustowość, czas oczekiwania, czes reakcji (odpowiedzi), czas cyklu przetwarzania. | |||
#[[SO-1st-2.3-w4.tresc-1.0-toc|Przykłady implementacji planowania przydziału procesora]] (2 godz.) - [[media:sop_03B_wyk_1.0.pdf|PDF kolor]] | [[media:sop_03B_wyk_bw_1.0.pdf|PDF]] | [[media:sop_03B_wyk_pyt1.pdf|pytania]] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w04.flash-1.0/player.html Flash] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w04.test-1.0/quizmaker.html Test] | |||
#* Treść wykładu | |||
#*# Planowanie przydziału procesora w tradycyjnym systemie Unix | |||
#*# Planowanie przydziału procesora w systemie Linux | |||
#*# Planowanie przydziału procesora w systemie Windows | |||
#* Najważniejsze pojęcia i zagadnienia: przeliczanie priorytetów, struktury danych do obsługi kolejki procesów gotowych, przeciwdziałanie głodzeniu procesów w dostępie do procesora. | |||
# [[SO-1st-2.3-w5.tresc-1.0-toc|Zarządzanie pamięcią operacyjną]] (2 godz.) - [[media:sop_04_wyk_1.0.pdf|PDF kolor]] | [[media:sop_04_wyk_bw_1.0.pdf|PDF]] | [[media:sop_04_wyk_pyt1.pdf|pytania]] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w05.flash-1.0/player.html Flash] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w05.test-1.0/quizmaker.html Test] | |||
#* Treść wykładu | |||
#*# Pamięć a przestrzeń adresowa | |||
#*# Podział i przydział pamięci | |||
#*# Fragmentacja | |||
#*# Obraz procesu w pamięci | |||
#*# Problem ochrony i współdzielenia pamięci | |||
#*# Stronicowanie i segmentacja | |||
#* Najważniejsze pojęcia i zagadnienia: hierachia pamięci, przestrzeń adresowa, adres logiczny i fizyczny, wiązanie adresu, transformacja adresu, fragmentacja pamięci (zewnętrzna i wewnętrzna), strona pamięci, segment pamięci. | |||
# [[SO-1st-2.3-w6.tresc-1.0-toc|Pamięć wirtualna]] (3 godz.) - [[media:sop_05_wyk_1.0.pdf|PDF kolor]] | [[media:sop_05_wyk_bw_1.1.pdf|PDF]] | [[media:sop_05_wyk_pyt2.pdf|pytania]] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w06.flash-1.0/player.html Flash] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w06.test-1.0/quizmaker.html Test] | |||
#* Treść wykładu | |||
#*# Stronicowanie na żądanie | |||
#*# Błąd strony i jego obsługa | |||
#*# Problem zastępowania i wznawiania rozkazów | |||
#*# Algorytmy wymiany i ich klasyfikacja | |||
#*# Anomalia Belady'ego | |||
#*# Problemy implementacji algorytmów wymiany | |||
#* Najważniejsze pojęcia i zagadnienia: stronicowanie na żądanie, bit poprawności, błąd strony, wymiana stron, problem wznawiania rozkazów, bit modyfikacji, bit odniesienia, algorytm wymiany, zbiór roboczy, wstępne sprowadzanie, efektywność działania systemu pamięci wirtualnej. | |||
# [[SO-1st-2.3-w7.tresc-1.0-toc|Urządzenia wejścia-wyjścia]] (2 godz.) - [[media:sop_06_wyk_1.0.pdf|PDF kolor]] | [[media:sop_06_wyk_bw_1.0.pdf|PDF]] | [[media:sop_06_wyk_pyt1.pdf|pytania]] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w07.flash-1.0/player.html Flash] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w07.test-1.0/quizmaker.html Test] | |||
#* Treść wykładu | |||
#*# Właściwości i klasyfikacja urządzeń wejścia-wyjścia | |||
#*# Struktura mechanizmu wejścia-wyjścia | |||
#*# Interakcja jednostki centralnej z urządzeniami wejścia-wyjścia | |||
#*#* odpytywanie | |||
#*#* sterowanie przerwaniami | |||
#*#* bezpośredni dostęp do pamięci | |||
#*# Buforowanie, spooling i przechowywanie podręczne | |||
#*# Wirtualne wejście-wyjście | |||
#* Najważniejsze pojęcia i zagadnienia: sterownik, moduł sterujący, odpytywanie, przerwania od urządzeń, bezpośredni dostęp do pamięci, buforowanie, spooling, przechowywanie podręczne. | |||
# [[SO-1st-2.3-w8.tresc-1.0-toc|System plików — warstwa logiczna]] (2 godz.) - [[media:sop_08_wyk_1.0.pdf|PDF kolor]] | [[media:sop_08_wyk_bw_1.1.pdf|PDF]] | [[media:sop_08_wyk_pyt1.pdf|pytania]] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w08.flash-1.0/player.html Flash] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w08.test-1.0/quizmaker.html Test] | |||
#* Treść wykładu | |||
#*# Pojęcie pliku i jego atrybuty | |||
#*# Atrybuty plik | |||
#*# Logiczny i fizyczny obraz pliku | |||
#*# Metody dostępu do pliku | |||
#*# Podstawowe operacje na plikach | |||
#*# Uniksowy interfejs dostępu do pliku | |||
#*# Logiczna organizacja systemu plików | |||
#* Najważniejsze pojęcia i zagadnienia: plik, typ pliku, struktura pliku, dostęp sekwencyjny, dostęp bezpośredni, dostęp indeksowy, strefa, katalog. | |||
# [[SO-1st-2.3-w9.tresc-1.0-toc|System plików — warstwa fizyczna]] (2 godz.) - [[media:sop_09_wyk_1.0.pdf|PDF kolor]] | [[media:sop_09_wyk_bw_1.1.pdf|PDF]] | [[media:sop_09_wyk_pyt1.pdf|pytania]] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w09.flash-1.0/player.html Flash] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w09.test-1.0/quizmaker.html Test] | |||
#* Treść wykładu | |||
#*# Fizyczna organizacja systemu plików na dysku | |||
#*#* przydział miejsca na dysku | |||
#*#* zarządzanie wolną przestrzenią | |||
#*#* implementacja katalogu | |||
#*# Przechowywanie podręczne w systemie plików | |||
#*# Integralność systemu plików | |||
#*# Semantyka spójności i synchronizacja współbieżnego dostępu do pliku | |||
#* Najważniejsze pojęcia i zagadnienia: przydział ciągły, przydział listowy, przydział indeksowy, FAT, integralność systemu plików. | |||
# [[SO-1st-2.3-w10.tresc-1.0-toc|System plików — przykłady implementacji]] (2 godz.) - [[media:sop_10_wyk_1.0.pdf|PDF kolor]] | [[media:sop_10_wyk_bw_1.1.pdf|PDF]] | [[media:sop_10_wyk_pyt1.pdf|pytania]] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w10.flash-1.0/player.html Flash] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w10.test-1.0/quizmaker.html Test] | |||
#* Treść wykładu | |||
#*# Systemu plików CP/M | |||
#*# Systemu plików FAT | |||
#*# Systemu plików ISO 9660 | |||
#*# Systemu plików Unix | |||
#*# Systemu plików NTFS | |||
#* Najważniejsze pojęcia i zagadnienia: blok kontrolny pliku FCB, FAT16, FAT32, i-węzeł, główna tablica plików MFT. | |||
# [[SO-1st-2.3-w11.tresc-1.0-toc|Współbieżność i synchronizacja procesów]] (2 godz.) - [[media:sop_11_wyk_1.0.pdf|PDF kolor]] | [[media:sop_11_wyk_bw_1.1.pdf|PDF]] | [[media:sop_11_wyk_pyt1.pdf|pytania]] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w11.flash-1.0/player.html Flash] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w11.test-1.0/quizmaker.html Test] | |||
#* Treść wykładu | |||
#*# Istota przetwarzania współbieżnego i synchronizacji | |||
#*# Poprawność programów współbieżnych | |||
#*# Klasyfikacja mechanizmów synchronizacji | |||
#*#* mechanizmy operate na zmiennych współdzielonych | |||
#*#* mechanizmy wspierane przez system operacyjny | |||
#*#* mechanizmy ze wsparciem językowym | |||
#*# Główne problemy synchronizacji procesów (wzajemne wykluczanie, ograniczone buforowanie) | |||
#*# Definicja problemu wzajemnego wykluczania (sekcji krytycznej) | |||
#*# Schemat algorytmu wzajemnego wykluczania | |||
#*# Klasyczne algorytmy wzajemnego wykluczania oparte o zapis/odczyt zmiennych współdzielonych | |||
#*#* algorytm Petersona | |||
#*#* algorytm Lamporta | |||
#*# Rozwiązanie problemu wzajemnego wykluczania w oparciu o instrukcje <code>test&set</code> oraz <code>exchange</code> | |||
#* Najważniejsze pojęcia i zagadnienia: instrukcja atomowa, przeplot, bezpieczeństwo, żywotność, uczciwość, wzajemne wykluczanie (sekcja krytyczna), ograniczone buforowanie, poprawność algorytmu wzajmnego wykluczania (bezpieczeństwo, postęp, ograniczone czekanie), aktywne czekanie, wsparcie sprzętowe w rozwiązaniu problemu wzajemnego wykluczania. | |||
# [[SO-1st-2.3-w12.tresc-1.0-toc|Systemowe mechanizmy synchronizacji procesów]] (3 godz.) - [[media:sop_13_wyk_1.0.pdf|PDF kolor]] | [[media:sop_13_wyk_bw_1.1.pdf|PDF]] | [[media:sop_13_wyk_pyt1.pdf|pytania]] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w12.flash-1.0/player.html Flash] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w12.test-1.0/quizmaker.html Test] | |||
#* Treść wykładu | |||
#*# Definicja i klasyfikacja semaforów | |||
#*# Implementacja semaforów | |||
#*# Zastosowanie semaforów do rozwiązania głównych problemów synchronizacji procesów | |||
#*# Mechanizmy synchronizacji wątków standardu POSIX | |||
#*#* zamki (rygle, ang. locks, mutex locks) | |||
#*#* zmienne warunkowe (ang. conditionals) | |||
#*# Monitory (definicja i zasada działania) | |||
#*# Zastosowanie monitorów do rozwiązania problemu ograniczonego buforowania | |||
#*# Regiony krytyczne | |||
#*# Zastosowanie regionów krytycznych do rozwiązania problemu ograniczonego buforowania | |||
#* Najważniejsze pojęcia i zagadnienia: semafor ogólny, semafor binarny, podnoszenie i opuszczanie semafora, zamek, zmienna warunkowa, monitor, zmienna warunkowa w monitorze, region krytyczny, warunkowy region krytyczny. | |||
# [[SO-1st-2.3-w13.tresc-1.0-toc|Problem zakleszczenia]] (2 godz.) - [[media:sop_15_wyk_1.1.pdf|PDF kolor]] | [[media:sop_15_wyk_bw_1.1.pdf|PDF]] | [[media:sop_15_wyk_pyt1.pdf|pytania]] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w13.flash-1.0/player.html Flash] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w13.test-1.0/quizmaker.html Test] | |||
#* Treść wykładu | |||
#*# Definicja problemu zakleszczenia | |||
#*# Warunki konieczne wystąpienia zakleszczenia | |||
#*# Graf przydziału zasobów i graf oczekiwania oraz ich własności | |||
#* Najważniejsze pojęcia i zagadnienia: stan osiągalny, zablokowanie procesu, warunki konieczne wystąpienia zakleszczenia, graf przydziału zasobów, graf oczekiwania. | |||
# [[SO-1st-2.3-w14.tresc-1.0-toc|Przeciwdziałanie zakleszczeniu]] (2 godz.) - [[media:sop_16_wyk_1.1.pdf|PDF kolor]] | [[media:sop_16_wyk_bw_1.1.pdf|PDF]] | [[media:sop_16_wyk_pyt1.pdf|pytania]] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w14.flash-1.0/player.html Flash] | [http://osilek.mimuw.edu.pl/external/SO/SO-1st-2.3-w14.test-1.0/quizmaker.html Test] | |||
#* Treść wykładu | |||
#*# Rozwiązywanie problemu zakleszczenia | |||
#*#* zapobieganie zakleszczeniom | |||
#*#* unikanie zkleszczeń | |||
#*#* detekcja i likwidacja zakleszczeń | |||
#*# Podejście hybrydowe do rozwiązywania problemu zakleszczenia | |||
#* Najważniejsze pojęcia i zagadnienia: zapobieganie zakleszczeniom, unikanie zakleszczeń, algorytm Bankiera, likwidacja zakleszczenia (usuwanie procesów, wywłaszczanie zasobów) | |||
=== Laboratorium === | |||
==== Użytkowanie uniksopodobnego systemu operacyjnego (Linux) ==== | |||
#[[SOP_lab_nr_1|Instalacja systemu operacyjnego (1 godz.)]] - [[media:sop_01_lab.pdf|PDF]] | |||
#* Treść zajęć laboratoryjnych | |||
#*# Instalacja systemu | |||
#*# Podział na partycje | |||
#*# Program ładujący | |||
# [[SOP_lab_nr_2|Wstęp oraz obsługa plików i katalogów (3 godz.)]] - [[media:sop_02_lab.pdf|PDF]] | |||
#* Treść zajęć laboratoryjnych | |||
#*# Logowanie do systemu | |||
#*# Pomoc systemowa – polecenie <code>man</code> | |||
#*# Programy pomocnicze -- polecenia <code>whatis</code>, <code>whereis</code>, <code>apropos</code> | |||
#*# Znaki specjalne | |||
#*# Struktura katalogów w systemie | |||
#*# Przemieszczanie się po strukturze katalogów – polecenia: <code>pwd</code>, <code>ls</code>, <code>cd</code> | |||
#*# Tworzenie, usuwanie, zmiana nazwy plików – polecenia <code>touch</code>, <code>rm</code>, <code>mv</code>, <code>cp</code> | |||
#*# Tworzenie, usuwanie, zmiana nazwy katalogów – polecenia <code>mkdir</code>, <code>rmdir</code> | |||
#*# Wyszukiwanie plików – polecenia <code>locate</code>, <code>find</code> | |||
#*# Dowiązania – polecenie <code>ln</code> | |||
#* Opanowane umiejętności: logowanie, korzystanie z pomocy systemowej, poruszanie się w systemie plików, kopiowanie, usuwanie i przesuwanie plików, tworzenie i usuwanie katalogów, przeszukiwanie systemu plików. | |||
# [[SOP_lab_nr_3|Obsługa procesów w systemie (1 godz.)]] - [[media:sop_03_lab.pdf|PDF]] | |||
#* Treść zajęć laboratoryjnych | |||
#*# Identyfikatory procesów w systemie operacyjnym | |||
#*# Lista procesów w systemie – polecenie <code>ps</code> | |||
#*# Hierarchia procesów w systemie – polecenie <code>pstree</code> | |||
#*# Wyszukiwanie procesów – polecenie <code>pgrep</code> | |||
#*# Priorytety procesów – polecenia <code>nice</code>, <code>renice</code> | |||
#*# Uruchamianie procesów w tle – znak <code>&</code> i polecenia <code>fg</code>, <code>bg</code> | |||
#*# Sygnały i ich obsługa | |||
#* Opanowane umiejętności: wyszukiwanie i identyfikacja procesów, usuwanie (zabijanie) procesów, zmiana priorytetu, uruchamianie procesów pierwszo- i drugoplanowych. | |||
# [[SOP_lab_nr_4|Filtry, strumienie standardowe oraz przetwarzanie potokowe (4 godz.)]] - [[media:sop_04_lab.pdf|PDF]] | |||
#* Treść zajęć laboratoryjnych | |||
#*# Strumienie standardowe i ich przekierowywanie | |||
#*# Podstawowe filtry – polecenia <code>cat</code>, <code>head</code>, <code>tail</code>, <code>grep</code>, <code>wc</code>, <code>tr</code>, <code>cut</code>, <code>sort</code>, <code>uniq</code> | |||
#*# Przetwarzanie potokowe z zastosowaniem filtrów systemowych | |||
#* Opanowane umiejętności: uruchamianie procesów z przekierowaniem wejścia lub wyjścia do pliku, łączenie procesów w potoki, zastosowanie podstawowych filtrów | |||
# [[SOP_lab_nr_5|Tworzenie skryptów powłoki systemu operacyjnego (4 godz.)]] - [[media:sop_05_lab.pdf|PDF]] | |||
#* Treść zajęć laboratoryjnych | |||
#*# Zmienne środowiskowe oraz ich eksportowanie – polecenia <code>set</code>, <code>env</code>, <code>echo</code>, <code>export</code> | |||
#*# Argumenty wywołania skryptów | |||
#*# Instrukcja warunkowa | |||
#*# Pętle <code>while</code> oraz <code>for</code> | |||
#*# Pobieranie wartości w trakcie wykonywania skryptów | |||
#*# Uruchamianie skryptów z debugowaniem | |||
#* Opanowane umiejętności: tworzenie skryptów w języku powłoki, urchamianie skryptów, przekazywanie i obsługa parametrów. | |||
==== Programowanie w języku C z wykorzystaniem funkcji jądra uniksopodobnego systemu operacyjnego (Linux) ==== | |||
# [[SOP_lab_nr_6|Obsługa systemu plików (2 godz.)]] - [[media:sop_06_lab.pdf|PDF]] | |||
#* Treść zajęć laboratoryjnych | |||
#*# Otwieranie plików i ich deskryptory – funkcja <code>open</code> | |||
#*# Tworzenie plików | |||
#*# Odczyt i zapis do plików – funkcje <code>read</code>, <code>write</code> | |||
#*# Implementacja przykładowych programów obsługi plików | |||
#* Opanowane umiejętności: tworzenie plików oraz dostęp do zawartości plików. | |||
# [[SOP_lab_nr_7|Obsługa procesów w systemie (2 godz.)]] - [[media:sop_07_lab.pdf|PDF]] | |||
#* Treść zajęć laboratoryjnych | |||
#*# Procesy macierzyste i potomne | |||
#*# Tworzenie procesów potomnych – funkcja <code>fork</code>, <code>wait</code> | |||
#*# Uruchamianie programów – funkcje <code>exec</code> | |||
#*# Przekierowywanie strumieni standardowych | |||
#*# Implementacja przykładowych programów obsługi procesów | |||
#* Opanowane umiejętności: tworzenie procesów, urchamianie programów w procesach oraz przekierowanie wyników standardowych programów uniksowych do pliku. | |||
# [[SOP_lab_nr_8|Obsługa potoków (4 godz.)]] - [[media:sop_08_lab.pdf|PDF]] | |||
#* Treść zajęć laboratoryjnych | |||
#*# Tworzenie potoków nienazwanych – funkcja <code>pipe</code> | |||
#*# Tworzenie potoków nienazwanych – funkcja <code>mkfifo</code> - oraz ich otwieranie | |||
#*# Przykłady przetwarzania potokowego | |||
#*# Implementacja przykładowych programów obsługi potoków | |||
#* Opanowane umiejętności: realizacja komunikacji potokowej (strumieniowej) między lokalnymi procesami. | |||
# [[SOP_lab_nr_9|Tworzenie i obsługa wątków (4 godz.)]] - [[media:sop_09_lab.pdf|PDF]] | |||
#* Treść zajęć laboratoryjnych | |||
#*# Tworzenie wątków – funkcja <code>pthread_create</code> | |||
#*# Przekazywanie parametrów do funkcji wątków i pobieranie wyników – funkcaj <code>pthread_join</code> | |||
#*# Synchronizacja wątków – grupa funkcji <code>pthread_mutex</code> i <code>pthread_cond</code> | |||
#*# Implementacja przykładowych programów obsługi wątków | |||
#* Opanowane umiejętności: tworzenie i usuwanie wątków, synchronizacja wątków (wzajemne wykluczanie, usypianie i budzenie). | |||
# [[SOP_lab_nr_10|Mechanizmy IPC: kolejki komunikatów (2 godz.)]] - [[media:sop_10_lab.pdf|PDF]] | |||
#* Treść zajęć laboratoryjnych | |||
#*# Tworzenie kolejek komunikatów – funkcja <code>msgget</code> | |||
#*# Wysyłanie i odbieranie komunikatów – funkcje <code>msgsnd</code>, <code>msgrcv</code> | |||
#*# Parametry i usuwanie kolejek komunikatów – funkcja <code>msgctl</code> | |||
#*# Obsługa mechanizmów IPC w konsoli systemu – polecenia <code>ipcs</code>, <code>ipcrm</code> | |||
#*# Implementacja przykładowych programów obsługi kolejek komunikatów | |||
#* Opanowane umiejętności: realizacja przekazywania komunikatów pomiędzy lokalnymi procesami. | |||
# [[SOP_lab_nr_11|Mechanizmy IPC: pamięć współdzielona (2 godz.)]] - [[media:sop_11_lab.pdf|PDF]] | |||
#* Treść zajęć laboratoryjnych | |||
#*# Tworzenie i obsługa pamięci współdzielonej – funkcja <code>shmget</code> | |||
#*# Przyłączanie pamięci współdzielonej do procesu – funkcja <code>shmat</code> | |||
#*# Odłączanie pamięci współdzielonej od procesu – funkcja <code>shmdt</code> | |||
#*# Parametry pamięci współdzielonej – funkcja <code>shmctl</code> | |||
#*# Implementacja przykładowych programów obsługi pamięci współdzielonej | |||
#* Opanowane umiejętności: tworzenie i udstępnianie segmentów pamięciu w celu przkazywania danych pomiędzy lokalnymi procesami | |||
# [[SOP_lab_nr_12|Mechanizmy IPC: semafory (2 godz.)]] - [[media:sop_12_lab.pdf|PDF]] | |||
#* Treść zajęć laboratoryjnych | |||
#*# Zasada działania semaforów binarnych i uogólnionych | |||
#*# Tworzenie semaforów – funkcja <code>semget</code> | |||
#*# Operacje na semaforach – funkcja <code>semop</code> | |||
#*# Parametry semaforów i ich inicjowanie – funkcja <code>semctl</code> | |||
#*# Przykłady podstawowych problemów synchronizacji | |||
#*# Implementacja przykładowych programów z synchronizacją wykorzystująca semafory | |||
#* Opanowane umiejętności: tworzenie i inicjalizowanie semafrów w celu synchronizacji współbieżnych procesów (między innymi w dostępie do współdzielonej pamięci). |
Aktualna wersja na dzień 17:29, 2 paź 2006
Forma zajęć
wykład (30 godzin) + laboratorium (30 godzin)
Opis
Celem zajęć jest przedstawienie roli i zadań systemu operacyjnego w oprogramowaniu komputera oraz omówienie zagadnień realizacji — algorytmów, struktur danych i ich implementacji. Prezentowane są techniki zarządzania podstawowymi zasobami sprzętowymi komputera — procesorem, pamięcią operacyjną oraz wirtualną i urządzeniami wejścia-wyjścia — oraz ich wpływ na efektywność funkcjonowania systemu jako całości. W kontekście zarządzania zasobami wprowadzana jest również koncepcja procesu oraz wątku. Następnie omawiana jest koncepcja pliku oraz realizacja systemu plików — warstwy logicznej i fizycznej — wraz z przykładami konkretnych implementacji (CP/M, FAT-12/16/32, ISO 9660, Unix, NTFS). Osobnym zagadnieniem, integralnie związanym z realizacją systemu operacyjnego, jest współbieżność i synchronizacja w znaczeniu koordynacji przepływu sterowania. W kontekście podstawowych problemów synchronizacji, takich jak wzajemne wykluczanie oraz ograniczone buforowanie, omawiane są podejścia do synchronizacji procesów, bazujące na współdzielonych zmiennych, podejścia wspierane przez system operacyjny — semafory, oraz podejścia wymagające wsparcia w konstrukcjach programowych języków wysokopoziomowych — monitory, regiony krytyczne i spotkania (ang. rendezvous). Następnie realizowane są zadania polegające na zastosowaniu omawianych mechanizmów do rozwiązania klasycznych problemów synchronizacji (problem producenta-konsumenta, czytelników i pisarzy, pięciu filozofów, śpiących fryzjerów itp.). Omawiany jest również problem wynikający z dostępu współbieżnych procesów do zasobów — zakleszczenie oraz podejścia do rozwiązywania tego problemu.
Sylabus
Autorzy
- Jerzy Brzeziński — Politechnika Poznańska
- Dariusz Wawrzyniak — Politechnika Poznańska
Wymagania wstępne
- Wstęp do programowania
- Umiejętność programowania w języku C
- Elementarna wiedza z zakresu architektury komputerów
Zawartość
Wykład
- Pierwsze dwa moduły (4 godz.) są ogólnym wprowadzeniem, obejmującym takie zagadnienia jak:
- rola i zadania systemu operacyjnego,
- umiejscowienie systemu operacyjnego (w szczególności jądra) w strukturze oprogramowania systemu komputerowego,
- klasyfikacja systemów operacyjnych,
- ogólna zasada działania systemu operacyjnego (sposób przekazywania sterowania do programu jądra),
- koncepcja procesu, zasobu i wątku.
- Kolejne dwa moduły (4 godz.) dotyczą planowania przydziału procesora, czyli szeregowania zadań. Pierwszy z modułów rozpoczyna się od omówienia ogólnej koncepcji planowania. Następnie przedstawione są algorytmy planowania z wywłaszczaniem i bez wywłaszczeń oraz kryteria ich oceny. Poruszany jest też problem szeregowania procesów ograniczonych wejściem-wyjściem. Krótko przedyskutowane są również zagadnienia implementacyjne. Drugi moduł prezentuje rozwiązania w zakresie szeregowania zadań (procesów lub wątków) we współczesnych systemach operacyjnych, czyli tradycyjnym systemie UNIX, systemie Linux oraz systemie Windows.
- W kolejnych dwóch modułach (5 godz.) omawiane są zagadnienia zarządzania pamięcią. Pierwszy z modułów koncentruje się na zarządzaniu pamięcią operacyjną, obejmującym: podział pamięci, przydział pamięci oraz transformację adresów, w szczególności w systemie pamięci stronicowanej i segmentowanej. Przy tej okazji omawiane jest zjawisko fragmentacji wewnętrznej i zewnętrznej, a także poruszany jest problem ochrony oraz współdzielenia pamięci. Kilka slajdów poświęcono również tworzeniu obrazu procesu w pamięci. Drugi moduł dotyczy realizacji pamięci wirtualnej. Omawiane jest zjawisko błędu strony, jego obsługa i podstawowe problemy z tym związane, tj. problem wymiany stron i problem wznawiania rozkazów. Większa część modułu poświęcona jest algorytmom wymiany — ich klasyfikacji, działaniu, zastosowaniom oraz zagadnieniom implementacyjnym.
- Siódmy moduł dotyczy zarządzania urządzeniami wejścia-wyjścia. Moduł rozpoczyna się od przedstawienia klasyfikacji urządzeń wejścia-wyjścia według różnych kryteriów. Następnie omawiana jest struktura mechanizmu obsługi urządzeń wejścia-wyjścia oraz sposoby interakcji jednostki centralnej z takimi urządzeniami. Poruszane są również zagadnienia poprawy efektywności pracy urządzeń poprzez buforowanie i spooling. Na końcu pojawia się wzmianka o tzw. wirtualnym wejściu-wyjściu, które jest wprowadzeniem do następnego bloku modułów, obejmującego system plików.
- W następnych trzech modułach (6 godz.) omawiany jest system plików. Pierwszy moduł dotyczy ujęcia systemu plików od strony logicznej, czyli abstrakcyjnego obrazu informacji, przechowywanej i udostępnianej przez system. W zakresie tym mieści się: pojęcie pliku, pojęcie struktury i typu pliku, organizacja logiczna systemu plików (strefy, katalogi), metody dostępu do pliku oraz interfejs operacji plikowych. W drugim module omawiana jest organizacja fizyczna systemu plików, obejmująca przydział bloków dyskowych, zarządzanie wolną przestrzenią oraz implementację katalogu. W module tym poruszane są również zagadnienia przechowywania podręcznego i wynikające stąd ryzyko utraty integralności oraz kwestie synchronizacji współbieżnego dostępu do pliku. Ostatni moduł prezentuje wybrane przykłady konkretnych implementacji systemu plików: CP/M, DOS, ISO 9660, UNIX, NTFS.
- Kolejne dwa moduły (5 godz.) poruszają zagadnienia przetwarzania współbieżnego i synchronizacji procesów. Pierwszy z modułów omawia te zagadnienia na poziomie architektury, bez istotnego wsparcia ze strony systemu operacyjnego (poza realizacją koncepcji procesu). W zakresie tego modułu mieszczą się więc takie zagadnienia, jak: pojęcie instrukcji atomowej oraz przeplotu, istota synchronizacji oraz poprawność programów współbieżnych (bezpieczeństwo i żywotność). Pojęcia te ilustrowane są przykładowymi rozwiązaniami problemu wzajemnego wykluczania, obejmującymi algorytm Petersona, algorytm Lamporta oraz rozwiązania opierające się na instrukcjach atomowych test&set i exchange. Drugi z modułów obejmuje mechanizmy synchronizacji wspierane przez system operacyjny lub język programowania wysokiego poziomu:
- semafory — ich klasyfikację i implementację,
- mechanizmy standardu POSIX — rygle i zmienne warunkowe,
- monitory i regiony krytyczne.
- Przykłady zastosowania wymienionych mechanizmów pokazano w rozwiązaniach klasycznych problemów synchronizacji: producenta i konsumenta, czytelników i pisarzy, pięciu filozofów, śpiących fryzjerów.
- Ostatnie dwa moduły (4 godz.) poświęcono zakleszczeniu — opisaniu samego zjawiska (pierwszy moduł) i omówieniu metod przeciwdziałania (drugi moduł). Przedstawione zostały: warunki konieczne zakleszczenia w kontekście zasobów odzyskiwalnych i nieodzyskiwalnych, definicja zakleszczenia, opis stanu systemu na potrzeby analizy zakleszczenia — graf przydziału i graf oczekiwania oraz ich specyficzne własności. Jeżeli chodzi o przeciwdziałanie, omówione zostały następujące podejścia: zapobieganie zakleszczeniom, unikanie zakleszczeń (w tym algorytm bankiera), detekcja stanu zakleszczenia i krótko zasady usuwania.
Laboratoria
- Pierwszy moduł zajęć laboratoryjnych (1 godz.) poświęcono instalacji systemu operacyjnego Linux wraz z odpowiednim przygotowaniem partycji dysku oraz konfiguracją mechanizmu ładowania (dual boot).
- Pierwsza z zasadniczych części zajęć (12 godz.) dotyczy użytkowania uniksopodobnego systemu operacyjnego. Celem tej części jest opanowanie umiejętności użytkowania systemu poprzez wydawanie poleceń na konsoli jako alternatywy dla intuicyjnego graficznego interfejsu użytkownika. Zaletą takiego podejścia jest możliwość automatyzacji pewnych zadań w trybie wsadowym, dlatego większą część czasu poświęcono na przetwarzanie potokowe oraz tworzenie skryptów powłoki. Poszczególne zajęcia obejmują:
- poruszanie się w systemie — logowanie, pomoc systemowa (man), programy pomocnicze (whatis, whereis, apropos),
- obsługę plików i katalogów — identyfikacja plików w drzewie katalogów (pwd, ls, cd), kopiowanie i usuwanie plików (mv, rm, cp, ln), lokalizowanie plików (find, locate), tworzenie i usuwanie katalogów (mkdir, rmdir),
- obsługę procesów — tworzenie wykazu procesów (ps, pstree, pgrep), zmiana priorytetu (nice, renice), przekazywanie sygnałów (kill), obsługa procesów pierwszo- i drugoplanowych (&, fg, bg),
- potoki i filtry — przekierowanie strumieni standardowych, potoki z użyciem filtrów: cat, head, tail, grep, wc, tr, cut, sort, uniq,
- skrypty powłoki — zmienne lokalne i środowiskowe powłoki, tworzenie skryptów i przekazywanie parametrów, konstrukcje strukturalne w skyptach (pętle i instrukcje warunkowe).
- Druga część (17 godz.) dotyczy dostępu do usług jądra uniksopodobnego systemu operacyjnego w programie niskopoziomowym. Celem zajęć jest poznanie zasad korzystania z interfejsu jądra dla programów aplikacyjnych (API) w języku C oraz nabycie umiejętności użycia wybranych funkcji jądra w zakresie:
- obsługi plików — tworzenie i dostęp do plików (creat, open, close, read, write),
- obsługi procesów — tworzenie procesów, uruchamianie programów (fork, exec, exit, wait),
- komunikacji strumieniowej za pośrednictwem łączy — tworzenie potoków i zasady ich użycia w komunikacji między procesami (pipe),
- obsługi wątków — tworzenie i synchronizacja wątków (pthread_create, pthread_exit, pthread_join, pthread_mutex_lock, pthread_mutex_unlock, pthread_mutex_trylock, pthread_cond_wait, pthread_cond_signal, pthread_cond_broadcast),
- mechanizmów grupy IPC:
- kolejek komunikatów (msgget, msgsnd, msgrcv, msgctl),
- pamięci współdzielonej (shmget, shmat, shmdt, shmctl),
- semaforów (semget, semop, semctl).
Funkcjonowanie omawianych mechanizmów ilustrowane jest krótkimi przykładami programów. Niektóre z nich mają charakter praktyczny, inne mają tylko demonstrować sposób i skutki użycia określonej funkcji lub mechanizmu.
Literatura
Literatura podstawowa
- A. Silberschatz, J.L. Peterson, G. Gagne, Podstawy systemów operacyjnych. WNT, Warszawa 2005.
- G. Nutt, Operating Systems. A Modern Perspective. wydanie 2, Addison Wesley Longman, Inc., 2002.
- W. Stallings, Systemy operacyjne. Robomatic, Wrocław 2004.
- A. S. Tanenbaum, Modern Operating Systems. wydanie 2, Prentice-Hall Inc., 2001.
- C. Sobaniec, System operacyjny Linux — przewodnik użytkownika. Nakom, Poznań 2002.
- J. Marczyński, UNIX użytkowanie i administrowanie. wydanie 2, Helion, Gliwice 2000.
- W. R. Stevens, Programowania w środowisku systemu UNIX. WNT, Warszawa 2002.
- J. S. Gray, Komunikacja między procesami w Unixie. ReadMe, Warszawa 1998.
- M. J. Rochkind, Programowanie w systemie Unix dla zaawansowanych. WNT, Warszawa 1993.
Literatura uzupełniająca
- L. Bic, A. C. Shaw, The Logical Design of Operating Systems. Prentice-Hall Inc., 1988.
- M. J. Bach, Budowa systemu operacyjnego Unix®. WNT, Warszawa 1995.
- B. Goodheart, J. Cox, Sekrety magicznego ogrodu. UNIX® System V Wersja 4 od środka. WNT, Warszawa 2001.
- U. Vahalia, Jądro systemu UNIX®. Nowe horyzonty. WNT, Warszawa 2001.
- D. A. Solomon, M. E. Russinovich, Microsoft Windows® 2000 od środka. Helion, Gliwice 2003.
- R. Lowe, Kernel Linux. Przewodnik programisty. Helion, Gliwice 2004.
- P. Silvester, System operacyjny Unix™. WNT, Warszawa 1990.
- Z. Królikowski, M. Sajkowski, UNIX dla początkujących i zaawansowanych. Nakom, Poznań 1996.
- Z. Guźlewski, T. Weiss. Programowanie współbieżne i rozproszone w przykładach i zadaniach. WNT, Warszawa 1993.
- R. W. Stevens, Programowanie zastosowań sieciowych w systemie Unix. WNT, Warszawa 1995.
- M. Gabassi, B. Dupouy, Przetwarzanie rozproszone w systemie Unix. Lupus, Warszawa 1995.
Moduły
Wykład
- Wstęp (2 godz.) - PDF kolor | PDF | pytania | Flash | Test
- Treść wykładu
- Definicja systemu operacyjnego
- Miejsce systemu operacyjnego w organizacji oprogramowania komputera
- Ogólna struktura systemu operacyjnego
- Zadania systemu operacyjnego
- Klasyfikacja systemów operacyjnych
- Zasada działania systemu operacyjnego
- Najważniejsze pojęcia i zagadnienia: wielowarstwowa organizacja oprogramowania komputera, system operacyjny (wsadowy, interaktywny, wielozadaniowy), jądro systemu operacyjnego, cykl rozkazowy, przerwanie (zewnętrzne, programowe, diagnostyczne), pierścienie ochrony, ochrona pamięci.
- Treść wykładu
- Procesy, zasoby i wątki (2 godz.) - PDF kolor | PDF | pytania | Flash | Test
- Treść wykładu
- Koncepcja procesu i zasobu
- Zarządca procesów i zarządca zasobu
- Struktury danych na potrzeby zarządzania procesami i zasobami
- Klasyfikacja zasobów
- Stany procesu i cykl zmian stanów
- Kolejki procesów
- Przełączanie kontesktu
- Planiści: krótkoterminowy, śrdednioterminowy i długoterminowy
- Wątki
- Najważniejsze pojęcia i zagadnienia: proces, kontekst procesu, deskryptor procesu, zarządca procesów, stan procesu, kolejka procesów, planista, zasób (odzyskiwalny, nieodzyskiwalny, wywłaszczalny, niewywłaszczalny), deskryptor zasobu, zarządca zasobu, wątek.
- Treść wykładu
- Planowanie przydziału procesora (2 godz.) - PDF kolor | PDF | pytania | Flash | Test
- Treść wykładu
- Ogólna koncepcja planowania przydziału procesora
- Komponenty jądra na potrzeby planowania przydziału procesora
- Planowanie wywłaszczające i niewywłaszczające
- Funkcja priorytetu i jej parametry
- Kryteria oceny algorytmów planowania przydziału procesora
- Przykłady algorytmów planowania przydziału procesora
- Implementacja algorytmów planowania
- Najważniejsze pojęcia i zagadnienia: priorytet procesu, wywłaszczanie, planowanie priorytetowe, planowanie rotacyjne, wykorzystanie procesora, przepustowość, czas oczekiwania, czes reakcji (odpowiedzi), czas cyklu przetwarzania.
- Treść wykładu
- Przykłady implementacji planowania przydziału procesora (2 godz.) - PDF kolor | PDF | pytania | Flash | Test
- Treść wykładu
- Planowanie przydziału procesora w tradycyjnym systemie Unix
- Planowanie przydziału procesora w systemie Linux
- Planowanie przydziału procesora w systemie Windows
- Najważniejsze pojęcia i zagadnienia: przeliczanie priorytetów, struktury danych do obsługi kolejki procesów gotowych, przeciwdziałanie głodzeniu procesów w dostępie do procesora.
- Treść wykładu
- Zarządzanie pamięcią operacyjną (2 godz.) - PDF kolor | PDF | pytania | Flash | Test
- Treść wykładu
- Pamięć a przestrzeń adresowa
- Podział i przydział pamięci
- Fragmentacja
- Obraz procesu w pamięci
- Problem ochrony i współdzielenia pamięci
- Stronicowanie i segmentacja
- Najważniejsze pojęcia i zagadnienia: hierachia pamięci, przestrzeń adresowa, adres logiczny i fizyczny, wiązanie adresu, transformacja adresu, fragmentacja pamięci (zewnętrzna i wewnętrzna), strona pamięci, segment pamięci.
- Treść wykładu
- Pamięć wirtualna (3 godz.) - PDF kolor | PDF | pytania | Flash | Test
- Treść wykładu
- Stronicowanie na żądanie
- Błąd strony i jego obsługa
- Problem zastępowania i wznawiania rozkazów
- Algorytmy wymiany i ich klasyfikacja
- Anomalia Belady'ego
- Problemy implementacji algorytmów wymiany
- Najważniejsze pojęcia i zagadnienia: stronicowanie na żądanie, bit poprawności, błąd strony, wymiana stron, problem wznawiania rozkazów, bit modyfikacji, bit odniesienia, algorytm wymiany, zbiór roboczy, wstępne sprowadzanie, efektywność działania systemu pamięci wirtualnej.
- Treść wykładu
- Urządzenia wejścia-wyjścia (2 godz.) - PDF kolor | PDF | pytania | Flash | Test
- Treść wykładu
- Właściwości i klasyfikacja urządzeń wejścia-wyjścia
- Struktura mechanizmu wejścia-wyjścia
- Interakcja jednostki centralnej z urządzeniami wejścia-wyjścia
- odpytywanie
- sterowanie przerwaniami
- bezpośredni dostęp do pamięci
- Buforowanie, spooling i przechowywanie podręczne
- Wirtualne wejście-wyjście
- Najważniejsze pojęcia i zagadnienia: sterownik, moduł sterujący, odpytywanie, przerwania od urządzeń, bezpośredni dostęp do pamięci, buforowanie, spooling, przechowywanie podręczne.
- Treść wykładu
- System plików — warstwa logiczna (2 godz.) - PDF kolor | PDF | pytania | Flash | Test
- Treść wykładu
- Pojęcie pliku i jego atrybuty
- Atrybuty plik
- Logiczny i fizyczny obraz pliku
- Metody dostępu do pliku
- Podstawowe operacje na plikach
- Uniksowy interfejs dostępu do pliku
- Logiczna organizacja systemu plików
- Najważniejsze pojęcia i zagadnienia: plik, typ pliku, struktura pliku, dostęp sekwencyjny, dostęp bezpośredni, dostęp indeksowy, strefa, katalog.
- Treść wykładu
- System plików — warstwa fizyczna (2 godz.) - PDF kolor | PDF | pytania | Flash | Test
- Treść wykładu
- Fizyczna organizacja systemu plików na dysku
- przydział miejsca na dysku
- zarządzanie wolną przestrzenią
- implementacja katalogu
- Przechowywanie podręczne w systemie plików
- Integralność systemu plików
- Semantyka spójności i synchronizacja współbieżnego dostępu do pliku
- Fizyczna organizacja systemu plików na dysku
- Najważniejsze pojęcia i zagadnienia: przydział ciągły, przydział listowy, przydział indeksowy, FAT, integralność systemu plików.
- Treść wykładu
- System plików — przykłady implementacji (2 godz.) - PDF kolor | PDF | pytania | Flash | Test
- Treść wykładu
- Systemu plików CP/M
- Systemu plików FAT
- Systemu plików ISO 9660
- Systemu plików Unix
- Systemu plików NTFS
- Najważniejsze pojęcia i zagadnienia: blok kontrolny pliku FCB, FAT16, FAT32, i-węzeł, główna tablica plików MFT.
- Treść wykładu
- Współbieżność i synchronizacja procesów (2 godz.) - PDF kolor | PDF | pytania | Flash | Test
- Treść wykładu
- Istota przetwarzania współbieżnego i synchronizacji
- Poprawność programów współbieżnych
- Klasyfikacja mechanizmów synchronizacji
- mechanizmy operate na zmiennych współdzielonych
- mechanizmy wspierane przez system operacyjny
- mechanizmy ze wsparciem językowym
- Główne problemy synchronizacji procesów (wzajemne wykluczanie, ograniczone buforowanie)
- Definicja problemu wzajemnego wykluczania (sekcji krytycznej)
- Schemat algorytmu wzajemnego wykluczania
- Klasyczne algorytmy wzajemnego wykluczania oparte o zapis/odczyt zmiennych współdzielonych
- algorytm Petersona
- algorytm Lamporta
- Rozwiązanie problemu wzajemnego wykluczania w oparciu o instrukcje
test&set
orazexchange
- Najważniejsze pojęcia i zagadnienia: instrukcja atomowa, przeplot, bezpieczeństwo, żywotność, uczciwość, wzajemne wykluczanie (sekcja krytyczna), ograniczone buforowanie, poprawność algorytmu wzajmnego wykluczania (bezpieczeństwo, postęp, ograniczone czekanie), aktywne czekanie, wsparcie sprzętowe w rozwiązaniu problemu wzajemnego wykluczania.
- Treść wykładu
- Systemowe mechanizmy synchronizacji procesów (3 godz.) - PDF kolor | PDF | pytania | Flash | Test
- Treść wykładu
- Definicja i klasyfikacja semaforów
- Implementacja semaforów
- Zastosowanie semaforów do rozwiązania głównych problemów synchronizacji procesów
- Mechanizmy synchronizacji wątków standardu POSIX
- zamki (rygle, ang. locks, mutex locks)
- zmienne warunkowe (ang. conditionals)
- Monitory (definicja i zasada działania)
- Zastosowanie monitorów do rozwiązania problemu ograniczonego buforowania
- Regiony krytyczne
- Zastosowanie regionów krytycznych do rozwiązania problemu ograniczonego buforowania
- Najważniejsze pojęcia i zagadnienia: semafor ogólny, semafor binarny, podnoszenie i opuszczanie semafora, zamek, zmienna warunkowa, monitor, zmienna warunkowa w monitorze, region krytyczny, warunkowy region krytyczny.
- Treść wykładu
- Problem zakleszczenia (2 godz.) - PDF kolor | PDF | pytania | Flash | Test
- Treść wykładu
- Definicja problemu zakleszczenia
- Warunki konieczne wystąpienia zakleszczenia
- Graf przydziału zasobów i graf oczekiwania oraz ich własności
- Najważniejsze pojęcia i zagadnienia: stan osiągalny, zablokowanie procesu, warunki konieczne wystąpienia zakleszczenia, graf przydziału zasobów, graf oczekiwania.
- Treść wykładu
- Przeciwdziałanie zakleszczeniu (2 godz.) - PDF kolor | PDF | pytania | Flash | Test
- Treść wykładu
- Rozwiązywanie problemu zakleszczenia
- zapobieganie zakleszczeniom
- unikanie zkleszczeń
- detekcja i likwidacja zakleszczeń
- Podejście hybrydowe do rozwiązywania problemu zakleszczenia
- Rozwiązywanie problemu zakleszczenia
- Najważniejsze pojęcia i zagadnienia: zapobieganie zakleszczeniom, unikanie zakleszczeń, algorytm Bankiera, likwidacja zakleszczenia (usuwanie procesów, wywłaszczanie zasobów)
- Treść wykładu
Laboratorium
Użytkowanie uniksopodobnego systemu operacyjnego (Linux)
- Instalacja systemu operacyjnego (1 godz.) - PDF
- Treść zajęć laboratoryjnych
- Instalacja systemu
- Podział na partycje
- Program ładujący
- Treść zajęć laboratoryjnych
- Wstęp oraz obsługa plików i katalogów (3 godz.) - PDF
- Treść zajęć laboratoryjnych
- Logowanie do systemu
- Pomoc systemowa – polecenie
man
- Programy pomocnicze -- polecenia
whatis
,whereis
,apropos
- Znaki specjalne
- Struktura katalogów w systemie
- Przemieszczanie się po strukturze katalogów – polecenia:
pwd
,ls
,cd
- Tworzenie, usuwanie, zmiana nazwy plików – polecenia
touch
,rm
,mv
,cp
- Tworzenie, usuwanie, zmiana nazwy katalogów – polecenia
mkdir
,rmdir
- Wyszukiwanie plików – polecenia
locate
,find
- Dowiązania – polecenie
ln
- Opanowane umiejętności: logowanie, korzystanie z pomocy systemowej, poruszanie się w systemie plików, kopiowanie, usuwanie i przesuwanie plików, tworzenie i usuwanie katalogów, przeszukiwanie systemu plików.
- Treść zajęć laboratoryjnych
- Obsługa procesów w systemie (1 godz.) - PDF
- Treść zajęć laboratoryjnych
- Identyfikatory procesów w systemie operacyjnym
- Lista procesów w systemie – polecenie
ps
- Hierarchia procesów w systemie – polecenie
pstree
- Wyszukiwanie procesów – polecenie
pgrep
- Priorytety procesów – polecenia
nice
,renice
- Uruchamianie procesów w tle – znak
&
i poleceniafg
,bg
- Sygnały i ich obsługa
- Opanowane umiejętności: wyszukiwanie i identyfikacja procesów, usuwanie (zabijanie) procesów, zmiana priorytetu, uruchamianie procesów pierwszo- i drugoplanowych.
- Treść zajęć laboratoryjnych
- Filtry, strumienie standardowe oraz przetwarzanie potokowe (4 godz.) - PDF
- Treść zajęć laboratoryjnych
- Strumienie standardowe i ich przekierowywanie
- Podstawowe filtry – polecenia
cat
,head
,tail
,grep
,wc
,tr
,cut
,sort
,uniq
- Przetwarzanie potokowe z zastosowaniem filtrów systemowych
- Opanowane umiejętności: uruchamianie procesów z przekierowaniem wejścia lub wyjścia do pliku, łączenie procesów w potoki, zastosowanie podstawowych filtrów
- Treść zajęć laboratoryjnych
- Tworzenie skryptów powłoki systemu operacyjnego (4 godz.) - PDF
- Treść zajęć laboratoryjnych
- Zmienne środowiskowe oraz ich eksportowanie – polecenia
set
,env
,echo
,export
- Argumenty wywołania skryptów
- Instrukcja warunkowa
- Pętle
while
orazfor
- Pobieranie wartości w trakcie wykonywania skryptów
- Uruchamianie skryptów z debugowaniem
- Zmienne środowiskowe oraz ich eksportowanie – polecenia
- Opanowane umiejętności: tworzenie skryptów w języku powłoki, urchamianie skryptów, przekazywanie i obsługa parametrów.
- Treść zajęć laboratoryjnych
Programowanie w języku C z wykorzystaniem funkcji jądra uniksopodobnego systemu operacyjnego (Linux)
- Obsługa systemu plików (2 godz.) - PDF
- Treść zajęć laboratoryjnych
- Otwieranie plików i ich deskryptory – funkcja
open
- Tworzenie plików
- Odczyt i zapis do plików – funkcje
read
,write
- Implementacja przykładowych programów obsługi plików
- Otwieranie plików i ich deskryptory – funkcja
- Opanowane umiejętności: tworzenie plików oraz dostęp do zawartości plików.
- Treść zajęć laboratoryjnych
- Obsługa procesów w systemie (2 godz.) - PDF
- Treść zajęć laboratoryjnych
- Procesy macierzyste i potomne
- Tworzenie procesów potomnych – funkcja
fork
,wait
- Uruchamianie programów – funkcje
exec
- Przekierowywanie strumieni standardowych
- Implementacja przykładowych programów obsługi procesów
- Opanowane umiejętności: tworzenie procesów, urchamianie programów w procesach oraz przekierowanie wyników standardowych programów uniksowych do pliku.
- Treść zajęć laboratoryjnych
- Obsługa potoków (4 godz.) - PDF
- Treść zajęć laboratoryjnych
- Tworzenie potoków nienazwanych – funkcja
pipe
- Tworzenie potoków nienazwanych – funkcja
mkfifo
- oraz ich otwieranie - Przykłady przetwarzania potokowego
- Implementacja przykładowych programów obsługi potoków
- Tworzenie potoków nienazwanych – funkcja
- Opanowane umiejętności: realizacja komunikacji potokowej (strumieniowej) między lokalnymi procesami.
- Treść zajęć laboratoryjnych
- Tworzenie i obsługa wątków (4 godz.) - PDF
- Treść zajęć laboratoryjnych
- Tworzenie wątków – funkcja
pthread_create
- Przekazywanie parametrów do funkcji wątków i pobieranie wyników – funkcaj
pthread_join
- Synchronizacja wątków – grupa funkcji
pthread_mutex
ipthread_cond
- Implementacja przykładowych programów obsługi wątków
- Tworzenie wątków – funkcja
- Opanowane umiejętności: tworzenie i usuwanie wątków, synchronizacja wątków (wzajemne wykluczanie, usypianie i budzenie).
- Treść zajęć laboratoryjnych
- Mechanizmy IPC: kolejki komunikatów (2 godz.) - PDF
- Treść zajęć laboratoryjnych
- Tworzenie kolejek komunikatów – funkcja
msgget
- Wysyłanie i odbieranie komunikatów – funkcje
msgsnd
,msgrcv
- Parametry i usuwanie kolejek komunikatów – funkcja
msgctl
- Obsługa mechanizmów IPC w konsoli systemu – polecenia
ipcs
,ipcrm
- Implementacja przykładowych programów obsługi kolejek komunikatów
- Tworzenie kolejek komunikatów – funkcja
- Opanowane umiejętności: realizacja przekazywania komunikatów pomiędzy lokalnymi procesami.
- Treść zajęć laboratoryjnych
- Mechanizmy IPC: pamięć współdzielona (2 godz.) - PDF
- Treść zajęć laboratoryjnych
- Tworzenie i obsługa pamięci współdzielonej – funkcja
shmget
- Przyłączanie pamięci współdzielonej do procesu – funkcja
shmat
- Odłączanie pamięci współdzielonej od procesu – funkcja
shmdt
- Parametry pamięci współdzielonej – funkcja
shmctl
- Implementacja przykładowych programów obsługi pamięci współdzielonej
- Tworzenie i obsługa pamięci współdzielonej – funkcja
- Opanowane umiejętności: tworzenie i udstępnianie segmentów pamięciu w celu przkazywania danych pomiędzy lokalnymi procesami
- Treść zajęć laboratoryjnych
- Mechanizmy IPC: semafory (2 godz.) - PDF
- Treść zajęć laboratoryjnych
- Zasada działania semaforów binarnych i uogólnionych
- Tworzenie semaforów – funkcja
semget
- Operacje na semaforach – funkcja
semop
- Parametry semaforów i ich inicjowanie – funkcja
semctl
- Przykłady podstawowych problemów synchronizacji
- Implementacja przykładowych programów z synchronizacją wykorzystująca semafory
- Opanowane umiejętności: tworzenie i inicjalizowanie semafrów w celu synchronizacji współbieżnych procesów (między innymi w dostępie do współdzielonej pamięci).
- Treść zajęć laboratoryjnych