MochiOS@仮想ファイルシステムの作成part9
前提知識無しで作るなんちゃって仮想ファイルシステムpart9。
開発日記です。独り言です。
これまでのあらすじ
part | 内容 |
---|---|
0 | 仮想ファイルシステムを作りたい宣言をする。 |
1 | ざっくり仮想ファイルシステムの機能を決める。 が、機能呼出し先の仮想ファイルシステムのタスクIDをどう取得するかという問題に気付く。 |
2 | カーネルにタスク名登録機能を実装した。 これでタスク名からタスクIDを取得する事が出来る様になるハズ、なので試したいが試す方法が無い事に気付き、ログ出力タスクの開発を宣言する。 |
3 | ログ出力の為に使うvsnprintf()の仕様を調べる。 |
4 | ログ出力タスクを開発してタスク名からタスクIDの取得機能が正しく動いている事が確認できた。 |
5 | mount機能を実装した。たぶんできてる。 |
6 | FDどうやって管理しようかー。メッセージのやり取り制御を状態遷移で制御しようかー。とか考えて、open機能を実装した。たぶんできてる。 |
7 | openと同じようなシーケンスなので、メッセージとちょっとやる事変えて簡単にwrite機能を実装できちゃった。 |
8 | writeと同じようなシーケンスなので、メッセージとちょっとやる事変えて簡単にread機能を実装できちゃった。 |
closeの仕様を考える
今回はclose機能を作ります。
仮想ファイルサーバとしては、openもwriteもreadもcloseもあんまりやること変わらないハズ。なので簡単にできるかな~と思っている。
あ、キャッシュなんて何にも考えていませんからね。
(ブログ記事までreadのコピペ)
シーケンスの順番は何も変わらず、渡すデータとちょっと間にやる事が変わったくらい。
あーcloseが一番楽だな~。渡すデータ無いし。FD解放するだけでしょ?(データキャッシュしてないから。)
以下、メッセージ仕様。
■ close要求メッセージ
offset | size | 内容 | 値 | 意味 |
---|---|---|---|---|
0x00 | 4 | 機能ID | 0x0000_0007 | close |
0x04 | 4 | タイプ(要求/応答) | 0x0000_0000 | 要求 |
0x08 | 4 | グローバルFD | 任意 | - |
■ close応答メッセージ
offset | size | 内容 | 値 | 意味 |
---|---|---|---|---|
0x00 | 4 | 機能ID | 0x0000_0007 | close |
0x04 | 4 | タイプ(要求/応答) | 0x0000_0001 | 応答 |
0x08 | 4 | 処理結果 | 0x0000_0000 0x0000_0001 |
成功 失敗 |
■ vfsClose要求メッセージ
offset | size | 内容 | 値 | 意味 |
---|---|---|---|---|
0x00 | 4 | 機能ID | 0x0000_0008 | vfsClose |
0x04 | 4 | タイプ(要求/応答) | 0x0000_0000 | 要求 |
0x08 | 4 | グローバルFD | 任意 | - |
■ vfsClose応答メッセージ
offset | size | 内容 | 値 | 意味 |
---|---|---|---|---|
0x00 | 4 | 機能ID | 0x0000_0008 | vfsClose |
0x04 | 4 | タイプ(要求/応答) | 0x0000_0001 | 応答 |
0x08 | 4 | グローバルFD | 任意 | - |
0x0C | 4 | 処理結果 | 0x0000_0000 0x0000_0001 |
成功 失敗 |
実装してみた
大体、OpenやWriteやReadと同じような動きなので、あっさり実装。
とりあえず、実行結果をば。
何をやっているかというと、下の様なシーケンスでopen -> read -> closeを永遠繰り返すお試しを作ってみました。
確認ポイントは、closeしているので、LocalFDとGlobalFDが再利用されて、必ず1となっているところ(前者は5行目の「fd=1」で、後者は色々な行で出てくる「globalFd=1」で確認できる。)
read以上にあっさりcloseを実装してしまった。キャッシュ機能ないからね。
次はどうしようかな。
・作ってきた仮想ファイルシステムの色々な問題を解決していく。
な感じかなぁ。
並行して、ドライバをちゃんと作るためにMochiKernelにスレッド機能を追加とかやりたいので、かなり更新は遅くなりそう。
コメント
コメントを投稿