memory virtualization the unix memory api
play

Memory Virtualization: The UNIX Memory API Prof. Patrick G. Bridges - PowerPoint PPT Presentation

University of New Mexico Memory Virtualization: The UNIX Memory API Prof. Patrick G. Bridges 1 University of New Mexico Memory API: malloc() #include <stdlib.h> void* malloc(size_t size) Main programmer-level API in C.


  1. University of New Mexico Memory Virtualization: The UNIX Memory API Prof. Patrick G. Bridges 1

  2. University of New Mexico Memory API: malloc() #include <stdlib.h> void* malloc(size_t size)  Main programmer-level API in C.  Language-level interface, not the actual OS interface  Allocate a memory region on the heap. ▪ Argument ▪ size_t size : size of the memory block(in bytes) ▪ size_t is an unsigned integer type. ▪ Return ▪ Success : a void type pointer to the memory block allocated by malloc ▪ Fail : a null pointer  free/calloc/realloc also exist in the same vein 2

  3. University of New Mexico Lots of ways to go wrong with memory  Some sample things we’ve all done ▪ Not copying enough data (e.g. terminating nulls) ▪ Not allocating space for the data copied ▪ Not freeing data (memory leaks) ▪ Accessing data after its freed ▪ Freeing an area multiple times  What does each of these actually do?  Requires understanding how the language API is built on top of the OS memory API 3

  4. University of New Mexico Memory Management System Calls #include <unistd.h> int brk(void *addr) void *sbrk(intptr_t increment);  malloc  malloc library call use brk and/or mmap system calls. ▪ brk is called to expand the program’s break . ▪ break : The location of the end of the heap in address space ▪ sbrk is an additional call similar with brk. ▪ Programmers should never directly call either brk or sbrk.  What does this actually do? 4

  5. University of New Mexico How do brk and sbrk work? Address Space  The greyed-out area of an address 0x400000 Code space is not actually allocated. (Text) 0x401000  To use it, the OS has to make it Data 0xcf2000 available. Heap 0xd13000  Brk/sbrk sets the location of the boundary between allocated heap heap memory and unallocated memory! (free) stack 0x7fff9ca28000 Stack 0x7fff9ca49000 5

  6. University of New Mexico System Calls(Cont.) #include <sys/mman.h> void *mmap(void *ptr, size_t length, int port, int flags, int fd, off_t offset) ▪ mmap system call can create an anonymous memory region. 6

  7. University of New Mexico What about mmap? Address Space  mmap lets the program request finer- 0x400000 Code grain allocation of parts of its address (Text) 0x401000 space Data 0xcf2000  More than just moving the program Heap 0xd13000 break  Note that the address space is now heap disjoint! mmap region  mmap can also do implicit file I/O – (free) that’s a later topic… stack 0x7fff9ca28000 Stack 0x7fff9ca49000 7

  8. University of New Mexico How are malloc/new implemented?  The language runtime (libc) gets memory in chunks from the operating system ▪ Using mmap or sbrk – 4k or more at a time ▪ (Why not in smaller pieces?)  The language runtime divides these big blocks up to satisfy malloc/new requests ▪ Basic data structure is a “free list”, a linked list of free chunks of memory ▪ Malloc/new searches list to find a chunk to satisfy an allocation request ▪ Free returns things to this list  Important questions ▪ Where are the pointers for the linked lists stored? ▪ What block do you use to satisfy an allocation request? 8

  9. University of New Mexico Fragmentation: Storage Virtualization Enemy #1  We generally have to divide big blocks into smaller blocks, and there’s rarely an exact fit ▪ Variable-size allocations can result in with small, hard-to-allocate blocks ▪ Sometimes have to allocate space bigger than we want to  Wasted space from storage allocation is called fragmentation ▪ Internal fragmentation – wasted space that’s allocated but not used. (You want 5 bytes but we have to allocate 8) ▪ External fragmentation – small bits we can’t allocate  How do we allocate storage to handle fragmentation? 9

Recommend


More recommend