CS61C : Machine Structures

Similar documents
CS61C : Machine Structures

CS61C : Machine Structures

Lecture 7 More Memory Management Slab Allocator. Slab Allocator

CS61C : Machine Structures

CS61C : Machine Structures

Review! Lecture 5 C Memory Management !

CS61C : Machine Structures

Lectures 13 & 14. memory management

Review Pointers and arrays are virtually same C knows how to increment pointers C is an efficient language, with little protection

CS61C Midterm Review on C & Memory Management

CS61C : Machine Structures

One-Slide Summary. Lecture Outine. Automatic Memory Management #1. Why Automatic Memory Management? Garbage Collection.

ECE 598 Advanced Operating Systems Lecture 10

Motivation for Dynamic Memory. Dynamic Memory Allocation. Stack Organization. Stack Discussion. Questions answered in this lecture:

A.Arpaci-Dusseau. Mapping from logical address space to physical address space. CS 537:Operating Systems lecture12.fm.2

Run-time Environments -Part 3

CMSC 330: Organization of Programming Languages

Lecture 13: Garbage Collection

10.1. CS356 Unit 10. Memory Allocation & Heap Management

Acknowledgements These slides are based on Kathryn McKinley s slides on garbage collection as well as E Christopher Lewis s slides

Optimizing Dynamic Memory Management

Dynamic Memory Allocation. Basic Concepts. Computer Organization 4/3/2012. CSC252 - Spring The malloc Package. Kai Shen

Run-Time Environments/Garbage Collection

Heap Management. Heap Allocation

CMSC 330: Organization of Programming Languages

Automatic Memory Management

Memory Allocation. Copyright : University of Illinois CS 241 Staff 1

Memory Allocation. Static Allocation. Dynamic Allocation. Dynamic Storage Allocation. CS 414: Operating Systems Spring 2008

ECE 598 Advanced Operating Systems Lecture 12

Dynamic Memory Allocation

Memory Management. Memory Management... Memory Management... Interface to Dynamic allocation

CMSC 330: Organization of Programming Languages. Memory Management and Garbage Collection

Garbage Collection. Steven R. Bagley

Run-time Environments - 3

Manual Allocation. CS 1622: Garbage Collection. Example 1. Memory Leaks. Example 3. Example 2 11/26/2012. Jonathan Misurda

Dynamic Memory Allocation

Introduction to Computer Systems /18 243, fall th Lecture, Oct. 22 th

Garbage Collection. Akim D le, Etienne Renault, Roland Levillain. May 15, CCMP2 Garbage Collection May 15, / 35

ACM Trivia Bowl. Thursday April 3 rd (two days from now) 7pm OLS 001 Snacks and drinks provided All are welcome! I will be there.

Runtime. The optimized program is ready to run What sorts of facilities are available at runtime

Brought to you by CalLUG (UC Berkeley GNU/Linux User Group). Tuesday, September 20, 6-8 PM in 100 GPB.

Lecture #6 Intro MIPS; Load & Store Assembly Variables: Registers (1/4) Review. Unlike HLL like C or Java, assembly cannot use variables

Garbage Collection. Hwansoo Han

Garbage Collection (1)

Deallocation Mechanisms. User-controlled Deallocation. Automatic Garbage Collection

Compiler Construction

CS S-11 Memory Management 1

CS 536 Introduction to Programming Languages and Compilers Charles N. Fischer Lecture 11

Heap Management portion of the store lives indefinitely until the program explicitly deletes it C++ and Java new Such objects are stored on a heap

Chapter 10: Case Studies. So what happens in a real operating system?

Dynamic Memory Allocation I

Dynamic Memory Allocation. Gerson Robboy Portland State University. class20.ppt

Compiler Construction

CS 345. Garbage Collection. Vitaly Shmatikov. slide 1

CS 4120 Lecture 37 Memory Management 28 November 2011 Lecturer: Andrew Myers

G Programming Languages - Fall 2012

Sustainable Memory Use Allocation & (Implicit) Deallocation (mostly in Java)

Dynamic Memory Allocation I Nov 5, 2002

! What is main memory? ! What is static and dynamic allocation? ! What is segmentation? Maria Hybinette, UGA. High Address (0x7fffffff) !

Automatic Garbage Collection

Lecture Notes on Garbage Collection

More C Pointer Dangers

Dynamic Memory Management

Dynamic Memory Management! Goals of this Lecture!

CS 241 Honors Memory

Compilers. 8. Run-time Support. Laszlo Böszörmenyi Compilers Run-time - 1

6.172 Performance Engineering of Software Systems Spring Lecture 9. P after. Figure 1: A diagram of the stack (Image by MIT OpenCourseWare.

CSE P 501 Compilers. Memory Management and Garbage Collec<on Hal Perkins Winter UW CSE P 501 Winter 2016 W-1

CS577 Modern Language Processors. Spring 2018 Lecture Garbage Collection

Lecture Outine. Why Automatic Memory Management? Garbage Collection. Automatic Memory Management. Three Techniques. Lecture 18

Lecture 15 Garbage Collection

Class Information ANNOUCEMENTS

Memory management. Johan Montelius KTH

Design Issues. Subroutines and Control Abstraction. Subroutines and Control Abstraction. CSC 4101: Programming Languages 1. Textbook, Chapter 8

CSCI-UA /2. Computer Systems Organization Lecture 19: Dynamic Memory Allocation: Basics

CS61C : Machine Structures

Robust Memory Management Schemes

CS61C : Machine Structures

Performance of Non-Moving Garbage Collectors. Hans-J. Boehm HP Labs

In multiprogramming systems, processes share a common store. Processes need space for:

CS 33. Storage Allocation. CS33 Intro to Computer Systems XXVII 1 Copyright 2017 Thomas W. Doeppner. All rights reserved.

3137 Data Structures and Algorithms in C++

Reference Counting. Reference counting: a way to know whether a record has other users

The Art and Science of Memory Allocation

Binding and Storage. COMP 524: Programming Language Concepts Björn B. Brandenburg. The University of North Carolina at Chapel Hill

Garbage Collection Algorithms. Ganesh Bikshandi

Today. Dynamic Memory Allocation: Basic Concepts. Dynamic Memory Allocation. Dynamic Memory Allocation. malloc Example. The malloc Package

Discussion 4 Richard Guo SLAB, Buddy, Garbage Collection, and Intro to MIPS 01/30/09

CSC 1600 Memory Layout for Unix Processes"

Name, Scope, and Binding. Outline [1]

Process s Address Space. Dynamic Memory. Backing the Heap. Dynamic memory allocation 3/29/2013. When a process starts the heap is empty

Today. Dynamic Memory Allocation: Basic Concepts. Dynamic Memory Allocation. Dynamic Memory Allocation. malloc Example. The malloc Package

Operating Systems. 11. Memory Management Part 3 Kernel Memory Allocation. Paul Krzyzanowski Rutgers University Spring 2015

Engine Support System. asyrani.com

UC Berkeley CS61C : Machine Structures

Memory Allocation II. CSE 351 Autumn Instructor: Justin Hsia

CSCI-1200 Data Structures Fall 2011 Lecture 24 Garbage Collection & Smart Pointers

Algorithms for Dynamic Memory Management (236780) Lecture 4. Lecturer: Erez Petrank

Princeton University Computer Science 217: Introduction to Programming Systems. Dynamic Memory Management

In Java we have the keyword null, which is the value of an uninitialized reference type

Transcription:

inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structures Lecture 7 C Memory Management!!Lecturer SOE Dan Garcia!!!www.cs.berkeley.edu/~ddgarcia CS61C L07 More Memory Management (1)! 2010-02-03! Flexible plastic displays Phicot has come up with a way to print silicon electronics onto plastic as they are fed through rollers. The secret was depositing silicon at low enough temperatures that wonʼt melt the plastic.! www.technologyreview.com/computing/24433/

Review! C has 3 pools of memory! CS61C L07 More Memory Management (2)! What programs use what areas?! Static storage: global variable storage, basically permanent, entire program run! The Stack: local variable storage, parameters, return address! The Heap (dynamic storage): malloc() grabs space from here, free() returns it.! malloc() handles free space with freelist. Three different ways to find free space when given a request:! First fit (find first one thatʼs free)! Next fit (same as first, but remembers where left off)! Best fit (finds most snug free space)!

Slab Allocator! A different approach to memory management (used in GNU libc)! Divide blocks in to large and small by picking an arbitrary threshold size. Blocks larger than this threshold are managed with a freelist (as before).! For small blocks, allocate blocks in sizes that are powers of 2! e.g., if program wants to allocate 20 bytes, actually give it 32 bytes! CS61C L07 More Memory Management (3)!

Slab Allocator! Bookkeeping for small blocks is relatively easy: just use a bitmap for each range of blocks of the same size! Allocating is easy and fast: compute the size of the block to allocate and find a free bit in the corresponding bitmap.! Freeing is also easy and fast: figure out which slab the address belongs to and clear the corresponding bit.! CS61C L07 More Memory Management (4)!

Slab Allocator! 16 byte blocks:" 32 byte blocks:" 64 byte blocks:" 16 byte block bitmap: 11011000" 32 byte block bitmap: 0111" 64 byte block bitmap: 00" CS61C L07 More Memory Management (5)!

Slab Allocator Tradeoffs! Extremely fast for small blocks.! Slower for large blocks! But presumably the program will take more time to do something with a large block so the overhead is not as critical.! Minimal space overhead! No fragmentation (as we defined it before) for small blocks, but still have wasted space!! CS61C L07 More Memory Management (6)!

Internal vs. External Fragmentation! With the slab allocator, difference between requested size and next power of 2 is wasted! e.g., if program wants to allocate 20 bytes and we give it a 32 byte block, 12 bytes are unused.! We also refer to this as fragmentation, but call it internal fragmentation since the wasted space is actually within an allocated block.! External fragmentation: wasted space between allocated blocks.! CS61C L07 More Memory Management (7)!

Buddy System! Yet another memory management technique (used in Linux kernel)! Like GNUʼs slab allocator, but only allocate blocks in sizes that are powers of 2 (internal fragmentation is possible)! Keep separate free lists for each size! e.g., separate free lists for 16 byte, 32 byte, 64 byte blocks, etc.! CS61C L07 More Memory Management (8)!

Buddy System! If no free block of size n is available, find a block of size 2n and split it in to two blocks of size n! When a block of size n is freed, if its neighbor of size n is also free, combine the blocks in to a single block of size 2n! Buddy is block in other half larger block buddies! NOT buddies! Same speed advantages as slab allocator! CS61C L07 More Memory Management (9)!

Allocation Schemes! So which memory management scheme (K&R, slab, buddy) is best?! There is no single best approach for every application.! Different applications have different allocation / deallocation patterns.! A scheme that works well for one application may work poorly for another application.! CS61C L07 More Memory Management (10)!

Homework 2?! a) Done!! b) Almost done.! c) Started. Iʼm in the mix.! d) Just basically read it.! e) Havenʼt even started.! CS61C L07 More Memory Management (11)!

How many hours h on homework 2?! a) 0 h < 5! b) 5 h < 10! c) 10 h < 15! d) 15 h < 20! e) 20 h! CS61C L07 More Memory Management (12)!

Automatic Memory Management! Dynamically allocated memory is difficult to track why not track it automatically?! If we can keep track of what memory is in use, we can reclaim everything else.! Unreachable memory is called garbage, the process of reclaiming it is called garbage collection.! So how do we track what is in use?! CS61C L07 More Memory Management (13)!

Tracking Memory Usage! Techniques depend heavily on the programming language and rely on help from the compiler.! Start with all pointers in global variables and local variables (root set).! Recursively examine dynamically allocated objects we see a pointer to.! We can do this in constant space by reversing the pointers on the way down! How do we recursively find pointers in dynamically allocated memory?! CS61C L07 More Memory Management (14)!

Tracking Memory Usage! Again, it depends heavily on the programming language and compiler.! Could have only a single type of dynamically allocated object in memory! E.g., simple Lisp/Scheme system with only cons cells (61Aʼs Scheme not simple )! Could use a strongly typed language (e.g., Java)! Donʼt allow conversion (casting) between arbitrary types.! C/C++ are not strongly typed.! Here are 3 schemes to collect garbage! CS61C L07 More Memory Management (15)!

Scheme 1: Reference Counting! For every chunk of dynamically allocated memory, keep a count of number of pointers that point to it.! When the count reaches 0, reclaim.! Simple assignment statements can result in a lot of work, since may update reference counts of many items! CS61C L07 More Memory Management (16)!

Reference Counting Example! For every chunk of dynamically allocated memory, keep a count of number of pointers that point to it.! When the count reaches 0, reclaim.! int *p1, *p2; p1 = malloc(sizeof(int)); p2 = malloc(sizeof(int)); *p1 = 10; *p2 = 20; p1 p2 Reference! count = 1! 20! Reference! count = 1! 10! CS61C L07 More Memory Management (17)!

Reference Counting Example! For every chunk of dynamically allocated memory, keep a count of number of pointers that point to it.! When the count reaches 0, reclaim.! int *p1, *p2; p1 = malloc(sizeof(int)); p2 = malloc(sizeof(int)); *p1 = 10; *p2 = 20; p1 = p2; Reference! count = 2! 20! p1 p2 Reference! count = 0! 10! CS61C L07 More Memory Management (18)!

Reference Counting (p1, p2 are pointers)! p1 = p2; Increment reference count for p2 If p1 held a valid value, decrement its reference count! If the reference count for p1 is now 0, reclaim the storage it points to.! If the storage pointed to by p1 held other pointers, decrement all of their reference counts, and so on! Must also decrement reference count when local variables cease to exist.! CS61C L07 More Memory Management (19)!

Reference Counting Flaws! Extra overhead added to assignments, as well as ending a block of code.! Does not work for circular structures!! E.g., doubly linked list:! X" Y" Z" CS61C L07 More Memory Management (20)!

Scheme 2: Mark and Sweep Garbage Col.! Keep allocating new memory until memory is exhausted, then try to find unused memory.! Consider objects in heap a graph, chunks of memory (objects) are graph nodes, pointers to memory are graph edges.! Edge from A to B A stores pointer to B! Can start with the root set, perform a graph traversal, find all usable memory!! 2 Phases:! 1. Mark used nodes! 2. Sweep free ones, returning list of free nodes! CS61C L07 More Memory Management (21)!

Mark and Sweep! Graph traversal is relatively easy to implement recursively! void traverse(struct graph_node *node) { /* visit this node */ foreach child in node->children { traverse(child); } }! But with recursion, state is stored on the execution stack.! Garbage collection is invoked when not much memory left! As before, we could traverse in constant space (by reversing pointers)! CS61C L07 More Memory Management (22)!

Scheme 3: Copying Garbage Collection! Divide memory into two spaces, only one in use at any time.! When active space is exhausted, traverse the active space, copying all objects to the other space, then make the new space active and continue.! Only reachable objects are copied!! Use forwarding pointers to keep consistency! Simple solution to avoiding having to have a table of old and new addresses, and to mark objects already copied (see bonus slides)! CS61C L07 More Memory Management (23)!

Peer Instruction! 1) Since automatic garbage collection can occur any time, it is more difficult to measure the execution time of a Java program vs. a C program.! 2) We donʼt have automatic garbage collection in C because of efficiency.! 12 a) FF b) FT c) TF d) TT e)dunno CS61C L07 More Memory Management (24)!

And in Conclusion! Several techniques for managing heap via malloc and free: best-, first-, next-fit! 2 types of memory fragmentation: internal & external; all suffer from some kind of frag.! Each technique has strengths and weaknesses, none is definitively best! Automatic memory management relieves programmer from managing memory.! All require help from language and compiler! Reference Count: not for circular structures! Mark and Sweep: complicated and slow, works! Copying: Divides memory to copy good stuff! CS61C L07 More Memory Management (25)!

Bonus slides! These are extra slides that used to be included in lecture notes, but have been moved to this, the bonus area to serve as a supplement.! The slides will appear in the order they would have in the normal presentation! CS61C L07 More Memory Management (26)!

Forwarding Pointers: 1 st copy abc! abc" def" abc"?" xyz" From" To" CS61C L07 More Memory Management (27)!

Forwarding Pointers: leave ptr to new abc! abc" def" abc"?" xyz" From" To" CS61C L07 More Memory Management (28)!

Forwarding Pointers : now copy xyz! Forwarding pointer! def" abc"?" xyz" From" To" CS61C L07 More Memory Management (29)!

Forwarding Pointers: leave ptr to new xyz! Forwarding pointer! def" abc" xyz" xyz" From" To" CS61C L07 More Memory Management (30)!

Forwarding Pointers: now copy def! Forwarding pointer! def" abc" Forwarding pointer! xyz" From" To" Since xyz was already copied, def uses xyzʼs forwarding pointer to find its new location! CS61C L07 More Memory Management (31)!

Forwarding Pointers! Forwarding pointer! def" abc" def" Forwarding pointer! xyz" From" To" Since xyz was already copied, def uses xyzʼs forwarding pointer to find its new location! CS61C L07 More Memory Management (32)!