2025-09-05 00:47

  • 운영체제 스와핑은 물리적 메모리(RAM)가 부족할 때 일부 프로세스를 보조 기억장치(디스크)로 옮겨 공간을 확보하는 메모리 관리 기법입니다.

  • 이 과정은 ‘스왑 아웃(Swap Out)‘과 ‘스왑 인(Swap In)‘으로 나뉘며, 시스템이 실제 가진 RAM보다 더 큰 프로그램을 실행할 수 있게 해주는 가상 메모리 시스템의 기반이 됩니다.

  • 현대 운영체제에서는 프로세스 전체를 옮기는 대신, 페이지 단위로 메모리를 옮기는 ‘페이징’이 스와핑의 역할을 대체하며 더 효율적으로 메모리를 관리합니다.

메모리가 부족할때 당신의 컴퓨터에서 벌어지는 일 운영체제 스와핑 핸드북

컴퓨터를 사용하다 보면 수많은 프로그램을 동시에 실행하게 됩니다. 웹 브라우저 탭 수십 개, 메신저, 문서 편집기, 그리고 백그라운드에서 실행되는 각종 서비스까지. 이때 컴퓨터는 이 모든 프로그램을 ‘기억’하기 위해 RAM(Random Access Memory)이라는 작업 공간을 사용합니다. 하지만 RAM의 공간은 한정되어 있죠. 만약 이 공간이 가득 차면 어떻게 될까요? 컴퓨터가 멈추거나 프로그램이 강제 종료될까요? 놀랍게도 우리의 컴퓨터는 이런 상황을 대비한 비장의 무기를 가지고 있습니다. 바로 스와핑(Swapping) 이라는 기술입니다.

이 핸드북은 운영체제의 핵심 메모리 관리 기법인 스와핑의 세계로 여러분을 안내할 것입니다. 스와핑이 왜 만들어졌는지, 어떤 원리로 동작하는지, 그리고 현대 컴퓨터에서는 어떻게 진화했는지, 그 여정을 함께 따라가 보겠습니다.

1. 스와핑의 탄생 배경 부족함이 낳은 위대한 발명

스와핑을 이해하려면 먼저 컴퓨터의 메모리 구조를 알아야 합니다. 컴퓨터에는 주기억장치인 RAM과 보조기억장치인 하드 디스크(HDD) 또는 SSD가 있습니다.

  • RAM: 속도가 매우 빠르지만, 가격이 비싸고 용량이 적으며 전원이 꺼지면 데이터가 사라지는 휘발성 메모리입니다. CPU는 오직 RAM에 올라와 있는 데이터와 코드만 직접 실행할 수 있습니다.

  • HDD/SSD: 속도는 RAM보다 훨씬 느리지만, 가격이 저렴하고 용량이 크며 전원이 꺼져도 데이터가 보존되는 비휘발성 메모리입니다.

초기 컴퓨터의 RAM은 지금과는 비교할 수 없을 정도로 작고 비쌌습니다. 수십 킬로바이트(KB)에 불과한 메모리로 여러 프로그램을 실행하는 것은 불가능에 가까웠죠. 프로그래머들은 한정된 메모리 공간을 효율적으로 나눠 써야 하는 큰 숙제를 안고 있었습니다. 이러한 물리적 메모리의 한계를 극복하고, 실제 가진 RAM보다 더 큰 프로그램을 실행하거나 더 많은 프로그램을 동시에 실행시키고 싶은 욕구에서 스와핑이라는 아이디어가 탄생했습니다.

비유로 이해하기: 작은 책상과 책장의 마법

당신의 책상(RAM)은 작아서 한 번에 책을 3권밖에 펼쳐놓을 수 없다고 상상해 보세요. 그런데 당신은 10권의 책(프로세스)을 동시에 참고하며 과제를 해야 합니다. 어떻게 할까요?

아마도 지금 당장 보지 않는 책은 잠시 책장(보조기억장치)에 꽂아두고, 필요할 때 다시 책상으로 가져올 것입니다. 이때 책상 공간을 확보하기 위해 다른 책을 다시 책장으로 보내겠죠.

이처럼 작업 공간(RAM)과 보관 공간(보조기억장치) 사이에서 작업 대상(프로세스)을 교체하는 행위가 바로 스와핑의 본질입니다.

2. 스와핑의 핵심 구조 파헤치기

스와핑은 운영체제의 중기 스케줄러(Medium-term Scheduler) 에 의해 수행됩니다. CPU 스케줄러(단기 스케줄러)가 어떤 프로세스에 CPU를 할당할지 결정한다면, 중기 스케줄러는 어떤 프로세스를 메모리에 남겨두고, 어떤 프로세스를 디스크로 쫓아낼지 결정하는 역할을 합니다.

스와핑 과정은 크게 두 가지로 나뉩니다.

  • 스왑 아웃 (Swap Out): 메모리에 있는 특정 프로세스 전체를 디스크의 특별한 공간, 즉 스왑 공간(Swap Space 또는 페이지 파일) 으로 내보내는 과정입니다. 이를 통해 확보된 메모리 공간에는 다른 프로세스가 들어올 수 있습니다.

  • 스왑 인 (Swap In): 스왑 아웃 되었던 프로세스가 다시 실행될 차례가 되었을 때, 디스크의 스왑 공간에서 원래의 메모리 공간으로 다시 불러오는 과정입니다.

이 과정 덕분에 사용자는 실제 RAM 크기보다 훨씬 큰 용량의 가상 메모리 공간을 사용하는 것처럼 느끼게 됩니다. 이것이 바로 가상 메모리(Virtual Memory) 시스템의 기본적인 아이디어입니다.

스와핑과 페이징, 무엇이 다른가?

현대의 운영체제에서는 전통적인 의미의 ‘스와핑’을 그대로 사용하지는 않습니다. 대신 페이징(Paging) 이라는 더 발전된 형태의 기술을 사용하며, 이 페이징 과정에서 스와핑 개념이 활용됩니다.

구분스와핑 (Swapping)페이징 (Paging)
단위프로세스(Process) 전체페이지(Page) 라는 고정 크기 블록
목적메모리 공간이 부족할 때 프로세스를 통째로 교체프로세스를 페이지 단위로 나누어 필요한 페이지만 메모리에 적재
유연성낮음 (프로세스 전체가 이동해야 함)높음 (필요한 부분만 메모리에 올리고 내릴 수 있음)
현대 OS거의 사용되지 않음가상 메모리 관리의 핵심 기술로 사용

초기 스와핑은 프로세스를 ‘통째로’ 디스크로 옮겼습니다. 이는 마치 책상에서 책 한 권을 치우기 위해 그 책에 딸린 모든 노트와 필기구를 한꺼번에 상자에 담아 창고로 보내는 것과 같습니다. 매우 비효율적이죠.

반면, 페이징은 책(프로세스)을 여러 페이지(Page)로 나누고, 지금 당장 읽고 있는 페이지만 책상(RAM) 위에 펼쳐두는 방식입니다. 다른 페이지들은 책장(보조기억장치)에 그대로 둡니다. 만약 책장에 있는 다른 페이지를 읽고 싶다면, 책상 위의 페이지 중 하나와 교체하면 됩니다. 이 교체 과정, 즉 메모리에 없는 페이지를 디스크에서 가져오고, 대신 기존 페이지를 디스크로 내보내는 것을 요구 페이징(Demand Paging) 이라고 하며, 여기서 발생하는 페이지 교체를 ‘스와핑’이라고 부르기도 합니다.

따라서 현대적 의미의 스와핑은 “메모리와 디스크 간에 페이지를 교환하는 행위(Paging)“를 지칭하는 경우가 많습니다.

3. 내 컴퓨터 속 스와핑 엿보기 (Linux와 Windows)

우리가 사용하는 운영체제에도 스와핑을 위한 공간이 마련되어 있습니다.

Linux의 스왑 공간

리눅스는 스왑 공간으로 두 가지 형태를 지원합니다.

  1. 스왑 파티션 (Swap Partition): 디스크에 스와핑만을 위한 별도의 파티션을 할당하는 방식입니다. 설치 과정에서 설정하는 경우가 많으며, 성능 면에서 좀 더 안정적입니다.

  2. 스왑 파일 (Swap File): 일반 파일 시스템 위에 특정 크기의 파일을 만들어 스왑 공간으로 사용하는 방식입니다. 나중에 용량을 조절하기 쉽다는 유연성의 장점이 있습니다.

리눅스에서 현재 스왑 공간 사용 현황은 freeswapon -s 명령어로 확인할 수 있습니다.

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi       7.5Gi       502Mi       1.1Gi       7.8Gi       7.0Gi
Swap:         2.0Gi       1.2Gi       821Mi

위 예시에서 Swap 라인을 보면 총 2.0GiB의 스왑 공간이 있고, 그중 1.2GiB를 사용 중임을 알 수 있습니다.

Windows의 페이지 파일

Windows에서는 스왑 공간을 페이지 파일(Page File) 이라고 부릅니다. 보통 C:\pagefile.sys 라는 숨김 파일 형태로 존재합니다. Windows는 시스템이 알아서 이 파일의 크기를 관리하지만, 사용자가 직접 크기를 조절할 수도 있습니다.

  • [제어판] > [시스템 및 보안] > [시스템] > [고급 시스템 설정] > [성능] > [설정] > [고급] > [가상 메모리] > [변경] 경로에서 확인할 수 있습니다.

4. 스와핑의 양날의 검 성능과 트레이드오프

스와핑은 물리적 메모리의 한계를 넘어서게 해주는 강력한 기술이지만, 대가가 따릅니다. 바로 성능 저하입니다.

앞서 설명했듯이, RAM과 디스크의 속도 차이는 엄청납니다. CPU가 디스크에 있는 데이터를 가져오려면 RAM에서 가져올 때보다 수천 배에서 수만 배 이상 긴 시간을 기다려야 합니다. 스와핑이 빈번하게 발생하면, CPU는 데이터가 디스크에서 메모리로 올라오기를 기다리며 많은 시간을 허비하게 되고, 이는 시스템 전체의 반응 속도가 느려지는 스레싱(Thrashing) 현상으로 이어집니다.

스레싱 현상: 과도한 스와핑이 부르는 재앙

스레싱은 컴퓨터가 유용한 작업을 하는 시간보다 페이지를 교체(스와핑)하는 데 더 많은 시간을 소모하여, 결국 아무 작업도 제대로 처리하지 못하는 상태를 말합니다. 이는 마치 도서관에서 책을 읽는 시간보다, 책장에서 책을 찾고 가져오고 다시 꽂아두는 데 모든 시간을 써버리는 것과 같습니다. 시스템은 극도로 느려지고 사용자는 아무것도 할 수 없는 상태에 빠집니다.

따라서 스와핑은 꼭 필요할 때만 사용되는 것이 가장 이상적입니다. 시스템 관리자는 다음과 같은 사항을 고려하여 스와핑을 최적화할 수 있습니다.

  • 물리적 RAM 증설: 가장 확실하고 근본적인 해결책입니다. 작업 공간인 책상 자체를 넓히는 것입니다.

  • Swappiness 값 조절 (Linux): 리눅스에서는 swappiness라는 커널 파라미터를 통해 스와핑을 얼마나 적극적으로 사용할지 조절할 수 있습니다. 값이 100에 가까울수록 적극적으로 스왑을 사용하고, 0에 가까울수록 최대한 RAM을 사용하다가 어쩔 수 없을 때만 스왑을 사용합니다.

  • 불필요한 프로세스 종료: 메모리를 많이 차지하지만 사용하지 않는 프로그램을 종료하여 RAM 공간을 확보합니다.

  • 고속 저장 장치 사용: 스왑 공간을 HDD 대신 SSD나 NVMe SSD에 배치하면 스왑 인/아웃 속도가 향상되어 성능 저하를 줄일 수 있습니다.

5. 스와핑의 미래 그리고 진화

기술이 발전하면서 RAM의 가격은 저렴해지고 용량은 커졌습니다. 수십 기가바이트의 RAM을 탑재한 컴퓨터가 보편화되면서 “이제 스와핑은 필요 없는 기술이 아닐까?”라는 의문이 생길 수 있습니다.

하지만 스와핑은 여전히 현대 운영체제에서 중요한 역할을 담당하고 있습니다.

  1. 최대 절전 모드 (Hibernation): 컴퓨터를 최대 절전 모드로 전환할 때, 현재 RAM에 있는 모든 내용을 스왑 공간에 저장한 후 시스템 전원을 차단합니다. 다시 컴퓨터를 켤 때 스왑 공간의 데이터를 RAM으로 그대로 불러와 이전 작업 상태를 완벽하게 복원합니다.

  2. 예측 불가능한 메모리 급증 대응: 평소에는 RAM이 넉넉하더라도, 특정 프로그램이 순간적으로 엄청난 양의 메모리를 요구할 때 스왑 공간은 시스템이 다운되지 않도록 막아주는 완충제 역할을 합니다.

  3. 비활성 메모리 관리: 오랫동안 사용되지 않은 메모리 페이지를 스왑 공간으로 옮겨두면, 그 공간을 더 중요한 작업(예: 파일 캐시)에 활용하여 시스템 전체의 효율을 높일 수 있습니다.

물론, 스와핑을 대체하려는 새로운 기술들도 등장하고 있습니다. 인텔의 옵테인 메모리(Optane Memory)처럼 RAM과 SSD의 중간 속도를 가지는 저장 장치를 활용하거나, zRAM이나 zswap처럼 메모리 내에서 데이터를 압축하여 스왑의 효과를 내는 기술들이 그 예입니다.

결론: 보이지 않는 곳에서 시스템을 지탱하는 기술

스와핑은 한정된 자원이라는 현실적인 제약 속에서 더 많은 것을 해내고 싶었던 인간의 고민이 만들어낸 영리한 해결책입니다. 비록 화려하게 전면에 드러나지는 않지만, 지금 이 순간에도 우리 컴퓨터의 보이지 않는 곳에서 묵묵히 시스템의 안정성을 지탱하고 있습니다.

작은 책상과 거대한 책장의 비유처럼, 스와핑은 가장 효율적인 작업 환경을 만들기 위한 운영체제의 끊임없는 노력의 산물입니다. 다음에 컴퓨터가 잠시 멈칫거릴 때, “아, 지금 내 컴퓨터가 열심히 책을 교체하고 있구나!”라고 생각하며 스와핑의 노고를 한 번쯤 떠올려보는 것은 어떨까요?