[운영체제] 메모리 - 계층과 주소

Local Gaji·2026년 7월 30일

운영체제

목록 보기
14/19

메모리 계층

레지스터와 HDD의 접근 속도는 1억배 차이다. 하지만 속도가 빠를수록 가격이 비싸므로, 빠른 저장공간의 용량은 작게 둔다.
따라서 자주 쓸 데이터만 골라서 위쪽 계층에 놔둬야 성능이 좋아진다.
그러므로 자주 쓸 데이터를 예측하는 것이 중요하다.

메모리 지역성

실제 프로그램의 메모리 접근은 예측 가능한 패턴을 보인다. 프로그램은 랜덤하게 메모리를 사용하지 않는다.

  • 시간 지역성 : 방금 사용한 걸 곧 다시 사용하므로 캐시에 남겨둔다 (반복문 변수, 자주 호출되는 함수, 루프 카운터 등)
  • 공간 지역성 : 사용한 것의 주변 것들을 곧 사용하므로, 캐시에 1바이트가 아닌 한줄을 통째로(보통 64바이트) 남겨둔다 (배열 순회, 순차적 명령어 실행 등)

자바에서 ArrayList 순회가 LinkedList보다 훨씬 빠른 이유
배열 : 메모리에 연속으로 놓여서 (공간 지역성 ↑) 캐시 라인 하나를 끌어오면 옆 원소들이 딸려옴
연결 리스트 : 노드가 힙 여기저기 흩어져서 매 접근이 캐시 미스가 됨
알고리즘 복잡도가 같아도 실측에서 성능이 갈린다.


메모리 주소

주소 바인딩

프로그램에서 쓰는 주소는 논리/가상 주소로, 물리 메모리의 실제 위치가 아니다.
이 둘을 잇는 작업을 주소 바인딩이라고 한다.

  • 컴파일 타임 바인딩 : 컴파일 시점에 해당 프로그램이 올라갈 물리 주소를 정한다. 만약 그 자리가 이미 사용중이면 재컴파일 한다. 현대에는 사용하지 않음
  • 로드 타임 바인딩 : 컴파일 할땐 상대 주소로 두고, 메모리에 프로그램을 적재하는 로더가 적재 시점에 물리 주소를 확정한다. 현대에는 사용하지 않음
  • 실행 타임 바인딩 : 실행 도중에도 주소 변경이 계속 일어난다. 접근을 할때마다 변환해야 하므로 하드웨어(MMU)가 필요하다.

메모리 관리 장치 (Memory Management Unit, MMU)

CPU 안의 하드웨어로, 프로그램이 만든 논리 주소를 물리 주소로 실시간 변환한다.
메모리를 연속으로 할당한다고 가정할때, 원리는 아래와 같다.

  • 재배치 레지스터 : 프로세스가 올라간 물리 시작 주소
    • 물리 주소 = 물리 시작 주소 + 논리 주소
    • 물리 시작 주소를 바꾸면 프로세스를 통째로 옮길 수 있다
  • 한계 레지스터 : 프로시스의 크기 (논리 주소 상한)
    • 논리 주소가 한계를 넘으면 하드웨어가 메모리 보호를 위해 트랩을 건다

CPU가 논리 주소 d를 냈을때
1. MMU가 한계 레지스터와 비교하여, d가 크기를 넘으면 남의 영역이니 트랩
2. 통과하면 재배치 레지스터를 더해 물리 주소를 만들어 메모리에 접근한다

페이징의 페이지 테이블은 이 원리를 페이지 단위로 구현한 것이다.

0개의 댓글