Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
デバイスドライバ
Search
Satoru Takeuchi
PRO
May 06, 2025
Technology
0
68
デバイスドライバ
以下動画のテキストです
https://youtu.be/rIbvTC3p-ZI
Satoru Takeuchi
PRO
May 06, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
低レイヤソフトウェア技術者が YouTuberとして食っていこうとした話
sat
PRO
7
5.9k
ポーリングと割り込み
sat
PRO
1
66
Rook: Intro and Deep Dive With Ceph
sat
PRO
1
130
会社員しながら本を書いてきた知見の共有
sat
PRO
3
840
デバイスにアクセスするデバイスファイル
sat
PRO
1
54
ファイルシステムのデータを ブロックデバイスへの操作で変更
sat
PRO
1
42
マルチスレッドの実現方法 ~カーネルスレッドとユーザスレッド~
sat
PRO
2
150
共有メモリ
sat
PRO
3
84
マルチスレッドプログラム
sat
PRO
3
69
Other Decks in Technology
See All in Technology
KCD Lima: eBee in Peru!
lizrice
0
110
AI工学特論: MLOps・継続的評価
asei
10
2k
CSPヘッダー導入で実現するWebサイトの多層防御:今すぐ試せる設定例と運用知見
llamakko
1
270
生成AIによる情報システムへのインパクト
taka_aki
1
200
東京海上日動におけるセキュアな開発プロセスの取り組み
miyabit
0
200
隙間時間で爆速開発! Claude Code × Vibe Coding で作るマニュアル自動生成サービス
akitomonam
2
200
Tiptapで実現する堅牢で柔軟なエディター開発
kirik
1
150
新規事業におけるAIリサーチの活用例
ranxxx
0
170
Vision Language Modelと自動運転AIの最前線_20250730
yuyamaguchi
2
710
2025/07/22_家族アルバム みてねのCRE における生成AI活用事例
masartz
2
140
Turn Your Community into a Fundraising Catalyst for Black Philanthropy Month
auctria
PRO
0
200
【CEDEC2025】LLMを活用したゲーム開発支援と、生成AIの利活用を進める組織的な取り組み
cygames
PRO
1
1.7k
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.5k
How to Ace a Technical Interview
jacobian
278
23k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Building Adaptive Systems
keathley
43
2.7k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
BBQ
matthewcrist
89
9.8k
Why Our Code Smells
bkeepers
PRO
337
57k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Transcript
デバイスドライバ May. 6th, 2025 Satoru Takeuchi X: satoru_takeuchi 1
デバイスドライバとは • デバイスの操作を担当するカーネル内のコンポーネント • おおざっぱにいうとデバイスの種類だけ存在する ◦ 📝 Linuxのコード数千万行のうち、ほとんどはデバイスドライバのコード 2
デバイスの操作方法 • デバイスには1つ以上のレジスタという領域が存在 • どのレジスタにどうアクセスすればデバイスをどんなふうに操作できるかが仕様に書かれている • デバイスドライバはユーザからの要求に応じて仕様通りにレジスタにアクセス 3 デバイス カーネル空間
物理世界 レジスタ デバイスドライバ アクセス
デバイスのレジスタにアクセスする方法 • メモリマップトI/O ◦ デバイスのレジスタをカーネルの仮想アドレス空間にマップしてアクセス ◦ メモリと同じようにアクセスできる ◦ 主流の方法。本動画でもこちらについて説明 •
ポートマップトI/O ◦ デバイスのレジスタを portと呼ばれるメモリとは別のインタフェースを介してアクセス ◦ 専用の機械語命令を発行する必要がある (例: x86だとin,out命令) 4
メモリマップトI/O • デバイスアクセス時はデバイスのレジスタをカーネルの仮想アドレス空間にマップし てアクセス ◦ 📝 実はカーネルがデバイスを認識した段階でデバイスのレジスタは物理アドレス空間にマップされ ている ◦ 📝
物理アドレスのどこに存在するかは OSではなくUEFIやACPIから得る 5 メモリ デバイスAの レジスタ(群) カーネルの 仮想アドレス空間 デバイスBの レジスタ(群) …
デバイスドライバのサンプル • 簡単な仕様の仮想的なディスクデバイスを使ってデバイスドライバがどんなことをし ているかを学ぶ 6 レジスタのオフセット 役割 0 読み書きに使うメモリ領域の開始アドレス 10
読み書きに使うディスク内のデータの開始オフセット 20 読み書きサイズ 30 ここに書き込むと処理を要求。 0なら読み出し、1なら書き込み 40 要求された処理が終わったかどうかを示す。処理を開始した時点で 0 になり、完了したら1になる。
初期状態 • カーネル仮想アドレス空間のアドレス500にディスクのレジスタがマップされている 7 メモリ 0 500 510 520 530
540 ??? ??? ??? ??? ??? 仮想アドレス空間 ディスクデバイス 2222 3333 1111 10 0 20
やりたいこと • メモリ領域0~100にディスクのオフセット100~200のデータを読み出す 8 メモリ 0 500 510 520 530
540 ??? ??? ??? ??? ??? ディスクデバイス 2222 3333 1111 100 0 200 ??? 100 仮想アドレス空間
デバイスドライバの読み出し処理はこんなかんじ func read(mem_addr, dev_offset, size) { regs[] = {500, 510,
520, 530, 540} regs[0] = mem_addr regs[1] = dev_offset regs[2] = size regs[3] = 0 } 9
読み書きするアドレス、オフセットの設定 • アドレス500,510,520にマップされたレジスタを設定 10 メモリ 0 500 510 520 530
540 0 100 100 ??? ??? ディスクデバイス 2222 3333 1111 100 0 200 ??? 100 仮想アドレス空間 メモリアドレス データサイズ ディスク上のオフセット
ディスクデバイスに処理を依頼 • アドレス530にマップしたレジスタに0を書き込む(読み出しを意味する) 11 メモリ 0 500 510 520 530
540 0 100 100 0 0 ディスクデバイス 2222 3333 1111 100 0 200 ??? 100 仮想アドレス空間
ディスクデバイスがデータを転送 12 メモリ 0 500 510 520 530 540 0
100 100 0 0 ディスクデバイス 2222 3333 1111 100 0 200 2222 100 仮想アドレス空間
ディスクデバイスが読み出し完了を示す • 📝 デバイスドライバが読み出し完了を検出する方法は次の動画で説明 13 メモリ 0 500 510 520
530 540 0 100 100 0 1 ディスク 2222 3333 1111 100 0 200 2222 100 仮想アドレス空間
まとめ • デバイスはデバイス内のレジスタ領域へのアクセスによって操作 • 何をしたいときにどうレジスタにアクセスすべきかは仕様に書いている • デバイスドライバはユーザからの要求に応じて仕様通りレジスタにアクセス • メモリマップトI/Oの場合アセンブリコード無しでメモリアクセスの感覚でデバイスの レジスタにアクセスできる
14