|
以下这段话的每个句子都看得懂,但是整个意思怎么也看不懂,麻烦哪们大侠解释一下:
Let us make a short digression to explain how stacks are mapped into memory regions. Each region that contains a stack expands toward lower addresses; its VM_GROWSDOWN flag is set,thus the value of its vm_end field remains fixed while the value of its vm_start field may be decreased. The region boundaries include, but do not delimit precisely, the current size of the User Mode stack. The reasons for the fuzz factor are:
• The region size is a multiple of 4 KB (it must include complete pages) while the stack size is arbitrary.
• Page frames assigned to a region are never released until the region is deleted; in particular, the value of the vm_start field of a region that includes a stack can only decrease; it can never increase. Even if the process executes a series of pop instructions, the region size remains unchanged.
It should now be clear how a process that has filled up the last page frame allocated to its stack may cause a "age fault" exception: the push refers to an address outside of the region (and to a nonexistent page frame). Notice that this kind of exception is not caused by a
programming error; it must thus be handled separately by the page fault handler. |
|