[so2] Mapare low-mem in spatiul kernel (bonus: the cake is a lie)

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Tue May 5 23:11:42 EEST 2015


Octavian Purdila <tavi.purdila at gmail.com> writes:
> 2015-05-03 12:57 GMT+03:00 Razvan Deaconescu via so2 <so2 at cursuri.cs.pub.ro>:
>> Salutare.
>>
>> Întrucât am văzut că nu am explicat cum trebuie partea de low-mem și
>> maparea acesteia, am făcut un modul de kernel de test[1]. Modulul
>> parcurge spațiul virtual al nucleului în care este mapată zona low-mem
>> (adică zona din spațiul virtual cuprinsă între PAGE_OFFSET și
>> high_memory).
>>
>> Acolo puteți vedea că zona este mapată, deci tabelele de pagini sunt
>> completate. Motivul mapării directe a low-mem este pentru cazul în care
>> nucleul solicită explicit translatări virtual-fizic sau viceversa. Orice
>> acces implicit al nucleului la spațiul său de adresă va trece prin TLB,
>> MMU, tabele de pagini; acele accese nu sunt influențate de maparea
>> directă a low-mem. Maparea directă este utilă pentru translatarea
>> explicită solicitată în anumite ocazii de kernel; pentru acea
>> translatare se fac operații aritmetice, nemaifiind nevoie de parcurgerea
>> tabelei de pagini.
>>
>> Partea interesantă (de unde și "the cake is a lie") este că, din test,
>> rezultă că partea de low-mem nu ocupă 896MB ci, de fapt, 128MB. Avem:
>> * PAGE_OFFSET: 0xc0000000
>> * high_memory: 0xc7fe0000
>>
>> Output-ul unei rulări este aici[2].
>>
>> Diferența: 0x07fe0000, adică puțin sub 128MB. Asta se întâmplă pe
>> nucleul din mașina virtuală, kernel 3.13. Nu știam că s-a schimbat
>> această valoare, dar aparent așa este.
>>
>> Dacă fac ceva greșit sau dacă am zis ceva greșit, săriți.
>>
>> Tavi, tu ce știi de asta?
>
> Cred ca masina virtuala este configurata cu 128MB, de unde si
> rezultatul obinut :)

Da, are sens să fie așa. O să mă mai uit prin codul sursă să văd ce
config determină asta.

Răzvan


More information about the so2 mailing list