Hello,
I want to summarize some aspects we know but not documented so far or in
this way.
First, a little graphic for showing the address spaces:
|-----------------| virtual address space |---------------------| Level 1
| |
| |
| Segmentation |
| |
v v
|------------------| linear address space |---------------------| Level 2
| |
| |
| Paging (guest os) |
| |
v v
|------------------| physical address space |---------------------| guest os thinks
Level 3
\ / that's ram
\ /
\ Paging (monitor) /
\ /
v v
|----------------------------| real ram Level 4
"real" physical address space
In the first paging step the guest os selects a page. But may be that page
is in use (in another os), so the monitor in the second paging step has to
search another page for substitution. If this is a clear page it should
be so matter, if not this is a page for shared memory, so the monitor
has to find the right page. We use page protection mechanisms for detecting
guest os page table writes.
For that we have ram divide into n parts, n is the number of running os's.
Or we have a clever algorithm to share pages between all os's - like paging
on demand.
There are several questions:
1. Do we need a segmentation level for monitor? (Between Level 1 and 2)
2. Can we combine Level 3 and 4 so we need only one Paging Level?
3. Are we able to hide this architecture so that guests don't
see them?
To the 3.: Is there an other chance than use swapping aggressively? If we
have only the context of exact one os in ram there should be no problem -
but the performance...
jens (just docs...)