<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>