
Memory Allocation Copyright ©: University of Illinois CS 241 Staff 1 Recap: Virtual Addresses A virtual address is a memory address that a process uses to access its own memory Virtual address ≠ actual physical RAM address When a process accesses a virtual address, the MMU hardware translates the virtual address into a physical address The OS determines the mapping from virtual address to physical address Copyright ©: University of Illinois CS 241 Staff 2 Recap: Virtual Addresses Benefit: Isolation Virtual addresses in one process refer to different physical memory than virtual addresses in another Exception: shared memory regions between processes (discussed later) Benefit: Illusion of larger memory space Can store unused parts of virtual memory on disk temporarily Benefit: Relocation A program does not need to know which physical addresses it will use when it’s run Can even change physical location while program is running Copyright ©: University of Illinois CS 241 Staff 3 Mapping virtual to physical addresses Stack How does this thing work?? MMU Heap Data segment Code segment Physical RAM Copyright ©: University of Illinois CS 241 Staff 4 MMU and TLB Memory Management Unit (MMU) Hardware that translates a virtual address to a physical address Each memory reference is passed through the MMU Translate a virtual address to a physical address Lots of ways of doing this! Virtual Translation Physical MMU address CPU mapping address Memory TLB Cache of translations Copyright ©: University of Illinois CS 241 Staff 5 MMU and TLB Translation Lookaside Buffer (TLB) Cache for MMU virtual-to-physical address translations Just an optimization – but an important one! Virtual Translation Physical MMU address CPU mapping address Memory TLB Cache of translations Copyright ©: University of Illinois CS 241 Staff 6 Translating virtual to physical Can do it almost any way we like But, some ways are better than others… Strawman solution from last time Base and bound Copyright ©: University of Illinois CS 241 Staff 7 Base and bounds if (virt addr > bound) physical trap to kernel memory } else { physical phys addr = memory virt addr + base size } Process has the illusion of base + bound running on its own dedicated machine with memory virtual [0,bound) memory base Provides protection from bound other processes also currently in memory 0 0 Copyright ©: University of Illinois CS 241 Staff 8 Base and Bounds Registers Bounds Register Base Register Base Address Logical Base Address LA Address BA CPU < + MA+BA Address Physical Memory Memory Address Address PA MA Limit Address Fault Base: start of the process’s memory partition Limit: max address in the process’s memory partition Copyright ©: University of Illinois CS 241 Staff 9 Base and bounds physical Problem: Process needs more Process 1 memory memory over time Stack grows as functions are called Heap grows upon request (malloc) Processes start and end base + bound How does the kernel handle the virtual address space growing? memory base bound You are the OS designer Design algorithm for allowing 0 0 processes to grow Process 2 Copyright ©: University of Illinois CS 241 Staff 10 But wait, didn’t we solve this? grows Stack dynamically physical memory Problem: wasted space grows And must have dynamically Heap virtual mem ≤ phys mem base + bound fixed size Data segment base fixed size Code segment Copyright ©: University of Illinois CS 241 Staff 12 Another attempt: Segmentation Segment Region of contiguous memory Segmentation Generalized base and bounds with support for multiple segments at once Copyright ©: University of Illinois CS 241 Staff 13 Segmentation virtual physical memory memory segment 3 fff stack 46ff code Seg # Base Bound Description 0 4000 0 4000 700 Code segment 1 0 500 Data Virtual 2fff segment memory stack 2 Unused segment 1 04 ff data 2000 3 2000 1000 Stack 0 segment Virtual memory segment 0 4ff 6ff code 0 data Copyright ©: University of Illinois CS 241 Staff 14 Segmentation virtual physical memory memory segment 3 Segments are specified fff many different ways stack 46ff code Advantages over base and 0 4000 bounds? Protection Different segments can Virtual 2fff have different protections memory segment 1 stack Flexibility 04 ff data 2000 Can separately grow both 0 a stack and heap Enables sharing of code Virtual and other segments if memory segment 0 needed 4ff 6ff code 0 data Copyright ©: University of Illinois CS 241 Staff 15 Segmentation virtual physical memory memory segment 3 Segments are specified fff many different ways stack 46ff code Advantages over base and 0 4000 bounds? What must be changed on context switch? Virtual 2fff Contents of your memory segmentation table segment 1 stack 04 ff A pointer to the table, expose data 2000 caching semantics to the 0 software (what x86 does) Virtual memory segment 0 4ff 6ff code 0 data Copyright ©: University of Illinois CS 241 Staff 16 Recap: Mapping Virtual Memory Base & bounds Problem: growth is inflexible Problem: external fragmentation As jobs run and complete, holes left in physical memory Segments Resize pieces based on process needs Problem: external fragmentation Note: x86 used to support segmentation, now effectively deprecated with x86-64 Modern approach: Paging Copyright ©: University of Illinois CS 241 Staff 17 Paging virtual memory (for one process) Solve the external physical memory fragmentation page 0 problem by using frame 0 fixed-size chunks page 1 frame 1 of virtual and page 2 physical memory frame 2 Virtual memory page 3 unit called a page ... … Physical memory ... unit called a frame … frame Y (or sometimes page X page frame) Copyright ©: University of Illinois CS 241 Staff 18 Application Perspective Application believes it has a single, contiguous address space ranging from 0 to 2P – 1 bytes Where P is the number of bits in a pointer (e.g., 32 bits) In reality, virtual pages are scattered across physical memory This mapping is invisible to the program, and not even under it's control! Copyright ©: University of Illinois CS 241 Staff 19 Application Perspective (Reserved for OS) Lots of separate processes Stack Heap (Reserved for OS) Uninitialized vars (BSS segment) Initialized vars Stack (data segment) Code (text segment) Heap MMU (Reserved for OS) Uninitialized vars (BSS segment) Initialized vars Stack (data segment) Code (text segment) Heap Uninitialized vars (BSS segment) Initialized vars (data segment) Code (text segment) Physical RAM Copyright ©: University of Illinois CS 241 Staff 20 Translation process Virtual-to-physical address translation performed by MMU Virtual address is broken into a virtual page number and an offset Mapping from virtual page to physical frame provided by a page table (which is stored in memory) 0xdeadbeef = 0xdeadb 0xeef Virtual page number Offset Copyright ©: University of Illinois CS 241 Staff 21 Translation process virtual address virtual page # offset 0xeef page page table frame 0 page xdeadb 0 frame 1 physical address page page frame # page frame # offset frame 2 page frame 3 Page table entry ... page frame Y Copyright ©: University of Illinois CS 241 Staff 22 Translation process if (virtual page is invalid or non-resident or protected) trap to OS fault handler else physical frame # = pageTable[virtpage#].physPageNum Each virtual page can be in physical memory or swapped out to disk (called “paged out” or just “paged”) What must change on a context switch? Could copy entire contents of table, but this will be slow Instead use an extra layer of indirection: Keep pointer to current page table and just change pointer Copyright ©: University of Illinois CS 241 Staff 23 Where is the page table? Page Tables store the virtual-to-physical address mappings. Where are they located? In memory! OK, then. How does the MMU access them? The MMU has a special register called the page table base pointer This points to the physical memory address of the top of the page table for the currently-running process Copyright ©: University of Illinois CS 241 Staff 24 Where is the page table? MMU pgtbl base ptr Process A page tbl Process B page tbl Physical RAM Copyright ©: University of Illinois CS 241 Staff 25 Paging Can add read, write, execute protection bits to page table to protect memory Check is done by hardware during access Can give shared memory location different protections from different processes by having different page table protection access bits How does the processor know that a virtual page is not in memory? Resident bit tells the hardware that the virtual address is resident or non-resident Copyright ©: University of Illinois CS 241 Staff 26 Valid vs. Resident Resident Virtual page is in memory NOT an error for a program to access non-resident page Valid Virtual page is legal for the program to access e.g., part of the address space Copyright ©: University of Illinois CS 241 Staff 27 Valid vs. Resident Who makes a page resident/non-resident? OS memory manager Who makes a virtual page valid/invalid? User actions Why would a process want one if its virtual pages to be invalidated? Avoid accidental memory references to bad locations Copyright ©: University of Illinois CS 241 Staff 28 Page Table Entry Typical PTE format (depends on CPU architecture!) 1 1 1 2 20 M R V prot page frame number Various bits accessed by MMU on each page access: Modify bit: Indicates whether a page is “dirty” (modified) Reference bit: Indicates whether a page has been accessed (read or written) Valid bit:
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages49 Page
-
File Size-