background image

EGZAMIN SO   

ODPOWIEDZI PODLEGAJĄ DYSKUSJI!!

 

   

Data: 05-02- 2011

 

Nazwisko i imię...

Pepsi.

...... 

 

I. W systemie Windows uruchamiamy dwa wątki: watek1 i watek2. Globalna zmienna tekst zadeklarowana jest jako 
CString. Jaka będzie jej zawartość po zakończeniu pracy obu wątków? (1)

 

Odp.

 

BAC

……………………………………………………………………………………………………………………………………………………. 

UINT watek1(void * pr)  
{  
    CEvent e1(0,0,_T("zdarzenie1"));  
    CEvent e2(0,0,_T("zdarzenie2"));  
    CSingleLock SL(&e2);  
    SL.Lock();  
    tekst+="A";  
    e1.SetEvent();  
    return 0;  
}  
 

UINT watek2(void *p2)  
{  
    CEvent e1(0,0,_T("zdarzenie1"));  
    CEvent e2(0,0,_T("zdarzenie2"));  
    tekst+="B";  
    e2.SetEvent();  
    CSingleLock SL(&e1);  
    SL.Lock();  
    tekst+="C";  
    return 0;  
}  

II. Dane są 2 grupy procesów A i B. Proces typu A uzyskuje dostęp do zasobu Z1, następnie do zasobu Z2. Proces typu B uzyskuje 
dostęp tylko do zasobu Z2. Zasób Z1 może być współużytkowany przez 1 proces, zaś zasób Z2 – przez 2 procesy. Uzupełnij, 
korzystając z funkcji semaforowych standardu POSIX (4): 

void procesA(void) { 

 

while(1) { 

 

 

dostep(Z1); 

 

void procesB(void) { 

 

while(2) { 

 

 

dostep(Z1); 

 

 

dostep(Z2); 

 

III.  W  chwili  T=0s  uruchomiono  proces  A,  o  czasie  trwania  30ms  i  priorytecie  20.  W  T=20ms  uruchomiono  dwa 

procesy B i C, z których kaŜdy zajmuje 15ms czasu procesora i ma  wyŜszy od A priorytet równy 10. Proces C po 
10ms  działania  został  przerwany,  z  jednoczesnym  uruchomieniem  procesu  potomnego  D  o  priorytecie  25  i  czasie 

trwania  5ms.  Narysować  diagram  Gantta  dla  szeregowania  priorytetowo-karuzelowego  z  wywłaszczaniem,  kwant 

czasu wynosi 10ms, do dyspozycji jest jeden procesor, a kaŜdy proces składa się z jednego wątku. (1) 

  | 10| 20| 30| 40| 

45

55

60

| 80| 90|100|110|120|130|140ms 

 

IV. W systemie Windows uruchamiamy kilka wątków korzystających ze wspólnego ekranu do wyświetlania wyników. 
Utworzono specjalną funkcję WypiszWynik, która wyświetla wynik s i za pomocą obiektu synchronizacji typu 
CCriticalSection

 synchronizuje procesy. Uzupełnij jej kod. (2) 

 

#define WM_WIADOMOSC (WM_USER+100)

CCriticalSection CS;

CEvent wynikwyswietlony;  

void WypiszWynik(char *s) 
{
  

CS.Lock(); // blokujemy sekcje krytyczna

 

 AfxGetMainWnd()->PostMessage(

WM_WIADOMOSC, 1);  // wysylamy wiadomosc do aplikacji   

    // przyjalem, ze wartosc przeslanego parametru = 1 oznacza, ze wiadomoscs jest wyslana 

  printf(s);

  CSingleLock SL(0,0,"&wynikwyswietlony"); 
  SL.Lock();// oczekujemy na zdarzenie oznaczajace odczytanie
    //wiadomosci przez watek glowny i pozwolenie na opuszczenie sekcji krytycznej.

  CS.Unlock(); //opuszczamy sekcje krytyczna

 
 

 

 

     A     A       B       C      B       A       D

ogólnie to treść zadanie nie zgadza sie z kodem, albo ja nie ogarniam tego zupelnie.

nie jestem pewny tego rozwiazania 
to co jest na szaro mozna pominac (to byla moja chec trzymania sie tego co 
bylo na labach - bez potrzeby

+100 oznacza, ze meldunek bedzie w formie int

background image

 

(*=$0,1 : 62

2'32:,('=,32'/(*$-Ą'<6.86-,

'DWD







'DWD……………….



1D]ZLVNRLLPLę....

Pepsi

........................................ 

 

I. W systemie Windows uruchamiamy dwa wątki: watek1 i watek2. Globalna zmienna tekst zadeklarowana jest jako CString. Jaka 
będzie jej zawartość po zakończeniu pracy obu wątków? (1)

 

 

Odp. ………

XZY

………………………………………………………………………………………………………………………………………………. 

UINT watek1(void * pr)  
{  
    CEvent e1(0,0,_T("zdarzenie1"));  
    CEvent e2(0,0,_T("zdarzenie2"));  
    tekst+="X";  
    e2.SetEvent();  
    CSingleLock SL(&e1);  
    SL.Lock();  
    tekst+="Y";  
    return 0;     
}  

UINT watek2(void *p2)  
{  
    CEvent e1(0,0,_T("zdarzenie1"));  
    CEvent e2(0,0,_T("zdarzenie2"));  
    CSingleLock SL(&e2);  
    SL.Lock();  
    tekst+="Z";  
    e1.SetEvent();  
    return 0; 
}  

II. Dane są 2 grupy procesów A i B. Proces typu A uzyskuje dostęp do zasobu Z1, następnie do zasobu Z2. Proces typu B uzyskuje 
dostęp tylko do zasobu Z2. Zasób Z1 może być współużytkowany przez 2 procesy, zaś zasób Z2 – przez 1 proces. Uzupełnij, 
korzystając z funkcji semaforowych standardu POSIX: (4) 

void procesA(void) { 

 

while(2) { 

 

 

dostep(Z1); 

 

 

dostep(Z2); 

 

void procesB(void) { 

 

while(1) { 

 

 

dostep(Z1); 

 

III.  W  chwili  T=0s  uruchomiono  proces  A,  o  czasie  trwania  30ms  i  priorytecie  20.  W  T=20ms  uruchomiono  dwa 
procesy B i C, z których kaŜdy zajmuje 20ms czasu procesora i ma  wyŜszy od A priorytet równy 10. Proces C po 

10ms  działania  został  przerwany,  z  jednoczesnym  uruchomieniem  procesu  potomnego  D  o  priorytecie  15  i  czasie 
trwania  10ms.  Narysować  diagram  Gantta  dla  szeregowania  priorytetowo-karuzelowego  z  wywłaszczaniem,  kwant 

czasu wynosi 10ms, do dyspozycji jest jeden procesor, a kaŜdy proces składa się z jednego wątku. (1) 

  | 10| 20| 30| 40| 50| 60| 70|

 80| 90|100|110|120|130|140ms 

 

IV. W systemie Windows uruchamiamy kilka wątków korzystających ze wspólnego ekranu do wyświetlania wyników. 
Utworzono specjalną funkcję DisplayResult, która wyświetla wynik s i za pomocą obiektu synchronizacji typu 
CCriticalSection

 synchronizuje procesy. Uzupełnij jej kod. (2) 

 

void DisplayResult(char *s) 

 
  static CCriticalSection cs;
 

 CSingleLock sl(&cs);

 

  sl.Lock();

  printf(s); 

  sl.Unlock(); 

 
 

 



          A        A        B         C         B         D        A

tak krotko wygladaloby poprzednie rozwiazanie gdyby nie robic tak stricte jak 
bylo na labkach