Mon, 9 Mar 2009, 02:17

A student writes:

        Dear professor:
        After Wednesday's lecture and discussion session I am still confused by
        the mapping from virtual memory address to physical memory address. From
        the perspective of each process, instruction only knows and uses the
        virtual memory address ranged from 0x00000000 to 0xffffffff(assuming 32
        bits address space of VAX) 

Yes, each process thinks it has a full set of memory locations.  In the case
of the VAX, not really, since those 32-bit addresses starting with 10 are
addresses in what we call System Space, and every process has the same view
of System Space.  Look at the first page of my virtual memory handout.  Also, 
in the case of the VAX, 32-bit addresses starting with 11 are not used.  That 
leaves 2 GB, and yes, each process thinks it has its own page 0, its own 
page 1, ...its own page 2^21-1 of P0 space and its own page 0, page 1, 2^21-1 of P1 space.

        however, in the handout presented in class(The Abstraction) virtual 
        page number is represented by bit 9 to bit 29 in virtual address. 
        Does that mean two processes could have the same virtual
        page number because each process thinks that it has full power to use
        their virtual memory address from 0x00000000 to 0xffffffff? Could you
        point out my misunderstanding?

If we replace 0x00000000 to 0xffffffff with 0x00000000 to 0x7fffffff, you 
have no misunderstanding.

What you are missing is that the two page tables P0PT and P1PT are specific
to each process, so when the physical address is being computed, the page
tables of the running process are used.  Note that these page tables are
accessed by base registers (P0BR, P1BR).  So, before process A starts running, 
its context is loaded from its process control block.  Included in the process
control block is the P0BR for that process.

Since each process has a separate page table for P0 space, each process has
a separate PTE for its page 0, and indeed, each process' PTE for its page 0
maps its page 0 to a different page frame.  There is never any confusion
since only one P0BR is active at a time, and that P0BR contains the base
address of the relevant P0PT.

What about the TLB, you might ask?  Isn't the entry in the TLB simply
page number'PTE for that page?  I could have page0'PTE_for_processA_page 0
and another entry page0'PTE_for_processB_page0.  Which would get used?
Answer: either flush the TLB on a context switch, or add a process ID to
every TLB entry.  Both techniques are used.

        Thanks for helping
        <<name withheld to protect the student who has too many page 0's>>

Hope the above helps.

Yale Patt