<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Dobry den,<br>
<br>
schromazdil jsem relativne velkou mnozinu zajimavych dotazu k 3.
rozsirenemu zadani semestralni ulohy, na ktere neumim presvedcive
odpovedet. Prosim o jejich vysvetleni, urcite se odpovedi budou
hodit i dalsim.<br>
<br>
<ul>
<li>Jak priradit vlaknu cislo ASID? Podle manualu procesoru se
cislo ASID nastavi do registru EntryHi pri vyjimkach TLB refill
a TLB invalid. To znamena, ze vlakno musi mit tento
identifikator na predem danem miste. Ja si myslim, ze je treba
nastavit spodnich 8 bitu v registru t2 (= EntryHi) v kontextu na
pocatku zasobniku pri vytvareni vlakna. Je to spravne?</li>
<li>Podle zadani mame uvazovat, ze nam staci cisla ASID pro
vsechna vlakna. Jedna se o vlakna spustena v jednu chvili nebo
za celkovou dobu behu operacniho systemu (jedna se mi o
pridelovani techto cisel - zda staci jedna promenna nebo je
treba mit napriklad bitmapu a pridelovat i volna cisla dobehlych
threadu)?</li>
<li>Kde v pameti uchovavat strankovaci tabulky? Podle me je treba
je mit v pameti KSEG0, protoze jinak by mohl nastat pripad, kdy
pri obsluze vyjimky TLB refill potrebuji pristoupit na adresu
(strankovaci tabulky), ktera take v TLB neni, coz by po chvili
pravdepodobne vyustilo v pad kernelu. Je nejaka jina moznost jak
toto resit?</li>
<li>Co ma presne delat vma_map() v KSEG0? Vratit adresu ziskanou z
frame_alloc(), jen s prictenim 0x80000000?</li>
<li>Malloc je kernelovy alokator v Kalistu. Znamena to, ze pracuje
jen v segmentu KSEG0 nebo v celem adresovem prostoru? Pripadne
jaky je jeho vztah k virtualnimu adresovemu prostoru (mel by
pouzivat volani vma_map()?)?</li>
<li>Pri vytvareni vlaken se dynamicky alokuje misto pro zasobnik,
kde na zacatku je explicitne misto pro ulozeni registru (pri
prepinani kontextu, obsluze vyjimek, ...). Znamena to, ze
zasobniky vsech vlaken musi byt v KSEG0 nebo vse bude fungovat
(context switch, vyjimky) i pokud zasobnik prestehujeme nekam do
virtualniho adresoveho prostoru daneho vlakna (a tedy i do jine
pameti nez je KSEG0)?</li>
<li>Obsluha vyjimek TLB invalid se udela jak? Musime pridat
rozpoznani konkretniho kodu vyjimky do wrapperu vseobecne
vyjimky, kde jiz muzeme zavolat vlastni funkci (tj. jedna se o
jinou vyjimku nez TLB refill a tato jiz nema svou vlastni
obsluhu, ale pouziva se vseobecna vyjimka)?</li>
<li>Rezimy procesoru User/Supervisor/Kernel. K cemu to slouzi? Vim
jak zjistit v jakem rezimu se nachazim, ale podle toho co jsem
nasel se tyto rezimy lisi jen v tom, na ktere adresy hardware
vyhodi vyjimku Address Error. Je to tak?</li>
<li>Jsou nejake specialni pozadavky pro testy tohoto ukolu?
Napriklad nastavit velikost pameti RAM na nejake vetsi cislo
(treba 2GB) aby bylo mozno alokovat i z USEG segmentu? Pripadne
podpora nesouvisle pameti pres cely adresovy prostor (prochazet
4 GB adresoveho prostoru a hledat jestli nekde nahodou neni
volna pamet)?</li>
<li>Muzete mi prosim vysvetlit tento odstavec z knihy See MIPS
Run?</li>
<ul>
<li>If you make your page table start at a 4-MB boundary [jedna
se o KSEG2 segment] (since it's in virtual memory, any gap
created won't use up physical memory space) and set up the
Context PTEBase field with the high-order bits of the page
table starting the address, then, following a user refill
exception, the Context register will contain the address of
the entry you need for the refill with no further calculation
needed. <br>
</li>
<li>Jedna se o stranu 143-144, kapitola 6.5 Hardware-Friendly
Page Tables and Refill Mechanism, k nahlednuti na Google
Knihy. Zni to hrozne zajimave a chtel bych pochopit, jak
neceho takoveho lze dosahnout.</li>
</ul>
</ul>
<p><br>
</p>
<p>To je zatim asi vse. Predem dekuji za odpovedi. Protoze mam jeste
techto hodne nejasnosti, tak vyuziji vasi nabidky a prehodim si
cviceni az na dalsi tyden (predpokladam ze se mohu zucastnit prave
jednoho).<br>
S pozdravem,<br>
</p>
<p>Petr Stefan<br>
</p>
</body>
</html>