thread_schedule()
thread_yield()
現在のスレッドのレジスタと状態を保存し、次のスレッドのレジスタと状態をロードすることが目的である、などの関数を使用してスレッド切り替えを実装しました。
これで、タイマー割り込みを使用してxv6で同じことをしたいのですが、どのように機能するのかわかりません。
答え1
trap
タイマ割り込みはの関数によって処理されますtrap.c
。カウンタがticks
そこから更新され、yield()
呼び出されることもあります。
マルチスレッドがないので、xv6
単に実装すると仮定します。この場合、各スレッドが独自のアドレス空間とリソースのセットを持つことを除いて、何らかの方法でスレッドが実装されることに注意してください。したがって、実際に実装しているのは、スレッドとコンテキスト切り替えの概念を実際に実装するのではなく、スレッド間でリソースを共有する方法です。