[ mv. @ 13.01.2003. 19:54 ] @
zanima me princip rada schedulera na x86 arhitekturi. poželjna su low-level objašnjenja, i/ili objašnjenje na primjeru, npr. linuxu.
[ mv. @ 13.01.2003. 19:56 ] @
i da, da napomenem mislim na scheduler koji mijenja procese, da se neko ne prevari...
[ tOwk @ 14.01.2003. 10:38 ] @
Pa, x86 nema gotovo ništa naročito za raspoređivanje procesa (Intel terminologija ,,task'').

Sve što IA32 obezbeđuje (IA32 pošto tek od 80386 postoji) je TSS -- Task State Segment. To je naročita struktura koja sadrži stanje procesa: stanje svih registara procesora. I to je sve. Ona omogućava da se izvršavanje procesa nastavi pomoću odgovarajuće JMP, CALL ili RET instrukcije (možda ima još neki način, ko će se sad setiti; sve je podrobno opisano u Intelovoj dokumentaciji).

Ostalo zavisi od dodatnih uređaja (PIT, PIC) i nije naročito za IA32 arhitekturu.

Primer kako jednostavan round-robin scheduler se može implementirati na IA32 sam pisao ranije, i može se pogledati na http://alas.matf.bg.ac.yu/~mm01142/racunarstvo/programiranje

Ako nešto nije jasno, pogledaj i maturski rad (ima dva odeljka o scheduleru: jedan sa algoritmima, i drugi gde je kratko opisan kod), a svakako i pitaj na ovom forumu.


Napomena:
Svakako se nadam da ovaj forum neće otići u diskusiju o hardverskim arhitekturama, ili još gore, o hardverskoj arhitekturi IA32.
[ mv. @ 14.01.2003. 16:42 ] @
mislim da nisam bio dovoljno jasan. znam šta je tss. i ne, ne diskutujemo o hardverskim arhitekturama, ali bar ti dobro znaš da je arhitektura i njeno poznavanje presudno u pisanju bilo kakvog sistemskog softvera, a ne operativnog sistema.

zanima me šta uslovljava promenu procesa u određenom intervalu vremena? interupt? ako je interupt, koji, kakav / šta ga pravi?
[ Nikola Krivokapic @ 14.01.2003. 23:13 ] @
Kod linuxa je sustina ovo:proces ima svoje određeno vrijeme u jednoj epohi(linux vrijeme CPU-a djeli na epohe),svaki proces ima različitu dužinu trajanja tog qvantuma i kad se ona završi na totalno low levelu je taj CPU-ov timer interupt,poslije cega se invocira scheduler() sistemski poziv,koji bira sledeci proces iz liste TASK_RUNNING procesa,prema prioritetu koje moze i user postaviti.Timer interupt je implementiran pomocu PIT-a,linux ga postavlja na irq 0.
Ovo je suština zanimaju li te neki detalji,ako sam nešto pogriješio reci.
[ tOwk @ 15.01.2003. 03:13 ] @
Citat:
mv.:
mislim da nisam bio dovoljno jasan. znam šta je tss. i ne, ne diskutujemo o hardverskim arhitekturama, ali bar ti dobro znaš da je arhitektura i njeno poznavanje presudno u pisanju bilo kakvog sistemskog softvera, a ne operativnog sistema.

zanima me šta uslovljava promenu procesa u određenom intervalu vremena? interupt? ako je interupt, koji, kakav / šta ga pravi?


E pa meni se čini da jesi bio dovoljno jasan i da sam ja ispravno odgovorio.

Naime, onaj koji pravi scheduler može izabrati bilo kakav algoritam, čak i algoritam koji ne zavisi direktno od vremena.

Postoje i FIFO/FCFS scheduleri koji su povoljni za realtime aplikacije, a one se mogu lako implementirati bez ikakvog oslanjanja na vreme. Takođe, moguće je napraviti schedulere koji će procese prebacivati zbog nekih potpuno drugih aktivnosti (npr. čekanje na obradu IO zahteva, semafori bez vremena itd.)

Takođe, svaki algoritam za scheduler se može implementirati nezavisno od hardverske platforme (vidi OSKit u okviru Flux projekta, na http://www.cs.utah.edu/flux/), ili Linux scheduler algoritme. Stoga sam i naglasio da je ovo diskusija samo o TSS-u i IA32.

Takođe sam ti dao i nagoveštaj šta zapravo treba da pogledaš na IA32 arhitekturi ukoliko želiš da scheduler baziraš na vremenu: PIT -- Programmable Interval Timer. On ti obezbeđuje prekide (interapte) sa određenim vremenskim razmakom, ali ovo nema nikakve veze sa schedulerima, osim što se tiče konkretne implementacije na IA32. Čak sam pomenuo i gde možeš pogledati jednostavnu implementaciju svega ovoga.

U redu, možda sam preterao sa opštim odgovorom, ali ne želim da se misli da je jedini scheduler algoritam koji postoji RR (round-robin) i njegovi derivati, i da se deljenje vremena može obaviti samo na taj način. Moguće je da ti nijednog trenutka to i nisi mislio, ali neko sa strane ko čita ove poruke može steći takav utisak.

Nadam se da je od pomoći.
[ t3chX @ 17.05.2003. 04:00 ] @
Mislim da i Linux (pa i vecina oslanih *NIX-a) i Win NT koriste priority queue za rasporedjivanje procesa (scheduler). Pravila su veoma jasna: proces sa najnizim prioritetom (nisam siguran ali mislim da ih u Win NT-u ima ukupno 30 i nesto, s tim da su prvih 15 kernel initiated, ako se varam neka me neko ispravi) se salje na obradu prvi. U slucaju da su redu postoji vise procesa sa istim prioritetom, selekcija se vrsi na osnovu round-robin algoritma, koji opet zavisi od interapta ...
Dakle, jasno je da u multi-tasking (i multi-user) OS-ovima mora da postoji pre-emtive algoritam za rasporedjivanje kako procesa tako i memorije (virtualne pogotovo). Susta suprotnost je recimo implementacija print spooler-a, u kojoj je glavni adut FIFO, odnosno FCFS.