Prashanth L.A.
2023-09-05
OS illusion: memory virtualization
Dynamic relocation via base and bounds
Â
Â
Segment | Base | Size |
---|---|---|
Code | 32K | 2K |
Heap | 34K | 2K |
Stack | 28K | 2K |
Virtual address \(= 4200\)
Physical address is not \(34KB+4200\)
Heap starts at virtual address \(4KB\)
Virtual offset is \(4200-4KB=104\)
Phy addr \(= 34KB + 104 = 34920\)
\(01 \rightarrow\) heap, \(0000 0110 1000\), or hex \(0x068\), or decimal \(104\) is the offset
// get top 2 bits of 14-bit VA
Segment = (VirtualAddress & SEG_MASK) >> SEG_SHIFT
// now get offset
Offset = VirtualAddress & OFFSET_MASK
if (Offset >= Bounds[Segment])
RaiseException(PROTECTION_FAULT)
else
PhysAddr = Base[Segment] + Offset
Register = AccessMemory(PhysAddr)
Segment | Base | Size (max \(4K\)) | Grows positive? |
---|---|---|---|
Code | 32K | 2K | 1 |
Heap | 34K | 2K | 1 |
Stack | 28K | 2K | 0 |
Â
Segment | Base | Size (max \(4K\)) | Grows positive? | Permissions |
---|---|---|---|---|
Code | 32K | 2K | 1 | Read-execute |
Heap | 34K | 2K | 1 | Read-write |
Stack | 28K | 2K | 0 | Read-write |