[OSy] Dotazy k 3. rozsirenemu zadani
Petr Stefan
ptr.stef at gmail.com
Mon Nov 23 17:19:49 CET 2015
Dobry den,
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.
* 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?
* 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)?
* 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?
* Co ma presne delat vma_map() v KSEG0? Vratit adresu ziskanou z
frame_alloc(), jen s prictenim 0x80000000?
* 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()?)?
* 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)?
* 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)?
* 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?
* 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)?
* Muzete mi prosim vysvetlit tento odstavec z knihy See MIPS Run?
o 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.
o 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.
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).
S pozdravem,
Petr Stefan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://d3s.mff.cuni.cz/pipermail/nswi004/attachments/20151123/5a323238/attachment.html>
More information about the NSWI004
mailing list