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