Systemy operacyjne zima 2024/25
Język wykładowy | Polski |
---|---|
Opiekun | Piotr Witkowski |
Liczba godzin | 30 (wyk.) 30 (ćw.) 15 (prac.) 15 (rep.) |
Rodzaj | Informatyczny 1 |
ECTS | 8 |
Polecany dla I roku | Nie |
Egzamin | Tak |
Tagi | SO (Systemy operacyjne) |
Grupy efektów kształcenia | Systemy operacyjne |
Opis przedmiotu:
Celem wykładu jest zapoznanie słuchaczy z wybranymi aspektami systemu uniksowego z punktu widzenia programisty. Na przykładzie wywołań systemowych i narzędzi systemu _Linux_ zostaną przedstawione najważniejsze osiągnięcia w dziedzinie systemów operacyjnych. Organizacja oraz algorytmy i struktury danych jądra systemu operacyjnego będą omawiane na przedmiocie _„Struktura jądra UNIX”_. ## Lista tematów 1. Wprowadzenie * jądro systemu operacyjnego * przestrzeń adresowa * izolacja przestrzeni jądra i użytkownika * zmiana kontekstu i przestrzeni adresowej * przerwania sprzętowe i wywłaszczanie * dyspozytor i planista zadań * wywołania systemowe `strace`, obsługa pułapek i błędów * model aplikacji w systemach uniksowych * model maszyny procesu w systemie uniksowym 2. Procesy * zasoby i stan procesu * parametry procesu `argv` i zmienne środowiskowe `envp` * tworzenie procesów `fork` * ładowanie programów `execve` * kończenie procesów `exit` * oczekiwanie na zmianę stanu procesów potomnych `waitpid` * hierarchia procesów: `getpid`, `getppid` 3. Sygnały * sygnały synchroniczne i asynchroniczne, domyślne akcje * wysyłanie sygnałów: `kill` * procedury obsługi sygnałów: `signal` i `sigaction` * pojęcie sekcji krytycznej i wyścigu * funkcje wielobieżne * blokowanie i odblokowanie sygnałów `sigprocmask` * oczekiwanie na sygnały `sigsuspend` * nielokalne skoki: `setjmp` i `longjmp` 4. Zarządzanie zadaniami * grupy procesów: `setpgid` * grupa pierwszoplanowa i grupy drugoplanowe: `tcsetpgrp` * sesje i terminal sterujący * organizacja powłoki uniksowej * wstrzymywanie `SIGSTOP` i wznawianie procesów `SIGCONT` 5. Pliki * różnice między interfejsem `stdio.h` i uniksowym `unistd.h` * typy plików: zwykłe, katalogi, urządzenia, potoki, gniazda, etc. * hierarchia plików, ścieżki, punkty montażowe * bieżący katalog roboczy * domyślnie otwarte pliki `stdin`, `stdout`, `stderr` * otwieranie `open` i zamykanie `close` plików oraz wybrane flagi plików * odczyt `read` i zapis `write`, pułapki z _short counts_ * właściwości pliku terminala * kursor pliku i zmiana jego pozycji `lseek`, powstawanie dziur * zmiana rozmiaru pliku `truncate` * zmiana właściwości urządzeń wejścia-wyjścia `ioctl` * tablica deskryptorów vs. otwarte pliki * wpływ `fork` na tablicę deskryptorów * przekierowania plików `dup` i `dup2` * operacje na deskryptorach plików `fcntl` * zamykanie plików przy `execve` i flaga `CLOEXEC` 6. System plików * metadane i lista bloków pliku, i-węzły * odczyt metadanych pliku `stat` * sprawdzenie uprawnień dostępu do plików * zmiana uprawnień `chmod` i właściciela pliku `chown` * wpisy katalogów `dirent`, odczyt katalogu `readdir` * dowiązania twarde `link` i symboliczne `symlink` * odczyt dowiązań symbolicznych `readlink` i `lstat` * superblok i odczyt metadanych systemu plików `statvfs` * księgowanie i operacje idempotentne 7. Buforowanie plików * wpływ buforowania na wydajność programów * buforowanie plików w jądrze `fsync` * buforowanie danych vs. metadanych * spójność danych a buforowanie * wybór strategii buforowania w _stdio_ `setvbuf` * odczyty i zapisy rozproszone `readv` i `writev` 8. Tożsamość, autoryzacja i uwierzytelnianie * autoryzacja vs. uwierzytelnianie * tożsamość procesu `getuid`, `getgid`, `getgroups` * identyfikatory vs. nazwy `getent` * przestrzenie nazw zasobów * przejęcie tożsamości pliku wykonywalnego (set-uid, set-gid) * zmiana tożsamości `setreuid` 9. Komunikacja międzyprocesowa * tworzenie potoków `pipe` i `pipe2` * łączenie procesów przy pomocy potoków * właściwości potoków, atomowe zapisy * gniazda datagramowe i strumieniowe * gniazda domeny uniksowej 10. Pamięć wirtualna * metody przydziału pamięci wirtualnej `sbrk` i `mmap` * odwzorowania plików i obiektów anonimowych * struktury opisujące przestrzeń adresową `pmap` * obsługa błędu strony, przestrzeń wymiany * zbiór roboczy i rezydentny, buforowanie stron * współdzielenie pamięci i mechanizm _copy-on-write_ * tworzenie `mmap` i niszczenie `munmap` odwzorowań * zmiana uprawnień odwzorowań `mprotect` * synchronizacja pamięci z obiektami wspierającymi `msync` * przechwytywanie błędów stron, obsługa `SIGSEGV` 11. Zarządzanie stertą * interfejs biblioteki standardowej: `malloc`, `realloc` i `free` * organizacja pamięci alokatora: bloki i areny * fragmentacja wewnętrzna i zewnętrzna, kompaktowanie * zarządzanie listą wolnych bloków * podział i złączanie bloków * polityki przydziału (first-fit, best-fit) * algorytm znaczników granicznych (boundary tags) * algorytm kubełkowy (segregated fits) * wykrywanie błędnych odwołań do pamięci (kanarki) * pule obiektów i przydział płytowy (slab allocator) 12. Programowanie sieciowe * architektura klient-serwer * nazewnictwo stron komunikacji * protokoły połączeniowe i bezpołączeniowe * interfejs gniazd BSD * nawiązywanie połączeń * nasłuchiwanie i akceptowanie połączeń * adres powiązany z gniazdem * współbieżna obsługa wielu połączeń `select` i `poll` 13. Wątki * model wielowątkowości w uniksach * współdzielenie pamięci * wyścigi i procedury wątkowo bezpieczne * thread local storage * tworzenie `pthread_create` wątków * złączanie `pthread_join` wątków i wątki odczepione (detached) * wątki i `fork`, `exit` i `execve` * wątki i sygnały * wątki i operacje wejścia-wyjścia 14. Synchronizacja * muteksy i semafory * problem czytelników i pisarzy * ziarnistość blokad * głodzenie i zakleszczenia * problem odwócenia priorytetów * zmienne warunkowe i monitory * blokady współdzielone ##### Zajęcia Większość zajęć do przedmiotu będzie prowadzona w postaci ćwiczeń z deklaracjami. Na pracowni programistycznej będą do wykonania co najmniej trzy duże projekty: * prosta powłoka uniksowa `shell` * algorytm przydziału pamięci `malloc` * system plików `ext2` ##### Zmiana od roku akademickiego 2021/2022 **W związku ze zmianą wymiaru godzinowego, od roku 2021/2022 zmienia się liczba punktów ECTS z 6 do 8.**Wykłady
ListaProwadzący | Termin zajęć | Limit | Zapisani | Kolejka |
---|---|---|---|---|
Nieznany Prowadzący
wirtualna |
pt 10:00-12:00 (s. wirtualna3) | 121 | 35 | 0 |
UWAGA! Wyższa liczba oznacza wyższy priorytet, po zapisaniu do grupy zostajemy usunięci z kolejek o niższym priorytecie.
Ćwiczenia
ListaProwadzący | Termin zajęć | Limit | Zapisani | Kolejka |
---|---|---|---|---|
Tomasz Wierzbicki
|
cz 14:00-16:00 (s. 103) | 22 | 21 | 1 |
Arkadiusz Kozdra
|
cz 10:00-12:00 (s. 139) | 22 | 14 | 0 |
UWAGA! Wyższa liczba oznacza wyższy priorytet, po zapisaniu do grupy zostajemy usunięci z kolejek o niższym priorytecie.
Pracownie
ListaProwadzący | Termin zajęć | Limit | Zapisani | Kolejka |
---|---|---|---|---|
Piotr Witkowski
zdalna |
cz 18:00-19:00 (s. wirtualna3) | 16 | 16 | 0 |
Piotr Witkowski
zdalna |
cz 16:00-17:00 (s. ) | 16 | 17 | 0 |
UWAGA! Wyższa liczba oznacza wyższy priorytet, po zapisaniu do grupy zostajemy usunięci z kolejek o niższym priorytecie.
Repetytoria
ListaProwadzący | Termin zajęć | Limit | Zapisani | Kolejka |
---|---|---|---|---|
Piotr Polesiuk
|
śr 13:00-14:00 (s. 25) | 121 | 26 | 0 |
UWAGA! Wyższa liczba oznacza wyższy priorytet, po zapisaniu do grupy zostajemy usunięci z kolejek o niższym priorytecie.
Konsultacje prowadzących:
Imię i nazwisko | Pokój | Konsultacje |
---|---|---|
Piotr Witkowski | 311 | Po wcześniejszym umówieniu się pocztą elektroniczną. |
Tomasz Wierzbicki | 303 | Po wcześniejszym umówieniu pocztą elektroniczną. Nie w trakcie lub bezpośrednio przed moimi zajęciami (plan zajęć jest dostępny w systemie Zapisy). |
Arkadiusz Kozdra | 340 | Po umówieniu pocztą elektroniczną lub po zajęciach |
Nieznany Prowadzący | ||
Piotr Polesiuk | 338 | wtorek 14-16 |