デバイスの種類
100%

デバイス · レッスン 2

デバイスの種類

キャラクターデバイスとブロックデバイスのノードを、パイプ、ソケット、通常のファイルシステムオブジェクトから区別する方法を学びます。

ls -l が表示するモードの先頭文字は、オブジェクトのファイルシステム上の種類を示します。/dev 以下では、キャラクター特殊ファイルとブロック特殊ファイルがデバイスノードです。パイプや Unix ドメインソケットのノードも置かれることがありますが、これらはハードウェアデバイスノードではなく、プロセス間通信のオブジェクトです。

$ ls -l /dev/null /dev/sda /run/systemd/journal/dev-log /tmp/example-fifo
crw-rw-rw- 1 root root 1, 3 ... /dev/null
brw-rw---- 1 root disk 8, 0 ... /dev/sda
srw-rw-rw- 1 root root      ... /run/systemd/journal/dev-log
prw------- 1 user user      ... /tmp/example-fifo

項目や権限はシステムによって異なります。この例は種類を表す文字だけを示すものです。

キャラクターデバイスノード

c はキャラクターデバイスを示します。通常は、アドレス指定可能な固定サイズのストレージブロックではなく、ストリーム指向またはデバイス固有のインターフェースを公開します。端末や /dev/null などの疑似デバイスが例です。

「キャラクター」という名前でも、各システムコールが厳密に1文字ずつ転送する必要はありません。アプリケーションはバッファーを読み書きでき、ブロック、フレーミング、制御の動作はドライバーが定義します。

キャラクターデバイスノードを示すモードの先頭文字はどれですか?

ブロックデバイスノード

b はブロックデバイスを示します。ブロックデバイスはカーネルのブロック層を通じて、ブロック単位でアドレス指定可能なストレージを提供し、バッファー付き I/O、パーティション分割、ファイルシステムなどの操作を支えます。ディスク、パーティション、論理ボリュームには一般にブロックノードがあります。

ブロックノードは、マウント済みファイルシステムではありません。ストレージデバイスまたは論理領域を表しており、その上にファイルシステムを作成して別途マウントできます。誤ったブロックノードへ生データを書き込むと、パーティションテーブル、ファイルシステム、ユーザーデータが破壊される可能性があります。

モードの先頭文字 b は何を示しますか?

FIFO とソケットノード

p は FIFO、別名「名前付きパイプ」を示します。プロセス同士が通信できる、名前を持ったバイトストリームを提供します。読み取られたデータが FIFO ノードに永続的に保存されることはありません。

s は Unix ドメインソケットノードを示します。ローカルソケットのエンドポイントに名前を付け、コネクション指向またはデータグラム通信、ファイル記述子の受け渡し、相手の資格情報を扱う機能などを利用できます。インターネットアドレスを使うネットワークソケットが、必ずファイルシステムノードを持つわけではありません。

FIFO も Unix ソケットノードも、ハードウェアドライバーの選択にデバイスのメジャー番号とマイナー番号を使いません。

これらの IPC オブジェクトを正しく区別している説明はどれですか?

メジャー番号とマイナー番号

キャラクターデバイスとブロックデバイスのノードには、メジャーとマイナーに分かれたデバイス番号が保存されます。長形式一覧では、通常のファイルサイズ欄の代わりに表示されます。

brw-rw---- 1 root disk 8, 0 ... /dev/sda

この組は、そのノードがどの登録済みデバイスインターフェースとインスタンスを指すかをカーネルへ伝えます。メジャー番号はドライバーまたはデバイスクラスに関連付けられ、マイナー番号はドライバーが解釈します。「マイナー番号0は常に最初のドライブ」といった仮定をハードコードしてはいけません。対応関係はサブシステムとカーネルインターフェースによって異なります。

種類とデバイス番号は次のように明示して表示できます。

$ stat -c 'type=%F major=%t minor=%T path=%n' /dev/null

GNU stat では、%t%T の値が16進数で表示されます。

メジャー番号とマイナー番号を使ってカーネルデバイスインターフェースを識別するオブジェクトはどれですか?

レッスン完了

デバイスの種類 を完了しました

特殊なファイルシステムの種類を、すべてハードウェアデバイスと見なさずに解釈できるようになりました。

  • c をキャラクターデバイスノード、b をブロックデバイスノードとして読む。

  • p を FIFO、s を Unix ドメインソケットノードとして読む。

  • メジャー番号とマイナー番号をデバイスノードだけに関連付ける。

  • ブロックデバイスへの直接アクセスは破壊的になり得ると理解する。

学習進捗を保存

無料アカウントを作成してこのレッスンを保存し、どのデバイスからでも学習を続けられます。

無料アカウントを作成
次のレッスン
デバイス に戻る