510 likes | 634 Views
Virtual Memory. What to Learn?. Chapter 8 in the text book OSCE. Chapter 9 in OSC. The benefits of a virtual memory system The concepts of demand paging page-replacement algorithms and allocation of physical page frames Other related techniques Copy-on-write. Memory mapped files.
E N D
What to Learn? • Chapter 8 in the text book OSCE. Chapter 9 in OSC. • The benefits of a virtual memory system • The concepts of • demand paging • page-replacement algorithms • and allocation of physical page frames • Other related techniques • Copy-on-write. Memory mapped files
Background • Virtual memory • Only part of the program needs to be in memory for execution • Logical address space can be much larger than physical address space • Allows address spaces to be shared by several processes
Demand Paging for Virtual Memory • Bring a page into memory ONLY when it is needed • Less I/O needed • Less memory needed • Faster response • More users supported • Check a page table entry when a page is needed • not-in-memory bring to memory
Valid-Invalid Bit • With each page table entry a valid–invalid bit is associated(v in-memory,i not-in-memory) • Initially valid–invalid bit is set to i on all entries • Not in memory page fault Frame # valid-invalid bit v v v v i …. i i page table
Handling a Page Fault • Get an empty physical frame • Swap page from the disk into frame • Reset the page table Set validation bit = v • Restart the instruction that caused the page fault
Page Fault (Cont.) • Restart instruction • Special handling • block move • Auto increment/decrement
Performance of Demand Paging • Page Fault Rate 0 p 1.0 • if p = 0, no page faults • if p = 1, every reference is a fault • Effective Access Time (EAT) EAT = (1 – p) x memory access + p (page fault overhead + swap page out + swap page in + restart overhead )
Demand Paging Performance Example • Memory access time = 200 nanoseconds • Average page-fault service time = 8 milliseconds • EAT = (1 – p) x 200 + p (8 milliseconds) = (1 – p x 200 + p x 8,000,000 = 200 + p x 7,999,800 • If one access out of 1,000 causes a page fault, then EAT = 8.2 microseconds. This is a slowdown by a factor of 40!!
Other Benefits • Virtual memory allows other benefits - Shared pages - Copy-on-Write during process creation - Memory-Mapped Files
Copy-on-Write: Lazy copy during process creation • Copy-on-Write (COW) allows both parent and child processes to initially share the same pages in memoryIf either process modifies a shared page, this page is copied • COW allows more efficient process creation as only modified pages are copied
Memory-Mapped Files • Allow file I/O to be treated as routine memory access by mappinga disk block to a page in memory • Simplifies file access by treating file I/O through direct memory access rather than read()write() system calls • File access is managed with demand paging. • Several processes may map the same file into memory as shared data
Example of Linux mmap #define NUMINTS 1000 #define FILESIZE NUMINTS * sizeof(int) fd = open(FILEPATH, O_RDWR | O_CREAT | O_TRUNC, 0600); result = lseek(fd, FILESIZE-1, SEEK_SET); result = write(fd, "", 1); map = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); for (i = 1; i <=NUMINTS; ++i) map[i] = 2 * i; munmap(map, FILESIZE); close(fd);
Demand paging when there is no free frame? • Page replacement – find some page in memory, but not really in use, swap it out • Algorithm • Performance – want an algorithm which will result in minimum number of page faults • Same page may be brought into memory several times
Basic Page Replacement • Find the location of the desired page on disk • Find a free frame: - If there is a free frame, use it - If there is no free frame, use a page replacement algorithm to select a victimframe • Swap out: Use modify (dirty) bit to reduce overhead of page transfers – only modified pages are written to disk • Bring the desired page into the free frame. Update the page and frame tables
Expected behavior: # of Page Faults vs. # of Physical Frames
First-In-First-Out (FIFO) Algorithm • Reference string: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 • 3 frames (3 pages can be in memory at a time per process). Maintain a queue and select based on FIFO order. • 4 frames • Belady’s Anomaly: more frames more page faults 1 1 4 5 2 2 1 3 9 page faults 3 3 2 4 1 1 5 4 2 2 1 10 page faults 5 3 3 2 4 4 3
Optimal Algorithm • Replace page that will not be used for longest period of time • 4 frames example 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 • How do you know this? • Used for measuring how well your algorithm performs 1 4 2 6 page faults 3 4 5
Least Recently Used (LRU) Algorithm • Reference string: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 • Counter implementation • Every page entry has a counter; every time page is referenced through this entry, copy the clock into the counter • When a page needs to be changed, look at the counters to determine which are to change 1 1 1 5 1 2 2 2 2 2 5 4 3 4 5 3 3 4 3 4
LRU Algorithm Implementation • Stack implementation – keep a stack of page numbers in a double link form: • Page referenced: • move it to the top • requires 6 pointers to be changed • No search for replacement
LRU Approximation Algorithms • Reference bit • With each page associate a bit, initially = 0 • When page is referenced bit set to 1 • Replace the one which is 0 (if one exists) • We do not know the order, however • Second chance • If page has reference bit = 1 then: • Leave this page in memory, but set reference bit 0. • Visit next page (in clock order) • If reference bit is 0, replace it.
Issues with Page Allocation and Replacement • Initial Allocation. Each process needs minimum number of pages • Two schemes: Fixed allocation vs. priority allocation • Where to find frames • Global replacement– find a frame from all processes. • Local replacement– find only from its own allocated frames
Fixed Allocation • Equal allocation – For example, if there are 100 frames and 5 processes, give each process 20 frames. • Proportional allocation – Allocate according to the size of process
Priority Allocation • Use a proportional allocation scheme using priorities rather than size • If process Pi generates a page fault, • select for replacement one of its frames • select for replacement a frame from a process with lower priority number
Thrashing • If a process does not have “enough” pages, the page-fault rate is very high. This leads to: • low CPU utilization • operating system thinks that it needs to increase the degree of multiprogramming • another process added to the system • Thrashing a process is busy swapping pages in and out
Relationship of Demand Paging and Thrashing • Why does demand paging work?Locality model • Process migrates from one locality to another • Localities may overlap • Need a minimum working set to be effective • Why does thrashing occur? working-sets > total memory size
Prefetching Pages (Prepaging) • Optimization to reduce page faults (e.g. during process startup) • Preload some pages before they are referenced • But if prefetched pages are unused, I/O and memory was wasted • Assume s pages are prepaged and α % of the pages is used • Page fault cost of s * α> cost of prepaging s * (1- α) unnecessary pages
Tradeoffs: Page Size • Impact of page size selection: • Internal fragmentation • Page table size • I/O overhead • locality
Other Issues – TLB Reach • TLB Reach - The amount of memory accessible from the TLB • TLB Reach = (TLB Size) X (Page Size) • Ideally, the working set of each process is stored in the TLB • Increase the Page Size • Increase TLB reach • But may increase internal fragmentation as not all applications require a large page size
Other Issues – Impact of Program Structure on Page Faults • <128 physical memory pages for each process. Each page is of 128x4 bytes • Program structure • Int[128,128] data; • Each row is stored in one page • Page faults of Program 1? for (j = 0; j <128; j++) for (i = 0; i < 128; i++) data[i,j] = 0; • Page faults of Program 2 ? for (i = 0; i < 128; i++) for (j = 0; j < 128; j++) data[i,j] = 0;
Other Issues – Impact of Program Structure • <128 physical pages for each process. Each page is of 128x4 bytes • Program structure • Int[128,128] data; • Each row is stored in one page • Program 1 for (j = 0; j <128; j++) for (i = 0; i < 128; i++) data[i,j] = 0; 128 x 128 = 16,384 page faults • Program 2 for (i = 0; i < 128; i++) for (j = 0; j < 128; j++) data[i,j] = 0; 128 page faults