^M ^M  
 
 
SYSTEMY OPERACYJNE
 

 

Wykład



Ćwiczenia

Ćw.1  Ćw.2  Ćw.3  Ćw.4  Ćw.5  Ćw.6  Ćw.7  Ćw.8  Ćw.9  Ćw.10  Ćw.11  Ćw.12  Ćw.13  Ćw.14  Ćw.15 


Ć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łą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. 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();

    Ćw. 7

    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();

    Ćw. 8

    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();

    <>- CreateNamedPipe();
    - ConnectNamedPipe();
    - DisconnectNamedPipe();
    - WaitNamedPipe();

    Ćw. 10

    Problem 5-ciu filozofów - wersja z widelcami podnoszonymi naraz.
    Prosze zapoznać się z funkcją WaitForMultipleObjects();

    Ćw. 11

    Problem 5-ciu filozofów - wersja z widelcami podnoszonymi kolejno.

    Ćw. 12

    Algorytm Dekkera.

    Ćw. 13

    Ćw. 14

    Ćw. 15
     
     



    Literatura i zasoby:

    [1]  Silberschatz A., Peterson L... : Podstawy systemów operacyjnych
    [2]  Ben-Ari M.: Podstawy programowania współbieżnego i rozproszonego
    [3]  Tannenbaum A.: Rozproszone systemy operacyjne
    [4]  Karmański J. : Praktyczny kurs programowania pod Windows 95
    [5]  MSDN,  http://msdn.microsoft.com
    [6] 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
     pioro(at)agh.edu.pl