주기억장치관리 - MMU
Programming/운영체제

주기억장치관리 - MMU

주기억장치관리의 핵심은 '메인 메모리를 어떻게 잘 관리할 수 있을까'에 있다.

CPU와 메인메모리와의 관계

1. 프로그램을 메모리에 올리기

실행파일을 메모리에 올릴 때 몇가지 해결해야할 이슈들이 있다.

- 메모리 몇 번지에 올릴 것인가?

- 만약 다중 프로그래밍 환경에서는?

1) MMU의 역할

a. 주소변환

메인메모리 안에서 매번 다른 address로 실행파일이 올라가더라도 MMU 덕분에 CPU는 정상적으로 data를 읽을 수 있다.

이것을 주소 변환(address translation)이라고 한다. 이를 이해하기 위해서는 CPU가 메인메모리로부터 데이터를 읽는 과정을 이해할 필요가 있다.

 

위 그림과 같이 CPU에서는 메모리에 접근하기 위해서 address를 보낸다. 주소를 보낸다는 것은 내가 몇번지를 읽겠다는 의미이다.그럼 그 주소에 해당하는 data가 읽혀져 온다.

 

예를 들어 만약 hwp 실행파일이 원래 0번지부터 시작한다고 하자. 그러나 메인메모리에 올라가는 순간 시작주소는 1,000번지일수도 5,000번지 일수도 있다. 시작 주소가 1,000번지일 경우 CPU가 hwp로부터 데이터를 읽기 위해 0번지 주소를 보내면 MMU가 여기에 1,000을 더한다. 이 역할을 MMU의 relocation register가 담당한다.

 

물론 Context Switching이 일어나 실행파일의 주소가 변하면 O/S가 MMU이 relocation register의 값을 변경한다.MMU를 기점으로 주소가 변환되기 때문에 MMU 이전의 주소를 논리주소, MMU 이후의 주소를 물리주소라고 부른다.

 

b. 다른 프로세스 침범하는지 감시

주소변환 말고도 MMU는 프로세스가 다른프로세스의 주소를 침범하는 것을 방지하는 역할을 한다.

 

예를 들어, hwp 프로그램이 실행 중이라면 CPU가 MMU의 base와 limit 사이가 아닌 다른 주소를 요청할 경우 바로 MMU에서 CPU로 인터럽트 신호가 간다. 인터럽트 신호를 받은 CPU는 그 즉시 실행 중인 프로그램을 종료하고 O/S안의 루틴으로 점프한다.

 

이렇게 MMU는 프로세스가 다른 프로세스를 침범하는지 감시하는 역할을 한다.