投稿

7月, 2019の投稿を表示しています

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 シリアルポートドライバ シーケンスの順番は何も変わらず、渡すデータとちょっと

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

イメージ
MochiOS@仮想ファイルシステムの作成part7 前提知識無しで作るなんちゃって仮想ファイルシステムpart7。 開発日記です。独り言です。 これまでのあらすじ part 内容 0 仮想ファイルシステムを作りたい宣言をする。 1 ざっくり仮想ファイルシステムの機能を決める。 が、機能呼出し先の仮想ファイルシステムのタスクIDをどう取得するかという問題に気付く。 2 カーネルにタスク名登録機能を実装した。 これでタスク名からタスクIDを取得する事が出来る様になるハズ、なので試したいが試す方法が無い事に気付き、ログ出力タスクの開発を宣言する。 3 ログ出力の為に使うvsnprintf()の仕様を調べる。 4 ログ出力タスクを開発してタスク名からタスクIDの取得機能が正しく動いている事が確認できた。 5 mount機能を実装した。たぶんできてる。 6 FDどうやって管理しようかー。メッセージのやり取り制御を状態遷移で制御しようかー。とか考えて、open機能を実装した。たぶんできてる。 writeの仕様を考える 今回はwrite機能を作ります。 仮想ファイルサーバとしては、openもwriteもあんまりやること変わらないハズ。なので簡単にできるかな~と思っている。 あ、キャッシュなんて何にも考えていませんからね。 ユーザタスク mvfs シリアルポートドライバ ローカルFD テーブル参照 write要求( グローバルFD, アドレス, データ, データサイズ ) グローバルFD テーブル参照 vfsWrite要求( グローバルFD, アドレス, データ, データサイズ ) デバイス書込み vfsWrite応答 write応答 書込みアドレス更新 ユーザタスク mvfs シリアルポートドライバ シーケンスの順番は何も変わらず、渡すデータとちょっと間にやる事が変わったくらい。 (こうやってシーケンスにしてみると良く分かるのだけど、データのコピー回数の多さ。マイクロカーネルだとメッセージパッシングが主なデータのやり取りとなる(?)わけだけど、4回のデータコピー(ユーザタスク→カーネル→mvfs→カーネル→シリアルポートドライバ)が走るので性能

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

イメージ
MochiOS@仮想ファイルシステムの作成part8 前提知識無しで作るなんちゃって仮想ファイルシステムpart8。 開発日記です。独り言です。 これまでのあらすじ part 内容 0 仮想ファイルシステムを作りたい宣言をする。 1 ざっくり仮想ファイルシステムの機能を決める。 が、機能呼出し先の仮想ファイルシステムのタスクIDをどう取得するかという問題に気付く。 2 カーネルにタスク名登録機能を実装した。 これでタスク名からタスクIDを取得する事が出来る様になるハズ、なので試したいが試す方法が無い事に気付き、ログ出力タスクの開発を宣言する。 3 ログ出力の為に使うvsnprintf()の仕様を調べる。 4 ログ出力タスクを開発してタスク名からタスクIDの取得機能が正しく動いている事が確認できた。 5 mount機能を実装した。たぶんできてる。 6 FDどうやって管理しようかー。メッセージのやり取り制御を状態遷移で制御しようかー。とか考えて、open機能を実装した。たぶんできてる。 7 openと同じようなシーケンスなので、メッセージとちょっとやる事変えて簡単にwrite機能を実装できちゃった。 readの仕様を考える 今回はread機能を作ります。 仮想ファイルサーバとしては、openもwriteもreadもあんまりやること変わらないハズ。なので簡単にできるかな~と思っている。 あ、キャッシュなんて何にも考えていませんからね。 (ブログ記事までwriteのコピペ) ユーザタスク mvfs シリアルポートドライバ ローカルFD テーブル参照 read要求( グローバルFD, アドレス, データサイズ ) グローバルFD テーブル参照 vfsRead要求( グローバルFD, アドレス, データサイズ ) デバイス読み込み vfsRead応答( グローバルFD, 処理結果, データ, データサイズ ) read応答( 処理結果, データ, データサイズ ) 読込みアドレス更新 ユーザタスク mvfs シリアルポートドライバ シーケンスの順番は何も変わらず、渡すデータとちょっと間にやる事が変わったくらい。 以下、メッセージ仕様。

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

イメージ
MochiOS@仮想ファイルシステムの作成part6 前提知識無しで作るなんちゃって仮想ファイルシステムpart6。 開発日記です。独り言です。 これまでのあらすじ part 内容 0 仮想ファイルシステムを作りたい宣言をする。 1 ざっくり仮想ファイルシステムの機能を決める。 が、機能呼出し先の仮想ファイルシステムのタスクIDをどう取得するかという問題に気付く。 2 カーネルにタスク名登録機能を実装した。 これでタスク名からタスクIDを取得する事が出来る様になるハズ、なので試したいが試す方法が無い事に気付き、ログ出力タスクの開発を宣言する。 3 ログ出力の為に使うvsnprintf()の仕様を調べる。 4 ログ出力タスクを開発してタスク名からタスクIDの取得機能が正しく動いている事が確認できた。 5 mount()機能を実装した。たぶんできてる。 openの仕様を考える とりあえず、必要なのはパスよね。 あと、読書きフラグ。。。あるけど、今は忘れよ、うん。後ね後。 で、openしたらファイルディスクリプタ(FD)を払い出す。大体、FDはプロセス毎に1からなので、プロセス毎にFDを払い出す事にする。 あー、MochiKernelのメッセージパッシングはメッセージ送信元タスクIDしか取れないので、プロセスIDを取れるようにしないとだ。。 (どこかでMochiKernelの概要を書かねばと思っているのだけど、ここでさらっとご紹介。MochiKernelではカーネル上の1つのコンテキストをタスクという名前で扱う。つまるところ、タスクはスレッドと同じ意味。プロセスは複数のスレッド(タスク)から構成されるのは普通と一緒。スレッドIDはプロセス内ローカル値だがタスクIDはグローバル値という違いがある) mountされたファイルをopenした時、そのファイルをmountしたドライバはopenされたタイミングで何か初期化をしたいかもしれない。 なので、openメッセージを横流しする。横流しといってもメッセージはそのままでなくて、新しい識別子を切ることとしよう。 パラメータはopenしてきたPIDと払い出されたFDを組み合わせた値とパスとしとく。 ユー