MochiOS@仮想ファイルシステムの作成part9

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のコピペ)

ユーザタスクmvfsシリアルポートドライバローカルFD->グローバルFD変換close要求( グローバルFD )グローバルFDテーブル参照vfsClose要求( グローバルFD )vfsClose応答( グローバルFD, 処理結果 )グローバルFD解放close応答( 処理結果 )ローカルFD解放ユーザタスクmvfsシリアルポートドライバ

シーケンスの順番は何も変わらず、渡すデータとちょっと間にやる事が変わったくらい。
あー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と同じような動きなので、あっさり実装。

とりあえず、実行結果をば。
close

何をやっているかというと、下の様なシーケンスでopen -> read -> closeを永遠繰り返すお試しを作ってみました。
確認ポイントは、closeしているので、LocalFDとGlobalFDが再利用されて、必ず1となっているところ(前者は5行目の「fd=1」で、後者は色々な行で出てくる「globalFd=1」で確認できる。)

mttymvfsシリアルポートドライバ1秒ビジーウェイトopen要求( /serial )vfsOpen要求( /serial )vfsOpen応答()open応答()read要求( 1バイト )vfsRead要求( 1バイト )デバイス読込みvfsRead応答()read応答()close要求( )vfsClose要求( )vfsClose応答()close応答()loop[ 無限 ]mttymvfsシリアルポートドライバ

read以上にあっさりcloseを実装してしまった。キャッシュ機能ないからね。

次はどうしようかな。
・作ってきた仮想ファイルシステムの色々な問題を解決していく。
な感じかなぁ。

並行して、ドライバをちゃんと作るためにMochiKernelにスレッド機能を追加とかやりたいので、かなり更新は遅くなりそう。

コメント

このブログの人気の投稿

プライバシーポリシー

git@よく使うコマンド早見表

MochiOS@仮想ファイルシステムの作成part10