[운영체제] 13. Address Translation
Reference - Operating Systems: Three Easy Pieces
https://pages.cs.wisc.edu/~remzi/OSTEP/
Address translation
Address translation의 목적은 Transparency, Protection, Flexibility를 만족시키는 것이다.
Address translation은 언제 수행되는게 좋을까? 3가지 different time을 살펴보며 언제 수행하는 것이 좋을지 알아보겠다.
1. Compile time - pa에 va를 directly mapping하므로 불가능
2. Load time - 한 process가 다른 process memory에 interference할 수 있기에 가능한 안하는게 좋음
3. Execution time - 실행 시 실제 메모리에 접근하는 순간에 다른 물리적 주소에 mapping. - Good !
Efficiency 관점에서, Time efficiency는 하드웨어의 도움으로 해결하고, Space efficiency의 경우 추가적인 메모리를 최대한 안쓰는 방향으로 해결해야 한다.
Address translation에서 하드웨어를 살펴보면, CPU 안의 Memory Mangement Unit(MMU)가 runtime일 때 va를 pa로 mapping한다.
Dynamic relocation
Dynamic relocation은 OS 교재의 Address translation Technique 3개 중 하나로, Base and Bounds를 이용한다.
두 hardware(cpu) register를 이용한다.
base register는 프로세스 pa의 첫번째 주소, bound register는 프로그램의 한계 메모리 주소를 나타낸다.
그 과정은, 먼저 각 프로그램이 address 0 컴파일되고, 프로그램이 실행되면 os가 물리 메모리의 어디에 loading할지, 그리고 base and bound register를 어디로 설정할지 결정한다.
그다음 memory reference가 발생하면, runtime에 MMU가 va를 base를 통해 pa로 translate한다.
즉 pa = va + base다. 그리고 0 <= va <= bound다.
OS는 base and bounds를 위해 세가지 작업을 수행해야 한다.
1. running을 시작할 때, new address space를 위한 공간을 free list에서 찾아야한다.
2. process가 종료될 때, 메모리를 free해야 한다.
3. Context switch가 발생하면, PCB에 프로세스의 base. bound를 저장해야 한다.
Dynamic relocation의 문제는 virtual space size를 16KB로 제한했다는 점이다. 실제론 훨씬 큰 공간이 필요하다.