^M ^M
|
|
Ć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
Kompilator można ściągnąć bezpośrednio stąd: devcpp4990setup.exe
(7,5MB).
W ramach ćwiczeń należy stworzyć aplikację typu konsola i typu okno.
Uwaga! Podczas tworzenia aplikacji Win32 przydatna będzie
książka
[4] oraz wsparcie z internetu [5].
Ć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();
- Sleep();
Ćw. 4
Cel ćwiczenia to realizacja dostępu wielu wątków do wspólnych
zmiennych.
Rozważane są także 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();
Ć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();
- 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();
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.
Algorytm Dekkera.