動的優先度の合計により次の実行タスクを決定する。すべてのタスクに平等な資源割り当ては実現していない。資源を平等に割り振るよう設計されたスケジューラである。}runaueue_headのリスト構造体から、タスクを一個ずつ取り出してその優先値をgoodness()関数にて計算しweight変数に格納する。weight変数を比較し一番大きなものを次の実行タスクとする。}の部分ですべてのプロセス(runnableタスクに限らない)に対してcounter値を再計算して設定しなおす。実装概要ユーザに一定量のcounter値を変数として保持させ、タスクは自分のユーザのcounter値から実行に必要なcounter値を借りてタスクを実行する。すべてのユーザには一定値のcounter値を与える。すべてのユーザに対して簡単にアクセスできるようにlist構造を作る。Shareのための再計算関数を設定する。構造体に、リンクリストアクセス用のlist_head構造体と、cpu_tickets変数を追加する。/kernel/sched.cの編集リスト構造体の一番後ろに連結するための関数を定義。p;+}+優先度の再計算のための関数定義。//これから使う分(プロセスに渡す分)をcpu_ticketsから引く。//従来のrecalculateの関数counter値を2分の1にしNICE値を再計算して加える。NICE_TO_TICKS(p->nice);+read_unlock(&tasklist_lock);+}+}++/*新しくなった再計算の部分。/kernel/user.cの編集rootユーザだけは他のユーザとは作成の仕方が違うので別に定義。};ユーザの追加、削除の際にuser_listへも同時に加入できるように各関数(ユーザの登録や修正など)を修正。今回は、ユーザファアなスケジューラを実装してみた。次は課題としてグループファアなスケジューラを実装せよ。参考http://www.surriel.com/http://fairsched.sourceforge.net/。