[운영체제] Chapter9.5 Swapping

강현주·2025년 4월 13일

프로세스 명령어와 그 명령어가 작동하는 데이터는 실행되기 위해 메모리에 있어야 한다. 그러나, 프로세스의 일부는 일시적으로 메모리에서 backin store로 스왑된 다음 지속적인 실행을 위해 다시 메모리로 가져올 수 있다(그림 9.19).

스와핑은 모든 프로세스의 총 물리적 주소 공간이 시스템의 실제 물리적 메모리를 초과할 수 있게 하여, 시스템의 멀티프로그래밍 정도를 증가시킨다.

9.5.1 Standard Swapping

표준 스와핑은 전체 프로세스를 메인 메모리와 backing sotre 간에 이동하는 것을 포함한다. backing stroe는 일반적으로 빠른 보조 스토리지이다. 프로세스의 어떤 부분을 저장하고 검색해야 할지 수용할 만큼 충분히 커야 하며, 이러한 메모리 이미지에 직접 액세스할 수 있어야 한다. 프로세스나 부분이 backing store로 스왑되면, 프로세스와 관련된 데이터 구조가 backing store에 기록되어야 한다. 멀티스레드 프로세스의 경우, 모든 스레드별 데이터 구조도 스왑되어야 한다. 운영 체제는 스왑 out된 프로세스에 대한 메타데이터도 유지해야 하므로 메모리로 다시 스왑 in될 때 복원할 수 있다.

표준 스와핑의 장점은 실제 메모리를 초과 할당할 수 있으므로, 시스템이 저장할 실제 물리적 메모리보다 더 많은 프로세스를 수용할 수 있다는 것이다. 유휴 또는 거의 모든 유휴 프로세스는 스와핑에 적합한 후보이다. 이러한 비활성 프로세스에 할당된 모든 메모리는 활성 프로세스에 전용으로 사용할 수 있다. 스왑된 비활성 프로세스가 다시 활성화되면 다시 스왑해야한다. 이는 그림 9.19에서 설명한다.

Backing store: 디스크에 위치한 보조기억장치로, 프로세스 이미지를 일시적으로 저장하는 공간

9.5.2 Swapping with Paging

표준 스와핑은 기존 UNIX 시스템에서 사용되었지만, 전체 프로세스를 메모리와 백업 스토어 간에 이동하는 데 필요한 시간이 너무 길어서, 현대 운영 체제에서는 일반적으로 더 이상 사용되지 않았다.

Linux와 Windows를 포함한 대부분의 시스템은, 전체 프로세스가 아닌 프로세스의 페이지를 스왑할 수 있는 스왑핑의 변형을 사용한다. 이 전략은 물리적 메모리를 초과 할당할 수 있지만, 아마도 소수의 페이지만 스왑에 관련될 것이므로, 전체 프로세스를 스왑하는 데 드닌 비용이 발생하지 않는다. 사실, 스와핑이라는 용어는 이제 일반적으로 표준 스왑을 의미하고, 페이징은 페이징을 사용한 스왑을 의미한다. page out 작업은 페이지를 메모리에서 백업 저장소로 이동한다. 그 반대의 프로세스는 page in이라고 한다. 페이징을 사용한 스와핑은 그림 9.20에 나와 있고, 여기서 프로세스 A와 B의 페이지 하위 집합이 각각 페이지 아웃 및 페이지 인이다. 페이징을 사용한 스왑핑은 가상 메모리와 함께 사용하면 잘 작동한다.

9.5.3 Swapping on Mobile System

대부분의 PC 및 서버용 운영체제는 페이지 스와핑을 지원한다. 반면, 모바일 시스템은 일반적으로 어떤 형태로든 스와핑을 지원하지 않는다. 모바일 기기는 일반적으로 비휘발성 저장소에 더 넓은 하드 디스트 대신 플래시 메모리를 사용한다. 그로 인한 공간 제약은 모바일 운영 체제 설계자가 스와핑을 피하는 한 가지 이유이다. 다른 이유로는, 플래시 메모리가 신뢰할 수 없게 되지 전에 허용할 수 있는 쓰기 횟수가 제한되어 있고, 이러한 기기에서 메인 메모리와 플래시 메모리 간의 처리량이 낮다는 점이 있다.

스와핑을 사용하는 대신, 여유 메모리가 특성 임계값 아래로 떨어지면, Apple의 iOS는 애플리케이션에 할당된 메모리를 자발적으로 포기하도록 요청한다. 읽기 전용 데이터는 메인 메모리에서 제거되고, 라중에 필요한 경우 플래시 메모리에서 다시 로드된다. 수정된 데이터는 제거되지 않는다. 그러나, 충분한 메모리를 확보하지 못하는 애플리케이션은 운영체제에 의해 종료될 수 있다.

Android는 iOS에서 사용하는 것과 유사한 전략을 채택한다. 사용 가능한 여유 메모리가 충분하지 않으면 프로세스를 종료할 수 있다. 그러나, 프로세스를 종료하기 전에 Android는 애플리케이션 상태를 플래시 메모리에 기록하여 빠르게 재시작할 수 있도록 한다.

이러한 제한 사항으로 인해, 모바일 시스템 개발자는 애플리케이션이 메모리를 너무 많이 사용하거나, 메모리 누수를 겪지 않도록 메모리를 신중하게 할당하고 해제해야 한다.

0개의 댓글