为什么操作系统地址空间必须划分用户空间和内核空间



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

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

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

如果它们在同一地址空间中,则可以简单地使用memcpy()

最新更新