Upgrade to Pro — share decks privately, control downloads, hide ads and more …

デバイスにアクセスするデバイスファイル

 デバイスにアクセスするデバイスファイル

以下動画のテキストです
https://youtu.be/W9vTi7N71Lg

Satoru Takeuchi

May 06, 2025
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

  1. デバイスとは • コンピュータシステムに繋がっているハードウェア ◦ コンピュータとほぼ一体なもの : CPU、メモリ ▪ CPUの機械語命令によって直接操作 ◦

    コンピュータに外付けする周辺機器 : ディスク(HDD,SSD)、キーボード、マウス ▪ 個々のデバイスの仕様に従って操作する ▪ 📝 タイマーのようにシステムの動作に必須なものはコンピュータに最初から内蔵されている ものもある • ユーザプログラムはデバイスに直接アクセスできない ◦ デバイスファイルという特殊なファイルを介してアクセス ◦ 📝 NICなど一部例外もある 2
  2. デバイスファイル • プログラムがデバイスにアクセスするためのインタフェース ◦ ファイルアクセス用のインタフェースで操作できる (例: open,read,write,closeシステムコール) • 権限が無いプログラムはデバイスにアクセスできない •

    同時アクセスによる問題が発生しないようにカーネルが制御 4 プログラム デバイスファイル(/dev/foo) ユーザ空間 カーネル 現実世界 デバイスを操作するコード デバイスファイル(/dev/bar) プログラム プログラム デバイスA デバイスB デバイスを操作するコード
  3. デバイスドライバ • プログラムからデバイスファイルを介したプログラムの要求に従ってデバイスを操 作するコード • デバイスの種類ごとに存在 ◦ 📝 種類が違うデバイスも所定の規格に沿っていれば同じデバイスドライバが使えることも 5

    プログラム デバイスファイル(/dev/foo) ユーザ空間 カーネル 現実世界 デバイスドライバ デバイスファイル(/dev/bar) プログラム プログラム デバイスA デバイスB デバイスドライバ
  4. デバイスファイルの例 6 $ ls -lR /dev/ … drwxr-xr-x 2 root

    root 0 Apr 28 19:54 pts # 仮想端末デバイスがあるディレクトリ /dev/input: crw-rw---- 1 root input 13, 64 Apr 28 19:54 event0 # キーボード … crw-rw---- 1 root input 13, 32 Apr 28 19:54 mouse0 # マウス … brw-rw---- 1 root disk 8, 0 Apr 28 19:54 sda # ディスク brw-rw---- 1 root disk 8, 1 Apr 28 19:54 sda1 # ディスク上の最初のパーティション brw-rw---- 1 root disk 8, 2 Apr 28 19:54 sda2 # ディスク上の2番目のパーティション
  5. デバイス番号 7 $ ls -lR /dev/ … drwxr-xr-x 2 root

    root 0 Apr 28 19:54 pts # 仮想端末デバイスがあるディレクトリ /dev/input: crw-rw---- 1 root input 13, 64 Apr 28 19:54 event0 # キーボード … crw-rw---- 1 root input 13, 32 Apr 28 19:54 mouse0 # マウス … brw-rw---- 1 root disk 8, 0 Apr 28 19:54 sda # ディスク brw-rw---- 1 root disk 8, 1 Apr 28 19:54 sda1 # ディスク上の最初のパーティション brw-rw---- 1 root disk 8, 2 Apr 28 19:54 sda2 # ディスク上の2番目のパーティション 2つの数字(メジャー番号、マイナー番号 )の組でシステム内のデバイスを一意に識別 📝 LinuxカーネルソースのDocumentation/admin-guide/devices.txtに一覧がある
  6. デバイスの種類 8 $ ls -lR /dev/ … drwxr-xr-x 2 root

    root 0 Apr 28 19:54 pts # 仮想端末デバイスがあるディレクトリ /dev/input: crw-rw---- 1 root input 13, 64 Apr 28 19:54 event0 # キーボード … crw-rw---- 1 root input 13, 32 Apr 28 19:54 mouse0 # マウス … brw-rw---- 1 root disk 8, 0 Apr 28 19:54 sda # ディスク brw-rw---- 1 root disk 8, 1 Apr 28 19:54 sda1 # ディスク上の最初のパーティション brw-rw---- 1 root disk 8, 2 Apr 28 19:54 sda2 # ディスク上の2番目のパーティション 「キャラクタデバイス (c)」と「ブロックデバイス (b)」に対応(後述) 📝 デバイスの種類ごとにメジャー番号、マイナー番号の名前空間が違う
  7. デバイスファイルの種類 • キャラクタデバイス(例: キーボード、マウス) ◦ 1バイト単位でアクセス ◦ 一般にデバイス内のデータにアドレスがなく、 seekできない ◦

    📝 その33 端末デバイス • ブロックデバイス(例: HDDやSSDのようなディスクドライブ) ◦ ブロック単位(デフォルトは512バイト)でアクセス ◦ 一般に個々のデータにアドレスが割り振られており、 seekできる ◦ 📝 その58 Linuxの色々なブロックデバイス 9