Update docs.
[pintos-anon] / doc / vm.texi
index b7f766ea2a50fdef73c7a958fd3440a70a4bd1b2..34109cf7a0d618791a40f3e404456c7a39abd3b0 100644 (file)
@@ -112,20 +112,20 @@ can effectively ignore this CPU feature.}
 
 @enumerate 1
 @item
-The top 10 bits of the virtual address (bits 22:31) are used to index
+The top 10 bits of the virtual address (bits 22:32) are used to index
 into the page directory.  If the PDE is marked ``present,'' the
 physical address of a page table is read from the PDE thus obtained.
 If the PDE is marked ``not present'' then a page fault occurs.
 
 @item
-The next 10 bits of the virtual address (bits 12:21) are used to index
+The next 10 bits of the virtual address (bits 12:22) are used to index
 into the page table.  If the PTE is marked ``present,'' the physical
 address of a data page is read from the PTE thus obtained.  If the PTE
 is marked ``not present'' then a page fault occurs.
 
 
 @item
-The bottom 12 bits of the virtual address (bits 0:11) are added to the
+The bottom 12 bits of the virtual address (bits 0:12) are added to the
 data page's physical base address, producing the final physical
 address.
 @end enumerate
@@ -304,6 +304,12 @@ probably want to leave the code that reads the pages from disk, but
 use your new page table management code to construct the page tables
 only as page faults occur for them.
 
+You should use the @code{palloc_get_page()} function to get the page
+frames that you use for storing user virtual pages.  Be sure to pass
+the @code{PAL_USER} flag to this function when you do so, because that
+allocates pages from a ``user pool'' separate from the ``kernel pool''
+that other calls to @code{palloc_get_page()} make.
+
 There are many possible ways to implement virtual memory.  The above
 is simply an outline of our suggested implementation.
 
@@ -599,6 +605,20 @@ heuristic to figure this out.
 
 Make a reasonable decision and document it in your code and in
 your design document.  Please make sure to justify your decision.
+
+@item
+@b{Why do I need to pass @code{PAL_USER} to @code{palloc_get_page()}
+when I allocate physical page frames?}
+
+You can layer some other allocator on top of @code{palloc_get_page()}
+if you like, but it should be the underlying mechanism, directly or
+indirectly, for two reasons.  First, running out of pages in the user
+pool just causes user programs to page, but running out of pages in
+the kernel pool will cause all kinds of problems, because many kernel
+functions depend on being able to allocate memory.  Second, you can
+use the @option{-ul} option to @command{pintos} to limit the size of
+the user pool, which makes it easy to test your VM implementation with
+various user memory sizes.
 @end enumerate
 
 @node Problem 3-3 Memory Mapped File FAQ