Re: [OSy] Zadani 2. semestralni prace

Vegetta vegetta at seznam.cz
Mon Nov 14 13:01:25 CET 2005


Dufam ze nas nebudete preklinat za to jadro.
Ak by bola nejaka nejasnost, dajte vediet...

Tom


>  ------------ Puvodni zprava ------------
>  Od: Premek Paska <premek.paska at gmail.com>
>  Predmet: Re: [OSy] Zadani 2. semestralni prace
>  Datum: 14.11.2005 11:41:21
>  ----------------------------------------
>  Dobry den,
>  
>  >> Cilem 2. semestralni prace je rozsirit jadro z 1. semestralni prace
>  
>  Kde vezmeme to jadro - vysledek 1. semestralni prace?
>  
>  Diky
>  
>  Premek Paska
>  
>  On 11/13/05, Lubomír Bulej <bulej at nenya.ms.mff.cuni.cz> wrote:
>  >
>  > Dobry den,
>  >
>  > v priloze najdete zadani 2. semestralni prace. Testy k 2. semestralni
>  > praci
>  > budou k dispozici behem pristiho tydne. Pripadne dotazy a pripominky
>  > smerujte
>  > prosim do konference.
>  >
>  >
>  > Lubomir Bulej
>  >
>  >
>  >
>  > Zadani 2. semestralni prace:
>  > -------------------------------------------------
>  >
>  > Cilem 2. semestralni prace je rozsirit jadro z 1. semestralni prace o
>  > spravu fyzicke pameti a mapovani virtualni pameti do fyzicke. Zadani ma
>  > formu rozhrani, ktere je nutno naimplementovat. K zajisteni rozumne urovne
>  > funkcnosti pro navazujici skupiny je nutne, aby implementace prosla sadou
>  > testu, ktere overuji funkcnost implementace.
>  >
>  > Ukolem bude naprogramovat:
>  >
>  > * alokator oblasti virtualni pameti
>  > * mapovani virtualni pameti do fyzicke
>  > * pristup vlaken do virtualniho adresoveho prostoru
>  > * obsluhu vyjimek TLB
>  >
>  >
>  > Pokud zadani nespecifikuje nejaky detail, je zavazne chovani, ktere
>  > ocekavaji testy. Pokud testy dane chovani netestuji, zadani si podle
>  > uvazeni dodefinujte a sve rozhodnuti zdokumentujte.
>  >
>  > Obecne pozadavky tykajici se deklarace a pouzivani chybovych kodu,
>  > definice zakladnich typu pouzivanych v zadani a pozadavky na formu
>  > zdrojovych textu jsou shodne se zadanim 1. semestralni prace.
>  >
>  >
>  > Virtualni adresovy prostor procesoru
>  > ------------------------------------
>  >
>  > V zavislosti na aktualnim rezimu (user, supervisor, kernel) je virtualni
>  > adresovy prostor procesoru MIPS R4000 rozdelen na nekolik segmentu.
>  >
>  > V uzivatelskem rezimu (user mode) je pristupny pouze segment USEG v
>  > rozsahu adres [0x00000000,0x800000000), ktery je mapovany do fyzicke
>  > pameti pres TLB. Pristup na adresu mimo USEG vyvola vyjimku Address
>  > Error.
>  >
>  > V rezimu supervizora (supervisor mode) jsou definovany segmenty SUSEG v
>  > rozsahu adres [0x00000000,0x80000000), a segment SSEG v rozsahu adres
>  > [0xC0000000,0xE00000000). Adresy v obou segmentech jsou mapovany do
>  > fyzicke pameti pres TLB, pricemz segment SUSEG je analogii segmentu USEG
>  > v uzivatelskem rezimu. Pristup na adresy mimo SUSEG a SSEG vyvola
>  > vyjimku Address Error.
>  >
>  > A konecne v rezimu jadra (kernel mode) jsou definovany segmenty KUSEG
>  > v rozsahu adres [0x00000000,0x80000000), KSEG0 v rozsahu adres
>  > [0x80000000,0xA0000000), KSEG1 v rozsahu adres [0xA0000000,0xC0000000),
>  > KSSEG/KSEG2 v rozsahu adres [0xC0000000,0xE0000000) a KSEG3 v rozsahu
>  > adres [0xE0000000,0xFFFFFFFF]. Adresy v segmentech KUSEG, KSSEG a KSEG2
>  > jsou mapovany do fyzicke pameti pres TLB, pricemz segmenty KUSEG resp.
>  > KSSEG jsou analogii segmetu USEG resp. SSEG v uzivatelskem rezimu resp.
>  > rezimu supervizora. Adresy v segmentech KSEG0 a KSEG1 jsou mapovany do
>  > fyzicke pameti primo (pouze odectenim pocatecni adresy segmentu).
>  > Virtualni adresy segmentu KSEG0 jsou tedy mapovany na fyzicke adresy v
>  > rozsahu [0x00000000,0x80000000), podobne je to i v pripade KSEG1.
>  > Na realnem systemu se segmenty KSEG0 a KSEG1 lisi take v tom, ze
>  > pristup na adresy KSEG0 obchazi cache procesoru.
>  >
>  >
>  > Virtualni adresovy prostor procesu
>  > ----------------------------------
>  >
>  > V kontextu operacniho systemu je virtualni adresovy prostor procesu,
>  > nebo take mapa virtualni pameti (address space, virtual memory map, vmm),
>  > datova struktura, ktera udrzuje informace o vyuziti adresoveho prostoru.
>  >
>  > Rozdeleni virtualniho adresoveho prostoru procesoru na segmenty je
>  > pevne dane. Protoze se zpracovani virtualnich adres procesorem v
>  > jednotlivych segmentech lisi, je virtualni adresovy prostor procesu
>  > typicky alokovan po oblastech (virtual memory area, vma) uvnitr techto
>  > segmentu. Oblasti virtualni pameti reprezentuji souvisly blok adres ve
>  > virtualnim adresovem prostoru. V zavislosti na tom, v jakem segmentu
>  > adresoveho prostoru procesoru se urcita oblast nachazi, je pak mapovani
>  > rozsahu virtualnich adres oblasti do fyzicke pameti bud pevne dane
>  > (pripad segmentu KSEG0 a KSEG1) nebo definovane uzivatelem (operacnim
>  > systemem), ktery ma moznost ovlivnovat obsah TLB.
>  >
>  > Virtualni adresovy prostor procesu je jednim z prostredku sdilenych
>  > vlakny uzivatelskeho procesu. Z bezpecnostnich duvodu ma kazdy proces
>  > operacniho systemu svuj vlastni virtualni adresovy prostor a tedy i
>  > mapovani do fyzicke pameti.
>  >
>  > Zaklad jadra z 1. semestralni prace dosud pracuje pouze s nezavislymi
>  > vlakny, ktere bezi v rezimu jadra. Pro nasledny prechod k procesum s
>  > vice vlakny bezicimi v uzivatelskem rezimu (napln 3. semestralni prace)
>  > je ovsem nejprve nutne vytvorit podporu pro virtualizaci pameti, jeji
>  > mapovani do fyzicke pameti a sdileni tohoto mapovani vlakny.
>  >
>  >
>  > Pristup vlaken do virtualniho adresoveho prostoru
>  > -------------------------------------------------
>  >
>  > Rozsirte stavajici implementaci vlaken v jadre o podporu pristupu
>  > k virtualni pameti mapovane pres TLB v ramci virtualniho adresoveho
>  > prostoru.
>  >
>  > Pro ucely testovani implementujte funkci:
>  >
>  > * int thread_create_new_map (
>  > thread_t * thread_ptr, void (* thread_start) (void *), void * data)
>  >
>  > Funkce vytvori nove vlakno podobne jako thread_create s tim rozdilem,
>  > ze pro vlakno vytvori novy virtualni adresovy prostor. Nove vlakno tedy
>  > nebude sdilet mapovanou virtualni pamet s volajicim vlaknem.
>  >
>  > Funkce thread_create_new_map do jiste miry supluje funkci process_create
>  > z rozhrani pro vytvareni a spravu procesu, jehoz zadani a implementace
>  > je naplni 3. semestralni prace.
>  >
>  >
>  > Sprava oblasti virtualni pameti
>  > -------------------------------
>  >
>  > Sprava oblasti virtualni pameti zahrnuje alokaci, manipulaci a
>  > uvolnovani oblasti virtualni pameti v kontextu virtualniho adresoveho
>  > prostoru prave beziciho vlakna. Oblasti se nesmi prekryvat, velikost a
>  > zacatek oblasti musi byt zarovnan na nejmensi velikost stranky
>  > podporovanou procesorem, v pripade MIPS R4000 tedy 4 KiB.
>  >
>  > Pro spravu oblasti virtualni pameti pouzijte vhodnou datovou strukturu,
>  > pricemz duraz je kladen na rozumne rychle nalezeni oblasti virtualni
>  > pameti k dane virtualni adrese.
>  >
>  > * int vmalloc (void ** from, size_t size, uint flags)
>  >
>  > Funkce alokuje oblast ve virtualnim adresovem prostoru o velikosti
>  > @size bajtu, pro tuto oblast alokuje fyzickou pamet a vytvori mapovani
>  > prave alokovane virtualni pameti do fyzicke.
>  >
>  > V zavislosti na hodnote bitoveho priznaku VF_VIRT_ADDR v argumentu
>  > @flags funkce bud automaticky zvoli vhodnou adresu zacatku oblasti
>  > virtualni pameti a vrati ji ve @from (hodnota VF_VA_AUTO), nebo se
>  > pokusi vytvorit oblast na adrese zadane volajicim ve @from (hodnota
>  > VF_VA_USER).
>  >
>  > Bitove pole VF_ADDR_TYPE v argumentu @flags urcuje typ segmentu
>  > virtualniho adresoveho procesoru, ve kterem bude virtualni oblast
>  > alokovana. Hodnoty bitoveho pole pro jednotlive segmenty jsou
>  > VF_AT_KUSEG, VF_AT_KSEG0, VF_AT_KSEG1, VF_AT_KSSEG a VF_AT_KSEG3.
>  > Alokace v segmentech KSEG0 a KSEG1 se vzajemne vylucuji, pokud jsou
>  > mapovany na stejne fyzicke adresy.
>  >
>  > Binarni format argumentu @flags je dan makry VF_VA_SIZE, VF_VA_SHIFT
>  > a VF_AT_SIZE, VF_AT_SHIFT, ktere specifikuji velikost bitoveho pole
>  > a jeho pozici ve slove.
>  >
>  > Vraci EOK pokud byla pamet alokovana a namapovana, EINVAL pokud
>  > nebylo mozne alokovat oblast se zacatkem na adrese @from v danem
>  > segmentu virtualniho adresoveho prostoru procesoru, nebo pokud
>  > @from ci @size nejsou zarovnany, ENOMEM pokud neni dostatek fyzicke
>  > pameti k provedeni operace.
>  >
>  > * int vfree (void * from)
>  >
>  > Funkce zrusi mapovani pameti pro oblast se zacatkem na adrese @from,
>  > ktera byla predtim vytvorena volanim vmalloc(). Dale uvolni fyzickou
>  > pamet, do ktere byla oblast mapovana a zrusi prislusnou oblast
>  > virtualni pameti.
>  >
>  > Vraci EOK pokud byla pamet uvolnena a mapovani zruseno, EINVAL pokud
>  > @from neukazuje na zacatek oblasti vytvorene volanim vmalloc().
>  >
>  > * int vresize (void * from, size_t size)
>  >
>  > Funkce zvetsi/zmensi velikost oblasti virtualni pameti jejiz zacatek
>  > lezi na adrese @from na novou velikost @size bajtu. Nesmi pritom dojit
>  > k prekryvu dvou ruznych oblasti virtualni pameti.
>  >
>  > Vraci EOK, pokud byla velikost oblasti uspesne zmenena, EINVAL
>  > pokud @from neukazuje na platnou oblast, pokud by melo dojit k
>  > prekryvu s jinou oblasti v dusledku zvetseni, nebo pokud neni nova
>  > velikost zarovnana, ENOMEM pokud nebylo mozne oblast zvetsit v kvuli
>  > nedostatku pameti.
>  >
>  > * int vremap (void * from, void * to)
>  >
>  > Funkce premapuje oblast zacinajici na adrese @from na adresu @to.
>  > Velikost oblasti a posloupnost mapovani virtualnich stranek na fyzicke
>  > zustava zachovana. Prekryti virtualnich adres v oblasti @from a @to
>  > je pripustne.
>  >
>  > Vraci EOK pokud bylo premapovani uspesne, EINVAL pokud na adrese
>  > @from neni platna oblast, pokud @to neni zarovnana adresa, nebo pokud
>  > by pri presunu melo dojit k prekryti jiz existujici oblasti.
>  >
>  > * int vmerge (void * area1, void * area2)
>  >
>  > Funkce spoji oblasti @area1 a @area2 do jedne oblasti, pokud spolu
>  > sousedi. Zacatek nove oblasti je na nizsi z pocatecnich adres obou
>  > oblasti. Vraci EOK pokud bylo spojeni provedeno, EINVAL pokud jsou
>  > jedna nebo obe oblasti neplatne, nebo pokud spolu nesousedi.
>  >
>  > * int vsplit (void * from, void * split)
>  >
>  > Funkce rozdeli oblast zacinajici na adrese @from na dve sousedici
>  > oblasti, pricemz nove vznikla oblast bude zacinat na adrese @split.
>  >
>  > Vraci EOK pokud bylo rozdeleni uspesne, EINVAL pokud @from neukazuje
>  > na zacatek existujici oblasti, pokud @split neni uvnitr rozdelovane
>  > oblasti, nebo pokud hodnota @split neni zarovnana.
>  >
>  >
>  > Obsluha vyjimek TLB
>  > -------------------
>  >
>  > Pri prekladu virtualni adresy na fyzickou muze procesor vyvolat dva
>  > druhy vyjimek. Prvni z vyjimek je TLB Refill, ktera je vyvolana v
>  > pripade, ze pro pozadovanou virtualni adresu nebyl v TLB nalezen zaznam
>  > s odpovidajici fyzickou adresou. Druhou z vyjimek je TLB Invalid, ktera
>  > je vyvolana v pripade, ze v TLB sice existuje polozka pro pozadovanou
>  > virtualni adresu, ale tato polozka je neplatna.
>  >
>  > Obsluha obou typu vyjimek by mela nalezt mapovani pro prislusnou virtualni
>  > adresu a naplnit TLB. Pokud nebude pro danou virtualni adresu mapovani
>  > existovat, ocekava se, ze jadro vypise varovne hlaseni a vlakno, ktere
>  > vyjimku vyvolalo, zrusi.
>  >
>  > Pozn.: Moznost oznacit polozku TLB jako neplatnou lze pouzit napr. pri
>  > implementaci copy-on-write mechanizmu nebo swapovani, v ramci zadani 2.
>  > semestralni prace vsak pro jeho vyuziti neni prostor.
>  >
>  >
>  > Uprava stavajiciho alokatoru pameti
>  > -----------------------------------
>  >
>  > Stavajici alokator pameti s rozhranim malloc/free alokuje pamet z haldy
>  > umistene v segmentu KSEG0 virtualniho adresoveho prostoru procesoru.
>  > Protoze soucasne s timto alokatorem bude stranky fyzicke pameti alokovat
>  > take volani vmalloc(), je nutne zajistit, aby stejnou stranku fyzicke
>  > pameti nepouzival alokator haldy a oblast virtualni pameti vytvorena
>  > volanim vmalloc().
>  >
>  > Upravte stavajici alokator tak, aby nedochazelo k uvedenym kolizim a
>  > zaroven aby alokator vracel pouze pamet ze segmentu KSEG0 virtualniho
>  > adresoveho prostoru procesoru, tj. aby bylo mozne k alokovane pameti
>  > pristupovat bez pouziti TLB.
>  >
>  >
>  > Kopirovani pameti mezi vlakny
>  > -----------------------------
>  >
>  > Pro testovaci ucely implementujte nasledujici funkce:
>  >
>  > * int copy_from_thread (thread_t thr,
>  > void * dest, const void * src, size_t len)
>  >
>  > Funkce zkopiruje data z virtualni pameti vlakna @thr do virtualni
>  > pameti volajiciho vlakna. Vraci EOK pokud byla data zkopirovana,
>  > EINVAL pokud je identifikace zdrojoveho vlakna neplatna.
>  >
>  > * int copy_to_thread (thread_t thr,
>  > void * dest, const void * src, size_t len)
>  >
>  > Funkce zkopiruje data z virtualni pameti volajiciho vlakna do
>  > virtualni pameti vlakna @thr. Vraci EOK pokud byla data zkopirovana,
>  > EINVAL pokud je identifikace zdrojoveho vlakna neplatna.
>  >
>  >
>  > Integrace s testy
>  > -----------------
>  >
>  > K integraci s testy vytvorite hlavickovy soubor assignment-2.h, ktery bude
>  > obsahovat deklarace vsech vyse uvedenych funkci. Typicky bude obsahovat
>  > #include direktivy, ktere zajisti vlozeni vasich hlavickovych souboru s
>  > prislusnymi deklaracemi.
>  >
>  > Dale musi soubor obsahovat deklaraci funkce assignment_test (void),
>  > kterou zavolate z vaseho jadra.
>  >
>  > --
>  > Posledni modifikace: 2005/11/13 22:22
>  >
>  >
>  > _______________________________________________
>  > OSy mailing list
>  > OSy at nenya.ms.mff.cuni.cz
>  > http://nenya.ms.mff.cuni.cz/mailman/listinfo/osy
>  >
>  >
>  >
>  
>  
>  



More information about the NSWI004 mailing list