From: Scott Kaplan <sfkaplan@cs...> - 2002-09-18 19:13:17
-----BEGIN PGP SIGNED MESSAGE-----
In an effort to perform some virtual memory experiments by modifying Linux'
s VM system, I've been using UML to ease the great pains of debugging.
However, I've gotten myself rather confused about how UML arranges the
address spaces that it must manage as a kernel.
Let's assume a typical compilation and execution of UML with the default
32 MB of memory. In this case:
uml_physmem = 0xA0000000
high_physmem = 0xA2000000
Further, the following are set relative to high_physmem:
start_vm = 0xA2800000
end_vm = 0xA4800000
So, here's my problem: Which one of these ranges represents the kernel's
virtual space? (That is, which range is equivalent to the range
0xC0000000 through 0xFFFFFFFF for i386?)
I've been confused because, if I take a ``struct page* page'' (for examine,
one being inserted on the inactive list) and derive its kernel virtual
address like so...
addr = __va(page_to_pfn(page) << PAGE_SHIFT)
...I get an address between uml_physmem and high_physmem. However if I
look into swapper_pg_dir, there are only entries for the range between
start_vm and end_vm. What is getting mapped in that range, and to what is
it being mapped?
If there is already a good document to answer these questions, please
point me towards it. I've tried to find one amongst the papers and slides
on the web page, but I've only seen higher-level overviews that aren't
detailed enough to clear the fog for me.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (Darwin)
Comment: For info see http://www.gnupg.org
-----END PGP SIGNATURE-----
Get latest updates about Open Source Projects, Conferences and News.