스와핑

프로세스 명령어와 데이터는 실행을 위해 반드시 메모리에 있어야 합니다. 그러나 프로세스나 프로세스의 일부는 일시적으로 메모리에서 **보조 저장 장치(backing store)**로 옮겨졌다가 실행을 계속하기 위해 다시 메모리로 돌아올 수 있습니다. 이러한 과정을 **스와핑(swapping)**이라고 합니다. 스와핑은 모든 프로세스의 총 물리적 주소 공간이 실제 물리적 메모리를 초과할 수 있게 하여, 시스템의 다중 프로그래밍(multiprogramming) 수준을 높입니다.


표준 스와핑 (Standard Swapping)

표준 스와핑은 프로세스 전체를 메인 메모리와 보조 저장 장치 사이에서 이동시키는 것을 포함합니다.

  • 보조 저장 장치: 일반적으로 빠른 보조 저장 장치이며, 저장 및 검색에 필요한 프로세스의 모든 부분을 수용할 만큼 충분히 커야 하고, 메모리 이미지를 직접 접근할 수 있어야 합니다.

  • 데이터 구조 관리: 프로세스 또는 그 일부가 스와핑될 때, 해당 프로세스와 관련된 데이터 구조가 보조 저장 장치에 기록되어야 합니다. 멀티스레드 프로세스의 경우, 스레드별 데이터 구조도 스와핑되어야 합니다.

  • 장점: 물리적 메모리를 초과하여 프로세스를 수용할 수 있게 함으로써, 시스템이 실제 물리적 메모리보다 더 많은 프로세스를 수용할 수 있게 합니다. 유휴 상태이거나 거의 유휴 상태인 프로세스가 스와핑의 좋은 후보입니다.

페이징을 동반한 스와핑 (Swapping with Paging)

표준 스와핑은 프로세스 전체를 메모리와 보조 저장 장치 사이에서 이동시키는 데 드는 시간이 과도하여 현대 운영체제에서는 일반적으로 사용되지 않습니다. (솔라리스(Solaris)는 사용 가능한 메모리가 극도로 부족한 경우에만 표준 스와핑을 사용합니다).

  • 변형: 리눅스와 윈도우를 포함한 대부분의 시스템은 프로세스 전체가 아닌 페이지를 스와핑하는 스와핑의 변형을 사용합니다.

  • 페이지 인/아웃: 이 전략은 여전히 물리적 메모리를 초과하여 프로세스를 수용할 수 있게 하며, 프로세스 전체를 스와핑하는 비용이 발생하지 않습니다.

    • 페이지 아웃(Page out): 페이지를 메모리에서 보조 저장 장치로 이동시키는 작업입니다.

    • 페이지 인(Page in): 이와 반대되는 과정을 의미합니다.

  • 용어: 일반적으로 '스와핑'이라는 용어는 표준 스와핑을, '페이징(paging)'은 페이징을 동반한 스와핑을 의미합니다.

모바일 시스템에서의 스와핑 (Swapping on Mobile Systems)

PC 및 서버용 운영체제는 페이지 스와핑을 지원하지만, 모바일 시스템은 일반적으로 어떠한 형태의 스와핑도 지원하지 않습니다.

  • 스와핑 회피 이유: 모바일 기기는 공간이 제한적인 하드 디스크 대신 플래시 메모리를 사용하는데, 이로 인한 공간 제약, 플래시 메모리가 견딜 수 있는 제한된 쓰기 횟수, 그리고 메인 메모리와 플래시 메모리 사이의 낮은 처리량(throughput) 등이 스와핑을 피하는 이유입니다.

  • 메모리 관리 방식:

    • iOS: 사용 가능한 메모리가 특정 임계값 아래로 떨어지면, 애플리케이션에게 자발적으로 할당된 메모리를 해제하도록 요청합니다. 코드와 같은 읽기 전용 데이터는 제거되고 필요할 경우 플래시 메모리에서 다시 로드되지만, 스택과 같이 수정된 데이터는 제거되지 않습니다. 메모리 해제에 실패한 애플리케이션은 운영체제에 의해 종료될 수 있습니다.

    • Android: iOS와 유사한 전략을 채택하며, 사용 가능한 메모리가 부족할 경우 프로세스를 종료할 수 있습니다. 다만, 프로세스 종료 전에 애플리케이션 상태를 플래시 메모리에 기록하여 신속하게 재시작될 수 있도록 합니다.

Last updated