My project is to execute my own JVM on a little piece of kernel that i'm trying to code in C and assembly. So, I'm still learning how do the kernels do their main jobs.
Now, following some guides, I set up the paging
.map
mov eax , p3_t
or eax , 0b11
mov dword [p4_t] , eax
mov eax , p2_t
or eax , 0b11
mov dword [p3_t] , eax
mov ecx , 0
.map_pd:
mov eax, 0x200000
mul ecx
or eax , 0b10000011
mov [p2_t+ecx*8] , eax
inc ecx
cmp ecx, 512
jne .map_pd
mov eax, p4_t
mov cr3, eax
mov eax, cr4
or eax, 1 << 5
mov cr4, eax
mov ecx, 0xC0000080
rdmsr
or eax, 1 << 8
wrmsr
mov eax, cr0
or eax, 1 << 31
or eax , 1 << 16
mov cr0, eax
That should set up and enable paging. These guides unfortunately give me little information.
Now, how do I manage paging and virtual addresses in the C kernel? Could you guys maybe give me some other guides that talks about paging?