Personal tools
You are here: Home ブログ 学習経過 学習経過 その4
« December 2010 »
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Recent entries
sysfs tips 02 ohyama 2010-09-09
sysfs tips ohyama 2010-09-02
Haskell で周波数スペクトルを得る ohyama 2010-07-29
Haskell で線形識別関数の学習を行う ohyama 2010-07-19
Haskell で逆行列を求める ohyama 2010-07-16
Recent comments
Re:vim に lisp 機能をつける t.mimori 2010-12-16
Re:Haskell で周波数スペクトルを得る H.OHYAMA 2010-08-01
Re:lkml でお勉強 (その1-1) Hiroyasu OHYAMA 2009-08-21
Re:lkml でお勉強 (その1-1) kosaki 2009-08-20
Re:vim に lisp 機能をつける ohyama 2008-05-08
Categories
学習経過
GNU/Linux
 
Document Actions

学習経過 その4

今日はシグナルについて書くことにする。
この部分を学習するに当たり、割り込みと関連づけて考えずにはいられない。
これを踏まえてシグナルの受信について考えてみる。

『シグナルの重要な特徴として相手のプロセスの状態に関係なく、いつでもシグナルを送る事ができる』と教本にある。しかし、シグナルの送信後すぐに相手側プロセスが受信するのではない。ソフト割り込みのように、シグナル送信を"生成"と"配信"の二段階に別けている。
シグナルの生成は、送信先プロセスのプロセスディスクリプタにシグナルが送信された事を通知する。シグナルの配信ではカーネルが、送信先プロセスにシグナルに対する処理を行わせる。

さて、シグナルの生成は送信側プロセスの任意のタイミングで行われるわけだが、シグナルの配信はいつ行われるのか。2段階に別けているという事は、配送は遅延処理されそうである。
実際にはカーネル実行パスによって、プロセスの保留中シグナルが確認され、配送される。

ところで、シグナルの配信はカレントプロセスに対してのみ行われる。
この前提を考えたときに、疑問が生じる。
カーネル実行パスが処理されなければ、いつまでたっても配送されず、仮に実行されても目的にのプロセスが実行中に保留中シグナルが確認されないかもしれない。つまり、いつまでたっても目的のプロセスにシグナルが配送されないかもしれない。というもの。

しかし、その疑問はインターバルタイマ割り込みの理解によって瞬時に解決できる。
インターバルタイマは1tick毎に発生する割り込みで、処理が終了するとカーネル実行パスが処理される。プロセス時間(クォンタム時間)の更新 (update_process_times()関数)はtick毎に行われる。つまり、スケジューリングの基準となるCPU時間の分解能は 1tickなので、tick毎に実行されるインターバルタイマの終了によって呼び出されるカーネル実行パス中で処理される保留中シグナルは、全てのプロセスの実行時間が無くなるまでに配送される。

これを書き終えて素朴な疑問が浮って沸いた。
シグナルを、現在の処理に割り込む点や、遅延処理される点から以前に学習したソフト割り込みと同一視してしまいそうになる。プロセスに対して処理を行う事で、プロセスを殺したりできる事は理解できたが、割り込みとシグナルの明確な違いを知りたい。シグナルのシグナルたらしめる物とは何か。

「シグナル処理はプロセス間通信と考える事が出来る。割り込みはカーネルに対する処理であるのに対して、シグナルはプロセスに対する処理である。」との事。では、プロセスに対する処理をシグナル以外にできないのだろうか。もし、シグナルという機能を使わなければプロセスに対して命令する事ができないなら、シグナルの必然性が存在する。
しかし、そうでもないらしい。事実、プロセス間通信を行うならば、ソケットを使う手法が存在するとの事。なるほど、プロセスが親子関係ならばパイプも使えるだろう。

それでは謎は解決されない。しかし、概ね納得する事はできた。
先にも述べたように、シグナルは30年以上前から存在する機能であり、新しい機能(ソケット等)は次々存在する。なので、シグナルは歴史的にも技術的にもプリミティブな機能であると言えるとの事。加えて、メモリ管理無しのOSはありえないが、シグナル無しのOSはありえると事。
なるほど、古きからある技術のようだが、シグナルによってプロセスを殺させるという話しはとてもわかりやすい内容であった。割り込みとシグナルを分離して考える事のできる今、教本の内容をより素直に自分のものに出来るだろう。

Category(s)
学習経過
The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/ohyama/5b667fd27d4c904e-305d306e4/tbping

Re:学習経過 その4

Posted by ohyama at 2007-01-25 23:35
おかしな日本語表現を較正した結果、トップへ上がってしまいました。
でしゃばった行為をしてしまい、ごめんなさい。
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.