Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
デバイスにアクセスするデバイスファイル
Search
Satoru Takeuchi
PRO
May 06, 2025
Technology
130
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
デバイスにアクセスするデバイスファイル
以下動画のテキストです
https://youtu.be/W9vTi7N71Lg
Satoru Takeuchi
PRO
May 06, 2025
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
119-多機能ファイルシステムBtrfs_のコピー.pdf
sat
PRO
1
67
Linuxカーネルの インタフェースは変わりうる?
sat
PRO
1
92
あなたの知らないバージョン命名規則
sat
PRO
3
900
Rook: Intro and Deep Dive with Ceph
sat
PRO
1
64
Machine Check Exception
sat
PRO
2
66
バイナリダンプの模様を読む
sat
PRO
0
89
cpコマンドはディスク上でデータを コピーしないことがある
sat
PRO
3
87
114-ファイルのshallow_copy.pdf
sat
PRO
2
57
113-Btrfsのスナップショット.pdf
sat
PRO
0
40
Other Decks in Technology
See All in Technology
10分で知る最近のOmarchy
komagata
0
280
薬剤師(ドメインエキスパート)と一緒に育てる薬局向けAIアシスタント
kakehashi
PRO
2
160
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
680
Claude Code本って、 読む必要あるの?
oikon48
2
430
Deploying a Full-Stack Bun-Native Framework on Cloudflare Workers
7nohe
0
160
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
150
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
2
620
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
1
770
すぐできる衛星通信対応 あとは山奥に行くだけ
tatetate55
0
110
2026_devsumi_ozono.pdf
o3
3
450
omasushiというライブラリを作った
polidog
PRO
0
220
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
5
25k
Featured
See All Featured
HDC tutorial
michielstock
2
860
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
240
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
430
GraphQLとの向き合い方2022年版
quramy
50
15k
We Are The Robots
honzajavorek
0
370
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.3k
Navigating Weather and Climate Data
rabernat
0
520
The agentic SEO stack - context over prompts
schlessera
0
930
Amusing Abliteration
ianozsvald
1
290
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Writing Fast Ruby
sferik
630
63k
The Cult of Friendly URLs
andyhume
79
7k
Transcript
デバイスにアクセスする デバイスファイル May. 6th, 2025 Satoru Takeuchi X: satoru_takeuchi 1
デバイスとは • コンピュータシステムに繋がっているハードウェア ◦ コンピュータとほぼ一体なもの : CPU、メモリ ▪ CPUの機械語命令によって直接操作 ◦
コンピュータに外付けする周辺機器 : ディスク(HDD,SSD)、キーボード、マウス ▪ 個々のデバイスの仕様に従って操作する ▪ 📝 タイマーのようにシステムの動作に必須なものはコンピュータに最初から内蔵されている ものもある • ユーザプログラムはデバイスに直接アクセスできない ◦ デバイスファイルという特殊なファイルを介してアクセス ◦ 📝 NICなど一部例外もある 2
ユーザプログラムをデバイスに直接アクセスさせない理由 • デバイスへのアクセス方法を誤ると予期せぬ動作が起きうる ◦ 最悪デバイスが壊れる • 個々のプログラムは正しくデバイスにアクセスしていても複数プログラムから並列ア クセスすると、やはり予期せぬ動作が起きうる • デバイスはシステムグローバルなリソースなので、他人のデータに簡単にアクセス
できてしまう • プログラムごとにデバイスにアクセスするコードを書くのは非効率 3
デバイスファイル • プログラムがデバイスにアクセスするためのインタフェース ◦ ファイルアクセス用のインタフェースで操作できる (例: open,read,write,closeシステムコール) • 権限が無いプログラムはデバイスにアクセスできない •
同時アクセスによる問題が発生しないようにカーネルが制御 4 プログラム デバイスファイル(/dev/foo) ユーザ空間 カーネル 現実世界 デバイスを操作するコード デバイスファイル(/dev/bar) プログラム プログラム デバイスA デバイスB デバイスを操作するコード
デバイスドライバ • プログラムからデバイスファイルを介したプログラムの要求に従ってデバイスを操 作するコード • デバイスの種類ごとに存在 ◦ 📝 種類が違うデバイスも所定の規格に沿っていれば同じデバイスドライバが使えることも 5
プログラム デバイスファイル(/dev/foo) ユーザ空間 カーネル 現実世界 デバイスドライバ デバイスファイル(/dev/bar) プログラム プログラム デバイスA デバイスB デバイスドライバ
デバイスファイルの例 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番目のパーティション
デバイス番号 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に一覧がある
デバイスの種類 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)」に対応(後述) 📝 デバイスの種類ごとにメジャー番号、マイナー番号の名前空間が違う
デバイスファイルの種類 • キャラクタデバイス(例: キーボード、マウス) ◦ 1バイト単位でアクセス ◦ 一般にデバイス内のデータにアドレスがなく、 seekできない ◦
📝 その33 端末デバイス • ブロックデバイス(例: HDDやSSDのようなディスクドライブ) ◦ ブロック単位(デフォルトは512バイト)でアクセス ◦ 一般に個々のデータにアドレスが割り振られており、 seekできる ◦ 📝 その58 Linuxの色々なブロックデバイス 9
デバイスファイルは誰が作る? • 通常はsystemdの1機能であるudevが作成 ◦ カーネルがデバイスを認識すると udevが起動し、ルール(udev rule)に従って作成 • 📝 昔はmknodというコマンドを自分で実行して手で作っていた
10
まとめ • ユーザプログラムは直接デバイスにはアクセスできず、デバイスファイルを介してア クセスする • デバイスファイルのアクセスをきっかけに動作してデバイスを操作するカーネル内 のコードがデバイスドライバ • デバイスは「ブロックデバイス」と「キャラクタデバイス」に分かれる •
デバイスファイルは通常udevが作成する 11