Uvod
Upravljač simulirati jednom dretvom u jednom procesu (programu), a ulaze simulirati drugim programom.
Predložak koji se može (ali i ne mora) koristiti za izradu vježbe dan je u repozitoriju.
| simulator upravljača | ulaz-1: ← zahtjev ← → odgovor → | simulator ulaza |
| ulaz-2: ← zahtjev ← → odgovor → | ||
| ... | ||
| ulaz-N: ← zahtjev ← → odgovor → |
Za svaki ulaz treba definirati:
- trenutak
t0prve pojave događaja na ovom ulazu (relativno u odnosu na pokretanje simulacije ulaza) - trajanje obrade
C. - rok završetka
D. - periodu
Tu kojoj se promjena događa (očekivano:C<D<T)
U simulaciji treba pratiti statistiku vremena potrebnog od promjene stanja do započinjanja obrade, te do kraja obrade. Obrade koje su završile prekasno dodati u statistiku neobrađenih promjena ulaza (ali ih obračunati u statistici). Razlikovati kašnjenja nakon roka (D) i veća kašnjenja nakon periode (T).
Skica rješenja
Pseudokod simulatora
upravljač
{
dok nije označen kraj simulacije {
za i=0 do br_ulaza-1 {
ako je (promjena na ulazu "i") {
zabilježi trenutak reakcije
simuliraj obradu ulaza "i" (sleep)
označi da je obrada gotova
}
}
}
}
simulator ulaza
{
dok nije označen kraj simulacije {
za i = 1 do N { //za svaki ulaz
ako je (ulaz "i" nije još aktivan) {
ako je (je li došlo vrijeme aktivacije?) {
postavi zahtjev na ulaz
zabilježi trenutak zahtjeva
označi si da je ulaz sad aktivan
}
}
inače {
//znači da je ulaz aktivan, čekam odgovor
ako je dobiven odgovor {
//je li dobiven na vrijeme (prije D)?
//ažuriraj statistiku
//pripremi ulaz za iduću pojavu
}
inače {
ako je (odgovor kasni za više od T) {
povećaj "nema odgovora" u statistici
//možda još nešto, npr. .iduća_pojava += T
//ipak čekaj taj odgovor, ne slati novi zahtjev
}
}
}
}
odspavaj 1 ms (u simulaciji)
}
//na kraju
izračunaj i ispiši statistiku po svakom ulazu te sumarno za sve
}
Koraci u rješavanju
Ispitni primjeri
Minimalno treba napraviti šest primjera ulaza (tj. načina događaja na njima):
- samo jedan periodički ulaz
- normalan:
C<D<T - loš:
D<C<T(Dse prekoračuje, ali ipak obavlja prijeT) - jako loš:
D<T<C(bar svaki drugi neće stići) - nekoliko zadataka (npr. tri/četiri)
- normalni sustav - sve se stigne prije
D - neki ne stignu do
D, ali svi prijeT - neki ne stignu do
T
#id prio first T C D inp-1 5 20 100 10 50 inp-2 6 30 300 20 100 inp-3 1 80 200 30 100 inp-23 4 70 500 50 50 inp-11 7 50 900 15 100onda bi početak rada sustava trebao izgledati:
t što procesor radi 0 - 5 - 10 - 15 - 20 PROMJENA inp-1 20 inp-1 počinje obrada 25 inp-1 (u obradi) 30 inp-1 gotov 30 - (ovo se može i ne mora dogoditi) 30 PROMJENA inp-2 (može i prije, vidi t=50) 30 inp-2 počinje obrada 35 inp-2 (u obradi) 40 inp-2 (u obradi) 45 inp-2 (u obradi) 50 PROMJENA inp-11 50 inp-2 gotov 50 inp-11 počinje obrada 55 inp-11 (u obradi) 60 inp-11 (u obradi) 65 inp-2 gotov 65 - 70 PROMJENA inp-23 70 inp-23 počinje obrada 75 inp-23 (u obradi) 80 PROMJENA inp-3 80 inp-23 (u obradi) 85 inp-23 (u obradi) 90 inp-23 (u obradi) 95 inp-23 (u obradi) 100 inp-23 (u obradi) 105 inp-23 (u obradi) 110 inp-23 (u obradi) 115 inp-23 (u obradi) 120 PROMJENA inp-1 120 inp-23 (u obradi) 125 inp-23 (u obradi) 130 inp-23 gotov 130 inp-1 počinje obrada (*zašto inp-1 a ne inp-3? komentar ispod) [...]U
t=130 dva ulaza čekaju obradu, inp-3 koji se javio u t=80 i inp-1 koji se javio u t=120.
Bolje bi bilo da se ulazi obrađuju po redu prispijeća ili da se koriste prioriteti.
Ali ovdje se ne koristi ni jedno ni drugo - upravljač redom pregledava ulaze nakon što obradi prethodni - on nema informaciju što se prije dogodilo. Zato u ovom primjeru, prema gornjem pseudokodu upravljača, nakon inp-23 idući u nizu je inp-11, pa onda opet ispočetka, inp-1, inp-2, inp-3...
Simulacije napraviti do trenutka kad konačno dođe do izražaja željeno svojstvo sustava (npr. da svi obave prvi puta sve, ili neki zadatak prekorači rok D ili T).
Simulacije postaviti u repozitorij, u datoteke test-x.txt, gdje x zamijeniti rednim brojem. Na početku postaviti opis sustava. Npr. za prikazani primjer, datoteka bi mogla biti test-5.txt:
#id prio first T C D inp-1 5 20 100 10 50 inp-2 6 30 300 20 100 inp-3 1 80 200 30 100 inp-23 4 70 500 50 50 inp-11 7 50 900 15 100 t što procesor radi 0 - 5 - 10 - 15 - 20 PROMJENA inp-1 20 inp-1 počinje obrada [...]
Programi
Provjeriti da programi rade ispravno, prema prethodnim simulacijama.
U repozitorij postaviti samo izvorne kodove i tražene datoteke sa ispitnim primjerima - ne i međurezultate prevođenja, ne izvršne verzije programa. Ukoliko koristite neki IDE koji stvara dodatne datoteke, njih ne postavljati u repozitorij!