CS

[CS] 가상 메모리는 왜 필요할까? (1)

kimsangjunzzang 2025. 7. 20. 23:38

안녕하세요, 루피입니다!

 

오늘은 가상 메모리(Virtual Memory) 에 대해 알아보겠습니다. 가상 메모리가 왜 필요하게 되었는지, 그리고 어떤 원리로 메모리를 관리하는지 핵심만 짚어보는 시간을 가져보겠습니다. 바로 시작합니다.


1. 가상 메모리(Virtual Memory)란?

가상 메모리란 물리 메모리(RAM) 의 크기에 구애받지 않고, 각 프로세스에게 실제보다 훨씬 크고 연속된 것처럼 보이는 메모리 공간을 할당하는 기술입니다.

  • 가상 주소 공간(Virtual Address Space): 각 프로세스는 자신만의 독립적인 주소 공간을 가집니다. 덕분에 프로세스는 다른 프로세스의 존재를 신경 쓸 필요 없이, 마치 메모리 전체를 혼자 쓰는 것처럼 동작할 수 있습니다.
  • 주소 변환: CPU가 사용하는 이 '가상 주소'는 MMU(Memory Management Unit) 라는 하드웨어 장치를 통해 실제 '물리 주소'로 빠르게 변환됩니다.

2. 가상 메모리는 왜 필요할까?

현대 운영체제가 멀티태스킹을 원활하게 수행할 수 있는 것은 모두 가상 메모리 덕분입니다.

  • 물리 메모리의 한계 극복: 실제 RAM 용량보다 훨씬 큰 프로그램을 실행할 수 있게 해줍니다.
  • 멀티태스킹 효율 증대: 프로그램의 모든 부분을 RAM에 올리는 대신, 지금 당장 필요한 부분만 올리고 나머지는 디스크(Swap 영역) 에 보관합니다. 덕분에 한정된 RAM으로 더 많은 프로세스를 동시에 실행할 수 있습니다.
  • 메모리 보호: 각 프로세스는 자신만의 가상 주소 공간에 완벽히 격리됩니다. 이로 인해 한 프로세스의 오류가 다른 프로세스의 메모리를 침범하는 것을 원천적으로 차단하여 시스템 전체의 안정성을 확보합니다.
  • 효율적인 프로세스 생성: 새로운 프로세스를 만들 때, 부모 프로세스의 메모리 전체를 복사하는 대신 페이지 테이블이라는 주소록만 복사합니다. 이후 데이터가 실제로 변경될 때만 해당 부분만 복사(Copy-on-Write)하여 프로세스 생성 속도를 크게 향상시킵니다.

3. 과거의 문제: 단편화 (Fragmentation)

가상 메모리가 없던 시절, 운영체제는 연속 메모리 할당 방식을 사용했습니다. 이는 프로그램을 메모리의 연속된 공간에 통째로 올리는 방식이었고, 단편화라는 문제를 낳았습니다.

  • 내부 단편화: 메모리를 고정된 크기로 미리 나눠두었을 때, 할당된 공간이 실제 필요한 공간보다 커서 내부에 낭비가 발생하는 현상입니다.
  • 외부 단편화: 메모리를 필요한 크기만큼 할당하고 해제하는 것을 반복하다 보면, 총 여유 공간은 충분한데 연속된 큰 덩어리가 없어 프로그램을 할당하지 못하는 현상입니다.

4. 해결책: 페이징과 세그멘테이션

이 단편화 문제를 해결하기 위해 불연속 메모리 할당 기법이 등장했고, 이것이 가상 메모리의 핵심 원리가 됩니다.

구분 페이징 (Paging) 세그멘테이션 (Segmentation)
분할 관점 물리적 단위 논리적 단위
분할 단위 페이지 (Page) - 고정 크기 세그먼트 (Segment) - 가변 크기
장점 외부 단편화 해결, 관리 용이 내부 단편화 해결, 데이터 보호 및 공유 용이
단점 내부 단편화 발생 가능 외부 단편화 발생 가능

1) 페이징

프로그램을 일정한 크기의 '페이지'로 잘게 쪼개, 물리 메모리의 '프레임'이라는 공간에 불연속적으로 저장하는 방식입니다. 컴퓨터가 관리하기 편하지만, 코드, 데이터 같은 논리적 구분이 없습니다.

2) 세그멘테이션

프로그램을 코드, 데이터, 스택 같은 의미 있는 '세그먼트' 단위로 나누어 저장하는 방식입니다. 개발자가 이해하기 쉽고, 세그먼트 단위로 접근 권한을 설정하기 좋아 데이터 보호에 유리합니다.


오늘도 화이팅입니다!