Segmentation in Operating Systems

16. Segmentation
Operating System: Three Easy Pieces
1
Youjip Won
Inefficiency of the Base and Bound Approach
Big chunk of “free” 
space
“free” space 
takes up
 physical memory.
Hard to run when an address space 
does not fit
into physical memory
2
Youjip Won
Segmentation
Segment is just 
a contiguous portion
 of the address space of a
particular length.
Logically-different segment: code, stack, heap
Each segment can be 
placed
 in 
different part of physical memory
.
Base
 and 
bounds
 exist 
per each segment
.
3
Youjip Won
Placing Segment In Physical Memory
4
Youjip Won
0KB
16KB
32KB
48KB
64KB
Code
Physical Memory
(not in use)
(not in use)
Heap
Stack
Operating System
(not in use)
Address Translation on Segmentation
The 
offset
 of virtual address 
100
 is 
100
.
The code segment 
starts at virtual address 0 
in address space.
5
Youjip Won
16KB
32KB
100
instruction
Heap
Code
(not in use)
(not in use)
34KB
Address Translation on Segmentation(Cont.)
The 
offset
 of virtual address 
4200
 is 
104
.
The heap segment 
starts at virtual address 4096
 in address space.
6
Youjip Won
32KB
Heap
Code
(not in use)
(not in use)
34KB
Address Space
Physical Memory
4200
data
36KB
Segmentation Fault or Violation
If an 
illegal address
 such as 7KB which is beyond the end of heap is
referenced, the OS occurs 
segmentation fault
.
The hardware detects that address is 
out of bounds
.
7
Youjip Won
6KB
Heap
4KB
(not in use)
Address Space
7KB
8KB
Referring to Segment
8
Youjip Won
Explicit approach
Chop up the address space into segments based on the 
top few bits 
of
virtual address.
Example: virtual address 4200 (01000001101000)
Referring to Segment(Cont.)
SEG_MASK = 0x3000(11000000000000)
SEG_SHIFT = 12
OFFSET_MASK = 0xFFF (00111111111111)
9
Youjip Won
1   
// get top 2 bits of 14-bit VA
2   Segment = (VirtualAddress & SEG_MASK) >> SEG_SHIFT
3
 
  
// now get offset
4   Offset = VirtualAddress & OFFSET_MASK
5   
if
 (Offset >= Bounds[Segment])
6   
 
RaiseException(PROTECTION_FAULT)
7   
else
8   
 
PhysAddr = Base[Segment] + Offset
9   
 
Register = AccessMemory(PhysAddr)
Referring to Stack Segment
Stack grows 
backward
.
Extra hardware support
 is need.
The hardware checks which way the segment grows.
1: positive direction, 0: negative direction
10
Youjip Won
Stack
(not in use)
(not in use)
28KB
26KB
Physical Memory
Segment Register(with Negative-Growth Support)
Support for Sharing
Segment can be 
shared between address
 space.
Code sharing 
is still in use in systems today.
 by extra hardware support.
Extra hardware support is need for form of 
Protection bits.
A few more bits
 per segment to indicate 
permissions
 of 
read,
 write and
execute
.
11
Youjip Won
Segment Register Values(with Protection)
Fine-Grained and Coarse-Grained
Coarse-Grained
 means segmentation in a small number.
 e.g., code, heap, stack.
Fine-Grained
 segmentation allows 
more flexibility
 for address space
in some early system.
To support many segments, Hardware support with a 
segment table
 is
required.
12
Youjip Won
OS support: Fragmentation
External Fragmentation
: little holes of 
free space
 in physical memory
that make difficulty to allocate new segments.
There is 
24KB free
, but 
not in one contiguous
 segment.
The OS 
cannot
 satisfy the 
20KB request
.
Compaction
: 
rearranging
 the exiting segments in physical memory.
Compaction is 
costly
.
Stop
 running process.
Copy
 data to somewhere.
Change
 segment register value.
13
Youjip Won
Memory Compaction
 
14
Youjip Won
0KB
16KB
32KB
48KB
64KB
Not compacted
Operating System
8KB
24KB
40KB
56KB
Allocated
(not in use)
0KB
16KB
32KB
48KB
64KB
Operating System
8KB
24KB
40KB
56KB
(not in use)
(not in use)
Allocated
(not in use)
Allocated
Allocated
Compacted
 
Disclaimer: This lecture slide set was initially developed for Operating System course in
Computer Science Dept. at Hanyang University. This lecture slide set is for OSTEP book
written by Remzi and Andrea at University of Wisconsin.
15
Youjip Won
Slide Note
Embed
Share

Segmentation in operating systems involves dividing the address space into logical segments like code, stack, and heap, each with its base and bounds in physical memory. Address translation ensures proper mapping of virtual addresses to physical memory locations, preventing segmentation faults. Learn how to efficiently manage memory segments and address translation in segmentation systems.

  • Segmentation
  • Operating Systems
  • Memory Management
  • Address Translation
  • Segmentation Fault

Uploaded on Sep 14, 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. 16. Segmentation Operating System: Three Easy Pieces 1 Youjip Won

  2. Inefficiency of the Base and Bound Approach 0KB 1KB Big chunk of free space Program Code 2KB 3KB free space takes up physical memory. 4KB 5KB Hard to run when an address space does not fit into physical memory Heap 6KB (free) 14KB 15KB Stack 16KB 2 Youjip Won

  3. Segmentation Segment is just a contiguous portion of the address space of a particular length. Logically-different segment: code, stack, heap Each segment can be placed in different part of physical memory. Base and bounds exist per each segment. 3 Youjip Won

  4. Placing Segment In Physical Memory 0KB Operating System 16KB (not in use) Segment Base Size Code Heap Stack Stack 32K 34K 28K 2K 2K 2K (not in use) 32KB Code Heap 48KB (not in use) 64KB Physical Memory 4 Youjip Won

  5. Address Translation on Segmentation ? ?????? ??????? = ?????? + ???? The offset of virtual address 100 is 100. The code segment starts at virtual address 0 in address space. 16KB Segment Base Code Size 2K 32K (not in use) ??? + ??? ?? ????? is the desired physical address 0KB 100 32KB instruction Code Program Code 2KB 34KB Heap 4KB (not in use) 5 Youjip Won

  6. Address Translation on Segmentation(Cont.) ??????? ??????? + ???? is not the correct physical address. The offset of virtual address 4200 is 104. The heap segment starts at virtual address 4096 in address space. Segment Base Heap Size 2K 34K (not in use) 32KB Code ??? + ??? ?? ????? is the desired physical address 4KB 4200 data 34KB Heap Heap 36KB 6KB (not in use) Address Space Physical Memory 6 Youjip Won

  7. Segmentation Fault or Violation If an illegal address such as 7KB which is beyond the end of heap is referenced, the OS occurs segmentation fault. The hardware detects that address is out of bounds. 4KB Heap 6KB 7KB 8KB (not in use) Address Space 7 Youjip Won

  8. Referring to Segment Explicit approach Chop up the address space into segments based on the top few bits of virtual address. 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Segment Offset Example: virtual address 4200 (01000001101000) Segment bits Code Heap Stack - 13 0 12 1 11 0 10 0 9 0 8 0 7 0 6 1 5 1 4 0 3 1 2 0 1 0 0 0 00 01 10 11 Segment Offset 8 Youjip Won

  9. Referring to Segment(Cont.) 1 // get top 2 bits of 14-bit VA 2 Segment = (VirtualAddress & SEG_MASK) >> SEG_SHIFT 3 // now get offset 4 Offset = VirtualAddress & OFFSET_MASK 5 if (Offset >= Bounds[Segment]) 6 RaiseException(PROTECTION_FAULT) 7 else 8 PhysAddr = Base[Segment] + Offset 9 Register = AccessMemory(PhysAddr) SEG_MASK = 0x3000(11000000000000) SEG_SHIFT = 12 OFFSET_MASK = 0xFFF (00111111111111) 9 Youjip Won

  10. Referring to Stack Segment Stack grows backward. Extra hardware support is need. The hardware checks which way the segment grows. 1: positive direction, 0: negative direction Segment Register(with Negative-Growth Support) Segment Base Code Heap Stack Size Grows Positive? 2K 1 2K 1 2K 0 (not in use) 32K 34K 28K 26KB Stack 28KB (not in use) Physical Memory 10 Youjip Won

  11. Support for Sharing Segment can be shared between address space. Code sharing is still in use in systems today. by extra hardware support. Extra hardware support is need for form of Protection bits. A few more bits per segment to indicate permissions of read, write and execute. Segment Register Values(with Protection) Segment Base Code Heap Stack Size Grows Positive? Protection 2K 1 Read-Execute 2K 1 Read-Write 2K 0 Read-Write 32K 34K 28K 11 Youjip Won

  12. Fine-Grained and Coarse-Grained Coarse-Grained means segmentation in a small number. e.g., code, heap, stack. Fine-Grained segmentation allows more flexibility for address space in some early system. To support many segments, Hardware support with a segment table is required. 12 Youjip Won

  13. OS support: Fragmentation External Fragmentation: little holes of free space in physical memory that make difficulty to allocate new segments. There is 24KB free, but not in one contiguous segment. The OS cannot satisfy the 20KB request. Compaction: rearranging the exiting segments in physical memory. Compaction is costly. Stop running process. Copy data to somewhere. Change segment register value. 13 Youjip Won

  14. Memory Compaction Not compacted Compacted 0KB 0KB 8KB 8KB Operating System Operating System 16KB 16KB (not in use) 24KB 24KB Allocated Allocated 32KB 32KB (not in use) 40KB 40KB Allocated 48KB 48KB (not in use) (not in use) 56KB 56KB Allocated 64KB 64KB 14 Youjip Won

  15. Disclaimer: This lecture slide set was initially developed for Operating System course in Computer Science Dept. at Hanyang University. This lecture slide set is for OSTEP book written by Remzi and Andrea at University of Wisconsin. 15 Youjip Won

More Related Content

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