ОС1/Модификације август 2023 — разлика између измена
м (K0v4c преместио је страницу OS1/Modifikacije avgust 2023 на ОС1/Модификације август 2023) |
|||
(Нису приказане 4 међуизмене 2 корисника) | |||
Ред 3: | Ред 3: | ||
== Modifikacija za 20 bodova == | == Modifikacija za 20 bodova == | ||
* Implementirati sistemski poziv <code>int getThreadId()</code> koji dohvata jedinstveni identifikator niti koja se trenutno izvršava. <code>getThreadId()</code> takođe '''treba da obavi promenu konteksta'''. (za ovaj deo pogledati [https://siwiki.rs/wiki/%D0%9E%D0%A11/%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%98%D0%B5_%D1%98%D1%83%D0%BB_2022 modifikaciju iz jula 2022.]) | |||
Potrebno je | Potrebno je proširiti usluge klase Thread tako da zadovoljava sledeće uslove | ||
Dodati | * Dodati statičku metodu <code>SetMaximumThreads(int num_of_threads)</code> koju korisnik poziva na početku programa. Ova metoda postavlja ograničenje na maksimalan broj '''korisničkih''' niti. Ukoliko korisnik ništa ne unese, podrazumevana vrednost je 5. | ||
Nakon postavljanja maksimalnog broja niti, | Nakon postavljanja maksimalnog broja niti, moguce je kreirati dati broj niti, nakon toga sve novokreirane niti se blokiraju. Kada jedna od kreiranih korisničkih niti završi svoje izvršavanje ona odblokira jednu od prethodno blokiranih niti u redosledu kojem su blokirane. | ||
=== Test === | === Test === | ||
Potrebno je staviti maksimalan broj niti na 3 i kreirati 20 niti. Svaka nit treba da | Potrebno je staviti maksimalan broj niti na 3 i kreirati 20 niti. Svaka nit treba da ispiše <code>Hello! Thread::myId </code> ciklično 5 puta. Nakog toga treba da simulira spavanje semaforom ili busy wait-om koji je u linearnoj korelaciji sa ID-om date niti. | ||
== Modifikacija za 30 bodova == | == Modifikacija za 30 bodova == | ||
Dodati | Dodati statičku metodu <code>SetMaximumThreads(int num_of_threads, int max_time, int interval_time)</code> koju korisnik poziva na početku programa. Ova metoda postavlja ograničenje na maksimalan broj '''korisničkih''' niti. | ||
Nakon pozivanja metode <code>SetMaximumThreads(int num_of_threads, int max_time, int interval_time)</code> | Nakon pozivanja metode <code>SetMaximumThreads(int num_of_threads, int max_time, int interval_time)</code> moguće je kreirati slobodno kreirati num_of_threads niti. Nakon toga naredne niti se blokiraju. Kada nit završi svoje izvršavanje ona prestaje sa radom (ove niti '''ne treba''' da deblokiraju prethodno blokirane niti). Nakon isteka max_time vremena potrebno je ispisati '''Waiting done: ''', i zatim odblokirati niti jednu za drugom onako kako suu blokirane pritom da se izmedju 2 deblokiranja čeka interval_time vremena. Posle svakog deblokiranja niti treba ispisati '''Interval time elapsed '''. | ||
=== Test === | === Test === | ||
Potrebno je pozvati <code>SetMaximumThreads(3 20, 10)</code> i kreirati 20 niti. Svaka nit treba da | Potrebno je pozvati <code>SetMaximumThreads(3, 20, 10)</code> i kreirati 20 niti. Svaka nit treba da ispiše svoje ime + ID. Nakon toga treba nit da pozove <code>thread_sleep(10)</code>. Ovo se ponavlja dok sve niti ne završe. | ||
[[Категорија:ОС1]] | [[Категорија:ОС1]] | ||
[[Категорија:Лабораторијске вежбе]] | [[Категорија:Лабораторијске вежбе]] |
Тренутна верзија на датум 8. септембар 2023. у 12:29
Sledeće modifikacije su se pojavile na odbrani projekta u avgustu 2023.
Modifikacija za 20 bodova
- Implementirati sistemski poziv
int getThreadId()
koji dohvata jedinstveni identifikator niti koja se trenutno izvršava.getThreadId()
takođe treba da obavi promenu konteksta. (za ovaj deo pogledati modifikaciju iz jula 2022.)
Potrebno je proširiti usluge klase Thread tako da zadovoljava sledeće uslove
- Dodati statičku metodu
SetMaximumThreads(int num_of_threads)
koju korisnik poziva na početku programa. Ova metoda postavlja ograničenje na maksimalan broj korisničkih niti. Ukoliko korisnik ništa ne unese, podrazumevana vrednost je 5.
Nakon postavljanja maksimalnog broja niti, moguce je kreirati dati broj niti, nakon toga sve novokreirane niti se blokiraju. Kada jedna od kreiranih korisničkih niti završi svoje izvršavanje ona odblokira jednu od prethodno blokiranih niti u redosledu kojem su blokirane.
Test
Potrebno je staviti maksimalan broj niti na 3 i kreirati 20 niti. Svaka nit treba da ispiše Hello! Thread::myId
ciklično 5 puta. Nakog toga treba da simulira spavanje semaforom ili busy wait-om koji je u linearnoj korelaciji sa ID-om date niti.
Modifikacija za 30 bodova
Dodati statičku metodu SetMaximumThreads(int num_of_threads, int max_time, int interval_time)
koju korisnik poziva na početku programa. Ova metoda postavlja ograničenje na maksimalan broj korisničkih niti.
Nakon pozivanja metode SetMaximumThreads(int num_of_threads, int max_time, int interval_time)
moguće je kreirati slobodno kreirati num_of_threads niti. Nakon toga naredne niti se blokiraju. Kada nit završi svoje izvršavanje ona prestaje sa radom (ove niti ne treba da deblokiraju prethodno blokirane niti). Nakon isteka max_time vremena potrebno je ispisati Waiting done: , i zatim odblokirati niti jednu za drugom onako kako suu blokirane pritom da se izmedju 2 deblokiranja čeka interval_time vremena. Posle svakog deblokiranja niti treba ispisati Interval time elapsed .
Test
Potrebno je pozvati SetMaximumThreads(3, 20, 10)
i kreirati 20 niti. Svaka nit treba da ispiše svoje ime + ID. Nakon toga treba nit da pozove thread_sleep(10)
. Ovo se ponavlja dok sve niti ne završe.