CS 333 Introduction to Operating Systems Class 9

  • Slides: 77
Download presentation
CS 333 Introduction to Operating Systems Class 9 - Memory Management Jonathan Walpole q

CS 333 Introduction to Operating Systems Class 9 - Memory Management Jonathan Walpole q Computer Science Portland State University q q

Memory management q q q Memory – a linear array of bytes v Holds

Memory management q q q Memory – a linear array of bytes v Holds O. S. and programs (processes) v Each memory cell is named by a unique memory address Recall, processes are defined by an address space, consisting of text, data, and stack regions Process execution v CPU fetches instructions from the text region according to the value of the program counter (PC) v Each instruction may request additional operands from the data or stack region

Addressing memory q q Cannot know ahead of time where in memory a program

Addressing memory q q Cannot know ahead of time where in memory a program will be loaded! Compiler produces code containing embedded addresses v these addresses can’t be absolute ( physical addresses) Linker combines pieces of the program v Assumes the program will be loaded at address 0 We need to bind the compiler/linker generated addresses to the actual memory locations

Relocatable address generation 0 Prog P : : foo() : : End P P:

Relocatable address generation 0 Prog P : : foo() : : End P P: : push. . . jmp _foo : foo: . . . Compilation Library Routines 100 P: : : push. . . jmp 175 jmp 75 : : 75 foo: . . . Assembly 175 foo: . . . Linking 1000 Library Routines 1100 P: : push. . . jmp 1175 : 1175 foo: . . . Loading

Address binding q q Address binding v fixing a physical address to the logical

Address binding q q Address binding v fixing a physical address to the logical address of a process’ address space Compile time binding v if program location is fixed and known ahead of time Load time binding v if program location in memory is unknown until run-time AND location is fixed Execution time binding v if processes can be moved in memory during execution v Requires hardware support!

0 Library Routines Compile Time Address Binding 100 P: 1000 Library Routines 1100 P:

0 Library Routines Compile Time Address Binding 100 P: 1000 Library Routines 1100 P: : push. . . jmp 1175 : : push. . . jmp 175 : 1175 foo: . . . Execution Time Address Binding Base register 1000 Load Time Address Binding 1000 0 Library Routines 100 P: : push. . . jmp 175 : 175 foo: . . . Library Routines 1100 P: : push. . . jmp 1175 : 1175 foo: . . .

Runtime binding – base & limit registers q q Simple runtime relocation scheme v

Runtime binding – base & limit registers q q Simple runtime relocation scheme v Use 2 registers to describe a partition For every address generated, at runtime. . . v Compare to the limit register (& abort if larger) v Add to the base register to give physical memory address

Dynamic relocation with a base register q q Memory Management Unit (MMU) - dynamically

Dynamic relocation with a base register q q Memory Management Unit (MMU) - dynamically converts logical addresses into physical address MMU contains base address register for running process Relocation register for process i Max Mem 1000 Max addr process i Program generated address 0 + MMU Physical memory address 0 Operating system

Protection using base & limit registers q Memory protection v Base register gives starting

Protection using base & limit registers q Memory protection v Base register gives starting address for process v Limit register limits the offset accessible from the relocation register limit register logical address < base register yes no addressing error Physical address + memory

Multiprogramming with base and limit registers q q Multiprogramming: a separate partition per process

Multiprogramming with base and limit registers q q Multiprogramming: a separate partition per process What happens on a context switch? v Store process A’s base and limit register values v Load new values into base and limit registers for process B Partition E limit base Partition D Partition C Partition B Partition A OS

Swapping q q q When a program is running. . . v The entire

Swapping q q q When a program is running. . . v The entire program must be in memory v Each program is put into a single partition When the program is not running. . . v May remain resident in memory v May get “swapped” out to disk Over time. . . v Programs come into memory when they get swapped in v Programs leave memory when they get swapped out

Basics - swapping q Benefits of swapping: v v Allows multiple programs to be

Basics - swapping q Benefits of swapping: v v Allows multiple programs to be run concurrently … more than will fit in memory at once Max mem Swap in Process m Process k Process i Process j Swap out Operating system 0

Swapping can lead to fragmentation

Swapping can lead to fragmentation

896 K O. S. 128 K

896 K O. S. 128 K

576 K 896 K O. S. 128 K P 1 320 K O. S.

576 K 896 K O. S. 128 K P 1 320 K O. S. 128 K

576 K 896 K O. S. 128 K 352 K P 2 224 K

576 K 896 K O. S. 128 K 352 K P 2 224 K P 1 320 K O. S. 128 K

64 K 576 K 896 K O. S. 128 K 352 K P 3

64 K 576 K 896 K O. S. 128 K 352 K P 3 288 K P 2 224 K P 1 320 K O. S. 128 K

64 K 576 K 896 K O. S. 128 K 352 K P 3

64 K 576 K 896 K O. S. 128 K 352 K P 3 288 K P 2 224 K 64 K P 3 288 K 224 K P 1 320 K O. S. 128 K

64 K 576 K 896 K O. S. 128 K 64 K P 3

64 K 576 K 896 K O. S. 128 K 64 K P 3 288 K 96 K P 4 128 K P 1 320 K O. S. 128 K 352 K P 3 288 K P 2 224 K 64 K P 3 288 K 224 K P 1 320 K O. S. 128 K

64 K 576 K 896 K O. S. 128 K 288 K 128 K

64 K 576 K 896 K O. S. 128 K 288 K 128 K P 1 320 K O. S. 128 K 288 K P 2 224 K P 3 288 K 224 K 320 K P 1 320 K O. S. 128 K 64 K P 3 96 K P 4 P 3 P 1 64 K P 3 352 K 64 K 288 K 96 K P 4 128 K 320 K O. S. 128 K

64 K 576 K 896 K O. S. 128 K 288 K 128 K

64 K 576 K 896 K O. S. 128 K 288 K 128 K P 1 320 K O. S. 128 K 288 K P 2 224 K P 3 288 K 224 K 320 K P 1 320 K O. S. 128 K 64 K P 3 96 K P 4 P 3 P 1 64 K P 3 352 K 64 K 288 K 64 K P 3 96 K P 4 128 K 320 K O. S. 128 K 288 K 96 K P 4 128 K 96 K P 5 224 K O. S. 128 K

64 K 576 K 896 K O. S. 128 K 288 K 128 K

64 K 576 K 896 K O. S. 128 K 288 K 128 K P 1 320 K O. S. 128 K 288 K P 2 224 K P 3 288 K 224 K 320 K P 1 320 K O. S. 128 K 64 K P 3 96 K P 4 P 3 P 1 64 K P 3 352 K 64 K 288 K 64 K P 3 96 K P 4 128 K 320 K O. S. 128 K 288 K 64 K P 3 96 K 288 K 96 K P 4 128 K 96 K P 5 224 K O. S. 128 K ? ? ? P 6 128 K

Dealing with fragmentation q q Compaction – from time to time shift processes around

Dealing with fragmentation q q Compaction – from time to time shift processes around to collect all free space into one contiguous block Placement algorithms: First-fit, best-fit, worst-fit 64 K P 3 256 K 288 K 96 K P 4 128 K 96 K P 3 ? ? ? P 6 288 K 128 K P 4 128 K P 5 224 K O. S. 128 K P 6

Influence of allocation policy

Influence of allocation policy

How big should partitions be? q q q Programs may want to grow during

How big should partitions be? q q q Programs may want to grow during execution v More room for stack, heap allocation, etc Problem: v If the partition is too small programs must be moved v Requires modification of base and limit regs v Why not make the partitions a little larger than necessary to accommodate “some” growth? Fragmentation: v v External fragmentation = unused space between partitions Internal fragmentation = unused space within partitions

Allocating extra space within partitions

Allocating extra space within partitions

Managing memory q q Each chunk of memory is either v Used by some

Managing memory q q Each chunk of memory is either v Used by some process or unused (“free”) Operations v Allocate a chunk of unused memory big enough to hold a new process v Free a chunk of memory by returning it to the free pool after a process terminates or is swapped out

Managing memory with bit maps q q Problem - how to keep track of

Managing memory with bit maps q q Problem - how to keep track of used and unused memory? Technique 1 - Bit Maps v v A long bit string One bit for every chunk of memory 1 = in use 0 = free v Size of allocation unit influences space required • Example: unit size = 32 bits – overhead for bit map: 1/33 = 3% • Example: unit size = 4 Kbytes – overhead for bit map: 1/32, 769

Managing memory with bit maps q

Managing memory with bit maps q

Managing memory with linked lists q q q Technique 2 - Linked List Keep

Managing memory with linked lists q q q Technique 2 - Linked List Keep a list of elements Each element describes one unit of memory v v Free / in-use Bit (“P=process, H=hole”) Starting address Length Pointer to next element

Managing memory with linked lists q 0

Managing memory with linked lists q 0

Merging holes q Whenever a unit of memory is freed we want to merge

Merging holes q Whenever a unit of memory is freed we want to merge adjacent holes!

Merging holes

Merging holes

Merging holes

Merging holes

Merging holes

Merging holes

Merging holes

Merging holes

Managing memory with linked lists q Searching the list for space for a new

Managing memory with linked lists q Searching the list for space for a new process v First Fit v Next Fit • Start from current location in the list • Not as good as first fit v Best Fit • Find the smallest hole that will work • Tends to create lots of little holes v Worst Fit • Find the largest hole • Remainder will be big v Quick Fit • Keep separate lists for common sizes

Fragmentation q q q Memory is divided into partitions Each partition has a different

Fragmentation q q q Memory is divided into partitions Each partition has a different size Processes are allocated space and later freed After a while memory will be full of small holes! v No free space large enough for a new process even though there is enough free memory in total v This is external fragmentation If we allow free space within a partition we have internal fragmentation

Solution to fragmentation? q q q Allocate memory in equal fixed size units? v

Solution to fragmentation? q q q Allocate memory in equal fixed size units? v Reduces external fragmentation problems v But what about wasted space inside a unit due to internal fragmentation? How big should the units be? v The smaller the better for internal fragmentation v The larger the better for management overhead Can we use a unit size smaller than the memory needed by a process? v Ie, allocate non-contiguous units to the same process? v … but how would the base and limit registers work?

Using pages for non-contiguous allocation q q q Memory divided into fixed size page

Using pages for non-contiguous allocation q q q Memory divided into fixed size page frames n v Page frame size = 2 bytes v Lowest n bits of an address specify byte offset in page But how do we associate page frames with processes? v And how do we map memory addresses within a process to the correct memory byte in a page frame? Solution v Processes use virtual addresses v CPU uses physical addresses v hardware support for virtual to physical address translation

Virtual addresses q Virtual memory addresses (what the process uses) v Page number plus

Virtual addresses q Virtual memory addresses (what the process uses) v Page number plus byte offset in page v Low order n bits are the byte offset v Remaining high order bits are the page number bit 31 bit n-1 20 bits page number bit 0 12 bits offset Example: 32 bit virtual address Page size = 212 = 4 KB Address space size = 232 bytes = 4 GB

Physical addresses q Physical memory addresses (what the CPU uses) v Page frame number

Physical addresses q Physical memory addresses (what the CPU uses) v Page frame number plus byte offset in page v Low order n bits are the byte offset v Remaining high order bits are the page frame number bit 24 bit n-1 12 bits Page frame number bit 0 12 bits offset Example: 24 bit physical address Page frame size = 212 = 4 KB Max physical memory size = 224 bytes = 16 MB

Address translation q q Hardware maps page numbers to page frame numbers Memory management

Address translation q q Hardware maps page numbers to page frame numbers Memory management unit (MMU) has multiple registers for multiple pages v Like a base register except its value is substituted for the page number rather than added to it v Why don’t we need a limit register for each page?

Memory Management Unit (MMU) q

Memory Management Unit (MMU) q

Virtual address spaces q Here is the virtual address space v (as seen by

Virtual address spaces q Here is the virtual address space v (as seen by the process) Lowest address Highest address Virtual Addr Space

Virtual address spaces q The address space is divided into “pages” v In SPANK,

Virtual address spaces q The address space is divided into “pages” v In SPANK, the page size is 8 K Page 0 0 1 2 3 4 5 6 7 Page 1 A Page N Virtual Addr Space Page N

Virtual address spaces q In reality, only some of the pages are used Unused

Virtual address spaces q In reality, only some of the pages are used Unused 0 1 2 3 4 5 6 7 N Virtual Addr Space

Physical memory q Physical memory is divided into “page frames” v (Page size =

Physical memory q Physical memory is divided into “page frames” v (Page size = frame size) 0 1 2 3 4 5 6 7 N Virtual Addr Space Physical memory

Virtual and physical address spaces q Some page frames are used to hold the

Virtual and physical address spaces q Some page frames are used to hold the pages of this process 0 1 2 3 4 5 6 7 These frames are used for this process N Virtual Addr Space Physical memory

Virtual and physical address spaces q Some page frames are used for other processes

Virtual and physical address spaces q Some page frames are used for other processes 0 1 2 3 4 5 6 7 Used by other processes N Virtual Addr Space Physical memory

Virtual address spaces q Address mappings say which frame has which page 0 1

Virtual address spaces q Address mappings say which frame has which page 0 1 2 3 4 5 6 7 N Virtual Addr Space Physical memory

Page tables q q Address mappings are stored in a page table in memory

Page tables q q Address mappings are stored in a page table in memory One page table entry per page. . . v Is this page in memory? If so, which frame is it in? 0 1 2 3 4 5 6 7 N Virtual Addr Space Physical memory

Address mappings and translation q q q Address mappings are stored in a page

Address mappings and translation q q q Address mappings are stored in a page table in memory v Typically one page table for each process Address translation is done by hardware (ie the MMU) How does the MMU get the address mappings? v Either the MMU holds the entire page table (too expensive) v Or the MMU holds a portion of the page table • MMU caches page table entries • called a translation look-aside buffer (TLB)

Address mappings and translation q q q What if the TLB needs a mapping

Address mappings and translation q q q What if the TLB needs a mapping it doesn’t have? Software managed TLB v it generates a TLB-miss fault which is handled by the operating system (like interrupt or trap handling) v The operating system looks in the page tables, gets the mapping from the right entry, and puts it in the TLB Hardware managed TLB v it looks in a pre-specified memory location for the appropriate entry in the page table v The hardware architecture defines where page tables must be stored in memory

The SPANK architecture q q Page size v 8 Kbytes Virtual addresses (“logical addresses”)

The SPANK architecture q q Page size v 8 Kbytes Virtual addresses (“logical addresses”) v 24 bits --> 16 Mbyte virtual address space v 2 K Pages --> 11 bits for page number

The SPANK architecture q q q Page size v 8 Kbytes Virtual addresses (“logical

The SPANK architecture q q q Page size v 8 Kbytes Virtual addresses (“logical addresses”) v 24 bits --> 16 Mbyte virtual address space v 2 K Pages --> 11 bits for page number An address: 13 12 23 11 bits page number 0 13 bits offset

The SPANK architecture q Physical addresses v 32 bits --> 4 Gbyte installed memory

The SPANK architecture q Physical addresses v 32 bits --> 4 Gbyte installed memory (max) v 512 K Frames --> 19 bits for frame number

The SPANK architecture q Physical addresses v 32 bits --> 4 Gbyte installed memory

The SPANK architecture q Physical addresses v 32 bits --> 4 Gbyte installed memory (max) v 512 K Frames --> 19 bits for frame number 13 12 31 19 bits frame number 0 13 bits offset

The SPANK architecture q q The page table mapping: v Page --> Frame Virtual

The SPANK architecture q q The page table mapping: v Page --> Frame Virtual Address: 23 13 12 0 11 bits q Physical Address: 31 19 bits

The SPANK page table q q q An array of “page table entries” v

The SPANK page table q q q An array of “page table entries” v Kept in memory 2 K pages in a virtual address space? v ---> 2 K entries in the table Each entry v 19 bits v 1 bit v 9 bits is 4 bytes long The Frame Number Valid Bit Writable Bit Dirty Bit Referenced Bit Unused (and available for OS algorithms)

Example from the textbook

Example from the textbook

The SPANK page table q q q Two page table related registers in the

The SPANK page table q q q Two page table related registers in the CPU v Page Table Base Register v Page Table Length Register These define the “current” page table. v Must be saved and restored on context switch Bits in the CPU “status register” “System Mode” “Interrupts Enabled” “Paging Enabled” 1 = Perform page table translation for every memory access 0 = Do not do translation

The SPANK page table q 31 frame number 19 bits 13 12 unused dirty

The SPANK page table q 31 frame number 19 bits 13 12 unused dirty bit referenced bit writable bit valid bit 0 D R W V

The SPANK page table q page table base register 31 0 1 2 2

The SPANK page table q page table base register 31 0 1 2 2 K frame frame number number Indexed by the page frame number 13 12 unused unused D D D R R R W W W 0 V V V

The SPANK page table 13 12 23 q page number 31 2 K offset

The SPANK page table 13 12 23 q page number 31 2 K offset virtual address page table base register 0 1 2 0 frame frame number number 13 12 unused unused D D D R R R W W W 0 V V V

The SPANK page table 13 12 23 q page number 31 frame frame 2

The SPANK page table 13 12 23 q page number 31 frame frame 2 K offset virtual address page table base register 0 1 2 0 number number 13 12 unused unused D D D R R R W W W 0 V V V 0 31 physical address

The SPANK page table 13 12 23 q page number 31 frame frame 2

The SPANK page table 13 12 23 q page number 31 frame frame 2 K offset virtual address page table base register 0 1 2 0 number number 13 12 unused unused D D D 13 12 31 W W W 0 offset physical address R R R 0 V V V

The SPANK page table 13 12 23 q page number 31 frame frame 2

The SPANK page table 13 12 23 q page number 31 frame frame 2 K offset virtual address page table base register 0 1 2 0 number number 13 12 unused unused D D D 13 12 31 W W W 0 offset physical address R R R 0 V V V

The SPANK page table 13 12 23 q page number 31 frame frame 2

The SPANK page table 13 12 23 q page number 31 frame frame 2 K 31 offset virtual address page table base register 0 1 2 0 number number 13 12 unused unused D D D 13 12 frame number physical address R R R W W W 0 V V V 0 offset

Quiz q q q q What is the difference between a virtual and a

Quiz q q q q What is the difference between a virtual and a physical address? What is address binding? Why are programs not usually written using physical addresses? Why is hardware support required for dynamic address translation? What is a page table used for? What is a TLB used for? How many address bits are used for the page offset in a system with 2 KB page size?

Spare Slides

Spare Slides

Making systems more usable q q q Dynamic Loading - load only those routines

Making systems more usable q q q Dynamic Loading - load only those routines that are accessed while running +) Does not load unused routines Dynamic Linking - link shared code such as system libraries and window code until run-time +) More efficient use of disk space Overlays - allows procedures to “overlay” each other to decrease the memory size required to run the program +) Allows more programs to be run +) Programs can be larger than memory

Basics - overlays q q Overlays - allow different parts of the same program

Basics - overlays q q Overlays - allow different parts of the same program to “overlay” each other in memory to reduce the memory requirements Example - scanner program 100 k window init, data structures 20 k overlay driver 140 k Image editing code 120 k Capture code

Memory management architectures q Fixed size allocation v v Memory is divided into fixed

Memory management architectures q Fixed size allocation v v Memory is divided into fixed partitions Fixed Partitioning (partition > proc. size) • Different constant size partitions v Paging (partition < proc. size) • Constant size partitions q Dynamically sized allocation v Memory allocated to fit processes exactly • Dynamic Partitioning (partition > proc. size) • Segmentation

Multiprogramming with fixed partitions q q Memory is divided into fixed size partitions Processes

Multiprogramming with fixed partitions q q Memory is divided into fixed size partitions Processes loaded into partitions of equal or greater size Internal Fragmentation

Multiprogramming with fixed partitions

Multiprogramming with fixed partitions

Dynamic partitioning q q Allocate contiguous memory equal to the process size Corresponds to

Dynamic partitioning q q Allocate contiguous memory equal to the process size Corresponds to one job queue for memory External Fragmentation