関数によって行われる次のシステムコールを考えてみましょう
size_t read(int fildes, void *buf, size_t nbytes);
から unistd.h
。
私が理解しているように、OSは、システムコールを行ったプロセスが、読み取りデータを置く場所の指定されたアドレス、つまり にアクセスすることを許可されていることを検証しますvoid *buf
。しかし、なぜそうなのですか?このチェックを行う必要があるため、提供された住所は物理的な住所ですか? はいの場合、システム コールを実行する前に、アドレスは MMU によって物理アドレスに変換されますか? また、アクセスが許可されていないアドレスをプロセスが提供するにはどうすればよいでしょうか。プロセスのアドレス空間内の仮想アドレスを、アクセスが許可されていない物理アドレスに変換する方法がわかりません。