2012-10-21 5 views
4

"각 프로세스의 주소 공간은 사용자 공간/커널 공간에 대해 3G/1G로 나누어지고, 1G (조금 적게)는 실제 주소와 일대일로 매핑됩니다. 커널 논리 주소 ". 이제 제 질문은, 시스템에서 여러 프로세스가 실행되고 있으며, 모든 프로세스가 실제 주소와 일대일로 매핑 할 수있는 방법은 무엇입니까 ?? 예를 들어 커널이 프로세스 A의 컨텍스트에서 커널 논리 주소에 액세스 할 때 선점이 발생하고 커널이 프로세스 B의 컨텍스트에서 논리 주소에 액세스하면 어떻게됩니까?여러 프로세스에 대한 Linux 커널 논리 주소

유사한 행에 512MB RAM이있는 PC의 경우는 어떻게됩니까? 어떻게 1G 커널 공간의 1 대 1 매핑이 해당 PC에서 발생합니까?

+0

32 비트 시스템에서만 유의해야합니다. 부수적으로 32 비트 ARM 시스템에서는 2GB/2GB가 자주 분할됩니다. – marko

답변

0

전통적인 멀티 코어 시스템에서는 모든 프로세서가 모든 RAM에 액세스 할 수 있습니다. 리눅스에서는 각 프로세스마다 3 기가 바이트면에 자체 주소 공간이 있습니다. 1 기가 바이트면은 일정하게 유지됩니다 (필자는 생각합니다). 왜냐하면 커널은 항상 거기에있는 프로세스이기 때문입니다. 가상 메모리의 커널 부분은 동일하게 유지되므로 커널 주소 공간은 하나이므로 프로세스를 선점 할 때 커널 주소 공간이 변경되지 않습니다.

간단히 말해서, 커널은 512MB 만 매핑합니다. 다른 512MB의 가상 주소 공간은 아무 것도없는 페이지 항목에 매핑됩니다.이 항목은 해당 주소에서 메모리에 액세스 할 수 없음을 CPU에 알려주고 액세스 할 때마다 CPU 예외를 발생시킵니다.

+0

답변 주셔서 감사합니다 Linuxios. 도움이됩니다. 추가 clarity.and 제공하는 링크를 찾을뿐만 아니라 그에 따라 답변을 게시했습니다 – user1762729

2

전체 가상 주소 공간의 커널 부분 (모두 1GB라고 가정 해 봅시다)이 모두 사용되는 것은 아닙니다. 전체 실제 메모리가 모두 커널 공간에 매핑되지는 않습니다.

커널 공간에는 사용되는 실제 RAM과 정의 된 메모리 매핑 주변 장치에 대한 가상 메모리 매핑이 있습니다. 그것들은 호출되지 않습니다.

사용자 공간의 각 프로세스는 해당 코드 + 데이터에 대해 최대 3GB의 가상 메모리를 가질 수 있습니다. 물리적 인 기억에는 두 가지 극단이 있으며, 각각을보기 위해 빛을 비출 수도 있습니다.

대용량 메모리 : 프로세서가 큰 물리적 주소 지정을 지원하는 경우. 36 비트이면 64GB의 실제 메모리가있을 수 있습니다. 각각 3GB 코드 + 데이터가있는 여러 개의 프로세스가있을 수 있으며 페이지를 보조 스토리지로 스왑하지 않아도됩니다. 각 컨텍스트 스위치는 MMU를 설정하여 새 실행 프로세스의 실제 메모리를 다시 사용자 공간에 매핑합니다.

작은 물리적 메모리 : 512MB가 있고 커널이 128MB를 사용한다고 가정 해 보겠습니다. 나머지 384MB는 사용자 프로세스의 코드 + 데이터를 보유합니다. 사용자 프로세스가 그 이상을 필요로하는 경우, 필요에 따라 페이지가 2 차 스토리지와 RAM간에 스왑됩니다.

+0

답변 주셔서 감사합니다 JoeKul Logged – user1762729

2

내 질문에 대한 설명을 제공하는 링크입니다. http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory

"리눅스에서

는 커널 공간은 지속적으로 존재하고 모든 프로세스에서 동일한 물리적 메모리를 매핑합니다. 커널 코드와 데이터는 인터럽트 나 시스템이 언제든지 호출합니다. 반면에 처리 할 준비가 항상 주소입니다, "

질문의 첫 번째 부분에 대한 답변 : Linux 커널 공간은 모든 프로세스에서 동일하게 유지되며 프로세스 컨텍스트 전환은 중요하지 않습니다. 커널 공간은 모든 프로세스 컨텍스트에서 동일한 RAM 페이지에 매핑 된 채로 남아 있습니다.

질문의 두 번째 부분에 대한 답변 : 실제 RAM 크기 (512MB 또는 2GB)의 크기는 커널 주소 공간과 관련이 없습니다. 규칙과 마찬가지로, 커널은 1G 커널 주소 공간을 사용할 수 있으며, 할당이 무엇이든 그 주소록으로 완료됩니다. 해당 주소를 사용 가능한 RAM (512MB 또는 2GB)에 매핑하는 것이 MMU의 작업입니다. 1G 이상의 RAM의 경우 전체 1G가 커널 주소 공간에 매핑되지만 512MB RAM의 경우 512MB가 매핑됩니다. 모든 것이 가상 주소이기 때문에 사용자 공간 주소를 손상시키지 않으며, 커널 공간 페이지의 주소를 포함하여 수요에 따라 스왑 아웃됩니다.

참고 : 여기서는 1G/3G 분할을 가정하며 이는 어려운 규칙이 아닙니다.