Logical vs Phys Address
- Logical address(=virtual address)
- 각 프로세스마다 독립적으로 갖는 주소 공간
- 각 프로세스마다 0번지부터 시작
- CPU가 보는 주소는 logical address임
- Physical address
- 주소 바인딩: 주소를 결정하는 것
- 프로그램이 물리 주소 어디에 올라갈지를 결정!
- symbolic Addr → Logical addr →(여기 시점이 언제?) Phys addr
- 프로그래머 입장에서는 심볼 주소를 사용(프로그래머 입장에서는 심볼로 주소를 사용)
- 메모리 특정 주소 위치에 저장하는 게 아니라 변수 이름으로 저장
주소 바인딩 (Address Binding)
Complie time binding
- 물리적 메모리 주소가 컴파일 시 알려진다
- 시작 위치 변경시 다시 컴파일
- 컴파일러는 절대 코드(absolute code) 생성
Load time binding
- loader 책임하에 물리적 메모리 주소 부여
- 컴파일러가 재배치 가능 코드(relocatable code)를 생성한 경우에 가능
Execution time binding (=Run time binding)
- 수행이 시작된 이후에도 프로세스의 메모리 상 위치를 옮길 수 있음
- CPU가 주소를 참조할 때마다 binding을 점검 (address mapping table)
- 하드웨어적인 지원 필요
- base & limit registers(MMU)
- 소스 코드(심볼 주소 → 프로그래머는 메모리 주소를 이용하는 게 아니라 선언한 변수로 프로그래밍! 이때 이 변수가 해당 메모리 주소에 들어가 있는 값을 나타내는 심볼 주소에 해당)
- Add A, B ⇒ 둘 더해라
- jump C: C로 이동해라
- ⇒ Logic addr로 이동 (컴파일): 실행 파일 생성
- 심볼 주소가 숫자(논리) 주소로 변경!(프로그램마다 갖는 주소 ⇒ 논리 주소에 해당!)
- 가상 주소로 바뀐다.