[OSy] vma_map, upresneni VF_AT_KSEG0
Petr Tůma
petr.tuma at d3s.mff.cuni.cz
Thu Nov 27 08:33:34 CET 2014
Dobry den,
moznych vykladu se opravdu nabizi vice, jedna pragmaticka varianta muze
byt proste to, ze pro vma_map se flagy VF_AT_KSEG0 a VF_AT_KSEG1 nemaji
pouzivat (protoze nedava smysl chtit alokovat virtualni pamet v rozsahu
adres, ve kterem se pamet nevirtualizuje). Letmym pohledem do testu
(nevylucuji ze jsem neco prehledl) se takova alokace ani nezkousi.
Martin Decky me urcite doplni (dalsi mozny vyklad je napriklad takovy,
ze v pripade pouziti VF_AT_KSEG0 a VF_AT_KSEG1 se ocekava rezervace a
vraceni prislusneho souvisleho bloku fyzickych stranek, pokud je k
dispozici, v tom svetle je pak jasna i poznamka o tom, ze alokace adres
z VF_AT_KSEG0 a VF_AT_KSEG1, ktere vedou na stejnou fyzickou adresu, se
vylucuji).
V kazdem pripade plati, ze pro soucasne deadlines je dulezite jen to,
aby zadani proslo testy (pochopitelne s vyjimkou reseni, ktere neni
interne funkcni a jen nejakou magii vraci testum spravne hodnoty).
Petr Tuma
> Dobry den, nejsem si jisty, jak je minene chovani vma_map, zvlaste v
> souvislosti s flagy VF_AT_KSEGx. Pochopil jsem to tak, ze pokud je
> uveden priznak VF_VA_AUTO, tak tyto flagy urcuji segment, ve kterem
> bude bude vytvoreno mapovani pameti. Nevim co ale delat v pripade, ze
> jsou alokace v segmentu KSEG0/1, kde nelze zadnou pamet mapovat,
> natoz rozdilne pro kazdy adresni prostor.
>
> Druha interpretace je, ze flagy uvadeji, odkud alokovat fyzicke
> stranky pro nase mapovani. V kazdem pripade mi neni jasny vyznam
> poznamky: "Alokace v segmentech KSEG0 a KSEG1 se vzajemne vylucuji,
> pokud jsou mapovany na stejne fyzicke adresy."
>
>
> Zadani:
>> int vma_map( void **from, const size_t size, const vm_flags_t
>> flags)
>>
>> Funkce alokuje oblast ve virtualnim adresovem prostoru o velikosti
>> @size bajtu, pro tuto oblast alokuje fyzickou pamet (ne nutne
>> souvislou) a vytvori mapovani prave alokovane virtualni pameti do
>> fyzicke.
>>
>> V zavislosti na bitovych priznacich v argumentu @flags funkce bud
>> automaticky zvoli vhodnou adresu zacatku oblasti virtualni pameti a
>> vrati ji ve @from (priznak VF_VA_AUTO), nebo se pokusi vytvorit
>> oblast na adrese zadane volajicim ve @from (priznak VF_VA_USER).
>>
>> Dalsi bitove priznaky v argumentu @flags urcuji typ segmentu
>> virtualniho adresoveho procesoru, ve kterem bude virtualni oblast
>> alokovana. Hodnoty priznaku 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.
>>
>> Funkce 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 nebo jiz bylo dosazeno MAX_AREAS
>> oblasti virtualni pameti.
>
> Dekuji, Roman Kapl
>
>
> _______________________________________________ OSy mailing list
> OSy at d3s.mff.cuni.cz https://d3s.mff.cuni.cz/mailman/listinfo/osy
More information about the NSWI004
mailing list