2017-10-01 11 views
0

프로세스 A의 가상 주소는 V1-> P1 (가상 주소 (V1)은 실제 주소 (P1)에 매핑 됨)을 가정 해 봅시다.컨텍스트 전환 중 프로세스의 물리적 메모리 내용은 어떻게됩니까

컨텍스트 전환 중에 프로세스 A의 페이지 테이블이 프로세스 B의 페이지 테이블과 스왑 아웃됩니다.

의 그 프로세스 B의 가상 주소 V2-> P1은 ((가상 주소 (V2)는 실제 주소가 메모리 영역에서 자신의 내용 (P1))에 매핑 생각해 보자.

를 물리적으로 일어난 이제 어떻게 V1이 지적한 메모리 내용 컨텍스트 전환이 발생하면 메모리에 저장됩니까? 그렇다면 프로세스 A가 실제 메모리 또는 RAM의 크기에 가깝거나 비슷한 내용을 작성한 경우 어떻게됩니까? 그 다음 내용?

+1

두 프로세스는 동일한 가상 주소를 가질 수 있지만 동일한 실제 주소는 가질 수 없습니다.프로세스 B는 프로세스 A와 동일한 가상 주소를 가질 수 있지만 실제 주소는 달라집니다. – babon

답변

1

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에 비해 극히 느리다는 것입니다.

+0

"운영 체제가 V1-> P1 및 V2-> P1 매핑을 유지해야하는 경우가 종종 있습니다." - 실제로 동일한 실제 주소에 대해 다른 가상 주소를 유지하는 OS를 명명 할 수 있습니까? – babon

+0

내 경험은 주로 VxWorks에서 이루어졌으며 VxWorks는 처음 8Gb의 실제 주소 공간을 단일 큰 가상지도에 매핑합니다. 그런 다음 작은 가상 대 실제 매핑을 별도로 설정하여 두 개의 가상 주소를 동일한 실제에 매핑합니다. 동일한 실제 주소에 매핑하기 위해 둘 이상의 가상 주소가 더 필요한 이유가 몇 가지 있습니다. – vxWizard

+0

@babon 내가 따르지 않는 한, OS가 복사 - 쓰는 중일 때 가정 할 때마다 프로세스를 포크 할 때마다 이런 일이 발생하지 않습니까? 프로세스를 포크 할 때 두 프로세스의 페이지 테이블은 대부분의 가상 주소가 공유 실제 공간 중 하나에 쓰일 때까지 동일한 실제 주소를 가리 킵니다. –