[OSy] Rozsirene zadani 1.
Martin Decky
decky at dsrg.mff.cuni.cz
Fri Nov 14 15:50:55 CET 2008
Hezky den,
> mel bych dotaz predevsim na cvicici, zda by bylo mozne usporadat
> vyjimecne cviceni z OSu zamerene na rozirene zadani 1 - predevsim na
> to, jak pracovat s vice procesory v msimu a jak vubec zacit s
> prechodem na viceprocesorove reseni (vim, ze manual zna odpoved asi na
> vse, ale teorie a praxe je casto dost odlisna).
Urcite bychom toto cviceni usporadat mohli. Navrhuji termin utery
25. 11. tradicne v 17:20 (bohuzel drive to asi nepujde, na utery 18. 11.
i ctvrtek 20. 11. jiz mam jiny program). Pokud se tedy neobjevi nejake
zasadni protesty proti tomuto terminu, tak s tim muzete pocitat.
> Jde mi predevsim o to, ze k zakladnimu reseni je k dispozici v Kalistu
> prakticky od vseho "neco" a da se s tim dobre pracovat. Bohuzel o
> viceprocesorovem reseni Kalisto nic netusi a pri implementaci bude
> treba sahat a menit Kalisto, jak tak predpokladam, i hluboko v
> netrivialnich neCeckovskych rutinach, ktere pouziva.
Nejake netrivialni zasahy budou opravdu potreba. Ale snazili jsme se na
vsechna takova mista v Kalistu upozornit v komentarich (obcas i se
zakladnim popisem myslenky, co udelat). Krome toho se musite rozhodnout,
zda budete svuj system koncipovat jako zcela preemptivni (coz je stejne
asi nejlepsi cesta pro rozumnou implementaci blokujicich syscallu apod.)
nebo pouzijete nejake reseni typu "big kernel lock".
> Na cviceni by nas tym zajimalo predevsim - jak upravit bootovaci cast,
> aby si jednotlive startujici procesory neprepsali kontext/zasobnik.
> Dale jak modifikovat scheduler a jak pracovat s prerusenimi, ktera
> mohou chodit od vsech proceosru nezavisle.
Podle toho, co pisete, je videt, ze netapete uplne v mlze, ale spravne
tusite, kde jsou ostre hrany, na ktere je potreba davat pozor. Takze
pokud by nekomu stacil strucny navod na vyse polozene otazky:
1. Pri bootovani je potreba pomoci zarizeni dorder zjistit, na kterem
procesoru zrovna bezite. Pokud bezite na procesoru 0, tak pokracujete
v inicializaci kernelu, memory managementu atd., zatimco na ostatnich
procesorech budete cekat (klidne v aktivni smycce), az bude kernel
v takovem stavu, kdy muzete ostatni procesory "pustit dal".
Signal ostatnim procesorum (pri bootu a pripadne i jinde) predate opet
pomoci zarizeni dorder, kterym lze posilat vyjimky mezi procesory (na
platforme Intel se tomuto mechanismu obvykle rika "interprocessor
interrupt"). Nebootovaci procesory uz vetsinou nic specialniho
neinicializuji, ale pokracuji rovnou do (sve instance) planovace.
2. Kazdy procesor musi mit vzdy svuj privatni zasobnik a kontext (to se
tyka i statickych bootovacich zasobniku a "safe place", ktere se pouziva
pri obsluze preruseni). Pokusy z lonska, kdy se nektere skupiny snazily
o temporalni (casove) a nikoliv prostorove oddeleni zasobniku, vedou
vetsinou do pekel (nehlede na to, ze je to ve skutecnosti slozitejsi nez
to delat tim nejintuitivnejsim zpusobem).
Pri obsluze preruseni muzete pouzivat registry k0 a k1 a pomoci nich
zjistit ze zarizeni dorder (aniz byste museli sahat kamkoliv jinam do
pameti), na kterem procesoru prave bezite, a podle toho zvolit vhodny
zasobnik nebo "safe place".
3. Planovac ma typicky pro kazdy procesor svou nezavislou instanci, coz
samozrejme vyzaduje vhodnym zpusobem zamykat struktury planovace (ready
fronty atd.), pripadne mit pro kazdy procesor nezavislou frontu.
4. Velmi dulezita je spravna implementace synchornizacnich primitiv, aby
skutecne fungovaly pri SMP behu spravne. Nemene dulezite je pochopitelne
dusledne synchronizovani pristupu ke vsem sdilenym datovym strukturam.
V SMP konfiguraci mohou nastat nektere soubehy, ktere v UP systemu jsou
z principu vylouceny -- vsechno je tedy potreba dukladne promyslet do
vsech dusledku.
M.D.
More information about the NSWI004
mailing list