2014-10-11 2 views
2

32 비트 Linux에서 사용자 공간은 3G이고 커널 공간은 1G입니다. 이론적 관점에서 볼 때, 커널과 사용자가 4G 주소 공간을 차지할 수 있고, 주소를 방문하면 페이지 테이블을 방문 할 수 있습니다. 실현이 가능하거나 구현할 수없는 이유는 무엇입니까?OS 주소 공간이 사용자 공간과 커널 공간을 분할해야하는 이유는 무엇입니까?

+0

StackOverflow는 컴퓨터 아키텍처 및 OS 디자인에 대한 일반적인 질문이 아닙니다. 실용적인 프로그래밍 질문입니다. – Barmar

답변

2

커널을 단순화하여 사용자와 주소 공간을 공유하도록합니다. 호출자가 제공 한 데이터를 커널 버퍼에 복사하려는 시스템 호출을 생각해보십시오. 그들은 각각 자신의 페이지 테이블이 있다면, 호출자의 버퍼에서 단어를 읽고 커널 버퍼로를 작성하는 사이에 페이지 테이블을 전환해야 할 것입니다 :

while (i < caller_buffer_length) { 
    switch_to_user_pt(); 
    register = caller_buffer[i]; 
    switch_to_kernel_pt(); 
    kernel_buffer[i] = register; 
    i++; 
} 

가 동일한 주소 공간에있을 경우, 간단히 memcpy()을 사용할 수 있습니다.

+1

커널은 유저 공간을 다루기위한 특별한 memcpy 함수를 가지고 있지만, 커널 어드레스에 대한 악의적 인 사용자 공간 생성 포인터와 세그먼테이션 결함으로부터 보호합니다. – o11c

+0

@ o11c 사실,하지만 별도의 주소 공간이있는 경우 특수 기능은 내 대답과 같이 작성해야합니다. – Barmar