물리적 메모리
물리적 메모리란 컴퓨터에 설치된 실제 RAM을 의미한다.
논리적 메모리
논리적 메모리는 프로그래머나 CPU가 바라보는 가상 메모리이다.
물리적 메모리에 데이터가 들어가면 물리 주소를 가지는데 이는 RAM에 있는 진짜 위치이고
반대로 논리적 메모리는 RAM의 일정 칸을 다 쓴다고 착각하며 사용하는 가상의 메모리이다.
1. 만약 내가 100MB 게임 A를 실행하면 실제 RAM에 0 ~ 100칸까지 저장을 한다 가정
2. 그 뒤로 50MB 다른 프로그램 B를 실행하면 101 ~ 150칸까지 저장
3. 그 뒤로 200MB 다른 프로그램 C를 실행하면 151 ~ 350칸까지 저장을 할 것이다.
이렇게 RAM은 먼저 실행된 프로세스를 가져와 저장하는데 만약 이 상태에서 B를 끈다면?
-> 101~ 150번째 RAM칸은 비어 있을 것이다.
그 뒤로 만약 60MB짜리 프로그램을 실행하면 이 101 ~ 150에서의 50칸 RAM에는 들어가지 못할 것이다.
이를 외부 단편화라고 한다.
반대로 10MB짜리 프로그램을 실행하면 101 ~ 150에서의 50칸 RAM에는 들어가지만 40칸이 남아서 낭비가 된다.,
이를 내부 단편화라고 한다.
옛날에는 새로운 프로세스가 들어오면 이 프로세스를 한 곳에 몰아넣었지만(연속 할당) 단편화 문제가 발생했다.
그래서 현대에는 프로세스를 조각내서 RAM 곳곳에 뿌려놓는 방식을 고안했다.(불연속 할당)
1. 세그먼테이션
프로세스를 논리적인 의미 단위로 자르는 방식이다.
프로세스는 코드, 데이터, 힙, 스택 영역으로 나뉘는데 이들을 세그먼트라고 한다. 크기가 제일 큰 코드 영역을 넓은 칸에, 제일 작은 스택 영역을 작은 칸에 따로따로 넣는 방식이 세그먼테이션이다.
장점 : 개발자가 이해하기 쉽고, 보안 설정 등에 유리하다.
단점 : 세그먼트마다 크기가 달라 외부 단편화 문제가 남아 있다.
2. 페이징
페이징은 메모리를 무조건 같은 크기로 나주어 쓰는 방식이다.
1. 우선 물리메모리 RAM을 일정 크기의 메모리 조각으로 나눈다. 이를 프레임(Frame)이라고 한다.
2. 그리고 가상 메모리 프로세스를 일정 크기의 메모리 조각으로 나눈다. 이를 페이지(Page)라고 한다.
3. 프로세스의 각 페이지가 물리 메모리의 어떤 프레임에 위치하는지 정보를 담고 있는 페이지 테이블을 만든다.

가상 메모리에 있는 주소는 MMU( Memory Management Unit)이라는 주소 변환 메커니즘으로 물리 주소로 변환이 된다.
이러한 방식으로 외부 단편화 문제는 해결되지만, 페이지 단위의 내부 단편화 문제는 미세하게 존재한다.
'CS' 카테고리의 다른 글
| CS) 파일 입출력과 버퍼 (0) | 2026.01.19 |
|---|---|
| CS) 인터럽트 (0) | 2026.01.15 |
| CS) 데드락(교착 상태) (0) | 2026.01.15 |
| CS) CPU 스케줄링 (0) | 2026.01.14 |
| CS) 스택 프레임 (0) | 2026.01.14 |