Pridať komentár

Príspevok, na ktorý odpovedáte

Re: pre ventyla a samaela 28.01.2009 | 22:33
Avatar vid   Používateľ

pretecenie zasobnika sa da vcelku elegantne riesit v obsluhe page faultu (vypadne mi stranka, v strukture OS o beziacom procese mam poznacene hranicnu stranku zasobnika, ak ide prave o tuto stranku, zostrelim proces so stack overflow, event. segfaultom)

Nesuhlasim:
1. pretecenie zasobniku sa nemusi prejavit hned na prvej stranke. Kludne sa moze stat ze funkcia ma obrovske lokalne premenne (velky objekt / alloca() v C++ napriklad), a ze sa chyti o stranku-dve dalej. Mozes to riesit sice tak ze tu hranicu das "dost velku", ale stale to nieje ono, vid dalsie body.
2. kludne moze stat ze do tej stranky "sahnes" inak ako pri preteceni - napriklad blba aritmetika s pointrom na nieco co je na zasobniku.
3. takisto to nezachyti pripad ked sa podari dosrat stack pointer.
... proste, podla mna by taketo riesenie bolo dost slabe

s protekciou, ak pouzivas lokalne page directories a page tables (dufam, ze som sa teraz nesekol, ale mam dojem, ze take cosi u x86 existuje, uz som to fakt hodne davno nevidel), by si tiez tak tazky problem mat nemal, okrem toho, ak mas 4gb linearny code / data / stack segment, tiez tam moc s ochranou pamate neporiesis.

Neviem co myslis pod lokalnymi page tables. Kazdy proces ma svoju tabulku stranok + kernel ma svoju, a tieto sa prepinaju podla potreby. Protekciou som nemyslel ochranu pamate, ale skor veci akoze v akom ringu bezis, ako ich bezpecne prepinat, kto moze pristupovat na ktore I/O porty, kto ma pravo volat ktore sluzby a tieto veci (CPL, DPL, RPL, IOPL). Jasne ze by to islo riesit pre klasicke dnesne operacne systemy ktore v podstate vyzaduju len 2 mody - kernel/user, ale vtedy ked robili 386ku to este taketo jasne nebolo. A taky I/O bitmap alebo ring1 su obcas veci na nezaplatenie.

Navyse context struktury sa este doteraz robia cez segmenty (TS, FS a GS este aj na x86-64 ako-tak funguju).

1 + 7 plus tisíc (číslom)

Maximálna veľkosť je: 2,0 MB