I was going through the address space layout of guest. (all the #defines for
SELF_MAP, PASSAGE_PAGE, etc....)
I don't understand how the guest kernel knows that these virtual addresses
are reserved??... What if I #define, say, another page below the SELF_MAP??
From: Henry Nestler <Henry.Ne@Arcor.de> - 2008-02-08 08:24:55
Jitesh Shah wrote:
> I was going through the address space layout of guest. (all the #defines
> for SELF_MAP, PASSAGE_PAGE, etc....)
> I don't understand how the guest kernel knows that these virtual
> addresses are reserved??... What if I #define, say, another page below
> the SELF_MAP??
You means Address space layout in include/asm-i386/cooperative.h in
coLinux kernel source?
* Address space layout:
#define CO_VPTR_BASE (0xffc00000)
#define CO_VPTR_PHYSICAL_TO_PSEUDO_PFN_MAP (CO_VPTR_BASE - 0x1000000)
#define CO_VPTR_PSEUDO_RAM_PAGE_TABLES (CO_VPTR_BASE - 0x1100000)
#define CO_VPTR_PASSAGE_PAGE (CO_VPTR_BASE - 0x1101000)
#define CO_VPTR_IO_AREA_SIZE (0x10000)
#define CO_VPTR_IO_AREA_START (CO_VPTR_BASE - 0x1200000)
#define CO_VPTR_SELF_MAP (CO_VPTR_BASE - 0x1400000)
These addresses are reserved, because they are not defined as free
virtual address pool for memory mapping. The addresses are fixed virtual
addresses. It is no coLinux specific. In the Linux kernel exist some
more fixed addresses, for example the kernel code starts at 0xc0000000.
Internal details about working coLinux exist under "Publications" on
http://www.colinux.org/, the text "2004 paper" and page 10 in "2004
slides" are well good for understanding.