3GB address

Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
Post Reply
skandalOS
Posts: 15
Joined: Mon Sep 05, 2011 12:05 pm

3GB address

Post by skandalOS »

Hello,
in my Framework where I'm working is something
which I have no idea why it is so...

There is a function in MemoryManager like:

get3GBAddressOfPPN(physical_page_number)
{
return (3U*1024U*1024U*1024U) + (physical_page_number * page_size); // page_size = 4096
}

which gives you a 3 GB Address of a given page frame.

So, why is there the concept of getting 3 GBAddress, you are here limited for addressing only up to 1 GB (area between 3gb-4gb)
so what happens if need more than 1 GB for addressing or > 1GB/PAGE_SIZE = 262143 Pages respectively.

for example:
get3GBAddressofPPN(262144) ==> here you get 0x0 as address

This was a little example so that I could explain my problem, I hope you understood it...so you can ignore the codes above

my aim is to get some theoretical information

thanks
User avatar
Combuster
Member
Member
Posts: 9301
Joined: Wed Oct 18, 2006 3:45 am
Libera.chat IRC: [com]buster
Location: On the balcony, where I can actually keep 1½m distance
Contact:

Re: 3GB address

Post by Combuster »

You can't map all memory for writing into kernel space on a 32-bit system.

There is no real need to have it all mapped either: either it's user data and you can access it in the user range (0-3g in your case), or it's kernel data and you map it whenever you allocate it. Anything not mapped belongs to a different process and therefore should not normally be accessible from other tasks (and you may temporarily map pages when crossing that boundary).
"Certainly avoid yourself. He is a newbie and might not realize it. You'll hate his code deeply a few years down the road." - Sortie
[ My OS ] [ VDisk/SFS ]
Post Reply