トップ «前の日記(2006年12月08日) 最新 次の日記(2006年12月13日)» 編集
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|10|12|
2009|02|03|06|07|10|11|12|
2010|01|02|03|04|07|09|10|11|12|
2011|01|03|04|05|06|07|08|10|
2012|01|06|08|09|10|12|
2013|01|02|03|04|07|09|11|12|
2014|01|03|04|05|06|09|
2015|04|
2016|01|08|
ここは旧えびめもです。えびめも2に移行します(2016/12/1)

2006年12月12日

Linux ブロック型デバイスドライバ

Linuxのブロック型デバイスドライバの面白いところは、 request() コールバック関数に集約されるとおもうのだけど、この request() 関数はいったい誰によって呼ばれるのか?調べてみた。request()関数内に
printk("current->pid=%d, current->comm=%s\n",current->pid, current->comm);
というデバック表示をちょっと置いて、mount, cp, sync 等を実行してみた。(i386, linux-2.6.11)
current->pid=592, current->comm=mount
sbd_request()
current->pid=592, current->comm=mount
sbd_request()
current->pid=592, current->comm=mount
sbd_request()
current->pid=592, current->comm=mount
sbd_request()
current->pid=593, current->comm=cp
sbd_request()
current->pid=593, current->comm=cp
sbd_request()
current->pid=593, current->comm=cp
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=8, current->comm=pdflush
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=6, current->comm=kblockd/0
sbd_request()
current->pid=8, current->comm=pdflush
sbd_request()
current->pid=8, current->comm=pdflush
sbd_request()
current->pid=8, current->comm=pdflush
sbd_request()
current->pid=597, current->comm=sync
mountやcpといったファイルを直接I/Oしているプロセス、それからカーネル内部で走行しているカーネルスレッド kblockd/0、pdflush らが呼び出している。コンテクストの内側である、っていう点で少し安心した。