메모리 관리

메모리 관리

2025. 8. 5. 17:27Data Analysis/Computer Science

메모리 관리:한정된 공간을 효율적으로 쓰는 OS

CPU와 메모리 계층에 대해 이해했다면,

이번에는 이 한정된 메모리 자원을 운영체제(OS)가 어떻게 관리하는지,

그리고 왜 이런 복잡한 기술이 필요한지 그 동기부터 차근차근 알아봐야 한다.

 

컴퓨터의 메모리(RAM)는 아무리 용량이 커도 한정되어 있다.

하지만 우리는 수십 개의 프로그램을 동시에 띄워놓고 작업을 한다.

 

어떻게 이게 가능한가?

 

바로 운영체제의 ‘메모리 관리’ 덕분이다.

운영체제는 한정된 메모리를 최대한 효율적으로 활용하기 위한 기술들을 사용한다.

 

 

무한한 메모리의 착각, 가상 메모리

메모리 관리의 핵심은 바로 가상 메모리 (Virtual Memory)이다.

 

사용자 입장에서는 마치 실제 가지고 있는 메모리 용량보다

훨씬 더 큰 메모리를 가진 것처럼 보이며, 이것이 가성 메모리 기술의 목적이다.

OS는 실제 사용 가능한 메모리 자원을 ‘추상화’하여 사용자에게 무한히 큰 메모리로 보이게 만든다.

 

이를 위해 운영체제는 가상 주소(Logical Address)물리 주소(Physical Address)를 구분한다.

 

가상 주소

프로그램이 실행되는 동안 사용하는 논리적인 주소이다.

 

물리 주소

실제 메모리(RAM)에 있는 물리적인 주소이다.

운영체제는 MMU(메모리 관리 장치)라는 하드웨어의 도움을 받아 프로그램의 가상 주소를 물리 주소로 변환한다.

 

덕분에 사용자는 실제 메모리가 어떻게 구성되어 있는지 신경 쓸 필요 없이 프로그램을 만들고 실행할 수 있다.

이 가상 주소와 물리 주소의 매핑 정보는 ‘페이지 테이블’이라는 곳에 저장된다.

 

그리고 이 페이지 테이블도 속도 향상을 위해

TLB(Translation Lookaside Buffer) 라는 캐시 계층을 사용해 주소 변환을 가속화 한다.

 

 

가상 메모리의 핵심 기술, 스와핑과 페이지 폴트

가상 메모리가 어떻게 작동하는지 좀 더 깊이 들어가 보려면 다음 개념이 필요하다.

페이지(Page): 가상 메모리를 사용하는 최소 크기 단위
프레임(Frame): 실제 메모리(RAM)를 사용하는 최소 크기 단위

 

가상 메모리는 프로그램의 전체 코드를 한 번에 RAM에 올리는 것이 아니라,

페이지 단위로 필요한 부분만 RAM에 올린다.

 

만약 CPU가 어떤 데이터를 요청했는데,

그 데이터가 가상 메모리에는 있지만 현재 RAM에는 없다면 어떻게 될까?

바로 페이지 폴트(Page Fault)가 발생한다.

 

페이지 폴트(Page Fault)의 작동 과정

1. CPU가 특정 주소의 데이터를 요청한다.
2. MMU가 페이지 테이블을 확인하여 해당 데이터가 RAM에 없는 것을 발견한다.
3. MMU는 CPU에 트랩(trap)을 발생시켜 운영체제에게 이 사실을 알린다.
4. 운영체제는 CPU의 작업을 잠시 멈춘다.
5. 운영체제는 보조기억장치(HDD/SSD)에서 해당 페이지를 찾아 RAM의 비어 있는 프레임에 로드한다.
‘스와핑(Swapping)’
6. 페이지 테이블을 최신 정보로 업데이트함
7. 운영체제는 중단했던 CPU 작업을 다시 시작한다.

 

 

이러한 과정을 통해 CPU는 자신이 요청한 데이터가 RAM에 없었다는 것을 모른 채 작업을 이어갈 수 있다.

 

 

과도한 페이지 폴트의 문제, 스레싱

하지만 페이지 폴트가 너무 자주 발생하면 문제가 생긴다.

스레싱(Thrashing)은 메모리의 페이지 폴트율이 지나치게 높은 현상을 의미한다.

 

스레싱이 발생하면 CPU는 대부분의 시간을 데이터를 RAM에 올리는(스와핑) 데 사용하고, 정작 본래의 작업은 거의 하지 못하게 된다.

CPU 이용률이 급격히 떨어지는 것으로, 운영체제는 CPU가 한가하다고 착각하고 더 많은 프로세스를 메모리에 올린다.

결국, 페이지 폴트는 더 자주 발생하고, 시스템 성능은 최악의 상태에 빠지는 악순환이 반복된다.

 

이러한 스레싱을 해결하기 위해 운영체제는 다양한 방법을 사용한다.

 

작업 세트 (Working set)

프로세스이 자주 사용하는 페이지들의 집합을 미리 파악해 RAM에 올려놓는 방식

PFF (Page Fault Frequency)

페이지 폴트 발생 빈도를 모니터링하여,

너무 자주 발생하면 메모리 프레임을 늘려주고, 너무 적게 발생하면 줄여주는 방식

 

 

메모리 할당 방식: 데이터를 메모리에 어떻게 배치할까?

메모리 할당 방식은 크게 두 가지로 나눌 수 있다.

 

연속 할당 (Contiguous Allocation)

프로그램의 모든 코드를 하나의 연속된 메모리 공간에 할당하는 방식이다.

 

고정 분할 방식

메모리를 미리 고정된 크기로 나누어 관리하는 방식이다.

프로그램이 할당된 공간보다 작을 경우,

남는 공간이 생기는 내부 단편화(Internal Fragmentation)가 발생한다.

 

가변 분할 방식

프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용한다.

프로그램들이 메모리를 사용하고 반납하면서 작은 빈 공간(홀)들이 여기저기 생겨,

결국 큰 프로그램이 들어갈 수 없는 외부 단편화(External Fragmentation)이 발생한다.

 

 

메모리 교체 알고리즘: 누구를 내보낼 것인가?

메모리 공간이 부족해 새로운 페이지를 스와핑해야 할 때, 기존의 어떤 페이지를 내보내야 할까?

운영체제는 이 결정을 위해 다양한 페이지 교체 알고리즘을 사용한다.

  • FIFO: 가장 먼저 메모리에 들어온 페이지를 가장 먼저 내보낸다.
  • LRU: 가장 오랫동안 사용되지 않은 페이지를 내보낸다. 지역성 원리에 기반한 효과적인 알고맂므이다.
  • NUR: LRU의 복잡성을 개선한 알고리즘이다. ‘참조 비트’와 ‘수정 비트’를 사용해 최근에 사용되지 않은 페이지를 내보낸다.
  • LFU: 참조 횟수가 가장 적은 페이지를 내보낸다.

이 알고리즘들은 한정된 메모리 자원을 최대한 효율적으로 사용하기 위한 운영체제의 끊임없는 노력의 결과이다.

 

 

마치며

메모리 관리는 단순히 데이터를 저장하는 것을 넘어,

한정된 자원을 최대한 활용하여 사용자에게 쾌적환 컴퓨팅 환경을 제공하는 운영체제의 핵심 기술이다.

가상 메모리, 페이지 폴트, 스레싱과 같은 개념들은 모두 이러한 목표를 달성하기 위한 유기적인 과정임을 기억하자.

'Data Analysis > Computer Science' 카테고리의 다른 글

프로세스와 스레드  (3) 2025.08.11
CPU와 기억장치, 메모리  (3) 2025.08.04
운영체제와 컴퓨터  (4) 2025.08.01
자료구조는 왜 중요할까?  (0) 2025.03.14
추상 자료형 (Abstract Data Type)  (0) 2024.07.04