운영체제의 메모리 관리 기법
- CPU와 프로세스가 메모리 몇 번지에 무엇이 저장되어 있는지까지 다 일일이 알고 있지는 않음
- CPU 내부 저장공간(레지스터)이 메모리만큼 용량이 크지 않기 때문
- 게다가 새로운 프로세스는 새롭게 메모리에 적재되고 사용되지 않는 프로세스는 메모리에서 삭제되면서 시시때때로 메모리 정보가 변경되는데, 메모리에 적재된 모든 프로세스와 CPU가 실시간으로 바뀌는 정보를 모두 기억하기는 어려움
- CPU가 메모리에 적재된 프로세스의 주소를 인식하고 관리하는 방법 : 논리 주소, 가상 메모리, 페이징

물리 주소 & 논리 주소
- CPU와 프로세스는 메모리의 하드웨어 상 실제 주소인 물리 주소가 아니라 다른 주소 체계를 이용 : 논리 주소
- 논리 주소 : 프로세스마다 부여되는 0번지부터 시작하는 주소 체계
- EX : 웹 브라우저, 메모장, 게임 프로세스가 메모리에 적재되어 있다면, 모든 프로세스에는 0번지부터 시작하는 각자의 논리 주소를 가지고 있음
- CPU와 프로세스가 사용하는 주소 체계는 논리 주소이므로, 중복되는 물리 주소의 번지 수는 존재하지 않지만 중복되는 논리 주소의 번지 수는 얼마든지 존재 가능
- 논리 주소라 할지라도, 실제로 정보가 저장되어 있는 하드웨어 상의 메모리와 상호작용하기 위해서는 반드시 논리 주소와 물리 주소간의 변환이 필요
스와핑 & 연속 메모리 할당
스와핑 & 연속 메모리 할당 : 가상 메모리 기술이 발전하기 전의 초기 메모리 관리 방식
스와핑
메모리 관리 방식
-
메모리에 적재된 프로세스들 중 현재 실행되고 있지 않은 프로세스들을 임시로 **스왑 영역(swap space)**라는 보조기억장치의 일부인 영역으로 쫓아내고, 이 자리에 생긴 메모리 상의 빈 공간에 다른 프로세스를 적재하여 실행하는 메모리 관리 방식
-
메모리에 적재된 프로세스들 중 현재 실행되고 있지 않은 프로세스들이란?
-
스왑 아웃(swap-out) : 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것
-
스왑 인(swap-in) : 스왑 영역에 있는 프로세스가 다시 메모리로 옮겨오는 것
- 스왑 아웃되었던 프로세스가 다시 스왑 인될 때는, 스왑 아웃되기 전의 물리 주소와는 다른 주소에 적재될 수 있음

프로세스가 메인메모리와 보조기억장치 일부 영역을 오가는 스와핑
-
스와핑(메모리 관리 기법)을 통해 프로세스들을 메모리 내 빈 공간에 적재 → 만약 빈 공간이 여러 개라면 어디에 프로세스를 배치해야할까?
- 연속 메모리 할당 & 외부 단편화 : 비어 있는 메모리 공간에 프로세스를 할당하는 방법
연속 메모리 할당 & 외부 단편화
메모리 할당 방식
- 연속 메모리 할당 : 프로세스에 연속적인 메모리 공간을 할당하는 방식
-
사실 메모리를 효율적으로 사용하는 방법은 X
-
왜냐하면, 외부 단편화라는 문제를 내포하고 있기 때문

출처 : https://code-lab1.tistory.com/54
남아있는 메모리 공간이 요청한 메모리 공간보다 크지만, 남아있는 공간이 연속적이지 않아 발생하는 현상
- 위 사진처럼, 50 + 50 = 100MB의 공간이 비어있지만 연속적인 공간이 아니라서 프로세스 C(80MB)를 할당할 수 없음
- 이처럼 프로세스들이 메모리에 연속적으로 할당되는 환경에서는, 프로세스의 실행과 종료를 반복하며 메모리 사이 사이에 빈 공간이 발생 → 메모리 낭비 가능성 증가(외부 단편화)
페이징을 통한 가상 메모리 관리
<aside>
🥕
스와핑 & 연속 메모리 할당이 갖는 2가지 문제
- 외부 단편화 : 적재 & 삭제를 반복하며 프로세스들 사이에 발생
- 물리 메모리보다 큰 프로세스를 실행할 수 없음
</aside>
가상 메모리 : 윗 문제를 해결하는 운영체제의 메모리 관리 기술
- 실행하고자 하는 프로그램의 일부만 메모리에 적재해, 실제 메모리보다 더 큰 프로세스를 실행할 수 있도록 만드는 메모리 관리 기법