OS가 무료 RAM 부족으로 효과적으로 대처하는 방법 인이 질문에서 설명한 시나리오를 처리 할 수있는 방법에는 여러 가지가 있습니다 .CP U 아키텍처와 OS의 목표는이 문제를 처리하는 몇 가지 방법입니다.
한 가지 해결책은 프로세스가 malloc (또는 다른 유사한 메커니즘)을 시도 할 때 단순히 프로세스를 죽이고 사용 가능한 빈 페이지가없는 것입니다. 이렇게하면 원래 질문에서 제기 된 문제를 효과적으로 피할 수 있습니다. 표면적으로 이것은 좋지 않은 생각이지만, 커널 코드를 간소화하고 상황에 맞는 스위치를 빠르게 할 수 있다는 장점이 있습니다. 실제로 일부 응용 프로그램에서는 비 휘발성 저장소를 사용하여 RAM에 들어갈 수없는 페이지를 수용하기 위해 스왑 공간을 사용해야하는 경우 응용 프로그램에서 시스템이 실제로 실패한 것과 같은 성능 저하가 발생합니다. 또는 모든 컴퓨터가 비 휘발성 저장소를 사용하여 스왑 공간으로 사용할 수있는 것은 아닙니다.
이미 언급했듯이, 대안은 비 휘발성 저장소를 사용하여 RAM에 맞지 않는 페이지를 보관하는 것입니다. 실제 특정 구현은 시스템의 특정 요구에 따라 다를 수 있습니다. V1-> P1 및 V2-> P1의 매핑이 어떻게 존재하는지 직접 대답 할 수있는 몇 가지 가능한 방법이 있습니다.
1 - 운영 체제가 V1-> P1 및 V2-> P1 매핑을 유지해야하는 경우가 종종 있습니다. 가상 공간의 내용이 동일하게 유지되는 한,이를 지원하는 물리적 주소는 실행중인 프로그램에 투명합니다. 두 프로그램을 동시에 실행해야하는 경우 OS는 V2에서 실행되는 프로그램을 중지하고 P2의 메모리를 새로운 영역, 예를 들어 P2로 옮길 수 있습니다. 그런 다음 V2를 P2로 다시 매핑하고 V2에서 프로그램 실행을 다시 시작하십시오. 이것은 무료 RAM이지도에 존재한다고 가정합니다.
2 - 운영 체제는 프로그램의 전체 가상 주소 공간을 RAM 지원 물리적 주소 공간에 매핑하지 않기로 선택할 수 있습니다. 모든 V1 주소 공간이 실제 메모리에 직접 매핑되지 않았다고 가정합니다. V1에있는 프로그램이 비 태그 섹션에 도달하면 OS는 이에 의해 트리거 된 예외를 잡을 수 있습니다. 사용 가능한 RAM이 부족한 경우 OS는 비 휘발성 저장 영역에 스왑 공간을 사용할 수 있습니다. OS는 비 휘발성 저장 영역 (예 : P1 공간)을 스왑하기 위해 현재 사용되지 않는 영역의 일부 물리적 주소를 눌러 일부 RAM을 비울 수 있습니다. 다음으로 OS는 요청 된 페이지를 해제 된 RAM에로드하고 가상 대 실제 매핑을 설정 한 다음 실행을 V1의 프로그램으로 되돌릴 수 있습니다.
이 접근법의 장점은 운영 체제가 RAM이 더 많은 메모리를 할당 할 수 있다는 것입니다. 또한 많은 상황에서 프로그램은 반복적으로 작은 메모리 영역에 액세스하는 경향이 있습니다. 결과적으로 전체 가상 주소 영역 페이지를 RAM에 두지 않아도 성능상의 큰 불이익을받지 않을 수 있습니다. 이 접근법의 주된 단점은 코드 작성이 더 복잡하고 컨텍스트 스위치를 느리게 만들 수 있으며 비 휘발성 스토리지에 액세스하는 것이 RAM에 비해 극히 느리다는 것입니다.
두 프로세스는 동일한 가상 주소를 가질 수 있지만 동일한 실제 주소는 가질 수 없습니다.프로세스 B는 프로세스 A와 동일한 가상 주소를 가질 수 있지만 실제 주소는 달라집니다. – babon