让我们考虑函数
进行的以下系统调用 来自size_t read(int fildes, void *buf, size_t nbytes);
的 unistd.h
。
据我所知,操作系统将验证进行系统调用的进程是否允许访问所提供的读取数据放置位置,即void *buf
。但为什么会这样呢?地址是否提供了物理地址,因为它需要进行此检查?如果是,在进行系统调用之前,MMU是否将地址转换为物理地址?
一个进程如何提供一个不允许访问的地址?我看不出进程的地址空间中的虚拟地址如何被转换为不允许访问的物理地址。