Forum Informatyka UJ forum Strona Główna Informatyka UJ forum
Rocznik 2005 - czyli najlepsze forum w sieci
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

[ćwiczenia mgr Trojanek: 16-18] Notatki z zajęć 19.05

 
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 semestr - Systemy Operacyjne
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
BU
[świeżak]



Dołączył: 16 Lis 2005
Posty: 15
Przeczytał: 0 tematów

Skąd: Bytom

PostWysłany: Pią 17:46, 19 Maj 2006    Temat postu: [ćwiczenia mgr Trojanek: 16-18] Notatki z zajęć 19.05

Mam nadziję, ża bez gUpich błędów :P

SYSTEMY OPERACYJNE | cw. 19.05.2006 |
=========================================================

0. PROBLEM FILOZOFOW (je tylko jeden naraz)

bool filozofowie[1..5] = false; // czy czeka
czyKtosJe = false;

chceJesc(){
if czyKtosJe {
filozofowie[id] = true;
filozofowie[id].wait();
}
}

chceMyslec(){
czyKtosJe = false;
i = id;
for (1; i<=4; k = (i+j) mod 5) + 1) {
if filozofowie[k] == true {
filozofowie[i].notify()
filozofowie[i] = false;
}
}

}

=========================================================

1. inne rozwiązanie problemu filozofów

- sprawdzaj czy po lewej stronie ktos czeka: TAK -> czekaj

- konczas jesc puszczaj prawa strone

/do domciu!/

=========================================================

2. PROBLEM JEDZACYCH DZIKUSOW (bo się mnożą)

dane są:
- garnek z porcjami, z ktorego dzikusy jedza
- dzikusy jedza lapami
- dowolna ilosc moze jesc naraz
- PROBLEM SOIE POJAWIA, KIEDY GAR JEST PUSTY
- kiedy gar jest pusty, budzi sie dzikusa-kucharza ktory idze po misjonarza i przyzadza go w garze
- kiedy kucharz przygotowywuje misjonarza, to dzikusy nie moga jesc
- kucharz laduje zawsze potrzebna liczbe porcji

ROZWIAZANIE:

dzikus{
->chceJesc()
jedzenie()
->skonczylJesc()
iloscJedzacych--;
if IloscJedzacych = 0 {notify(iloscJedzacych)}
}

kucharz{
->musiUpichcic()
pichci()
-> upichcil()
kociol.notify();
kucharzSpi = true;
wait(kucharz);
}

bool pusty
iloscJedzacych=0

dzikus.chceJesc(){
notify(kucharz)
while ilosc = 0 {
if kucharzSpi {kucharz.obudzGo() }
kociol.wait()
}
kociol.notify()
ilosc--;
iloscJedzacych++;
}

kucharz.musiUpichcic(){
kucharzSpi = false;
if iloscJedzacych > 0 {wait(iloscJedzacych)}
}

// kolejkowac wg czasu zgloszenia

==============================================

3. KOLEJNE ZAD. DO DOMU:

/z książki: "Little book of semaphores"/

"problem św. Mikoła"

- św. Mikołaj śpi a wtedy elfy przygotowywują zabawki a renifery są na wczasach
- elfy nie zawsze sobie radzą - jak ma problem to idzie do Mikołja. Ponieważ elfy się boją Mikołaja, to czekają aż 3 elfy się zbiorśą na raz i budzą Mikołaja)
- jak 9 reniferow wroci z wczasow, to budza Mikolaja, bo zbliza sie gwiazdka i Mikolaj idzie obsl. samnie
- jezeli jest 9 ren. i 3 elfy to priorytet ma przygotowanie san

// zaimplementowac to :)
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
nathaniel
pijak



Dołączył: 25 Paź 2005
Posty: 229
Przeczytał: 0 tematów

Skąd: Bielsko-Biała

PostWysłany: Pią 19:06, 19 Maj 2006    Temat postu:

Fajny pomysł na robienie notatek na bieżąco. Ciekawe czy przeszłoby to u innych ćwiczeniowców?
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Sobek
pijak



Dołączył: 06 Lut 2006
Posty: 323
Przeczytał: 0 tematów

Skąd: Lubaczów / ds16

PostWysłany: Pon 1:07, 22 Maj 2006    Temat postu:

Dzieki :)
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
BU
[świeżak]



Dołączył: 16 Lis 2005
Posty: 15
Przeczytał: 0 tematów

Skąd: Bytom

PostWysłany: Wto 14:24, 23 Maj 2006    Temat postu:

Też proszono, bym umieślił... Czytelnicy-pisarze, wersja poprawiona:

/* PROBLEM CZYTELNIKÓW I PISARZY */

// Wersja z zapobieganiem wystąpienia zagłodzenia i zakleszczenia

boolean czyPisze = false;
int ileCzyta = 0;

int licznikCzyt = 0; // licznik czytelników oczekujących na kolejce
int licznikPis = 0; // licznik pisarzy oczekujących na kolejce

/*
Generalnie jeżeli:
- żaden watek nie działa i czytelnik/pisarz chce wejsc, to wchodzi
- jezeli jakies watki działają, to wątek chcący wejść zawiesza się
na odpowiedniej kolejce
- jeżeli czytelnik wychodzi, to sprawdza, czy istnieje pisarz chcący
wejść i jeżeli tak, to uruchamia go. Jeżeli nie istnieje pisarz, ale
istnieją czytelnicy, to uruchamia ich wszystkich
- analogicznie postępuje pisarz przy wychodzeniu...

A zatem:
- nie wystąpi zagłodzenie, bo czytelnicy i pisarze uruchamiają się
naprzemiennie
- zakleszczenie z w/w powodów też nie wystąpi
*/

void chceCzytac(){
if ((czyPisze) || (licznikPis != 0)){
licznikCzyt++;
wait(kolCzyt);
}
ileCzyta++;
}

void skonczylCzytac(){
ileCzyta--;
if (ileCzyta == 0){
if (licznikPis > 0){
notify(kolPis);
licznikPis--;
} else {
while (licznikCzyt > 0){
licznikCzyt--;
notify(kolCzyt);
}
}
}
}

void chcePisac(){
if ((czyPisze) || (ileCzyta != 0)){
licznikPis++;
wait(kolPis);
}
czyPisze = true;
}

void skonczylPisac(){
czyPisze = false;
if (licznikCzyt > 0){
while (licznikCzyt > 0){
licznikCzyt--;
notify(kolCzyt);
}
} else {
if (licznikPis > 0){
licznikPis--;
notify(kolPis);
}
}

/* HAPPY END */
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Sobek
pijak



Dołączył: 06 Lut 2006
Posty: 323
Przeczytał: 0 tematów

Skąd: Lubaczów / ds16

PostWysłany: Wto 16:38, 23 Maj 2006    Temat postu:

Super :]
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 semestr - Systemy Operacyjne Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin