효율성과 제어를 위한 메모리 가상화
- 메모리 가상화는 효율성과 제어를 위한 limited direct execution(LDE)를 이용한다.
- 메모리 가상화에서 효율성과 제어는 하드웨어 지원을 통해서 얻어진다.
- 레지스터, TLB(Translation Look-aside Buffer)s, 페이지 테이블
Address Translation
- 하드웨어는 가상 주소를 실제 주소로 변경한다.
- 우리가 요구하는 정보는 실제로 물리적 주소에 저장되어 있다.
- OS는 하드웨어를 setup하기 위해 키 포인트에 포함되어 있어야한다.
- OS는 신중하게 메모리에 개입하여 메모리를 관리해야한다.
address translation 예시
void func()
int x;
...
x = x+3;
128 : movl 0x0(%ebx), %eax // 0+ebx를 eax로 Load
132 : addl $0x03 %eax // eax register에 3을 추가한다.
135 : movl %eax , 0x0(%ebx) // 다시 메모리 공간에 저장
// ARM 어셈블리
ldr r0, [r1]
add r0, r0, #3
str r0, [r1]
- eax register안으로 주소값을 Load
- eax register에 3을 추가
- eax의 값을 다시 메모리로 저장
- 128번 주소에 지시사항을 fetch
- 이 지시사항을 수행한다. (15KB 주소부터 load)
- 132번 주소에서 지시사항을 Fetch
- 이 지시사항을 수행한다. (참조할 메모리가 존재하지 않음)
- 135번 주소에서 지시사항을 Fetch
- 이 지시사항을 수행 (15KB 주소에 저장)
- Fetch : memory -> 프로세서
- Decode : 번역
- execute : 실행
address space 재배치
- OS는 0번지가 아닌 물리적 공간의 어느 지점에 프로세스를 위치시키고 싶어한다.
- address space의 시작 주소는 0이다.
Single relocated process
Base and Bound Register
Dynamic(Hardware base) Relocation
- 프로그램이 작동하기 시작할 때 OS는 어느 물리적공간에 프로세스가 load될지를 결정한다.(재배치 정보 : base, bound)
- base 레지스터의 값을 지정한다.
물리적 주소 = 가상주소 + base (63kB = 15kB + 48kB)
- 모든 가상 주소는 bound 보다 크거나 음수가 되면 안된다.
0 <= 가상 주소 < bound
재배치와 Address Translation
128 : movl 0x0(%ebx), %eax
Bound Register의 두가지 방법
- 물리적 주소 = 가상 주소 + 가상 주소의 base(< bound)
- address space에서의 bounds = 가상 주소 공간의 크기
- 물리적 메모리에서의 bounds = 실제 메모리에서의 address space의 끝 부분
메모리 가상화에서의 OS 문제
- OS는 base-and-bounds 접근을 이용한다.
- 세가지 중요한 순간
- 프로세스의 작동이 시작할 때(relocation)
- 실제 메모리에서 address space의 공간을 찾는다.
- 프로세스가 끝났을 때
- context switch가 발생한다면
- base-and-bounds 쌍을 저장하고 복구한다.
OS문제 : 프로세스 작동 시작 시
- OS는 새로운 address space를 위한 공간을 찾아야 한다.
- Free list : 사용중이지 않은 물리적 메모리의 리스트범위
OS문제 : 프로세스 작동이 종료되었을 때
- OS는 메모리를 free list에 넣어야 한다.
- free list : 이용되지 않는 physical memory의 range
OS문제 : Context Switch가 발생 한다면?