Wykład
Wykł.1 Wykł.2 Wykł.3 Wykł.4 Wykł.5 Wykł.6 Wykł.7 Wykł.8 Wykł.9 Wykł.10
Ćwiczenia
Ćw.1
Ćw.2
Ćw.3
Ćw.4
Ćw.5
Egzamin
Zakres materiału: wykłady:
2.1, 2.2 (bez EDF, MLF, RMS), 2.5, 2.7
3.1, 3.2, 3.4, 3.5, 3.6, 3.7
4.1 - 4.7, 4.8, 4.9, 4.10, 4.11, 4.12, 4.13, 4.14, 4.15
na 6.0: cale rozdzialy 2,3,4,5.
Egzamin ustny.
Wykład 1
Wykład wprowadzający. Definicja systemu operacyjnego. Architektury komputerów. Wspolpraca ze sprzetem. Wspolpraca z uzytkownikami. Struktura S.O. Wielozadaniowosc. Uslugi S.O. Systemy scentralizowane, rozproszone. Systemy czasu rzeczywistego. Systemy wbudowane.
Wykład 2
Procesy i wątki w systemie operacyjnym. Definicje. Procesy i wątki. Stany procesów. Priorytety. Problem inwersji priorytetów. Wyznaczanie kolejności wykonywania procesów - algorytmy: FIFO, SJF , karuzelowy, kolejka priorytetowa, kolejka priorytetowa z algorytmem karuzelowym, EDF, MLF, RMS.
Wykład 3
Procesy cd. Szeregowanie procesów w systemie VxWorks. Szeregowanie procesów w systemie QNX. Szeregowanie procesów w systemie Linux. Algorytm szeregowania procesów w Linuxie. Ochrona przed zagłodzeniem. Współpraca z użytkownikiem. Szeregowanie zadań w systemie RTLinux. Szeregowanie procesów w systemie WinNT. Algorytm szeregowania procesów w systemie WinNT. Ochrona przed zagłodzeniem. Inwersja priorytetów w systemie WinNT.
Wykład 4
Synchronizacja procesów. Instrukcje atomowe. Błąd testowania, błąd aktualizacji. Sekcje krytyczne. Zdarzenia. Semafory. Oczekiwanie aktywne i pasywne. Implementacja sekcji krytycznej przy pomocy semafora. Klasyczne problemy synchronizacji procesów. Transakcje.
Wykład 5
Synchronizacja procesów cd. Zakleszczenia. Wykrywanie wystąpienia zakleszczenia. Graf przydziału zasobów. Wykrywanie wystąpienia zakleszczenia. Postępowanie z zakleszczeniami. Zapobieganie zakleszczeniom. Unikanie zakleszczeń. Sieci Petriego. Algorytmy wzajemnego wykluczania: algorytm Dekkera, Dijkstry, Lamporta, Petersona.
Wykład 6
Komunikacja międzyprocesowa. Model warstwowy OSI. Modele wymiany danych. Rozgłaszanie grupowe. Działania gwarantowane i niegwarantowane. Działania buforowane i niebuforowane.
Wykład 7
Komunikacja międzyprocesowa cd. Mechanizmy komunikacji. Mechanizmy komunikacji międzyprocesowej. Pamięć dzielona. Skrzynki. Potoki. Kolejki FIFO. Sygnały. Komunikaty systemowe. Schowek. Zdalne wywołanie procedury. COM/DCOM. Systemy wiadomości kolejkowanych.
Dodatkowe materiały do wykładu: SO-IDL.pdf
Wykład 8
Zarządzanie pamięcią. Adresacja pamięci fizycznej. Segmentacja pamięci. Przydział ciągły. Pamięć stronicowana. Obsługa pamięci wirtualnej. Obsługa pamięci w systemie Linux. Obsługa pamięci w systemie Windows NT.
Wykład 9
Zarządzanie urządzeniami wejścia - wyjścia. Podstawowe pojęcia. Dostęp do sprzętu w systemie MS-DOS. Dostęp do sprzętu w systemie QnX. Dostęp do sprzętu w systemie Linux. Dostęp do sprzętu w systemie Windows NT.
Wykład 10
Pamięci masowe. Struktura dysków twardych. Systemy plików. Alokacja plików na dysku. System FAT. System EXT2. System NTFS.
Materiały do wykładów: SO-wyklad.rar
Ćw. 1
Ćwiczenie 1 ma charakter inauguracyjno-organizacyjny. W trakcie zajęć
należy zapoznać się z systemem operacyjnym Windows i kompilatorem
DevC++.
Wybór kompilatora jest związany z jego ceną ( 0$ :),
ogolnodostępnością
i niewielkim rozmiarem programu instalacyjnego (7,5MB). Posiada on
zintegrowane
środowisko, podobne do VisualC++. DevC++ pozwala na tworzenie programów
Win32 trybu konsola lub okienkowego (WIN API), co wystarcza na
potrzeby
przedmiotu.
Strona DevC++: http://www.bloodshed.net
W ramach ćwiczeń należy stworzyć aplikację typu konsola i typu okno.
Uwaga! Podczas tworzenia aplikacji Win32 przydatne mogą być książki
[4], [6], [7] oraz wsparcie z internetu [5].
Operacje na procesach w systemie.
Przed ćwiczeniem należy zapoznać się w [5] z funkcjami
API dotyczącymi sterowania procesami:
- WinExec();
- OpenProcess();
- TerminateProcess();
- CloseHandle();
oraz informacjami statystycznymi:
- EnumProcesses();
- EnumProcessModules();
- GetModuleBaseName();
- GetProcessMemoryInfo();
- GetProcessTimes();
- GetPerformanceInfo();
Uwaga!
Ww. funkcje wymagają:
włączenia pliku nagłówkowego: #include "psapi.h"
dołączenia biblioteki libpsapi.a (MENU: Projekt->Opcje projektu,
zakładka
Parametry, przycisk 'Dodaj plik' - plik należy znaleźć w katalogu
DevCpp/lib
Ćw. 2
Ćwiczenie poświęcone procesom i wątkom w systemie, ich współdziałaniu,
priorytetom.
Przed ćwiczeniem należy zapoznać się w [5] lub [4,
rozdz.15, PO POLSKU!] z funkcjami API dotyczącymi sterowania
procesami i wątkami:
- CreateProcess();
- CreateThread();
- SetThreadPriority();
- GetThreadPriority();
- SetPriorityClass();
- GetCurrentProcess();
- GetPriorityClass();
- OpenThread();
- GetCurrentThread();
- SuspendThread();
- ResumeThread();
- Sleep();
- timeGetTime(); ( winmm.lib(libwinmm.a) )
Realizacja dostępu wielu wątków do wspólnych
zmiennych. Rozważane są instrukcje atomowe.
Przed ćwiczeniem należy przypomnieć sobie, co daje zmiennej atrybut volatile
(np. tutaj [5]) oraz zapoznać się w [5]
z funkcjami API:
- InterlockedIncrement();
- InterlockedDecrement();
- InterlockedExchange();
- InterlockedExchangeAdd();
- InterlockedExchangePointer();
Ciekawe mogą też być:
- InterlockedIncrementAcquire();
- InterlockedIncrementRelease();
- InterlockedCompareExchangePointer();
Ćw. 3
Sekcje krytyczne - bardzo ważne ćwiczenie, ukazujące zasady
ograniczonego dostępu wielu wątków do obszaru operacji na wspólnych danych.
Przed ćwiczeniem należy dowiedzieć się, co to jest sekcja krytyczna,
jak się z niej korzysta oraz zapoznać się w [5] z
funkcjami
API :
- InitializeCriticalSection();
- TryEnterCriticalSection();
- EnterCriticalSection();
- LeaveCriticalSection();
- DeleteCriticalSection();
Obiekty synchronizacji między procesami: semafory zliczające i binarne
(+mutex), semafory globalne.
Przed ćwiczeniem należy dowiedzieć się, co to jest semafor, jak
się z niego korzysta oraz zapoznać się w [5] lub [4,
rozdz.15, PO POLSKU!] z funkcjami API :
- CreateSemaphore();
- OpenSemaphore();
- ReleaseSemaphore();
- CreateMutex();
- OpenMutex();
- ReleaseMutex();
- WaitForSingleObject();
- WaitForMultipleObjects();
Ćw. 4
Celem ćwiczenia jest zapoznanie się z mechanizmem przekazywania
danych między procesami, jakim jest pamięć dzielona.
Przed ćwiczeniem należy dowiedzieć się, jak się korzysta z pamięci
dzielonej oraz zapoznać się w [5] z
funkcjami
API :
- CreateFileMapping();
- OpenFileMapping();
- MapViewOfFile();
- CopyMemory();
- UnmapViewOfFile();
Komunikacja między procesami: skrzynki (mailslot). Przygotowanie do
ćwicznienia wiąże się z zapoznaniem się z funkcjami:
- CreateMailslot();
- GetMailslotInfo();
- ReadFile();
- CreateFile();
- WriteFile();
- CloseHandle();
Komunikacja między procesami - potoki (pipe). Potoki moga byc anonimowe
(komunikacja międzywątkowa) lub nazwane (międzyprocesowa).
Przekazywane przez nie dane mają zachowaną kolejność, nie giną ani nie
są duplikowane. Przed przystąpieniem do zajęć należy przygotować sobie
informacje o funkcjach, które będą używane na zajęciach:
- CreatePipe();
- WriteFile();
- ReadFile();
- CloseHandle();
- CreateNamedPipe();
- ConnectNamedPipe();
- DisconnectNamedPipe();
- WaitNamedPipe();
Literatura i zasoby:
[1] Silberschatz A., Peterson L... : Podstawy systemów operacyjnych, WNT, wydanie piąte, (1998-)2002
[2] Ben-Ari M.: Podstawy programowania współbieżnego i rozproszonego, WNT
[3] Tannenbaum A.: Rozproszone systemy operacyjne, PWN
[4] Karmański J. : Praktyczny kurs programowania pod Windows 95, Helion
[5] MSDN, http://msdn.microsoft.com
[6] Richter J. :Programowanie aplikacji dla Microsoft Windows, RM 2000
[7] Petzold Ch.: Programowanie Windows 95 (kompletny przewodnik programisty po API Windows 95), RM 1997
[8] Bovet D. P., Cesati M.: Understanding the Linux Kernel,O'Reilly
[9] Russinovich M.: Inside the Windows NT Scheduler,Windows NT Magazine 07.1997
[10] Wyklady z przedmiotu Systemy Operacyjne (Politechnika Czestochowska)
[11] Wykład z programowania w WinAPI 32: http://alan.umcs.lublin.pl/~dotnet/wyklad.pdf (znalazła p. M. Piskorz - dziękuję)
opr. Adam Piórkowski, 2004-2006
pioro(at)agh.edu.pl