为什么OS地址空间必须分割用户空间和内核空间?

时间:2014-10-11 03:22:44

标签: kernel space

在32位Linux中,用户空间为3G,内核空间为1G。从理论上讲,内核和用户可以占用4G地址空间,当他们访问地址时,他们只能通过他们的页面表访问。 是可行的还是为什么无法实施?

1 个答案:

答案 0 :(得分:2)

它极大地简化了内核以与用户共享地址空间。考虑一个系统调用,它希望将调用者提供的数据复制到内核缓冲区中。如果它们各自都有自己的页表,则必须在读取调用者缓冲区中的单词并将其写入内核缓冲区之间切换页表:

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

如果它们位于同一地址空间,则只需使用memcpy()