Segmentation

Download Report

Transcript Segmentation

Segmentation
CS 537 – Introduction to Operating Systems
Segmentation
• Segmentation is a technique for breaking memory
up into logical pieces
• Each “piece” is a grouping of related information
–
–
–
–
data segments for each process
code segments for each process
data segments for the OS
etc.
• Like paging, use virtual addresses and use disk to
make memory look bigger than it really is
• Segmentation can be implemented with or without
paging
Segmentation
P1 data
P2 code
print
function
P2 data
P1 code
OS Code
OS data
logical address space
OS stack
Addressing Segments
• Let’s first assume no paging in the system
• User generates logical addresses
• These addresses consist of a segment number and
an offset into the segment
• Use segment number to index into a table
• Table contains the physical address of the start of
the segment
– often called the base address
• Add the offset to the base and generate the
physical address
– before doing this, check the offset against a limit
– the limit is the size of the segment
Addressing Segments
limit
S
base
o
logical address
segment table
o < limit
no
error
yes
+
Physical Address
Segmentation Hardware
• Sounds very similar to paging
• Big difference – segments can be variable in size
• As with paging, to be effective hardware must be
used to translate logical address
• Most systems provide segment registers
• If a reference isn’t found in one of the segment
registers
– trap to operating system
– OS does lookup in segment table and loads new
segment descriptor into the register
– return control to the user and resume
• Again, similar to paging
Protection and Sharing
• Like page tables, each process usually gets
its own segment table
• Unlike page tables, there usually exists a
global segment table for everyone
– this, however, is usually used by OS
• Access rights for segment are usually
included in table entry
• Multiple processes can share a segment
Protection and Sharing
limit base
200
0 1000 200
1200
1 3500 9000
LDT
2000
limit base
0 500
2500
2300
2500
1 9000 20000
3000
GDT
9000
limit base
0 1000 200
1 300 2000
LDT
12500
Segmentation Issues
• Entire segment is either in memory or on
disk
• Variable sized segments leads to external
fragmentation in memory
• Must find a space big enough to place
segment into
• May need to swap out some segments to
bring a new segment in
Segmentation with Paging
• Most architectures support segmentation and
paging
• Basic idea,
– segments exist in virtual address space
– base address in segment descriptor table is a virtual
address
– use paging mechanism to translate this virtual address
into a physical address
• Now an entire segment does not have to be in
memory at one time
– only the part of the segment that we need will be in
memory
Linear Address
• The base address gotten from the segment
descriptor table is concatenated with the
offset
• This new address is often referred to as a
linear address
• This is the address that is translated by the
paging hardware
virtual address from user
descriptor
offset
limit
+
base
segment table
linear address
directory
page
offset
page frame
PT directory
directory base
page table