2012-01-25 4 views
2

각 프로세스마다 고유 한 별도의 페이지 테이블이있을 때 시스템 전체 페이지 테이블이 필요한 이유는 무엇입니까? 또한 페이지 테이블이 가상 주소를 실제 주소로 매핑하는 경우에는 모든 프로세스가 동일한 가상 주소 공간을 사용하므로 두 프로세스가 동일한 실제 주소에 매핑 될 수 있다고 생각합니다. 시스템 전체 페이지 테이블에 좋은 링크도 내 문제를 해결할 것인가?가상 주소를 실제 주소에 매핑

+1

공유 메모리를 고려해야합니다. 각 프로세스는 자체의 가상 - 물리적 맵을 필요로하지만, 시스템은 물리적 메모리 전체에 대한 개요를 필요로하므로 프로세스가 실제 메모리에 매핑 된 가상 메모리를 더 많이 필요로 할 때 사용할 수있는 것을 알고 있습니다. –

+0

[가상 메모리의 두 프로세스] 중복 가능 (http://stackoverflow.com/questions/8994571/two-processes-in-virtual-memory) –

답변

10

각 프로세스에는 고유 한 가상 주소 공간이 있습니다. 두 프로세스가 다른 physpages에 대한 virtpage 1 맵을 가질 수 있습니다. 프로세스는 공유 메모리에 참여할 수 있습니다.이 경우 프로세스는 각각 동일한 physpage에 대한 virtpage 매핑을 갖습니다.

프로세스의 가상 주소 공간을 사용하여 virtpages를 physpages, 메모리 매핑 된 파일, 장치 등에 매핑 할 수 있습니다. Virtpages는 RAM에 연결될 필요가 없습니다. 프로세스는 1GB 파일 전체를 메모리 맵핑 할 수 있습니다.이 경우 실제 메모리 사용량은 몇 메가가되지만 가상 주소 공간 사용량은 1GB 이상이됩니다. 많은 프로세스가이를 수행 할 수 있습니다.이 경우 모든 프로세스에서 가상 주소 공간 사용량의 합계는 예를 들어 40GB가 될 수 있지만 총 실제 메모리 사용량은 말하자면 100MB 일 수 있습니다. 이것은 32 비트 시스템에서 매우 쉽게 수행 할 수 있습니다.

많은 프로세스가 동일한 라이브러리를로드하므로 OS는 일반적으로 libs를 읽기 전용 실행 페이지 집합에 넣은 다음 각 프로세스가 virtpage 공간에서 해당 페이지 집합을 가리 키도록 매핑을로드합니다. 실제 메모리에 저장하십시오.

프로세스는 프로세스의 메모리 일부가 페이지 파일에 기록 된 경우와 같이 아무 것도 가리 키지 않는 virtpage 매핑을 가질 수 있습니다. 프로세스가 해당 페이지에 액세스하려고하면 CPU가 페이지 오류를 일으키고 OS는 페이지 폴트를보고 프로세스를 일시 중단하고 페이지 파일에서 RAM으로 페이지를 다시 읽은 다음 프로세스를 다시 시작하여 처리합니다.

일반적으로 3 가지 유형의 페이지 폴트가 있습니다. 첫 번째 유형은 CPU가 TLB에 가상 - 물리적 매핑을 가지고 있지 않은 경우입니다 - 프로세서가 OS에서 페이지 오류 소프트웨어 인터럽트를 호출하고 OS가 해당 프로세스의 프로세서에 매핑을 넣은 다음 프로세스가 문제의 원인을 다시 실행합니다 명령. 이들은 1 초에 수천 번 발생합니다.

두 번째 유형은 위에서 설명한 것처럼 프로세스의 메모리가 디스크로 스왑 되었기 때문에 OS에 매핑이없는 경우입니다. 가볍게 적재 된 기계에서는 드물게 발생하지만 메모리 압력이 높아지면 초당 100 ~ 1000 회, 어쩌면 더 많은 일이 발생합니다.

세 번째 유형은 매핑이 없기 때문에 OS에 매핑이없는 경우입니다. 프로세스가 속해 있지 않은 메모리에 액세스하려고합니다. 이것은 segfault를 생성하고 일반적으로 프로세스가 종료됩니다. 이것들은 자주 일어나지 않아야하며 소프트웨어가 기계에 얼마나 잘 기록되어 있는지에 달려 있으며 스케줄링이나 기계 부하와 관련이 없습니다.

이미 알았더라도 커뮤니티를 위해 알았습니다.

관련 문제