"KOCW - 반효경 교수님의 운영체제" 를 듣고 정리한 내용입니다.
Memory Management
Logical Address vs Physical Address
메모리는 주소를 통해 접근하는 매체이다.
- Logical address (= virtual address)
- 프로세스마다 독립적으로 갖는 주소 공간
- 각 프로세스마다 0번지부터 시작
- CPU가 바라보는 주소는 logical address
- Physical address
- 메모리에 실제 올라가는 위치
- 아랫 부분에는 운영체제 커널이, 윗 부분에는 여러 프로그램들이 섞여서 올라가 있음
특정한 프로그램이 물리적인 메모리 어디에 올라갈 지 결정하는 것을 주소 바인딩이라고 한다.
주소 바인딩 (Address Binding)
- Compile time binding
- 컴파일될 때 주소 변환이 이루어짐 (논리적 주소 = 물리적 주소)
- 컴파일러는 absolute code 생성
- 비효율적, 현재 잘 사용하지 않음
- Load time binding
- 실행 시작될 때 주소 변환이 이루어짐
- 컴파일러가 relocatable code 생성한 경우
- 항상 특정 위치에 올라가는 것이 아니라 실행 시 비어있는 위치로 올라갈 수 있음
- Execution time binding (= Runtime binding)
- 실행 이후에도 물리적인 메모리 주소가 바뀔 수 있음
- CPU가 주소를 참조할 때마다 바인딩 점검
- 하드웨어적인 지원 필요 (MMU)
Memory-Management Unit (MMU)
- MMU
- 논리적 주소를 물리적 주소로 매핑해주는 하드웨어 장치
- MMU scheme
- 두 개의 레지스터를 이용해서 주소 변환
- base register (relocation register) : 접근할 수 있는 물리적 메모리 주소의 최소값
- limit register : 논리적 주소의 범위
trap
(SW interrupt)이 걸린다. 프로그램 크기 이내에 있는 요청이라면 (논리 주소 + base register) 값을 메모리에서 찾는다. - 두 개의 레지스터를 이용해서 주소 변환