Systemy operacyjne
Forma zajęć
wykład (30 godzin) + laboratorium (30 godzin)
Opis
Celem przedmiotu 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ści i synchronizacja w sensie koordynacji przepływu sterowania. W kontekście podstawowych problemów synchronizacji, takich jak wzajemne wykluczania 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
Autor
- Jerzy Brzeziński
- Dariusz Wawrzyniak
Wymagania wstępne
- Wstęp do programowania
- Umiejętność programowania w języku C
- Elementarna wiedza z zakresu architektur komputerów
Zawartość
Wykład
- Rola i zadania systemu operacyjnego oraz jego umiejscowienie 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 i zasobu oraz ich opis i identyfikacja
- Zarządzanie procesorem — szeregowanie zadań
- Zarządzanie pamięcią operacyjną — podział pamięci, przydział, zjawisko fragmentacji, segmentacja i stronicowanie
- Realizacja pamięci wirtualnej — obsługa błędu strony, problem wymiany stron i wznawiania rozkazów, implementacja algorytmów wymiany
- Zarządzanie urządzeniami wejścia-wyjścia — podsystem wejścia-wyjścia, sposoby interakcji jednostki centralnej z urządzeniami wejścia-wyjścia, buforowanie i spooling
- Urządzenia dyskowe — funkcjonowanie i parametry dysku, algorytmy sterowania ruchem głowic, macierze dyskowe
- System plików — pojęcie pliku, jego struktury i typu, organizacja logiczna systemu plików, organizacja fizyczna systemu plików, przykłady implementacji
- Ochrona zasobów — domeny ochrony, macierz dostępów i jej implementacja
- Współbieżność — instrukcje atomowe, przeplot i istota synchronizacji
- Poprawność programów współbieżnych — bezpieczeństwo i żywotność
- Wzajemne wykluczanie — algorytmy Dekkera, Dijkstry, Petersona, Lamporta
- Instrukcje atomowe test&set oraz exchange
- Semafory — klasyfikacja i implementacja
- Monitory
- Regiony krytyczne
- Spotkania
- Zakleszczenie — warunki konieczne, zapobieganie, unikanie, detekcja i usuwanie.
Laboratorium
- Użytkowanie uniksopodobnego systemu operacyjnego: poruszanie się w systemie plików, obsługa plików i katalogów, obsługa procesów, potoki i filtry, skrypty powłoki
- Programowanie z wykorzystaniem funkcji jądra uniksopodobnego systemu operacyjnego: tworzenie i dostęp do plików, tworzenie i obsługa procesów, uruchamianie programów, wątki i ich synchronizacja, sygnały, komunikacja strumieniowa za pośrednictwem łączy, mechanizmy grupy IPC
Literatura
Wykład
- G. Nutt. Operating Systems. A Modern Perspective. wydanie 2, Addison Wesley Longman, Inc., 2002.
- W. Stallings. Systemy operacyjne. Robomatic, Wrocław, 2004.
- L. Bic, A. C. Shaw. The Logical Design of Operating Systems. Prentice-Hall, Inc, 1988.
- A. Silberschatz, J.L. Peterson, G. Gagne. Podstawy systemów operacyjnych. WNT, Warszawa, 2005.
- A. S. Tanenbaum. Modern Operating Systems. wydanie 2, Prentice-Hall, Inc, 2001.
- 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.
Laboratorium — użytkowanie
- C. Sobaniec. System operacyjny Linux — przewodnik użytkownika. Nakom, Poznań, 2002.
- J. Marczyński. UNIX użytkowanie i administrowanie. wydanie 2, Helion, Gliwice, 2000.
- P. Silvester. System operacyjny Unix™. WNT, Warszawa, 1990.
- Z. Królikowski, M. Sajkowski. UNIX dla początkujących i zaawansowanych. Nakom, Poznań, 1996.
Ćwiczenia — programowanie
- 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.
- 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
- 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), ochrona pamięci.
- Treść wykładu
- Procesy i zasoby
- 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
- Użytkownicy
- 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, użytkownik (końcowy, programista, administrator).
- Treść wykładu
- Szeregowanie
- 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
- Planowanie przydziału procesora w systemach Unix, Linux i Windows
- Najważniejsze pojącia i zagadnienia: priorytet procesu, wywłaszczanie, planowanie priorytetowe, planowanie rotacyjne, wykorzystanie procesora, przepustowość, czas oczekiwania, czes reakcji, czas cyklu przetwarzania.
- Treść wykładu
- Zarządzanie pamięcią
- Treść wykładu
- Pamięć a przestrzeń adresowa
- Obraz procesu w pamięci
- Problem ochrony i współdzielenia pamięci
- Podział i przydział pamięci
- Fragmentacja
- 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
- 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
- Zarządzanie pamięcią w systemach Unix, Linux i Windows
- 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-wyj
- Treść wykładu
- Najważniejsze pojącia i zagadnienia:
- Dyski
- Treść wykładu
- Najważniejsze pojącia i zagadnienia:
- System plików
- Treść wykładu
- Najważniejsze pojącia i zagadnienia:
- Współbieżność
- Treść wykładu
- Najważniejsze pojącia i zagadnienia:
- Wzajemne wykluczanie
- Treść wykładu
- Najważniejsze pojącia i zagadnienia:
- Semafory
- Treść wykładu
- Najważniejsze pojącia i zagadnienia:
- Monitory i regiony krytyczne
- Treść wykładu
- Najważniejsze pojącia i zagadnienia:
- Zakleszczenie
- Treść wykładu
- Najważniejsze pojącia i zagadnienia:
- Ochrona zasobów
- Treść wykładu
- Najważniejsze pojącia i zagadnienia:
Laboratorium
Użytkowanie uniksopodobnego systemu operacyjnego (Linux)
- Wstęp oraz obsługa plików i katalogów (3 godz.)
- 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.)
- 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.)
- 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.)
- 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.)
- 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.)
- 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.)
- 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.)
- 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.)
- 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.)
- 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.)
- 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