[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Why "high memory" in x86?



When protection and paging is switched on the processor, it requires valid
page tables entry for every page that is accessed. Now there are only 4 GB
addresses that are available, so we have to divide it in such a way that the
kernel as well as the user can access it. So what we do is we say that first
three GB address will always be user space address. The page table entries
of these will keep on changing as the process loads, allocates and deallocates
memory. While the last 1 GB i.e. from 3 GB to 4 GB is given to kernel and
it's page table entries are always present in the processor page tables. The kernel
address are hence identity mapped i.e. phy_addr = (virt_addr << 4) >> 4. Since
the kernel is the program that manages all the resources including memory, so it needs
access to all the memory that is there in the system, so for regions of memory
above 1 GB (physical), we use special mechanism and call it as high memory.


~rpm

Dave B. Sharp wrote:

Yes, but why is only 1GB of memory "available"? The
whole address space is available to other kernels.

Dave Sharp

--- Rajendra <rpm@xxxxxxxxxxxxx> wrote:



The reason for the high memory is this.

o Linux divides the address space into two parts,
user and kernel.
o Kernel gets 1 GB of address space while user
gets 3GB virtual address space.
o Kernel needs to access all of the memory so
ideally it needs 4 GB of virtual addresses.
o But since only 1 GB (i.e. beyond 0xc000 0000)
is available, so we call the rest as
high memory (approx 3 GB)
o The high memory is accessed using temp. page
table entries that map the high memory
areas in kernel address space.
o The high memory region is mostly allocated to
the user space programs.
hope it answers the question !


regd,
~rpm
Rajat Jain wrote:



Hi list,

I recently read that the concept of "High Memory"


was introduced


because certain architectures are capable of


physically addressing


larger amounts of memory than they can virtually


address (physical


address space > virtual address space). I also


read that nowadays


"high Memory" exists only in x86.

1) Why is virtual memory > 896 MB on x86


designated as high memory?


AFAIK x86 has 4 GB of virtual address space


(=physical address space?)


2) Has the "high Memory" concept got anything to


do with PAE (Page


Address Extention) feature of x86?

3) Do any other architectures than x86 have the


concept of high memory?


TIA,

Rajat
-
To unsubscribe from this list: send the line


"unsubscribe

linux-newbie" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at


http://vger.kernel.org/majordomo-info.html


Please read the FAQ at


http://www.linux-learn.org/faqs


-
To unsubscribe from this list: send the line
"unsubscribe linux-newbie" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at
http://www.linux-learn.org/faqs






__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com -
To unsubscribe from this list: send the line "unsubscribe linux-newbie" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.linux-learn.org/faqs






--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/