JP3243849B2 - タスクスケジューリング装置 - Google Patents

タスクスケジューリング装置

Info

Publication number
JP3243849B2
JP3243849B2 JP21808092A JP21808092A JP3243849B2 JP 3243849 B2 JP3243849 B2 JP 3243849B2 JP 21808092 A JP21808092 A JP 21808092A JP 21808092 A JP21808092 A JP 21808092A JP 3243849 B2 JP3243849 B2 JP 3243849B2
Authority
JP
Japan
Prior art keywords
task
frame
information
configuration list
frame number
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP21808092A
Other languages
English (en)
Other versions
JPH0667899A (ja
Inventor
一生 渡辺
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP21808092A priority Critical patent/JP3243849B2/ja
Publication of JPH0667899A publication Critical patent/JPH0667899A/ja
Application granted granted Critical
Publication of JP3243849B2 publication Critical patent/JP3243849B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、タスクにCPU実行権
を与えるタスクスケジューリング装置において、フレー
ム番号カウンタ値と起動間隔に基づき起動される同じフ
レームに対応したタスク群をグループ化することによ
り、複数タスクを一定時間内で繰り返し起動できるよう
にした複数タスク周期起動方法に関する。
【0002】タスクにCPU実行権を与えるタスクスケ
ジューリング処理は、例えば、自分の航跡確認のため、
また近接航空機の確認等のために、レーダ等の電子機器
から、ある一定時間内で繰り返しデータをサンプリング
する航空機搭載システム(アビオニクスシステム)と
か,ファクトリオートメーション分野の、例えば、鉄
鋼、セメント等流体を扱う分野における、一定時間毎
に、温度・液位・濃度等を計測し、その値によって次の
コントロールを行う、プロセス制御システムのようなリ
アルタイムシステムに用いられる。
【0003】このようなシステムにおけるタスクスケジ
ューリング処理においては、金融機関の勘定系システム
等で要求される以上のリアルタイム性が,厳しく要求さ
れる。このため、システム全体のオーバヘッドを低減し
て厳密なリアルタイム性を発揮できる、タスクスケジュ
ーリング処理の複数タスク周期起動技術が要求される。
【0004】
【従来の技術】従来、用いられているタスクスケジュー
リング装置の複数タスク起動方法を図6、図7を用いて
説明する。
【0005】ある時刻に、あるタスクを起動したい場
合、予め、タスクリクエストブロック(以下、TRBと
いう)をタスク数分作成しておく。例えば、TASK1 の場
合、時刻 1H00M00S 経過時に、時刻 1H05M00S の登録を
すれば良い。従って、各時刻において、図6(c) {この
図は、1H00M00Sより前に作成された実行タスクのキュー
の例を示しており、1H00M00Sを経過すると、次の時刻、
例えば、1H05M00Sに実行されるタスクのキューが作成さ
れる}に示すように、タスク数分作成すれば良い。
【0006】TRBは図6(b)に示すように、次のT
RBの存在を管理するタイマキュー情報、対応するタス
クコントロールブロック(以下、TCBという)アドレ
スと,起動時刻が格納された制御ブロックであり、作成
されたTRBを上記タイマキュー情報により時系列でキ
ューイングしておく。
【0007】例えば、図6(a)のように、時刻1時に
TASK1、4を、1時5分にTASK1、2を、1時
10分にTASK1、3を1時15分にTASK1、5
を起動したい場合、図6(c)のように、最初の起動時
刻毎に1TRB(この例では、計5つのTRB)を用意
し、時系列でキューイングしておく。
【0008】一方、実際のタスク起動方法を図7を使っ
て説明する。先ずインタバルタイマ割り込みを契機に、
タイマキューの先頭から現在時刻を経過したTRBを検
索する(ステップ101 )。
【0009】該TRB内の起動時刻が現在時刻を経過し
ていなければ(ステップ102 )、処理を終了するために
ステップ 105に分岐する。又、起動時刻が、現在時刻を
経過していれば(ステップ102 )、該TRB内に格納さ
れたTCBアドレスから該当タスクを知り、そのタスク
を起動できる(タスク起動要求)状態にする(ステップ
103 )。
【0010】更に、次のタイマキューがあるか否かをT
RBのタイマキュー情報より知り(ステップ104 )、も
し、次のTRBが存在すれば、ステップ101 に戻り同様
の処理を繰り返す。一方、次のTRBが存在しなければ
(ステップ104 )、起動要求のあるタスクの有無を調べ
(ステップ105 )、無ければ処理を終了し、有れば、タ
スクスケジューラに分岐し(ステップ106 )、起動要求
のでているタスクのうち優先順位の最も高いタスクにC
PU実行権を与える。即ち、デキューイングされる。
【0011】このように従来技術においては、同一時刻
に複数タスクを同時に起動させるためには、タイマキュ
ーの先頭から順次検索し、タイマキューがなくなるか、
あるいはTRB内の起動時刻が現在時刻を経過しなくな
るまで、ステップ101 からステップ104 を繰り返し処理
するものであった。
【0012】
【発明が解決しようとする課題】ところで、航空機搭載
システムやプロセス制御システムでは、外部装置(ディ
スプレイ装置、センサ等)が複数接続され、各々が異な
る機能を有し、それらに対応したタスクが機能単位に構
成されるため、各フレーム内で起動されるタスクが複数
存在し、しかもある一定時間間隔で繰り返し処理するこ
とが要求される。
【0013】このようなシステムでも、従来は、図6、
図7を使用して説明したように、タイマキューのキュー
イング機能、デキューイング機能等を使用して、複数タ
スクの起動処理を行っていた。
【0014】このため、同一フレーム内で起動されるタ
スクが多くなればなるほど、タイマキュー検索や時刻判
定の処理を繰り返すため、タイマキューの検索からタス
ク起動までの処理時間が長くなり、しいては、システム
全体のオーバヘッドが大きくなるという問題を生じてい
た。
【0015】本発明は、タスクスケジューリング装置に
おいて、フレーム制御情報およびタスク構成リストか
ら、該当フレーム内の複数タスクを即座に起動させるこ
とができる、複数タスクの周期起動方法を提供すること
を目的とする。
【0016】
【課題を解決するための手段】図1は本発明の原理構成
図である。上記の問題点は下記の如くに構成したタスク
スケジューリング装置の複数タスク周期起動方法により
解決される。
【0017】タスクスケジューリング装置を、周期的に
起動される各タスクの起動の時間間隔を規定するフレー
ムの制御情報4と,各フレーム内のタスク起動情報であ
るタスク構成リスト5を格納した制御情報部1と、該制
御情報部1に上記各フレームと起動タスクの関係を設定
し、インタバルタイマ割り込みを契機に、上記フレーム
制御情報4に基づき、複数のタスクを一度に起動させる
処理部2と、上記各フレームと起動タスクの関係等の情
報を入力する情報入出力手段10,及びインタバルタイマ
11 とからなる入力部3とで構成し、該制御情報部1
に、あるインタバルタイマ割り込みで、対象となるフレ
ームの番号を管理しているフレーム番号カウンタ4b
と,該フレーム番号カウンタ4bが指示するフレームで
起動されるタスク群を管理しているタスク構成リスト5
のアドレス情報4cと、タスク群を周期的に起動させる
ための管理に使用する最大フレーム番号情報4aからな
るフレーム制御情報4と、当該インタバルタイマ割り込
みで起動されるタスク数と、それらのタスクコントロー
ルブロック(TCB)群のアドレスを管理しているタス
ク構成リスト5とを設け、上記フレーム読み出しの開始
を通知するためのインタバルタイマ割り込みを契機に、
上記フレーム番号カウンタ4b、最大フレーム番号4a
より、該当フレームのタスク構成リスト5のアドレスを
求め、該タスク構成リスト5上に記された各フレーム番
号当たりの当該タスク群のタスクコントロールブロック
(TCB)アドレスを一度に検索することにより、各フ
レーム毎に複数タスクを一度に、かつ周期的に起動させ
るに構成する。
【0018】
【作用】本発明では、インタバルタイマ割り込みを契機
に、図1に示したフレーム制御情報4上のフレーム番号
カウンタ値をインデックスとして、該当フレームのタス
ク構成リストを参照し、更に、該タスク構成リストによ
り、起動しなければならない複数のタスクを一度に把握
できる。またフレーム制御情報4上の最大フレーム番号
と、インタバルタイマ割り込み毎のフレーム番号カウン
タの更新とにより、一定周期毎にフレーム番号カウンタ
を同一フレーム番号に設定でき、その結果、周期的に同
じタスク群を起動することができる。
【0019】従って、従来の方法であるタイマキューの
キューイング、デキューイング機能を中心としたタイマ
管理方法に頼る必要がないので、キュー検索、時間経過
の判定の繰り返し処理等から生ずるシステム全体のオー
バーヘッドの回避ができ、複数タスクの周期起動を効率
的に行なえるという効果を発揮する。
【0020】
【実施例】以下本発明の実施例を図面によって詳述す
る。前述の図1は、本発明の原理説明図であり、図2、
図3は本発明の一実施例を示した図である。尚、全図を
通して同じ符号は同じ対象物を示している。
【0021】先ず、制御情報部1はメモリに常駐し、本
装置(タスクスケジューリング装置)起動時、あるいは
フレーム内のタスク構成変更時に、フレーム番号カウン
タの初期値を設定(例えば7に設定)したり、タスク構
成リスト情報(各フレーム毎のタスク構成リストアドレ
ス)を設定する。
【0022】その構成は、図3に示すように、フレーム
制御情報4とタスクをグループ化したタスク構成リスト
5を含み、フレーム制御情報4として、最大フレーム番
号4aとフレーム番号カウンタ4bを装置全体で1つず
つ備え、タスク構成リスト5として、タスク数とタスク
を識別するためのTCBアドレスとを、起動すべきタス
クでグループ化された単位、すなわち各フレーム毎に起
動させるタスク群の組合せパターン数分備えている。
【0023】処理部2は制御情報部の初期設定7、該当
フレーム内の複数タスクを一度に起動する周期スケジュ
ーリング8、優先順位が最も高いタスクにCPU実行権
を与えるタスクスケジューラ9の各機能で構成されたプ
ログラム群であり、メモリ上に配置されCPU(プロセ
ッサ)で実行されるものである。
【0024】入力部3は、最大フレーム番号、タスク群
でグループ化された各タスク構成リストのタスク数、登
録タスク番号、そのリストを使用する最初のフレーム番
号(開始フレーム番号)、及び次にそのリストを使用す
るまでのフレーム間隔等、制御情報部1の設定情報を記
述したプログラム(情報入力手段)10、と一定時間間隔
で割り込みを発生させるインタバルタイマ11で構成さ
れ、上述のような周期起動に必要な情報を入力したり、
一定時間間隔で周期スケジューリング処理を実行させる
ためのものである。
【0025】図4は本発明の一実施例処理フロー図であ
る。入力部3の情報入力手段(プログラム)10に記述さ
れた、最大フレーム番号、タスク群でグループ化された
各タスク構成リスト 5のタスク数、各フレーム毎に起動
されるタスクの登録タスク番号、そのタスク構成リスト
5を使用する最初のフレーム番号等、周期起動に必要な
情報に基づき、制御情報部1に設けられたフレーム制御
情報4とタスク構成リスト5の内容を図3に示すように
設定した後、インタバルタイマ11に割り込み時間間隔を
設定する(ステップ201 )。
【0026】次に、インタバルタイマ割り込みを受け付
け(ステップ202 )周期スケジューリング処理がCPU
により実行される。周期スケジューリング処理は、メモ
リ上に配置されたフレーム番号カウンタ(FCNT)4bを読
み込み、値が最大フレーム番号4a以上であれば『0』
クリアする。そうでなければフレーム番号カウンタ4b
に1を加算する(ステップ203 )。
【0027】周期スケジューリング処理は、フレーム番
号カウンタ4bからフレーム制御情報4内のタスク構成
リスト情報4cに格納されたタスク構成リストアドレス
を読み込み(ステップ204 )、タスク構成リストに格納
されたタスク数5aとTCBアドレス5bを読み込む
(ステップ205 )。
【0028】ここで取得したタスク数5a、TCBアド
レス5bに基づいて、一度に複数タスクを起動要求有り
の状態(CPU実行権が得られる資格をもたせる)にさ
せる(ステップ206 )。
【0029】次に、タスクスケジューラに分岐し(ステ
ップ207 )、起動要求有りの状態にされた複数タスクの
中で最も優先順位の高いタスクにCPU実行権を与え
る。上述の処理を図5の本発明の一実施例動作説明図を
用いて説明する。図5は、各フレームと起動タスクとの
関係から、入力部 3が入力する情報の具体的な値と、そ
の値から設定されたフレーム制御情報 4とタスク構成リ
スト 5の内容を示すものである。
【0030】例えば、最大フレーム番号4aを『7』と
し、タスク−1は、全てのフレーム(フレーム間隔が
『0』)で起動され、タスク−2は、フレーム番号
『1』を開始フレーム番号としフレーム間隔が『2』で
起動され、タスク−3は、フレーム番号『2』を開始フ
レーム番号としフレーム間隔が『4』で起動され、タス
ク−4は、フレーム番号『0』を開始フレーム番号とし
フレーム間隔が『8』で起動され、タスク−5は、フレ
ーム番号『4』を開始フレーム番号としフレーム間隔
『8』で起動されるものとして、タスクのグループ化を
行うと、図5に示すようにグループは、タスク−1・
4、タスク−1・2、タスク−1・3、タスク−1・5
の4通りの組合せ(CNLIST-1〜CNLIST-4)となる。
【0031】フレーム番号カウンタ4bには、初期設定
値として、最大フレーム番号値(この例では『7』)を
設定する。制御情報部1のフレーム番号カウンタ4b以
外の内容は、初期設定時、あるいは各フレーム内のタス
ク構成を変更する場合のみ書き換えられる。
【0032】この状態で、インタバルタイマ割り込みが
発生すると、フレーム番号カウンタ4bの内容『7』が
最大フレーム番号4aの内容『7』と等しい(最大フレ
ーム番号値未満ではない)ため、フレーム番号カウンタ
4bに『0』を設定し、その値に基づき、タスク構成リ
スト情報 4c の0番目の内容(CNLIST-1 アドレス) か
ら、タスク構成リスト 5の先頭アドレスを読み込み、更
にタスク数5aとTCBアドレス (例えば、TCB-1 アド
レス) 5bを読み込み、フレーム番号『0』のタスク群
(タスク−1とタスク−4)を一度に起動させる。2回
目のインタバルタイマ割り込み発生時は、フレーム番号
カウンタ4bの内容『0』と最大フレーム番号4aの内
容を比較すると、フレーム番号カウンタ4bが小さいた
め、フレーム番号カウンタ4bの内容に1を加算して
『1』とし、その値に基づきタスク構成リスト情報4c
の1番目からタスク構成リスト 5のアドレスを読み込
み、フレーム番号『1』におけるタスク群(タスク−1
とタスク─2)を一度に起動させる。
【0033】このようにして、フレーム番号カウンタ4
bが最大フレーム番号『7』を越えるまで、処理を繰り
返し、フレーム番号『0』から再び処理を開始すること
により、各タスクを周期的に起動させることが可能であ
る。
【0034】上述の実施例では、情報入力手段としてプ
ログラムを使用したが、他の実施例として英数字キーを
備えたキーボードを用いることも可能である。また、1
回のサイクル(最初のフレームから最後のフレームま
で)におけるフレーム数が『8』で、システム全体のタ
スク数が『5』の場合について説明したが、システム障
害により、システム全体の機能を縮小させ運用するよう
な縮退運用にも、これらフレーム数,タスク数等の内容
やタスク構成リスト情報4cを再設定するだけで適用で
きる。即ち、短時間にシステムを正常運転させることを
目的とするフォルト・トレラントシステムにも適用でき
る。
【0035】更に、タスクスケジューリング装置の複数
タスク周期起動方法は、航空機搭載システム(アビオニ
クスシステム)の他に、ロボット制御等のセンサーベー
スシステムのような、ある一定時間間隔で定型業務を繰
り返し処理するものにも適用できる。
【0036】
【発明の効果】以上説明したように、本発明によれば、
開始フレーム番号とフレーム間隔により一意的に決ま
る、タスクをグループ化したタスク構成リストを用いる
ことにより、インタバルタイマ割り込みを契機として、
フレーム番号カウンタに基づき、フレーム内のタスク群
を一度に検索することができ、ある一定時間間隔で周期
的に、複数のタスクを一度に起動させることが可能であ
る。
【0037】従って、従来の方法のように、キューの管
理(検索、キューイング、デキューイング)、時刻の判
定等の繰り返しの処理が必要ないため、システム全体の
オーバヘッドの低減に効果があり、効率的な複数タスク
の周期起動が可能となり、システム全体の処理時間の短
縮に寄与する。
【図面の簡単な説明】
【図1】本発明の原理説明図
【図2】本発明の一実施例構成図(その1)
【図3】本発明の一実施例構成図(その2)
【図4】本発明の一実施例処理フロー図
【図5】本発明の一実施例動作説明図
【図6】従来技術の説明図(その1)
【図7】従来技術の説明図(その2)
【符号の説明】
1 制御情報部 2 処理部 3 入力部 4 フレーム制御情報 4a 最大フレーム番号 4b フレーム番号カウンタ 4c タスク構成リスト情報 5 タスク構成リスト 5a タスク数 5b TCB(Task Control Block)アドレス 6 タスク制御ブロック(TCB) 7 初期設定部 8 フレーム内複数タスク同時起動要求部(周期スケ
ジューリング部) 9 タスクスケジューラ 10 情報入力手段(プログラム) 11 インタバルタイマ 101 〜106, 201 〜207 処理のステップ
───────────────────────────────────────────────────── フロントページの続き (58)調査した分野(Int.Cl.7,DB名) G06F 9/46 - 9/54 G06F 15/00

Claims (1)

    (57)【特許請求の範囲】
  1. 【請求項1】入力部と制御情報部と処理部とからなるタ
    スクスケジューリング装置であって、 前記入力部は、情報入出力手段とインタバルタイマから
    なり、 前記制御情報部は、タスク構成リストとフレーム制御情
    報からなり、 前記フレーム制御情報は、最大フレーム番号情報とフレ
    ーム番号カウンタとタスク構成リスト情報とからなり、 前記情報入出力手段は、各フレームと起動タスクの関係
    の情報を入力するものであり、 前記インタバルタイマは、一定時間間隔毎に割り込みを
    発生させるものであり、 前記タスク構成リストは、各フレーム毎に起動させる複
    数のタスク(タスク群)のタスク数とタスクコントロー
    ルブロックアドレスとをフレーム毎に分けて記憶するも
    のであり、 前記最大フレーム番号情報は、タスク群を周期的に起動
    させるための管理に使用されるものであり、 前記フレーム番号カウンタは、処理の対象となるフレー
    ムを管理するものであり、 前記タスク構成リスト情報は、各フレームに対応する前
    記タスク構成リストの部分の先頭アドレスを指すアドレ
    ス情報を管理するものであり、 前記処理部は、前記情報入出力手段からの情報に基づい
    て前記制御情報部に各フレームと起動タスクの関係を設
    定し、インタバルタイマ割り込みを契機に、前記フレー
    ム番号カウンタと前記最大フレーム番号情報から処理の
    対象となるフレームを求めフレーム番号カウンタに設定
    し、前記タスク構成リスト情報から処理の対象となるフ
    レームに対応するタスク構成リストの部分の先頭アドレ
    スを指すアドレス情報を求め、該アドレス情報に基づき
    該タスク構成リストを検索することにより処理の対象と
    なるフレームに対応するタスク群のタスクコントロール
    ブロックアドレスを求め、処理の対象となるフレームに
    対応するタスク群を一度に起動させるものであることを
    特徴とするタスクスケジューリング装置。
JP21808092A 1992-08-18 1992-08-18 タスクスケジューリング装置 Expired - Fee Related JP3243849B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP21808092A JP3243849B2 (ja) 1992-08-18 1992-08-18 タスクスケジューリング装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP21808092A JP3243849B2 (ja) 1992-08-18 1992-08-18 タスクスケジューリング装置

Publications (2)

Publication Number Publication Date
JPH0667899A JPH0667899A (ja) 1994-03-11
JP3243849B2 true JP3243849B2 (ja) 2002-01-07

Family

ID=16714329

Family Applications (1)

Application Number Title Priority Date Filing Date
JP21808092A Expired - Fee Related JP3243849B2 (ja) 1992-08-18 1992-08-18 タスクスケジューリング装置

Country Status (1)

Country Link
JP (1) JP3243849B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2732788B1 (fr) * 1995-04-06 1997-05-30 Bull Sa Dispositif de gestion d'appels selectifs cycliques pour la surveillance de ressources informatiques dans un reseau et procede mis en oeuvre par un tel dispositif
JP3037182B2 (ja) 1997-02-17 2000-04-24 日本電気株式会社 タスク管理方式
JP2001156842A (ja) 1999-11-26 2001-06-08 Mitsubishi Electric Corp 伝送システム
JP3610930B2 (ja) 2001-07-12 2005-01-19 株式会社デンソー オペレーティングシステム、プログラム、車両用電子制御装置
JP4979289B2 (ja) 2006-07-21 2012-07-18 日立オートモティブシステムズ株式会社 画像処理装置
JP2013054477A (ja) * 2011-09-02 2013-03-21 Hitachi Ltd データ共有装置およびデータ共有方法

Also Published As

Publication number Publication date
JPH0667899A (ja) 1994-03-11

Similar Documents

Publication Publication Date Title
Burns et al. Effective analysis for engineering real-time fixed priority schedulers
Tindell et al. An extendible approach for analyzing fixed priority hard real-time tasks
US7451447B1 (en) Method, computer program and apparatus for operating system dynamic event management and task scheduling using function calls
US5465354A (en) Method and apparatus for job execution prediction and control and method for job execution situation display
Prakash et al. A nonblocking algorithm for shared queues using compare-and-swap
Tindell et al. Holistic schedulability analysis for distributed hard real-time systems
US6314446B1 (en) Method and system for monitoring tasks in a computer system
KR970016979A (ko) 다중 처리 시스템에서 타스크의 큐잉 시스템 및 방법
Kulkarni et al. Effects of checkpointing and queuebsfg on program performance
JP2003044295A (ja) スリープキュー管理
JP3243849B2 (ja) タスクスケジューリング装置
CN1449522A (zh) 调度驱动程序为不产生中断的设备实现使用时间估计的协议的方法和装置
US20030204547A1 (en) Technique for scheduling computer processes
CN109542069B (zh) 一种基于时间与事件混合驱动的分布式控制***及方法
Tia et al. A linear-time optimal acceptance test for scheduling of hard real-time tasks
US5611073A (en) Method of ensuring parameter coherency in a multi-processor system
Yerraballi et al. Issues in schedulability analysis of real-time systems
US6976107B2 (en) Adaptive spin latches
EP1011045B1 (en) Object-oriented job scheduler
JP2010224812A (ja) ジョブ管理システムおよび方法
Fredericks Analysis of a Class of Schedules for Computer Systems with Real Time Applications.
CN112148550B (zh) 用于管理服务的方法、设备和计算机程序产品
CN112817811B (zh) 扫描失败率的预测方法、装置、设备及存储介质
Wells A Survey and Analysis of Existing Constraint Combination Formalisms and Their Application to Software Systems Having Client-Server Relationships Dr. Kenneth G. Ricks and Dr. D. Jeff Jackson Department of Electrical and Computer Engineering The University of Alabama
Naghibzadeh Handling startling circumstances with IRM scheduler of real-time systems

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20010925

LAPS Cancellation because of no payment of annual fees