|
|
Wykł.1 Wykł.2 Wykł.3 Wykł.4 Wykł.5 Wykł.6 Wykł.7 Wykł.8 Wykł.9 Wykł.10 Wykł.11 Wykł.12 Wykł.13 Wykł.14 Wykł.15
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.
Ć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
Korzystanie z debbugera w DevCpp: devdebug.pdf.
Preferowane formatowanie: formatowanie.pdf.
Wcięcia w VC++: VC++: File-New-File-VisualC++-cpp file, wkleic, zaznaczyc wszystko lub czesc, Edit-Advanced-Format Selection
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].
W ramach cwiczen należy zapoznac sie z nastepujacymi funkcjami:
- printf(), sprintf(), liczne formatowania, min. %c, %s, %d, %f, %lf, %x, %u
- getch(), getchar(), gets(), scanf(), kbhit() (roznice!),
- fopen(), fputc(), fputs(), fprintf(), fscanf(), fgets(), fclose()
Ćw. 2
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. 3
Ć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();
- TerminateThread();
- Sleep();
- timeGetTime(); (
Ćw. 4
Cel ćwiczenia to 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();
- InterlockedCompareExchange();
- InterlockedCompareExchangePointer();
Ćw. 5
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();
Ćw. 6
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();
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();
- MapViewOfFileEx();
- 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();
Ćw. 9
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();
Procesy, wątki i semafory w systemie Unix (Linux).
Przed przystąpieniem do zajęć należy przygotować sobie informacje o funkcjach, które będą używane na zajęciach:Komunikacja międzyprocesowa w systemie Unix(Linux).
Przed przystąpieniem do zajęć należy przygotować sobie informacje o funkcjach, które będą używane na zajęciach:Komunikacja międzyprocesowa w systemie Unix(Linux).
Przed przystąpieniem do zajęć należy przygotować sobie informacje o funkcjach, które będą używane na zajęciach:Algorytmy wzajemnego wykluczania (alg. Dekkera, Lamporta, Petersona).
Problem 5-ciu filozofów - wersja z widelcami podnoszonymi naraz.
Prosze zapoznać się z funkcją WaitForMultipleObjects();
Problem 5-ciu filozofów - wersja z widelcami podnoszonymi kolejno.