This shows you the differences between two versions of the page.
so2:laboratoare:lab11:exercitii [2018/05/09 09:20] ionel.ghita [4. [3p] Afișare memorie mapată în ''procfs''] |
so2:laboratoare:lab11:exercitii [2019/05/08 09:53] (current) constantin.ghioc [2. [3p] Mapare de memorie virtual contiguă în user space] |
||
---|---|---|---|
Line 100: | Line 100: | ||
* Completați zonele marcate cu ''TODO 1''. | * Completați zonele marcate cu ''TODO 1''. | ||
* Parcurgeți secțiunea [[:so2:laboratoare:lab11#Kernel-space|Maparea memoriei. Kernel-space]]. | * Parcurgeți secțiunea [[:so2:laboratoare:lab11#Kernel-space|Maparea memoriei. Kernel-space]]. | ||
- | * Alocați, în funcția de inițializare a modulului, o zonă de memorie de ''NPAGES+1'' pagini folosind ''kmalloc''. | + | * Alocați, în funcția de inițializare a modulului, o zonă de memorie de ''NPAGES+2'' pagini folosind ''kmalloc''. |
* O pagină în kernel are dimensiunea [[http://elixir.free-electrons.com/linux/v4.9/source/arch/x86/include/asm/page_types.h#L9|PAGE_SIZE]]. | * O pagină în kernel are dimensiunea [[http://elixir.free-electrons.com/linux/v4.9/source/arch/x86/include/asm/page_types.h#L9|PAGE_SIZE]]. | ||
* Zona alocată din spațiul kernel este indicată de ''kmalloc_area''. | * Zona alocată din spațiul kernel este indicată de ''kmalloc_area''. | ||
- | * Dimensiunea ''NPAGES+1'' este necesară pentru aliniere. | + | * Dimensiunea ''NPAGES+2'' este necesară pentru aliniere. |
* Adresa ''kmalloc_ptr'' (variabilă globală) obținută în urma apelului ''kmalloc'' trebuie aliniată la adresa unei pagini. | * Adresa ''kmalloc_ptr'' (variabilă globală) obținută în urma apelului ''kmalloc'' trebuie aliniată la adresa unei pagini. | ||
* Pentru aceasta, va trebui să alocați o pagină în plus față de numărul de pagini necesare și să folosiți formula:<code> | * Pentru aceasta, va trebui să alocați o pagină în plus față de numărul de pagini necesare și să folosiți formula:<code> | ||
Line 122: | Line 122: | ||
* Descărcați modulul din kernel. | * Descărcați modulul din kernel. | ||
- | ==== 2. [3p] Mapare de memorie virtual contiguă în user space ==== | + | ==== 2. [3p] Mapare de memorie fizic discontiguă în user space ==== |
* Utilizați scheletul de modul de kernel din directorul ''vmmap/'' pentru a crea o mapare a memoriei driver-ului în user-space. | * Utilizați scheletul de modul de kernel din directorul ''vmmap/'' pentru a crea o mapare a memoriei driver-ului în user-space. | ||
* Memoria driver-ului este alocată folosind ''vmalloc''. | * Memoria driver-ului este alocată folosind ''vmalloc''. |