[OSy] Shrnuti OSu 2010/2011
Martin Decky
decky at d3s.mff.cuni.cz
Thu Oct 6 18:05:52 CEST 2011
Vazeni kolegove,
rad bych se s Vami podelil o zaverecne shrnuti semestralnich praci z OSu
2010/2011. Zamerne toto shrnuti posilam jiz v dalsim semestru a to
proto, aby se studenti, kteri maji predmet zapsan (nebo o tom uvazuji) v
akademickem roce 2011/2012, mohli poucit z nejcastejsich potizi v
minulem roce.
Organizacni poznamka
====================
Po tomto emailu budou z mailing listu hromadne odhlaseni studenti, kteri
meli predmet zapsan loni (prijde Vam o tom informacni email). Pokud si z
libovolneho duvodu prejete v mailing listu OSu zustat i nadale, muzete
se samozrejme opetovne prihlasit.
Lonsti studenti budou pote hromadne prihlaseni do mailing listu
Alumni-Announce, Alumni-Chat a Alumni-Offers, coz jsou minimal-traffic
konference, ktere slouzi k tomu, abychom mohli zustat i po absolvovani
predmetu nasi katedry v kontaktu. Pokud si neprejete v techto listech
byt (ve vsech nebo v kteremkoliv konkretnim), opet Vam samozrejme nic
nebrani odhlasit se. Strucna charakteristika:
Alumni-Announce -- moderovana konference pro ruzna skolni oznameni
(nove predmety, zmeny studijnich planu apod.)
Alumni-Char -- otevrena nemoderovana chatovaci konference
Alumni-Offers -- moderovana konference pro mimoskolni a komercni
nabidky (snazime se poustet jen konkretni relevantni
nabidky, ne HR agentury a spam)
Shrnuti semestralek 2010/2011
=============================
Z celkoveho poctu deseti lonskych skupin se dvema skupinam podarilo
dosahnout plneho poctu bodu (30), coz je jiste vysledek hodny oceneni.
Take se po delsi dobe podarilo uspesne odevzdat dve vyberova zadani
(implementace driveru souboroveho systemu ISO 9660 pro HelenOS a ovladac
CAN sbernice pro BeagleBoard). Prumerne hodnoceni semestralek bylo 23,1
bodu a vsichni studenti, kteri semestralku dokoncili, take ziskali
celkovou znamku z predmetu (tedy lepsi nez 4 :)).
Nejcastejsi vytky v hodnoceni semestralek byly tyto:
1) Zadne nebo nedostatecne testovani argumentu systemovych volani
-----------------------------------------------------------------
Nesvar, ktery se objevoval bohuzel i u jinak bezproblemovych skupin.
Jeden z hlavnich duvodu rozdeleni operacniho systemu na jadro a
uzivatelske procesy je prave "opevneni" nejkritictejsich casti celeho
softwaroveho stacku pred zamernymi i nahodilymi chybami jednotlivych
procesu. Bez tohoto "opevneni" by v mnoha pripadech davalo mnohem vetsi
smysl mit pouze jeden rezim procesoru, zapomenout na komplikovane
rozdeleni kernel/uspace a usetrit tak na overheadu systemovych volani.
Systemova volani predstavuji vstupni branu z "nebezpecneho sveta"
uzivatelskeho prostoru do "bezpecneho sveta" kernelu a jako takova musi
byt nalezite ochranena.
Neni proto dost dobre mozne predavat pomoci systemoveho volani nejaky
ukazatel na datovou strukturu a ten potom v kernelu bezelstne
dereferencovat, aniz by si kernel vubec overil, zda ukazatel miri na
dostatecne velkou a spravne namapovanou pamet procesu (a ne napriklad
nekam do kernelove pameti, kde se tak muze neco prepsat, nebo na
nenamapovanou pamet, coz pri naslednem pristupu zpusobi pad celeho kernelu).
I pokud tento zakladni test provedete, stale to nestaci k tomu, aby bylo
mozne verit, ze datova struktura s kernelovymi daty ulozena v
uzivatelskem prostoru obsahuje konzistentni zaznamy, se kterymi
uzivatelsky proces zamerne/nahodne nejak nemanipuloval. Mimochodem,
porovnani nejake magic hodnoty sice vypada na prvni pohled jako
dostatecne reseni, ale skutecnou konzistenci cele struktury to stale
nezarucuje.
Jeden z mala temer neprustrelnych zpusobu ochrany pred temito problemy
je predavat do uzivatelskeho prostoru pouze ciselne identifikatory
(handlery) kernelovych dat. Je-li to jen trochu mozne, tak by tyto
handlery mely zit v izolovanem jmennem prostoru pro kazdy proces
(alternativne je mozne overovat spravneho vlastnika handleru) a mely by
byt unikatni v case.
2) Omezeni poctu adresovych prostoru konstantou
-----------------------------------------------
Polovina skupin si velmi zjednodusila praci na memory managementu tim,
ze vubec neresila otazku vhodneho pridelovani ASIDu, existuje-li v
systemu v jeden okamzik vice nez 254 adresovych prostoru. V nekterych
pripadech byl proste pocet adresovych prostoru omezen konstantou (nekdy
dokonce ne jen pro jeden okamzik, ale celkove). V jinych pripadech byl
pro nektere nebo vsechny adresove prostory vyhrazen jeden spolecny ASID,
coz nutne vedlo k nutnosti delat kompletni TLB flush pri kazde zmene
adresoveho prostoru (a tedy k netrivialnimu zpomaleni celeho systemu).
Pridelovani ASIDu adresovym prostorum je typicky problem dobre resitelny
napriklad algoritmem LRU. Jedna se o reprezentanta dulezite tridy uloh,
ktere se v operacnich systemech resi, a proto trvame na poctivem reseni.
Zakladni zadani sice hovori o tom, ze lze omezit pocet oblasti v kazdem
adresovem prostoru konstantnou, ale pocet adresovych prostoru jako
takovych (stejne jako treba pocet vlaken) by mel byt omezen pouze
aktualne dostupnou pameti.
3) Coding style
---------------
V pripade jednoclennych projektu nemusi byt dodrzovani coding style tak
zasadni problem, ale u tymove prace rozsahu semestralky z OSu uz bylo
patrne, ze neprehlednost zdrojaku vyrazne rostla prave tam, kde byly v
implementaci nejvetsi problemy. Obzvlaste neprijemny pohled byl na
soubory doslova "zablesene" zakomentovanym mrtvym kodem, ktery mozna
nekdy k necemu byl (treba pro ladeni nebo prototypovani), ale aktualne
uz k nicemu neslouzil a jen stal v ceste.
Pochopitelne nelze obecne rici, ze by subjektivne horsi esteticke
kvality zdrojaku nutne vedly k vetsimu poctu chyb, ale neprehledne
zdrojove kody urcite zpusobuji, ze se chyby hure hledaji. Zatimco krasne
upraveny, opticky prehledny a na prvni pohled pochopitelny zdrojak
(kratke "samovysvetlujici" funkce, rozumne popisne nazvy promennych,
dodrzovani jmennych konvenci atd.) se snadno cte a snadno se o nem
rozhoduje, zda je spravne, hledani chyb v neprehlednem zdrojaku muze
doslova vypadat jako "hledani jehly v kupce sena".
4) Provazanost referencni a rucne psane dokumentace
---------------------------------------------------
Prestoze uroven rucne psane i referenci dokumentace byla opravdu velmi
ruznoroda, i kvalitni dokumentace casto postradala lepsi provazanost
obou slozek -- jako by se rucne psana i referencni dokumentace vubec
netykala stejneho projektu. Pritom neni nic snazsiho nez vyuzit
hypertextovych odkazu a z high-level popisu v rucne psane dokumentaci
ctenare odkazat na konkretni mista v referencni dokumentaci, kde si muze
precist, jak vypada programatorske API a dalsi low-level podrobnosti.
Pri generovani referencni dokumentace take neni prilis dobry napad
pustit Doxygen nebo podobny nastroj na kernelove i uspace zdrojaky
dohromady. Tyto dokumentacni nastroje jsou totiz vetsinou navrzeny pro
praci s jednim ucelenym projektem a logicke rozdeleni kernel/uspace
prilis "nechapou" (nota bene pokud se v kernelu i uspace pouzivaji
stejne pojmenovane funkce, hlavickove soubory apod., pokazde vsak
implementovane jinak a jinde). Mit samostatnou referencni dokumentaci
pro kernel a uspace je rozhodne lepsi a pritom trivialni reseni.
M.D.
More information about the NSWI004
mailing list