OSとハードウェア

小さなデータを1バイトずつ書き出すときに、毎回システムコールを呼ぶより、ユーザ空間のバッファにためてからまとめて書き出す方が速くなる主な理由はどれか。

  1. Aまとめて書くと、書き出すデータの総量そのものが減るから
  2. Bシステムコール1回ごとの固定の負担を、回数を減らして抑えられるから
  3. Cバッファにためておくと、ディスクを使わずにデータを保存しておけるから
答えと解説を見る

正解:B. システムコール1回ごとの固定の負担を、回数を減らして抑えられるから

システムコールでは、ユーザモードから特権モードへの切り替え、レジスタの保存、引数の確認、元に戻る処理などが毎回必要で、処理する量が1バイトでもこの固定の負担がかかります。さらにカーネルに入ることでキャッシュやTLBの中身も乱れます。バッファにためて数KBずつまとめて書けば、システムコールの回数が大きく減り、全体が速くなります。書き出すデータの総量は変わらず、最終的にはディスクに書かれます。

  • A. 書き出すデータの総量は変わりません。
  • B. 正しい。1回ごとの固定の負担を、回数を減らして抑えます。
  • C. 最終的にはディスクに書き出されます。
この分野を解く 分野ページへ

OSとハードウェアのほかの問題

  1. CPUに特権モード(カーネルモード)とユーザモードを設ける主な目的はどれか。
  2. アプリケーションがファイルの読み書きなどをOSに依頼するしくみを何と呼ぶか。
  3. 上のRISC-Vのコードの最後のecall命令が実行されたときに起こることとして正しいものはどれか。
  4. 割り込みと例外の違いとして一般的な説明はどれか。
  5. 次のうち、命令の実行とは無関係に、いつ起こるか決まっていない非同期のものはどれか。