현재의 메모리 관리 시스템은 상당히 복잡하다. 그렇다면 우리는 어쩌다가 이런 방식을 쓰게 되었는가?

  1. 아주 먼 옛날에는 Direct Addressing을 사용했다.

CPU가 메모리의 실제 물리적 주소에 직접 빨대를 꽂는 방식이다.

만약 프로그램이 100번지 주소에 7을 저장해! 라고 명령하면, 실제 램의 100번째 칸에 데이터가 들어간다

문제점은 멀티태스킹이 어렵다는 점이다. A 프로그램이 100번지를 쓰고 있는데 B 프로그램도 100번지를 쓰려고 하면 충돌이 난다. 프로그램 간 보안 또한 취약하다.

그렇다면 이에 대한 해결법으로 우리는 A 프로그램은 0번지부터 99번지, B프로그램은 100번지부터 199번지까지 쓰도록 할 수도 있다. 이게 바로 세그먼테이션의 등장이다.

하지만 프로그램마다 필요한 크기가 제각각이라 메모리 중간중간에 쓰지 못하는 빈 공간이 생기는 외부 단편화 (External Fragmentation) 문제가 발생한다. 이를 해결하기 위해 Virtual Memory가 등장한다.

프로그램을 작은 조각으로 나눠서 빈 곳에 아무데나 쓰셔 넣는것이다.

즉 프로그램을 분해하는 것이다! 하나의 프로그램으로 생각하는 것이 아니라.

이걸 가능하게 하는 것이 바로 MMU이다.

그러니깐 한마디로, 모든 문제를 해결하고자 메모리를 엄청 복잡하게 쓰겠다는 것이고, 이제 그 엄청 복잡하게 쓰는 방식을 잘 숙지하라는 얘기이다.