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
}
1
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
(*=$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