User-Level Memory Management in Operating Systems

 
User-level Memory
 
Chris Gill, David Ferry, Brian Kocoloski, Marion Sudvarg
CSE 422S - Operating Systems Organization
Washington University in St. Louis
St. Louis, MO 63130
 
1
 
Virtual Memory Areas
 
Recall virtual/physical memory relationship
Pages are mapped to virtual memory
Virtual addresses require translation
 
CSE 422S – Operating Systems Organization
 
2
4KB
Process A
Process B
4KB
4KB
4KB
4KB
4KB
 
Virtual Address Translation:
Virtual
Address
Page
 
#
Offset
Physical
Page
Phys.
Addr
 
The valid virtual addresses in a process
$ 
cat /proc/self/maps
 
CSE 422S – Operating Systems Organization
 
3
 
/proc/<pid>/maps
 
Process Address Spaces
 
Each user space process has an address space
Pointer to 
mm_struct
 is NULL in kernel threads
Points to list of available memory areas
(
vm_area_struct
 , or 
“VMA”
)
Identifies code, data, heap, and stack segments
Is reference counted (
mm_count
 is 2+ if shared)
 
Address space has a flat range of addresses
Segmentation fault occurs if the process accesses
an address outside its allowed address segments
 
CSE 422S – Operating Systems Organization
 
4
 
task_struct
 
mm
 
mm_struct
 
mmap
mm_count
start_code
end_code
 
vm_area_struct
 
vm_start
vm_end
vm_page_prot
vm_flags
 
vm_prev
vm_next
 
vm_area_struct
vm_prev
vm_next
 
vm_area_struct
vm_prev
vm_next
 
Paging Review
 
CSE 422S – Operating Systems Organization
 
5
 Physical
Page
(4KB)
 
Linux terminology for 4-level page tables
PML: Page Map Level
PGD: Page Global Directory
PMD: Page Middle Directory
PTE: Page Table Entry
PML
PGD
PMD
PTE
 
Forking and Copy-on-Write
 
Recall that in our discussion of process creation,
we saw that Linux relies on a technique called
copy-on-write (CoW)
 
CoW is used to make process creation fast
All virtual memory segments in the parent process can
be accessed by the child process
But as soon as either the parent or child writes to a
memory location, their address spaces point to different
physical pages
 
Relies on the virtual memory subsystem
(including paging on paged-systems) to enforce
this behavior
 
6
 
CSE 422S – Operating Systems Organization
 
Metadata in Page Table Entries
 
7
 
CSE 422S – Operating Systems Organization
 
Recall the metadata bits within page table entries
Present (P): is the next level of page table (or the physical
page address, if we’re at the last level) present?
R/W/X: three separate bits indicating whether the memory
is readable, writable, and/or executable
Fork + CoW
8
 Physical
Page
(4KB)
PML
PGD
PMD
PTE
PML
PGD
PMD
PTE
Process A
(“parent”)
 
Process B
(“child”)
 
Set PTEs as
“unwritable”
CSE 422S – Operating Systems Organization
 
Fork + CoW
 
9
 Physical
Page
(4KB)
PML
PGD
PMD
PTE
PML
PGD
PMD
PTE
 
Process A
(“parent”)
 
Process B
(“child”)
 New
Physical
Page
(4KB)
 
As soon as either
A or B writes to the
page
Page fault (because
PTE unwritable)
Allocate new physical page
Update both PTEs to be
writable
 
 
CSE 422S – Operating Systems Organization
 
Kernel Source Pointers
 
kernel/fork.c
_do_fork()
call
 copy_process()
copy_process
call 
copy_mm()
copy_mm
call
 dup_mm()
dup_mm
call 
dup_mmap()
dup_mmap
call 
copy_page_range()
 
CSE 422S – Operating Systems Organization
 
10
 
mm/memory.c
copy_page_range
Recursively copies all
page table entries
over this address
range
 
Shared Memory use is Efficient
 
CSE 422S – Operating Systems Organization
 
11
Physical
Page
 
Shared Memory refers
to situations where
different processes
access same physical
pages
Same address
translation as usual
Virtual addresses map to
same physical page(s)
Page(s) can be readable/
writable by both processes,
writable by one process /
readable by the other, etc.
 
Shared Memory Concepts
 
Processes may share physical memory region
Communicate by modifying memory values
Kernel only invoked at creation & deletion
Reads/writes incur standard memory use costs
 
CSE 422S – Operating Systems Organization
 
12
 
Physical Address
(e.g. 0x1000)
 
Shared Memory
 
13
PML
PGD
PMD
PTE
PML
PGD
PMD
PTE
 
Process A
 
Process B
Physical
Page
(4KB)
 
CSE 422S – Operating Systems Organization
 
Some
 virtual address
in process A maps to the same
physical address as 
some
 virtual
address in process B
Do the virtual addresses have
to be the same if the physical
addresses are?
 
Shared Memory Uses:
(v)Forking/Cloning
 
fork(), vfork(), pthread_create(), etc.:
All use 
sys_clone() 
system call
 
sys_clone
 flags (LKD pp. 35)
Creating “threads”:
CLONE_VM | CLONE_FS | CLONE_FILES |
CLONE_SIGHAND
i.e., share address space, filesystem metadata, open
files, and signal handlers
Creating processes (fork):
No flags needed
Creating processes (vfork):
CLONE_VFORK | CLONE_VM
 
CSE 422S – Operating Systems Organization
 
14
 
“vFork” and thread creation
 
15
 Physical
Page
(4KB)
PML
PGD
PMD
PTE
PML
 
Process A
(“parent”)
 
Process B
(“child”)
 
Any virtual address maps to the
same physical address in both
processes A and B
 
Main benefit of vfork()
Page tables do not need
to be copied in new process/
thread
What types of programs
would benefit from this?
 
 
CSE 422S – Operating Systems Organization
 
Memory Mapping and Unmapping
 
Kernel creates a new address interval
The 
do_mmap
 function specifies access permissions, may
back it with a file (or may leave it 
anonymous
)
The 
do_munmap
 function removes the interval from the
process address space
May use 
vm_area_cachep
 (slab allocation)
 
User processes also may initiate memory mapping
Via the 
mmap() 
C library function
Useful for shared memory based communication
between processes: see 
man 7 shm_overview
 
CSE 422S – Operating Systems Organization
 
16
 
Today’s Studio:
Using Shared Memory in Linux
 
Three steps to use shared memory
1.
Create a shared file descriptor via 
shm_create()
2.
Resize shared region via 
ftruncate()
3.
Map region into process via 
mmap()
 
Shared regions are identified by name
 
Creator can specify user-level permissions
 
CSE 422S – Operating Systems Organization
 
17
 
Shared Memory Caveats
 
Basic interface: 
void*
 (untyped pointer)
Programmer must impose organization on shared
memory region, manipulate the pointer accordingly
E.g., casting pointer to specific type according to
how sharing processes have laid out memory use
 
Provides multi-threaded-like environment
But concurrency libraries (and others) may or may
not work when shared across processes
E.g. pthreads’ 
PTHREAD_PROCESS_SHARED etc.
May need to write your own concurrency code!
 
CSE 422S – Operating Systems Organization
 
18
Slide Note
Embed
Share

Exploring user-level memory concepts such as virtual memory areas, address spaces, paging, forking, and copy-on-write in the context of Linux operating systems. Learn about virtual/physical memory relationships, virtual address translation, process address spaces, and the use of techniques like copy-on-write for efficient process creation.

  • Memory Management
  • Operating Systems
  • Virtual Memory
  • Linux

Uploaded on Sep 27, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. User-level Memory Chris Gill, David Ferry, Brian Kocoloski, Marion Sudvarg CSE 422S - Operating Systems Organization Washington University in St. Louis St. Louis, MO 63130 1

  2. Virtual Memory Areas Recall virtual/physical memory relationship Pages are mapped to virtual memory Virtual addresses require translation Virtual Address Translation: Process A Process B Virtual Address Page# Offset 4KB 4KB 4KB 4KB 4KB 4KB Physical Page Phys. Addr CSE 422S Operating Systems Organization 2

  3. /proc/<pid>/maps The valid virtual addresses in a process $ cat /proc/self/maps CSE 422S Operating Systems Organization 3

  4. Process Address Spaces task_struct mm_struct vm_area_struct mm mmap mm_count start_code end_code vm_start vm_end vm_page_prot vm_flags vm_prev vm_next Each user space process has an address space Pointer to mm_struct is NULL in kernel threads Points to list of available memory areas (vm_area_struct , or VMA ) Identifies code, data, heap, and stack segments Is reference counted (mm_count is 2+ if shared) vm_area_struct vm_prev vm_next Address space has a flat range of addresses Segmentation fault occurs if the process accesses an address outside its allowed address segments vm_area_struct vm_prev vm_next CSE 422S Operating Systems Organization 4

  5. Paging Review PML Linux terminology for 4-level page tables PML: Page Map Level PGD: Page Global Directory PMD: Page Middle Directory PTE: Page Table Entry PGD PMD Physical Page (4KB) PTE CSE 422S Operating Systems Organization 5

  6. Forking and Copy-on-Write Recall that in our discussion of process creation, we saw that Linux relies on a technique called copy-on-write (CoW) CoW is used to make process creation fast All virtual memory segments in the parent process can be accessed by the child process But as soon as either the parent or child writes to a memory location, their address spaces point to different physical pages Relies on the virtual memory subsystem (including paging on paged-systems) to enforce this behavior CSE 422S Operating Systems Organization 6

  7. Metadata in Page Table Entries Index MetaData (r/w/x) (present) Page Address for next level of page table 0 342 P: 0 R: 1 W:0 X: 0 0x1234 . 511 Recall the metadata bits within page table entries Present (P): is the next level of page table (or the physical page address, if we re at the last level) present? R/W/X: three separate bits indicating whether the memory is readable, writable, and/or executable CSE 422S Operating Systems Organization 7

  8. Fork + CoW PML PML Process A ( parent ) Process B ( child ) PGD PGD Set PTEs as unwritable PMD PMD PTE PTE Physical Page (4KB) CSE 422S Operating Systems Organization 8

  9. Fork + CoW PML PML Process A ( parent ) Process B ( child ) PGD PGD Physical Page (4KB) PMD PMD As soon as either A or B writes to the page Page fault (because PTE unwritable) Allocate new physical page Update both PTEs to be writable New Physical Page (4KB) PTE PTE CSE 422S Operating Systems Organization 9

  10. Kernel Source Pointers kernel/fork.c _do_fork() call copy_process() copy_process call copy_mm() copy_mm call dup_mm() dup_mm call dup_mmap() dup_mmap call copy_page_range() mm/memory.c copy_page_range Recursively copies all page table entries over this address range CSE 422S Operating Systems Organization 10

  11. Shared Memory use is Efficient Shared Memory refers to situations where different processes access same physical pages Same address translation as usual Virtual addresses map to same physical page(s) Page(s) can be readable/ writable by both processes, writable by one process / readable by the other, etc. Process A Virtual Address Process B Virtual Address Page# Page# Offset Offset Physical Page CSE 422S Operating Systems Organization 11

  12. Shared Memory Concepts Processes may share physical memory region Communicate by modifying memory values Kernel only invoked at creation & deletion Reads/writes incur standard memory use costs Physical Address (e.g. 0x1000) 1 1 2 3 5 8 13 Process A Process B shm_ptr shm_ptr CSE 422S Operating Systems Organization 12

  13. Shared Memory Process A Process B PML PML Some virtual address in process A maps to the same physical address as some virtual address in process B Do the virtual addresses have to be the same if the physical addresses are? PGD PGD PMD PMD Physical Page (4KB) PTE PTE CSE 422S Operating Systems Organization 13

  14. Shared Memory Uses: (v)Forking/Cloning fork(), vfork(), pthread_create(), etc.: All use sys_clone() system call sys_clone flags (LKD pp. 35) Creating threads : CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND i.e., share address space, filesystem metadata, open files, and signal handlers Creating processes (fork): No flags needed Creating processes (vfork): CLONE_VFORK | CLONE_VM CSE 422S Operating Systems Organization 14

  15. vFork and thread creation PML PML Process A ( parent ) Process B ( child ) Any virtual address maps to the same physical address in both processes A and B PGD Main benefit of vfork() Page tables do not need to be copied in new process/ thread What types of programs would benefit from this? PMD PTE Physical Page (4KB) CSE 422S Operating Systems Organization 15

  16. Memory Mapping and Unmapping Kernel creates a new address interval The do_mmap function specifies access permissions, may back it with a file (or may leave it anonymous) The do_munmap function removes the interval from the process address space May use vm_area_cachep (slab allocation) User processes also may initiate memory mapping Via the mmap() C library function Useful for shared memory based communication between processes: see man 7 shm_overview CSE 422S Operating Systems Organization 16

  17. Todays Studio: Using Shared Memory in Linux Three steps to use shared memory 1. Create a shared file descriptor via shm_create() 2. Resize shared region via ftruncate() 3. Map region into process via mmap() Shared regions are identified by name Creator can specify user-level permissions CSE 422S Operating Systems Organization 17

  18. Shared Memory Caveats Basic interface: void* (untyped pointer) Programmer must impose organization on shared memory region, manipulate the pointer accordingly E.g., casting pointer to specific type according to how sharing processes have laid out memory use Provides multi-threaded-like environment But concurrency libraries (and others) may or may not work when shared across processes E.g. pthreads PTHREAD_PROCESS_SHARED etc. May need to write your own concurrency code! CSE 422S Operating Systems Organization 18

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#