2007-08-01から1ヶ月間の記事一覧
前回はCPU時間割り当て対象スレッドを常時把握するメカニズムができた。今日はスレッドの増減に対応したい。 スレッドの生成と破棄 スレッドを生成したり破棄したりするタイミングは当メカニズムを利用するユーザープログラムの勝手なので、両者の順序に特段…
しおれてきた(汗 球根部分(直径3 cm)は透明感のある黄緑色で水分を含んでそうなのに*1、葉っぱがしおれてくるって言うのは、生化学サイクル破綻状態ですかひょっとしてもうだめですかそうですかorz 現状、肥料は即効性のは見送って、緩効性のを適量より少な…
日記にしょうもない実験コード貼りまくるのもいかがなものか、という気がしてきたのでそれ専用のWebサイトを立ち上げてみたりみなかったり。 http://gma0bn.googlepages.com/
知り合いのおにゃのこに花の球根をもらった。 これがもう、小さな植木鉢に収まって枯れかけた葉っぱが二枚ほど生えてたりするすぐれもの。 素人園芸家には根腐れしてるのか単に土がやせてるのか判断つきかねたので、でかい植木鉢と土とゼオライトとパーライ…
一昨日のコードのmth_sample.cは、suspend()でもresume()でも引数ctxを指定する必要があってダサい。いやダサいだけならまだしも、実際問題としてプログラミングしにくい。例えば、整数0,1,2,3,...という数列を出力するスレッドを(1個でなく)2個走らせたいと…
書いといてなんだが、実はなぜこれで動くのか納得し難かったりする。もうちょっと安心できる形で正当性を示しときたい。CPUの立場になって考えてみる。マイクロスレッドの起動から最初に戻って来るまでの手順(すなわちexec()でマイクロスレッドを呼び出し、s…
>果たしてこんなロジックで動くのか? SH3+SH-Cで動かしてみますた*1。 mth_core.src .EXPORT _exec .EXPORT _suspend .EXPORT _resume .SECTION P,CODE,ALIGN=4 ;*------------------------------------------------------------------------* ; ; typedef…
早速遊ばれた_| ̄|○||| 昨日の仮想コードのexec()はバグ付きでした。普通CPUのスタックはアドレスの高位から低位に向かって伸びていくので、スレッドのローカルスタックctx.stk[]が配列なら、それを指すスタックポインタの初期値はctx.stkじゃなくて、ctx.s…
上記仮定の下で、exec(), suspend(), resume()は約こんなコードでいいはず。 void exec(TCtx *p_ctx, void (*bar)()) { PUSH S1 PUSH S2 ... PUSH Sm PUSH PR p_ctx->ssp = p_ctx->stk; swap(SP, &(p_ctx->ssp)); PR = bar; J PR } void suspend(TCtx *p_ctx…
【マイクロスレッドとは】 ユーザープログラムの中で特定関数を明示的に呼び出すことによってコンテキストを切り替え、それ以外では切り替わらないという強度にノンプリエンプティブなディスパッチメカニズム(によって実現されるスレッド)。詳細な解説 【特…
ひどいヘタレっぷりを露呈ちう_| ̄|○||| 先日のコードで再帰関数だったselect()は、結局次のようにループ化できた*1。 /* f_から始まる増分1の等差数列n項から、昇順にr_項取り出す組み合わせを列挙 */ select() { int i, j, k, r, t; r = 0; i = f_; do { …
【タスクシステムとは】 呼び出されるたびに作業を1ステップだけ進めてすぐ戻る、という風に処理が記述されたサブルーチン群を順次呼び出し、それを繰り返すことで複数作業を擬似並列的に遂行するディスパッチメカニズム。詳細な解説 【特徴】 作業を構成す…
nCr列挙プログラム(<まだやってたんか、、 /** f_から始まる増分1の等差数列n_項を、 * (n_+1)div 2個とn_ div 2個に分割する組み合わせを列挙するプログラム */ enum { f_ = 5, /* 初項の値 */ n_ = 5 /* 項数 */ }; a[n_+1], t; /* fから始まる増分1の等…
書泉ブックタワーで購入。手にとって予想外のボリュームに驚く。持ち帰って読み始めたが、監修者の巻頭言とChapter 1の最初のショートコードでいきなり立て続けにガツンとやられた。85のι゛ょ ぅょが2整数の加算をやってのけるのに驚愕。今Chapter 2を読み終…
トラックバックスパムをやってしまった_| ̄|○|||
正直、ここ(via ここ)で語られてるような高度な話は理解できない(いつわかるようになるのか?!)ので封置。個人的には、末尾再帰最適化判定問題は、言語仕様よりも下のレイヤに位置するオプチマイザの特性の話として、その範疇でまとめていいんじゃないかと…
ちょっと(いや、かなりか?)誤解してた。 「末尾最適化(Wikipedia)」=「末尾再帰という特定クラスに属する再帰関数をループに変換する最適化」 なのねん。今まで「一般の再帰関数(のうち、可能なもの)をループに変換する最適化」の意味で使っちゃってた(汗…
A面ダイス問題の考え方最終版。Nの十の桁をq、一の桁をrとする。 q≦rのとき(ex.11,12,36,49):ダイス1,2双方が文字セット"12...q"を含まねばならない。(N以下の11,22,33,...の表現ため。ただしq=0の場合は空のセットとする。)さらに、9-q文字からなる文字セ…
『Short Coding』発売記念オフ会用問題 (id:yaneuraoさん出題)に挑戦。まずは力ずくで解を求めるコードを書いてみる。N≦9のときは置くとして、先にメジャーなN≧10のケースを考える。この場合、ダイス1,2により1〜Nを表現する過程で、1の桁は0〜9の範囲をフル…