address translation: virtual -> physical address
base-and-bounds technique:
physical address = virtual address + base
- base register: transform virtual to physical address
- bounds register: ensure that the address are within the address space
process:
- created: find space
- terminated: reclaim memory
- context switch: save and restore base-and-bounds pair
- Run with these flags: -s 0 -n 10. What value do you have set -l (the bounds register) to in order to ensure that all the generated virtual addresses are within bounds?
$ ./relocation.py -s 0 -n 10 -l 930 -c
ARG seed 0
ARG address space size 1k
ARG phys mem size 16k
Base-and-Bounds register information:
Base : 0x0000360b (decimal 13835)
Limit : 930
Virtual Address Trace
VA 0: 0x00000308 (decimal: 776) --> VALID: 0x00003913 (decimal: 14611)
VA 1: 0x000001ae (decimal: 430) --> VALID: 0x000037b9 (decimal: 14265)
VA 2: 0x00000109 (decimal: 265) --> VALID: 0x00003714 (decimal: 14100)
VA 3: 0x0000020b (decimal: 523) --> VALID: 0x00003816 (decimal: 14358)
VA 4: 0x0000019e (decimal: 414) --> VALID: 0x000037a9 (decimal: 14249)
VA 5: 0x00000322 (decimal: 802) --> VALID: 0x0000392d (decimal: 14637)
VA 6: 0x00000136 (decimal: 310) --> VALID: 0x00003741 (decimal: 14145)
VA 7: 0x000001e8 (decimal: 488) --> VALID: 0x000037f3 (decimal: 14323)
VA 8: 0x00000255 (decimal: 597) --> VALID: 0x00003860 (decimal: 14432)
VA 9: 0x000003a1 (decimal: 929) --> VALID: 0x000039ac (decimal: 14764)
- Run with these flags: -s 1 -n 10 -l 100. What is the maximum value that base can be set to, such that the address space still fits into physical memory in its entirety?
ARG address space size 1k ARG phys mem size 16k
16 * 1024 - 100 = 16284
$ ./relocation.py -s 1 -n 10 -l 100 -b 16285
ARG seed 1
ARG address space size 1k
ARG phys mem size 16k
Base-and-Bounds register information:
Base : 0x00003f9d (decimal 16285)
Limit : 100
Error: address space does not fit into physical memory with those base/bounds values.
Base + Limit: 16385 Psize: 16384
- Run some of the same problems above, but with larger address spaces (-a) and physical memories (-p).
$ ./relocation.py -s 1 -n 10 -l 100 -b 16285 -p 16385 -c
ARG seed 1
ARG address space size 1k
ARG phys mem size 16385
Base-and-Bounds register information:
Base : 0x00003f9d (decimal 16285)
Limit : 100
Virtual Address Trace
VA 0: 0x00000089 (decimal: 137) --> SEGMENTATION VIOLATION
VA 1: 0x00000363 (decimal: 867) --> SEGMENTATION VIOLATION
VA 2: 0x0000030e (decimal: 782) --> SEGMENTATION VIOLATION
VA 3: 0x00000105 (decimal: 261) --> SEGMENTATION VIOLATION
VA 4: 0x000001fb (decimal: 507) --> SEGMENTATION VIOLATION
VA 5: 0x000001cc (decimal: 460) --> SEGMENTATION VIOLATION
VA 6: 0x0000029b (decimal: 667) --> SEGMENTATION VIOLATION
VA 7: 0x00000327 (decimal: 807) --> SEGMENTATION VIOLATION
VA 8: 0x00000060 (decimal: 96) --> VALID: 0x00003ffd (decimal: 16381)
VA 9: 0x0000001d (decimal: 29) --> VALID: 0x00003fba (decimal: 16314)