32 비트 Linux에서 사용자 공간은 3G이고 커널 공간은 1G입니다. 이론적 관점에서 볼 때, 커널과 사용자가 4G 주소 공간을 차지할 수 있고, 주소를 방문하면 페이지 테이블을 방문 할 수 있습니다. 실현이 가능하거나 구현할 수없는 이유는 무엇입니까?OS 주소 공간이 사용자 공간과 커널 공간을 분할해야하는 이유는 무엇입니까?
2
A
답변
2
커널을 단순화하여 사용자와 주소 공간을 공유하도록합니다. 호출자가 제공 한 데이터를 커널 버퍼에 복사하려는 시스템 호출을 생각해보십시오. 그들은 각각 자신의 페이지 테이블이 있다면, 호출자의 버퍼에서 단어를 읽고 커널 버퍼로를 작성하는 사이에 페이지 테이블을 전환해야 할 것입니다 :
while (i < caller_buffer_length) {
switch_to_user_pt();
register = caller_buffer[i];
switch_to_kernel_pt();
kernel_buffer[i] = register;
i++;
}
가 동일한 주소 공간에있을 경우, 간단히 memcpy()
을 사용할 수 있습니다.
StackOverflow는 컴퓨터 아키텍처 및 OS 디자인에 대한 일반적인 질문이 아닙니다. 실용적인 프로그래밍 질문입니다. – Barmar