가상 메모리는 컴퓨터의 물리적 메모리의 일부입니다. 가상 메모리는 컴퓨터 시스템 메모리 관리를 위한 기술로, 일반적으로 여러 개의 물리적 메모리 조각으로 나누어지며, 일부는 필요할 때 데이터 교환을 위해 외부 디스크 저장소에 임시 저장됩니다.
운영체제에는 가상 메모리와 물리적 메모리라는 개념이 있습니다. 오래 전, 가상 메모리라는 개념이 없던 시절, 프로그램은 주소 지정을 위해 물리적 주소를 사용했습니다. 프로그램이 주소를 지정할 수 있는 범위는 CPU의 주소 라인 수에 따라 제한됩니다. 예를 들어, 32비트 플랫폼에서 주소 지정 범위는 2^32, 즉 4G입니다. 그리고 이것은 수정되었습니다. 가상 메모리가 없고 프로세스가 시작될 때마다 4G의 물리적 메모리가 할당되면 다음과 같은 많은 문제가 발생할 수 있습니다.
제 물리적 메모리가 제한되어 있기 때문에 실행할 때 필요한 프로세스가 여러 개 있을 때. , 4G의 메모리가 필요합니다. 당연히 메모리가 작을수록 빠르게 할당되므로 리소스가 할당되지 않은 프로세스는 대기만 할 수 있습니다. 프로세스 실행이 완료되면 대기 중인 프로세스가 메모리에 로드됩니다. 이렇게 자주 메모리를 로드하는 작업은 매우 비효율적입니다
명령어가 물리적 메모리에 직접 액세스하기 때문에 내 프로세스는 다른 프로세스의 데이터를 수정할 수 있고 심지어 커널 주소 공간의 데이터도 수정할 수 있습니다. 보고 싶지 않아요. 메모리가 무작위로 할당되기 때문에 프로그램이 실행되는 주소도 올바르지 않습니다.
그래서 앞으로 발생할 여러 문제에 대응하여 가상 메모리가 나왔습니다.
프로세스에서 얻은 4G 가상 메모리는 연속적인 주소 공간이지만(이것은 프로세스가 생각하는 것일 뿐입니다) 실제로는 일반적으로 여러 개의 물리적 메모리 조각으로 나누어져 있으며 일부는 데이터 교환에 저장됩니다. 필요할 때 발생합니다.
프로세스가 주소에 액세스하기 시작하면 다음 프로세스를 거칠 수 있습니다.
주소 공간의 주소에 액세스할 때마다 해당 주소를 실제 물리적 메모리 주소로 변환해야 합니다
모든 프로세스에서 공유됨 전체 물리적 메모리에 대해 각 프로세스는 현재 필요한 가상 주소 공간만 물리적 메모리에 매핑합니다. 프로세스는 주소 공간의 어떤 데이터가 물리적 메모리에 있고 어떤 데이터가 아닌지 알아야 합니다(아마도). 이 부분은 디스크(위)에 저장되며 페이지 테이블을 통해 기록되어야 하는 실제 메모리에 저장됩니다. 페이지 테이블의 각 항목은 두 부분으로 나누어집니다. 두 번째 부분은 물리적 메모리 페이지의 주소를 기록합니다(존재하는 경우)
프로세스가 가상 주소에 액세스하면 먼저 페이지 테이블에서 해당 데이터가 발견됩니다. 물리적 메모리가 아닌 페이지 누락 예외가 발생합니다
페이지 누락 예외 처리 과정에서 운영체제는 즉시 해당 프로세스를 차단하고 하드 디스크의 해당 페이지를 메모리로 교체한 후 프로세스를 수행하게 됩니다. 준비. 메모리가 가득 차고 빈 공간이 없으면 이를 덮을 페이지를 찾으십시오. 구체적으로 어떤 페이지를 덮을지는 운영 체제의 페이지 교체 알고리즘이 어떻게 설계되었는지에 따라 다릅니다.
가상 메모리와 물리적 메모리 간의 연결과 관련하여 다음 그림은 통합하는 데 도움이 될 수 있습니다.
우리 CPU는 가상 주소가 위치한 가상 페이지(VP3)에 접근하려고 합니다. 페이지 테이블에 따라 값을 찾습니다. 페이지 테이블의 세 번째 항목에 대한 판단 유효 비트입니다. 유효한 비트가 1이면 DRMA 캐시가 물리 페이지 번호에 따라 물리 페이지의 내용을 찾아 반환합니다.
유효 비트가 0이면 매개변수 페이지 오류 예외가 발생하고 커널 페이지 오류 예외 처리기가 호출됩니다. 커널은 페이지 교체 알고리즘을 통해 페이지를 덮어쓰기된 페이지로 선택하고 해당 페이지의 내용을 디스크 공간에 새로 고칩니다. 그런 다음 VP3 매핑된 디스크 파일을 물리적 페이지에 캐시합니다. 그러면 페이지 테이블의 세 번째 항목에서 유효 비트가 1이 되고, 두 번째 부분에는 물리적 메모리 페이지의 주소에 해당할 수 있는 내용이 저장됩니다.페이지 폴트 예외가 처리된 후 중단되기 전의 명령으로 돌아가서 다시 실행합니다. 이때 캐시가 히트하여 실행됩니다.
발견된 콘텐츠를 알림 캐시에 매핑하면 CPU는 알림 캐시에서 값을 얻어 종료됩니다.
각 프로세스가 생성되면 커널은 프로세스에 4G의 가상 메모리를 할당합니다. 프로세스가 실행을 시작하지 않은 경우 이는 단지 메모리 레이아웃일 뿐입니다. 실제로 가상 메모리의 해당 위치에 있는 프로그램 데이터와 코드(예: .text .data 세그먼트)는 물리적 메모리에 즉시 복사되지 않습니다. 이는 단지 가상 메모리와 디스크 파일 간의 매핑일 뿐입니다. 메모리 매핑). 현재 데이터와 코드는 여전히 디스크에 남아 있습니다. 해당 프로그램이 실행되면 페이지 테이블을 찾아보고 페이지 테이블의 주소가 물리 메모리가 아닌 디스크에 저장되어 있는 것을 발견하므로 페이지 폴트 예외가 발생하여 디스크의 데이터를 복사하게 된다. 물리적 메모리에.
또한 프로세스가 실행 중일 때 malloc을 통해 메모리를 동적으로 할당하면 가상 메모리만 할당됩니다. 즉, 이 가상 메모리에 해당하는 페이지 테이블 항목이 그에 따라 설정됩니다. 페이지 결함 예외.
가상 공간이 디스크 공간에 매핑된다고 볼 수 있다(실제로 필요에 따라 디스크 공간에도 매핑되는데, mmap을 통해 가상 공간과 디스크 공간 간의 매핑 관계를 확립하기 위해 mmap을 사용한다)
사용 가상 메모리 메커니즘 장점
각 프로세스의 메모리 공간이 일관되고 고정되어 있으므로(32비트 플랫폼에서는 4G) 링커에서 실행 파일을 연결할 때 메모리 주소를 걱정할 필요 없이 설정할 수 있습니다. 이러한 데이터의 최종 실제 메모리 주소는 매핑 관계를 완료하기 위해 커널에 남겨집니다.
서로 다른 프로세스가 라이브러리 파일의 코드와 같이 동일한 코드 조각을 사용하는 경우 해당 코드의 복사본은 하나만 저장할 수 있습니다. 물리 메모리와 다른 프로세스 자신만의 가상 메모리를 매핑하면 물리 메모리를 절약할 수 있습니다
프로그램이 연속 공간을 할당해야 할 때 가상 메모리에 연속 공간만 할당하면 되며 연속 물리 메모리는 필요하지 않습니다. 실제로 물리적 메모리는 간헐적인 메모리 조각인 경우가 많습니다. 이렇게 하면 물리적 메모리
더 많은 관련 지식을 보려면 PHP 중국어 웹사이트를 방문하세요!
위 내용은 가상 메모리는 컴퓨터 메모리의 일부인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!