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