본문 바로가기
스터디/CS 스터디

운영체제 - 가상 메모리

by xladmt 2025. 3. 17.

가상 메모리(Virtual Memory)란?

실제 물리 메모리 개념과 사용자의 논리 메모리 개념을 분리한 것이다. 메모리의 공간은 한정적이므로 사용자에게 더 많은 메모리를 제공하기 위해 가상 주소를 사용한다. 메모리 관리 장치는 가상 주소를 이용해 실제 데이터가 담겨 있는 주소로 변환해 준다. 여기서 가상 주소 공간은 하나의 프로세스가 메모리에 저장되는 논리적인 모습을 가상 메모리에 구현한 공간이며, 가상 주소는 해당 공간을 가리키는 주소이다.

 

가상 메모리가 필요한 이유

1. 물리 메모리의 한계

  • 모든 프로그램 코드를 물리 메모리에 올릴 수가 없다.
  • 그렇다고, 프로그램을 교체하면서 올리면 메모리 교체 성능 문제가 발생한다.

2. 가상 메모리의 장점

  • 프로그램 용량이 실제 물리 메모리보다 커도 된다.
  • 전체 프로그램이 물리 메모리에 올라와 있지 않아도 된다.
  • 더 많은 프로그램을 동시에 실행할 수 있다. (응답 시간은 유지, CPU 이용률과 처리율은 증가)
  • 다중 프로그래밍을 실현하기 위해 물리 메모리의 제약을 보완하고 프로세스 전체를 메모리에 올리지 않고도 실행할 수 있도록 해준다.

 

가상 메모리의 구현

운영 체제는 물리 메모리의 제약을 갖고 있는 주 기억 장치를 보조하기 위해 디스트를 보조 기억 장치(Paging Space)로 사용한다.

즉, 메인 메모리(주 기억 장치)와 디스크의 페이징 스페이스(보조 기억 장치)를 묶어 하나의 메모리처럼 동작하게 하며, 이를 통해 메인 메모리의 한계를 넘는 메모리 사용을 가능하게 하는 가상 메모리를 구현한다.

 

Swapping

CPU 할당 시간이 끝난 프로세스의 메모리를 보조 기억 장치를 내보내고(swap-out) 다른 프로세스의 메모리를 불러오는(swap-in)  작업을 swap이라고 한다. 이러한 swap 작업에는 디스크 전송 시간이 들기 때문에 메모리 공간이 부족할 때 swapping이 이루어 진다.

이는 다르게 말하면 프로세스를 실행하기 이해 모든 페이지에 적재될 필요가 없다는 말과 같다. 즉, 물리 메모리보다 더 큰 프로세스를 실행할 수 있다는 것이다.

 

연속 메모리 관리

프로그램 전체가 하나의 커다란 공간에 연속적으로 할당되어야 한다.

  • 고정 분할 기법 : 주 기억 장치가 고정된 파티션으로 분할 -> 내부 단편화 발생
  • 동적 분할 기법 : 파티션들이 동적 생성되면서 자신의 크기와 같은 파티션에 적재 -> 외부 단편화 발생

 

단편화(Fragmentation)

기억 장치의 빈 공간 또는 자료가 여러 조각으로 나뉘는 현상이다. 프로세스들이 메모리에 적재되도 제거되는 일이 반복되면, 프로세스들이 차지하는 메모리 틈 사이에 사용하지 못할 만큼의 자유 공간이 늘어나게 된다. 이러한 단편화는 2가지로 나뉜다.

 

내부 단편화

  • 프로세스가 사용하는 메모리 공간에 남는 부분
  • 프로세스가 요청한 양보다 더 많은 메모리를 할당할 때 발생하며, 메모리 분할 자유 공간과 프로세스가 사용하는 공간의 크기 차이를 의미한다.

 

외부 단편화

  • 메모리 공간 중 사용하지 못하게 되는 부분
  • 메모리 할당 및 해제 작업의 반복으로 작은 메모리가 중간 중간 존재할 수 있다. 이렇게 사용하지 않는 메모리가 존재해서 총 메모리 공간은 충분하지만 실제로 할당할 수 없는 상황이다.
  • 외부 단편화를 해결하기 위해 압축을 이용하여 프로세스가 사용하는 공간을 한쪽으로 몰 수 있지만, 작업 효율이 좋지 않다.

 

페이징(Paging)

프로세스의 논리 주소 공간을 페이지(page)라는 일정 단위로 자르고 메모리의 물리 주소 공간을 프레임(frame)이라는 페이지와 동일한 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법이다. 즉, 프로세스를 일정한 크기의 페이지로 분할해서 메모리에 적재하는 방식이다.

  • 페이지 : 고정 사이즈의 가상 메모리 내 프로세스 조각
  • 프레임 : 페이지 크기와 같은 주 기억 장치의 메모리 조각

하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없애는 메모리 관리 방법이다.

 

페이징 테이블(Paging Table)

프로세스를 이루는 페이지가 어느 프레임에 적재되어 있는 CPU가 일일이 알기 어렵다. 그리고 프로세스가 메모리에 불연속적으로 배치되어 있다면 CPU 입장에서 이를 순차적으로 실행할 수가 없다. 또한 CPU입장에서 다음에 실행할 명령어 위치를 찾기가 어려워진다. 이러한 문제들을 해결하기 위해 사용하는 것이 페이지 테이블이다.

 

실제 메모리 내의 주소인 물리 주소에 불연속적으로 배치되더라도 CPU가 바라보는 주소인 논리 주소에는 연속적으로 배치되도록 하는 방법이다. 페이지 번호화 프레임 번호를 짝지어 일종의 이정표 역할을 한다.

 

프로세스마다 페이지 테이블이 있다. CPU가 페이지번호를 통해 프레임에 접근할 수 있다. 그러므로 CPU는 논리 주소를 순차적으로 실행하면 된다.

외부 단편화는 해결할 수 있지만 내부 단편화 문제가 발생할 수 있다.

 

 

 

[참고]

https://code-piggy.tistory.com/entry/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EA%B0%80%EC%83%81%EB%A9%94%EB%AA%A8%EB%A6%AC-%ED%8E%98%EC%9D%B4%EC%A7%95-%ED%8E%98%EC%9D%B4%EC%A7%80-%ED%85%8C%EC%9D%B4%EB%B8%94-PTBR-TLB

'스터디 > CS 스터디' 카테고리의 다른 글

네트워크 - OSI 7계층  (0) 2025.04.01
운영체제 - 파일 시스템  (0) 2025.03.17
운영체제 - 동기화와 교착상태  (0) 2025.03.14
운영체제 - CPU 스케줄링  (0) 2025.03.10
운영체제 - 프로세스와 스레드  (0) 2025.03.10