1

FCFSアルゴリズムを実装するためにminixファイルのコードをカスタマイズしたいのです/usr/src/kernel/proc.cが、アイデアや手がかりがありません。現在のアルゴリズムはいくつかの優先度レベルで機能し、すべてのプロセスは最初に単一のキューに移動し、次にいくつかのアルゴリズムを使用して、プロセスにいくつかの優先度が割り当てられると言われています。しかし、FCFS を実装する必要がある場合は、1 つのキューだけで作業する必要があります。

しかし、これらのことをどのように関連付けるのですか?

4

1 に答える 1

2

1 つの可能性 (おそらく良い方法ではありません) は、enqueue()関数を変更することです。

PUBLIC void enqueue(register struct proc *rp)   
{
    /* Add 'rp' to one of the queues of runnable processes.  This function is 
     * responsible for inserting a process into one of the scheduling queues. 
     * The mechanism is implemented here.   The actual scheduling policy is
     * defined in sched() and pick_proc().
     */
    int q = rp->p_priority;                       /* scheduling queue to use */

を割り当てる代わりにrp->p_priority、単に 0 を割り当てます。

   int q = 0;

これにより、すべてのプロセスが単一のプライオリティ キュー (キュー番号 0) に入れられ、単一の FCFS システムが得られます。もちろん、それがenqueue()プロセスをキューに追加する唯一の関数であると仮定しています。それが唯一のものである可能性は十分にありますが、確実にするには、Minix カーネルのほとんどを知っている必要があります。

その変更を行うと、複数のキューをサポートするために無駄なスペースが多すぎるかどうかを調査できます。存在する場合は、キュー宣言を適切に調整できます。キュー構造は、おそらくポインターの単なる配列です。したがって、使用可能なスペースの節約は大きくありません。

ただし、おそらく FCFS だけは必要ないことに注意してください。プライオリティ キューが存在するのには十分な理由があります。たとえば、割り込みハンドラは、SETI のために機能している数を処理するモンスターよりも迅速に処理する必要があります。つまり、何らかの優先順位を付ける必要があります。

于 2012-03-25T18:27:45.453 に答える