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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Satoru Takeuchi
PRO
May 06, 2025
Technology
0
130
デバイスドライバ
以下動画のテキストです
https://youtu.be/rIbvTC3p-ZI
Satoru Takeuchi
PRO
May 06, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
書籍執筆での生成AIの活用
sat
PRO
1
280
ChatGPTに従って体調管理2026
sat
PRO
0
150
eBPF
sat
PRO
1
110
waruiBPF
sat
PRO
0
110
eBPFとwaruiBPF
sat
PRO
5
3.8k
Pythonのコードの気になる行でスタックトレースを出す
sat
PRO
1
100
ソースコードを読むときの思考プロセスの例 ~markdownのレンダリング方法を知りたかった2 markdownパッケージ~
sat
PRO
0
200
様々なファイルシステム
sat
PRO
0
340
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
430
Other Decks in Technology
See All in Technology
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
640
FinTech SREのAWSサービス活用/Leveraging AWS Services in FinTech SRE
maaaato
0
130
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
920
AI駆動開発を事業のコアに置く
tasukuonizawa
1
160
Agile Leadership Summit Keynote 2026
m_seki
1
590
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
68k
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
230
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
4
1.2k
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
460
StrandsとNeptuneを使ってナレッジグラフを構築する
yakumo
1
110
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
顧客の言葉を、そのまま信じない勇気
yamatai1212
1
350
Featured
See All Featured
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
310
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
580
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
130
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
350
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
220
Making the Leap to Tech Lead
cromwellryan
135
9.7k
The untapped power of vector embeddings
frankvandijk
1
1.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
160
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