デバイスの管理

/procディレクトリ

Linuxは、そのコンピュータに接続しているデバイスの情報などのリソース関連情報を/procディレクトリ以下のファイルに格納しており、あたかもファイルであるかのように配置した仮想的なファイル・システムとなっています。仮想的とはいえ,通常のファイルと同じようにアクセスでき、主に以下の様な構成となっております。

ファイル名 説明
/proc/bus/usb/* USBデバイス情報
/proc/cpuinfo CPU情報
/proc/interrupts IRQ情報
/proc/pci PCIデバイス情報
/proc/scsi/scsi SCSIデバイス情報
/proc/modules ロード済みモジュール情報

それでは、実際にCPU情報を見てみましょう。

[centos@localhost ~]$ cat /proc/cpuinfo

コンピュータのCPU情報を確認することができます。

IRQとは

IRQ(Interrupt ReQuest:アイアールキュー)とは、割り込み要求のことです。デバイスなどがCPUに信号を送ってプログラムなどを一時中断させ、優先度の高いプログラムを実行させます。0~15までの16種類のIRQ番号によって管理されています。これらは旧来より固定されている番号なので、現在のパソコンでは使用することが少ない番号(フロッピーディスクや浮動小数点演算ユニットなど)も存在します。

IRQ番号 説明
0 システムタイマー
1 キーボード
2 IRQ9とのカスケード接続
3 シリアルポート2
4 シリアルポート1
5 パラレルポート2またはサウンドカード
6 フロッピーディスクコントローラ
7 パラレルポート1
8 リアルタイムクロック
9 IRQ2へのリダイレクト
10・11 空き
12 ps/2マウス
13 数値演算コプロセッサ(浮動小数点演算ユニット)
14 IDEハードディスクコントローラ(プライマリ)
15 IDEハードディスクコントローラ(セカンダリ)

それでは、実際にIRQ情報を見てみましょう。

[centos@localhost ~]$ cat /proc/interrupts

現在のIRQ情報が出力されます。

PCIとは

PCI-Expressが存在します。

SCSIとは

SCSI(Small Computer System Interface:スカジー)とは、周辺機器とコンピュータとのデータのやりとりを行うインタフェース規格の一つです。USB規格の普及により利用されることは少なくなりましたが、それまでは外付けのデバイスを接続するのに使用されました。機器同士を順番にケーブルで連結していく数珠つなぎ(デイジーチェーン接続)型で、終端の端子に信号の反射を防ぐターミネータと呼ばれる装置を装着するのが特徴です。

IDEとは

IDE(Integrated Drive Electronics)とは、主に内蔵ハードディスクや、内蔵光学ドライブを接続する為のインターフェース規格の一つです。一昔前までは一般的でしたが、現在はは大容量化、アクセススピードの向上に対応すべく、IDEの後継規格であるSATA(Serial Advanced Technology Attachment)が一般的になっています。

デバイスファイル

Linuxは、デバイスファイルというデバイスに関する情報が記載されたファイルを/devディレクトリに格納しており、このデバイスファイルを通じてデバイスにアクセスします。デバイスを接続しても、このデバイスファイルが存在しなければ使用できません。

それでは、実際にデバイスファイル一覧を見てみましょう。

[centos@localhost ~]$ ls /dev

コンピュータのCPU情報を確認することができます。

コールドプラグとホットプラグ

一昔前のコンピュータは、デバイスを接続する際にはコンピュータの電源が切れた状態で行う必要があり、起動している状態でデバイスの接続を行うと正しく認識できませんでした。この特徴をコールドプラグといいます。コールド(冷えた)状態、すなわち、コンピュータが停止している状態という意味です。
この特徴を持った主なデバイスに、先程のPCIやSCSI、USB以外のマウスやキーボードなどがあります。

これに対し、コンピュータが起動している時でも接続、取り外しができるデバイスが一般化してきました。この特徴をホットプラグと言います。ホット(温かい)すなわち、コンピュータが起動している状態という意味です。
最も有名なホットブラグの規格がUSB(Universal Serial Bus)です。現在は高速化の図られたUSB2.0が普及していますが、更に高速な次世代規格のUSB3.0搭載製品も増えてきています。

udev(ユーデブ)

接続したデバイスを感知して、カーネルが動的にデバイスファイルを作成して割り当てる仕組みをudev(userspace device management)といい、ホットプラグはこの仕組みを用いて実現しています。udevの流れは以下のようになります。

  1. デバイスを接続
  2. カーネルがデーモンのudevdにデバイスが接続されたことを通知する。
  3. udevdが/etc/udev配下のスクリプトファイルを実行して、動的にデバイスファイルが生成される。
  4. デバイスに関する情報がhaldに通知され、新規のデバイスの登録が行われる。
    ※haldとは、システム上でデバイスのDBを管理しているHAL(Hardware Abstraction Layer)のデーモン。
  5. dbusにより各アプリケーションにデバイス接続情報が通知され、デバイスが使用できるようになる。
    dbus(Desktop Bus)とは、デスクトップアプリケーション間での通信プロトコル。

udevdはこのように、カーネルにデバイスが追加されたかどうかの監視を行いますが、実際にカーネル内部の情報にアクセスすることはできません。そこで利用されるのが、sysfs(sysファイルシステム)です。sysfsとは、Linuxカーネル 2.6 によって提供される仮想ファイルシステムで、デバイスやドライバについての情報をカーネルからユーザアプリケーションが参照できるファイルシステムの形で出力します。

/sysディレクトリ配下に、デバイス名の付いたディレクトリとして作成することにより、ユーザアプリケーションが参照できる形式になり、上記の流れでの処理が可能となります。

プログラミングの必要性

フェイスブックのザッカーバーグ氏やマイクロソフトのビル・ゲイツ氏などが、プログラミングの必要性について語っています。

おすすめアイテム

「M570」以来、実に7年ぶりのロジクール製トラックボールマウス。プログラミングをするにあたって、一度使うともう元には戻れません!