Interview/OS
OS Disk Swap 디스크 스왑
김 정출
2024. 9. 28. 10:33
디스크 스왑 Disk Swap
- 디스크 스왑(Swap)은 운영체제에서 물리 메모리(RAM)가 부족할 때, 디스크의 일부를 가상 메모리로 사용하는 기법입니다. 스왑은 페이징 시스템의 연장선으로, 운영체제가 메모리 부족 문제를 해결하기 위해 디스크를 사용하는 방법입니다. 아래에서는 디스크 스왑의 내부 로직과 작동 방식을 설명하겠습니다.
디스크 스왑의 개념
- 스왑 공간은 운영체제가 디스크 상에 설정한 특정 영역입니다. 이 공간은 주로 RAM이 부족할 때, 일시적으로 데이터를 저장하는 데 사용됩니다.
- 스왑은 주로 비활성 페이지(현재 자주 사용되지 않는 메모리 영역)를 디스크에 옮겨, 활성 메모리에 자리를 마련하고, 현재 필요로 하는 데이터를 메모리에 올리기 위한 목적입니다.
디스크 스왑의 동작 방식
1. 메모리 부족 상황 발생
- 시스템이 여러 프로세스를 실행하면서 메모리(RAM)가 부족해지면, 운영체제는 더 이상 필요한 데이터를 메모리에 적재할 공간이 없다고 판단합니다.
- 메모리에 있는 데이터 중에서 자주 사용되지 않는 데이터를 디스크로 이동시켜 메모리 공간을 확보할 필요가 생깁니다.
2. 페이지 교체 결정 (Page Replacement)
- 운영체제는 페이지 교체 알고리즘을 통해 메모리에 적재된 데이터 중 가장 덜 사용된 데이터(비활성 페이지)를 선택합니다. 이 데이터는 메모리에 당장 필요하지 않기 때문에 스왑 공간으로 이동시킬 수 있습니다.
- 대표적인 페이지 교체 알고리즘으로는 LRU(Least Recently Used), FIFO(First In First Out), LFU(Least Frequently Used) 등이 있습니다.
3. 비활성 페이지 스왑 아웃 (Swap Out)
- 선택된 비활성 페이지는 스왑 아웃(Swap Out)되어 디스크의 스왑 공간에 저장됩니다.
- 이 과정에서 운영체제는 메모리에서 해당 페이지의 내용을 디스크에 저장하고, 페이지 테이블에서 이 페이지가 더 이상 물리 메모리에 있지 않음을 기록합니다.
- 이로 인해 메모리에서 새로운 데이터가 올라올 수 있는 공간이 확보됩니다.
스왑 아웃 과정:
- 운영체제가 비활성 페이지를 선택합니다.
- 선택된 페이지는 디스크의 스왑 영역으로 이동하고, 메모리에서 제거됩니다.
- 운영체제는 페이지 테이블을 업데이트하여, 해당 페이지가 이제 스왑 공간에 있다는 정보를 기록합니다.
4. 활성 페이지 스왑 인 (Swap In)
- 나중에 스왑 아웃된 페이지가 다시 필요해지면, 운영체제는 해당 페이지를 스왑 인(Swap In) 시킵니다.
- 이때, 메모리의 빈 공간에 스왑 공간에서 읽어온 페이지를 적재하고, 페이지 테이블을 업데이트하여 해당 페이지가 다시 물리 메모리에 적재되었음을 기록합니다.
- 스왑 인이 발생하면 페이지 폴트(Page Fault)로 처리되며, 해당 데이터를 다시 메모리로 복구하는 과정이 비교적 느립니다. 이 과정은 디스크 I/O를 수반하기 때문에, 성능에 영향을 줄 수 있습니다.
스왑 인 과정:
- 페이지 폴트가 발생하여 스왑 공간에 있는 페이지가 필요하다는 것을 알립니다.
- 운영체제는 스왑 공간에서 해당 페이지를 읽어와 메모리로 적재합니다.
- 페이지 테이블을 업데이트하여, 페이지가 다시 메모리로 복원되었음을 기록합니다.
5. 페이지 테이블 관리
- 운영체제는 각 프로세스의 페이지 테이블을 유지합니다. 페이지 테이블은 가상 주소와 물리적 주소 간의 매핑 정보를 기록하며, 스왑이 발생할 때 해당 페이지가 메모리에 있는지, 또는 스왑 공간에 있는지에 대한 정보도 포함하고 있습니다.
- 페이지가 스왑 아웃되면 페이지 테이블에 해당 페이지가 스왑 공간에 있다는 플래그가 설정됩니다. 스왑 인이 발생할 경우 이 플래그가 물리 메모리 주소로 갱신됩니다.
디스크 스왑의 내부 로직 흐름
- 메모리 부족 탐지:
- 메모리가 부족해지면 운영체제는 비활성 페이지를 스왑 아웃하기 위한 준비를 시작합니다.
- 페이지 교체 알고리즘 실행:
- 운영체제는 페이지 교체 알고리즘을 통해 덜 사용된 페이지를 찾아냅니다. 이 페이지는 스왑 공간으로 이동될 후보입니다.
- 스왑 아웃:
- 비활성 페이지를 스왑 아웃하여 스왑 공간에 저장합니다. 메모리에서 이 페이지는 제거되며, 페이지 테이블이 업데이트됩니다.
- 필요한 데이터 메모리에 로드:
- 이제 새로운 데이터를 메모리에 올릴 수 있습니다. 새 페이지가 메모리에 적재되고, 페이지 테이블은 이를 기록합니다.
- 페이지 폴트 발생 시 스왑 인:
- 나중에 스왑 아웃된 페이지가 필요할 때, 페이지 폴트가 발생하여 운영체제는 해당 페이지를 스왑 공간에서 스왑 인합니다. 이 과정에서 디스크에서 데이터를 읽어와 다시 메모리로 복구됩니다.
- 페이지 테이블 업데이트:
- 스왑 인된 페이지가 다시 물리 메모리에 적재되면, 페이지 테이블은 해당 페이지의 물리적 주소를 다시 기록합니다.
디스크 스왑의 장점
- 메모리 확장:
- RAM이 부족한 상황에서도 디스크를 가상 메모리로 사용하여 시스템이 멈추지 않고 계속 실행될 수 있습니다. 스왑은 일시적으로 메모리 용량을 확장하는 역할을 합니다.
- 메모리 활용의 효율성:
- 자주 사용되지 않는 데이터를 디스크로 옮기고, 현재 필요한 데이터를 메모리에 집중시킴으로써 메모리를 효율적으로 사용할 수 있습니다.
- 다중 프로세스 지원:
- 여러 프로세스가 동시에 실행될 때, 메모리가 부족해도 시스템이 동작할 수 있도록 스왑을 활용하여 다중 프로세스를 더 원활하게 지원합니다.
디스크 스왑의 단점
- 성능 저하:
- 디스크는 RAM에 비해 읽기/쓰기 속도가 훨씬 느립니다. 스왑 공간에 있는 페이지를 스왑 인할 때, 디스크 I/O가 발생하여 시스템 성능이 크게 저하될 수 있습니다.
- 특히, 스왑 공간에 데이터를 자주 스왑 인/아웃하는 상황을 스왑 스래싱(Swap Thrashing)이라고 하는데, 이 경우 시스템 성능이 크게 저하됩니다.
- 디스크 수명 단축:
- SSD 같은 디스크는 쓰기 작업이 많아지면 수명이 짧아집니다. 스왑으로 인해 디스크에 데이터를 자주 기록하게 되면 디스크의 내구성에 영향을 미칠 수 있습니다.
- 데이터 손실 위험:
- 스왑 공간은 일시적인 저장 공간입니다. 만약 시스템이 갑자기 종료되거나 충돌이 발생하면 스왑 공간에 있는 데이터가 손실될 수 있습니다.
스왑 공간 관리의 예시
Linux 스왑 관리 예시:
- Linux에서는 일반적으로 디스크의 일부를 스왑 파티션(Swap Partition)으로 설정하거나, 파일로 스왑 파일(Swap File)을 생성하여 스왑 공간으로 사용합니다.
swapon
명령어를 통해 스왑 공간을 활성화할 수 있고,swapoff
명령어를 통해 비활성화할 수 있습니다.- Linux는 프로세스 우선순위를 기반으로 어떤 페이지를 스왑 아웃할지 결정하며, 스왑 아웃/스왑 인 작업은 커널이 자동으로 처리합니다.
스왑 스래싱 (Swap Thrashing)
스왑 스래싱은 페이지 교체가 너무 빈번하게 발생하는 상황으로, 시스템이 계속해서 스왑 공간과 메모리 간에 페이지를 교체하느라 실질적인 작업을 하지 못하는 상태입니다.
스왑 스래싱의 원인:
- 메모리 부족으로 인해 너무 많은 페이지가 스왑 아웃/스왑 인을 반복할 때 발생합니다.
- 이를 해결하기 위해서는 더 많은 물리적 메모리(RAM)를 추가하거나, 스왑 공간 크기를 늘리는 대신 메모리 최적화를 해야 합니다.
요약
- 디스크 스왑은 운영체제가 메모리 부족 상황에서 디스크의 일부를 가상 메모리로 사용해 RAM의 용량을 확장하는 기술입니다.
- 스왑 아웃은 비활성 페이지를 디스크로 이동시키고, 스왑 인은 필요해진 페이지를 다시 메모리로 가져오는 과정입니다.
- 성능 저하와 스왑 스래싱 같은 문제를 유발할 수 있지만, 메모리 부족 문제를 해결하는 중요한 기법입니다.