2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

デバイスドライバの働き

Posted at

色々なデバイス

デバイスを直接操作するためには、各デバイスに内蔵されているレジスタという領域を読み書きします。具体的にどのようなレジスタがあるか、どのレジスタにアクセスするとどのような操作をするのかは各デバイスによって異なります

気づき

レジスタはCPUについてる記憶装置だったような気がする。それでレジスタが各デバイスによって異なるということは部品それぞれがデバイスになるのかな。いろんな記憶するものを連携してパソコンはできてるんだな。
改めて思う。

プロセスのデバイス操作

  • プロセスがデバイスファイルを介して、デバイスドライバに対してデバイスを操作してほしいと依頼する
  • CPUがカーネルモードに切り替わり、デバイスドライバがレジスタを介してデバイスに要求を伝える。
  • デバイスが要求に応じた処理をする
  • デバイスドライバがデバイスの処理完了を検出して結果を受け取る
  • CPUがユーザモードに切り替わり、プロセスがデバイスドライバの処理完了を検出して結果を受け取る。

気づき

デバイスドライバ、レジスタを介して要求対象のデバイスを操作するのか

メモリマップトI/O(MMIO)

x86_64アーキテクチャにおいては、Linuxカーネルは自身の仮想アドレス空間に物理メモリを全てマップしています。

気づき

メモリマップI/Oという仕組みによってデバイスのレジスタにアクセスします
図を見るとプロセスの要求によってレジスタを介してデバイスを操作することでメモリ領域が割り当てられる

"マップする"の意味なんだったけ?

出典

ディスク上のファイルの一部または全体を、アプリケーションのアドレス空間内の一定のアドレス範囲にマッピングする方法です。これによってアプリケーションでは、動的メモリへのアクセスと同様にディスク上のファイルにアクセスできるようになります。

出典

ITの分野では、ある集合の要素を何らかの規則に基づいて別の集合や要素へ対応付けたり、字義通り、要素の分布や配置を地図などの上に図示することなどを意味する。

出典

気づき

メモリデバイスがメモリ領域を取得したところを基準にして0、10、20、30、40のプロセス(スレッドか?)がそれぞれ役割をすることでストレージデバイスからレジスタを介してアクセスしてデータを取得しているのか。

オフセットってなんだっけ

位置を基準点からの距離で表した値のこと。

出典

ポーリング

デバイスドライバが能動的にデバイスの処理が完了したかどうかを確認します。デバイスは、デバイスドライバから依頼された処理が完了すると、自身の処理完了通知用レジスタの値を変化させます。デバイスドライバはその値を定期的に読み出すことによって処理の完了を検出します。
...
デバイスドライバが完了するまで、CPUはほぼ他のことができません
...
デバイスに処理を依頼してから完了までの所要時間はミリ秒、マイクロ秒単位が当たり前に対して、CPUの1命令実行するのにかかる時間はナノ秒、あるいはもっと短い時間なのを考えると無駄の大きさをある程度想像していただけるかと思います。

気づき

CPU処理速度が早いが応答先のデバイスの処理速度が遅いのでCPUにとって時間の無駄になるのか。
その無駄を減らすためにポーリングを使うのか

デバイス側の割り込みの流れ

  • デバイスドライバがデバイスに処理を依頼する。この後CPUでは別の処理を動かせる
  • デバイスが処理を完了すると、割り込みという仕組みによってCPUに通知する。
  • CPUは、あらかじめデバイスドライバが、割り込みコントローラというハードウェアに登録しておいた、割り込みハンドラという処理を呼び出す。
  • 割り込みハンドラがデバイスの処理結果を受け取る

気づき

他デバイスから通知してもらえた方がCPUもしっかり他の作業ができる。
何かしら結果を受け取る時はハンドラが受け取るんだな。
聞いただけど他デバイスの方から通知された方が良さそうだけど

デバイス側の割り込みを見てみよう

ストレージデバイスに処理を依頼した時に、割り込みの数が増加する様子を確認します。システムが起動してから現在までの割り込みの数は/proc/interruptsというファイルを見ればわかります。

vboxuser@**************:*******$:~$ cd study
vboxuser@**************:*******$:~/study$ cat /proc/interrupts 
           CPU0       
  0:         34   IO-APIC   2-edge      timer
  1:        171   IO-APIC   1-edge      i8042
  8:          0   IO-APIC   8-edge      rtc0
 ....
LOC:    1055694   Local timer interrupts
....
PIW:          0   Posted-interrupt wakeup event

気づき

これだけデバイス側から割り込みがあるのか

vboxuser@**************:*******$ while true ; do grep Local /proc/interrupts ;sleep 1 ; done
LOC:    1086651   Local timer interrupts
....
LOC:    1093926   Local timer interrupts

気づき

割り込みを多くしたら本当増えている

出典

感想

一回で理解できないなら実践しながらすればいい。
とりあえず言葉の意味を理解しよう。頑張ろう

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?