0% found this document useful (0 votes)
34 views

Memapi

The document discusses virtual memory and process address spaces in operating systems. It covers: 1) How a process address space presents the same view of memory to all processes even though the actual memory mapping is handled by the OS through virtualization. 2) The responsibilities of the OS during program loading including creating the address space, loading the binary, and updating CPU registers. 3) How segments like code, data, heap, and stack are laid out in a conventional process address space and how their sizes can change dynamically at runtime through system calls. 4) User APIs for memory management including library functions like malloc() and system calls like brk(), mmap() that the OS provides to manipulate the address

Uploaded by

PK Tricks
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
34 views

Memapi

The document discusses virtual memory and process address spaces in operating systems. It covers: 1) How a process address space presents the same view of memory to all processes even though the actual memory mapping is handled by the OS through virtualization. 2) The responsibilities of the OS during program loading including creating the address space, loading the binary, and updating CPU registers. 3) How segments like code, data, heap, and stack are laid out in a conventional process address space and how their sizes can change dynamically at runtime through system calls. 4) User APIs for memory management including library functions like malloc() and system calls like brk(), mmap() that the OS provides to manipulate the address

Uploaded by

PK Tricks
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

CS330: Operating Systems

Virtual memory: Memory API


Recap: Process address space

Code

Data - Address space presents the same view of


Heap memory to all processes
- Address space is virtual
- OS enables this virtual view
Free

Stack
Recap: Process address space

- If all processes
Code have same address space, how they map to actual memory?
- Address space represents memory state of
- Architecture support used by OS to perform memory virtualization i.e.,
Data (Static)
a process
translateHeap
virtual address to physical address (will revisit)
- Address space layout is the same for all
- What are the responsibilities of the OS during program load?
the processes
- HowFree CPU register state is changed?
- Exact layout can be decided by the OS,
- Creating address space, loading binary, updating the PCB register state
conventional layout is shown
- What is the role of OS in dynamic memory allocation?
Stack
- Maintain the address space and enforce access permissions
User API for memory management
Library API USER
malloc( )
calloc( )
- Generally, user programs
free( )
…..
use library routines to
allocate/deallocate
System calls Code
(brk, mmap, ...) memory
Data
- OS provides some address
PCB Heap
space manipulation system
Memory state calls
Free
OS
Stack
User API for memory management
Library API USER
malloc( )
calloc( )
- Generally, user programs
free( )
Can the size of segments change at runtime? If yes,
-…..
use which
libraryones
routines
and to
how?
- HowSystem
can calls allocate/deallocate
we know about the segment layout at program load and runtime?
Code
- How(brk,
tommap,
allocate
...) memory
memory chunks with different permissions?
Data
- What is the structure of PCB memory state?
- OS provides some address
PCB Heap
space manipulation system
Memory state calls (today’s agenda)
Free
OS
Stack
Dynamically sizing the segments (UNIX)

Code
- Code segment size and initialized data
Data (initialized) segment size is fixed (at exe load)
Data (uninitialized)
Heap

Free

Stack
Dynamically sizing the segments (UNIX)

Code
- Code segment size and initialized data
Data (initialized) segment size is fixed (at exe load)
Data (uninitialized) - End of uninitialized data segment (a.k.a.
Heap
BSS) can be adjusted dynamically

Free

Stack
Dynamically sizing the segments (UNIX)

Code
- Code segment size and initialized data
Data (initialized) segment size is fixed (at exe load)
Data (uninitialized) - End of uninitialized data segment (a.k.a.
Heap
BSS) can be adjusted dynamically
- Heap allocation can be discontinuous,
Free
special system calls like mmap( ) provide
the facility
Stack
Dynamically sizing the segments (UNIX)

Code
- Code segment size and initialized data
Data (initialized) segment size is fixed (at exe load)
Data (uninitialized) - End of uninitialized data segment (a.k.a.
Heap
BSS) can be adjusted dynamically
- Heap allocation can be discontinuous,
Free
special system calls like mmap( ) provide
the facility
Stack - Stack grows automatically based on the
run-time requirements, no explicit system
calls
Sliding the BSS (brk, sbrk)
int brk(void *address);

- If possible, set the end of uninitialized data segment at address


- Can be used by C library to allocate/free memory dynamically

void * sbrk (long size);

- Increments the program’s data space by size bytes and returns the old value
of the end of bss
- sbrk(0) returns the current location of BSS
Finding the segments

- etext, edata and end variables mark the end of text segment, initialized data
segment and the BSS, respectively (At program load)
- sbrk(0) can be used to find the end of the data segment
- Printing the address of functions and variables
- Linux provides the information in /proc/pid/maps
User API for memory management
Library API USER

Can the size of segments change at runtime?-If yes, Generally,


which user
onesprograms
malloc( )
-calloc( ) and how?
-
free( )
….. Heap and data segments can be adjusted using brk use and
library
sbrkroutines to
- HowSystem
can calls allocate/deallocate
we know about the segment layout at program load and runtime?
Code
- Using
(brk,predefined
mmap, ...) variables, sbrk, proc file systemmemory
(Linux)
-
Data
How to allocate memory chunks with different - permissions?
OS provides some address
-
PCB Heap
What is the structure of PCB memory state? space manipulation system
Memory state calls (today’s agenda)
Free
OS
Stack
Discontiguous allocation (mmap)
- mmap( ) is a powerful and multipurpose system call to perform dynamic and
discontiguous allocation (explicit OS support)
- Allows to allocate address space
- with different protections (READ/WRITE/EXECUTE)
- at a particular address provided by the user
- Example: Allocate 4096 bytes with READ+WRITE permission
ptr = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_ANONYMOUS
|MAP_PRIVATE, -1, 0); // See the man page for details
User API for memory management
Library API USER

Can the size of segments change at runtime?-If yes, Generally,


which user
onesprograms
malloc( )
-calloc( ) and how?
-
free( )
….. Heap and data segments can be adjusted using brk use and
library
sbrkroutines to
- HowSystem
can calls allocate/deallocate
we know about the segment layout at program load and runtime?
Code
- Using
(brk,predefined
mmap, ...) variables, sbrk, proc file systemmemory
(Linux)
-
Data
How to allocate memory chunks with different - permissions?
OS provides some address
mmap( ) supports discontinuous allocation with space manipulation
permissionssystem
PCB Heap
- different
- What is the structure of PCB memory
Memory state
state? calls (today’s agenda)
Free
OS
Stack
Memory state of PCB (example)
PCB - Maintained as a sorted
Memory state
circular list accessible
from PCB
- START and END never
DATA(RO) CODE
STACK overlap between two
START - END START - END
START - END
READ + WRITE
… READ READ + EXEC segment areas
- Can merge/extend areas if
permissions match
User API for memory management
Library API USER

Can the size of segments change at runtime?-If yes, Generally,


which user
onesprograms
malloc( )
-calloc( ) and how?
free( )
- Heap and data segments can be adjusted using brk
…..
use and
library
sbrkroutines to
- HowSystem
can calls allocate/deallocate
we know about the segment layout at program load and runtime?
Code
- Using(brk,predefined
mmap, ...) variables, sbrk, proc file systemmemory
(Linux)
Data
- How to allocate memory chunks with different - permissions?
OS provides some address
- mmap( ) supports discontinuous allocation with space manipulation
permissionssystem
PCB Heap
different
- What is the structure of PCB memory
Memory state
state? calls (today’s agenda)
Free
-OS A sorted data structure of allocated areas can be used
Stack
Inheriting address space through fork( )
Code
Data - Child inherits the memory
Heap
PCB(parent) state of the parent
Memory state Free - The memory state
data structures are
Stack
fork( ) copied into the child
Code
Data PCB
PCB(child)
Heap
- Any change through
Memory state Free mmap( ) or brk( ) is
per-process
Stack
Overriding address space through exec( )
Code
Data
Heap - The address space is
PCB(old)
Memory state Free
reinitialized using the new
executable
Stack
exec(newp ) - Changes to newly created
Code (newp)
Data (newp)
address space depends on
the logic of new process
PCB(new)
Memory state Free

You might also like