170 likes | 601 Views
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.
E N D
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 OS stack logical address space
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 base S o logical address segment table Physical Address yes + o < limit no error
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 2000 LDT limit base 2300 0 500 2500 2500 1 3000 9000 20000 GDT 9000 limit base 0 1000 200 1 300 2000 12500 LDT
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 page table directory base