🚀

[超初心者向け!] OSの I / O デバイスアクセスを図でわかりやすく解説

2024/07/20に公開

はじめに

Operating System の I / O デバイスアクセスについて、初心者向けに説明してみました

この記事の対象者

・OS初心者
・インフラ初心者

目次

  1. I/O デバイスアクセスにおいてのカーネルの必要性
  2. デバイスファイルの種類
  3. カーネル内の操作方法
  4. I / O 割り込み処理

1. I / O デバイスにアクセスするにはカーネルがいるよね

プロセスはデバイスに直接アクセスできません
なぜなら、プロセスが同じ I / O デバイスにアクセスした場合、I / O デバイスはどのプロセスを優先すればいいのか分からないからです

プロセスが直接デバイスにアクセスすることはできない
そのためカーネルを用いて、プロセスを管理する必要があります

カーネルがプロセスを管理する

2. デバイスファイルの種類

デバイスファイルは2種類あります

その前にカーネルの中身を見てみましょう
プロセスが I / O デバイスにアクセスしたい場合、デバイスファイルに書き込みます
そしてデバイスドライバがデバイスファイルを読み、デバイスを操作します

カーネルの中身

1. キャラクタデバイス

キャラクタデバイスは入力/出力するためのデバイスファイルです

キャラクタデバイス
例えば、ディスプレイやキーボードなど、入力装置、出力装置があげられます

2. ブロックデバイス

ブロックデバイスは入力/出力する他、ファイルにアクセスしてくれるデバイスファイルです

ブロックデバイス
例えば、HDDやSDDといった記憶装置があげられます

3. カーネル内の操作方法

ここでは、I / O デバイスアクセスにおいてのカーネル内はどうなっているのかを説明したいと思います

1.プロセスがデバイスの操作依頼をする

プロセスがデバイスファイルを介して、デバイスの操作依頼をします

プロセスがデバイスの操作依頼をする

2. デバイスドライバがデバイスに要求を伝える

CPU がカーネルモードになり、デバイスドライバがデバイスドライバ内のレジスタを介してデバイスに要求を伝えます

デバイスドライバがデバイスに要求を伝える

3.デバイスが要求に応じた処理をする

デバイスが操作されます

デバイスが要求に応じた処理をする

4.デバイスドライバがデバイスの処理完了を受け取る

デバイスドライバがデバイスの処理完了を検出して結果を受け取ります

デバイスドライバがデバイスの処理完了を受け取る

5. プロセスがデバイスドライバの処理完了を受け取る

CPU がユーザーモードに切り替わり、プロセスがデバイスドライバの処理完了を検出して結果を受け取ります

プロセスがデバイスドライバの処理完了を受け取る

4. I / O 割り込み処理

I / O の割り込み処理がどのように行われているか、スケジュールの観点から考えてみましょう!
ここでは、process 0 と 1 が交互に処理されている状況を考えます(Round Robin)

プロセス0の中に、デバイスを動かして欲しいという要請(I / O アクセス)があると仮定します
その時、CPU のスケジュールはどのようになっているのでしょうか

CPU のスケジュール

1. プロセス0がデバイスドライバに I / O を要求する

プロセス0がデバイスドライバに I / O を要求します

2. デバイスドライバがデバイスに処理を要求する

デバイスドライバがデバイスに処理を要求します

3. CPU が他の処理を行う

この間、CPU は他の処理を行うことができます

4. デバイスが処理を完了すると、CPU に通知される

デバイスが処理を完了すると、割り込みメカニズムによって CPU に通知されます

5. CPU がデバイスの処理結果を受け取る

CPUはデバイスの処理結果を受け取り、他のプロセスを続行することができます

最後まで見てくださりありがとうございます!

Discussion