1. 메모리
1. 논리적 주소, 물리적 주소
- Logical Address
- 프로세스가 가지는 독자적인 주소 공간
- 0번지부터 시작한다.
- CPU는 논리적 주소를 봄
- 물리적 주소로 바이딩이 될 때 시작 위치는 바뀌지만, 그 안의 코드상의 주소(ex.20,30과 같은 애들)은 바뀌지 않음
- 따라서 cpu가 메모리 몇 번지를 달라 → 매번 주소 변환을 해서 전달함
- Physical Address
- 메모리에서 물리적으로 접근할 수 있는 주소
- 메모리에 실제 올라가는 위치
2. 주소 바인딩
- 프로세스가 실행되기 위해서는 메모리에 프로세스가 올라가야하고, 논리적 주소가 물리적 주소로 바뀌어야 한다.
- Symbolic address → Logical address → Physical address
- Compile time binding
- 절대 코드 생성(항상 주소가 동일)
- 메모리에 올리고 싶은 위치를 바꾸고 싶으면 컴파일을 다시 해야 한다.
- But, 뒤에 주소가 비었음에도 불구하고 0번지부터 주소를 결정하기 때문에 아주 비효율적인 방법
- 예전에 컴퓨터에서 하나의 프로그램만 실행할 수 있었던 시절에 썼던 방법
- Load time binding
- 컴파일을 하고 실행이 될 때 물리적인 주소 바인딩
- 실행될 때마다 주소가 달라질 수 있음
- 재배치가능 코드 생성(relocatable code)
- Execution time binding(=Run time binding)
- 실행 중간에도 바뀔 수 있음
- 실행을 하는 중에 물리적인 주소 바인딩이 되지만 중간에 바뀔 수 있음
- 프로세스가 Context Switching이 되는 경우(swapping)
- CPU가 해당 프로세스의 주소를 참조할 때마다 바인딩을 address mapping table을 이용하여 점검해야 함
- 하드웨어적인 지원 필요(MMU)
3. MMU (Memory-Management Unit)
- Logical address → Physical address로 매핑해주는 Hardware device
- relocation register(base register)
- limit register
- 프로그램의 최대 크기를 저장
- 논리적 주소의 최대 범위
- CPU가 물리적 주소를 요청하면 먼저 limit register 내에 있는지 확인한다.
- 넘으면 addressing error trap걸어서 종료시킴 (cpu 제어권을 운영체제로 넘기게됨)
- MMU scheme
- 사용자 프로세스가 CPU에서 수행되며 생성해내는 모든 주소값에 대해 base register의 값을 더한다.
- 사용자 프로그램은 논리적 주소만을 다루고, 물리적 주소는 알 필요가 없다.
- 주소를 요청하면 MMU가 알아서 바꿔주기 때문
4. 용어