1

プロセッサがカーネルコードを生成し、メンテナンスとレギュレーションの作業を実行する機会が得られたときの割り込みメカニズムを理解したいと思います。私が知っているのは、タイマー割り込みがこの機能をOSに提供するということです。

1)関連する割り込み番号と、Linuxの場合に呼び出される最初のOSルーチンとは正確に何であるかを知りたいです。このためのファイルと関数名を知っていれば良いでしょう。

Linuxの場合、scheduler_tickは新しいタスクをスケジュールするために呼び出されるカーネル関数ですが、scheduler_tickとその親を誰が呼び出すのかは不明です。

2)Linuxでscheduler_tickを呼び出す他の割り込みもありますか?もしあれば、どれですか?

 /*
   This function gets called by the timer code, with HZ frequency.
   We call it with interrupts disabled.
 */

 void scheduler_tick(void)
 {
         int cpu = smp_processor_id();
         struct rq *rq = cpu_rq(cpu);
         struct task_struct *curr = rq->curr;
.......
4

1 に答える 1

7

相互参照(x-ref)ソースブラウザにアクセスできる場合、これは簡単に答えることができます。

Linuxカーネルのオンラインx-refプロジェクトを1つ入手するには、 http: //lxr.linux.no/#linux+v3.6.3/kernel/sched/core.c#L3214をクリックしてください。(これはアセンブラコードを外部参照しません。)

このリンクは scheduler_tick関数定義に移動します。関数名をクリックし、右側の新しいパネルで、「関数プロトタイプまたは宣言」リンク「usage...」の後に選択します。しばらくすると、この関数に言及しているすべてのコードが一覧表示されます。

 include/linux/sched.h, line 309  << declaration
 kernel/sched/core.c, line 3214   << definition
 kernel/timer.c, line 1373        << calling

したがって、timer.c:1373 http://lxr.linux.no/#linux+v3.6.3/kernel/timer.c#L1373update_process_times関数の一部です:

1355 /*
1356  * Called from the timer interrupt handler to charge one tick to the current
1357  * process.  user_tick is 1 if the tick is user time, 0 for system.
1358  */
1359 void update_process_times(int user_tick)

この関数は、タイマー割り込みハンドラーからのみ呼び出すことができます。ティックごとに呼び出す必要があります。

update_process_timesリストを取得するには、相互参照検索プロセスを繰り返します。

References:
 arch/alpha/kernel/smp.c, line 520 
 arch/arm/kernel/time.c, line 108 
 arch/cris/arch-v10/kernel/time.c, line 171 
 arch/cris/arch-v32/kernel/time.c, line 206 
 arch/h8300/kernel/time.c, line 40 
 arch/ia64/kernel/time.c, line 184 
 arch/m68k/kernel/time.c, line 38 
 arch/parisc/kernel/time.c, line 163 
 include/linux/sched.h, line 308 
 kernel/time/tick-sched.c, line 683 
 kernel/time/tick-sched.c, line 841

関連する割り込み番号

割り込み番号はプラットフォームに依存します(起動時に割り当てられることもあります)。興味のあるプラットフォームについては言わなかった。

2)Linuxでscheduler_tickを呼び出す他の割り込みもありますか?もしあれば、どれですか?

hrtimers(高解像度タイマー。これは通常のシステムタイマーとは異なる場合があります)を含む、いくつかのタイマーの実装があります。実装ごとに異なる割り込みを使用できます。

于 2012-10-25T19:46:25.173 に答える