はりぼて日記
2007 | 01 | 02 | 03 | 04 | 05 | 07 | 08 | 10
2006 | 11 | 12
10月 09 (火曜日) 2007
14:37
17日目
 
17日目〜。



むっずかしいタスク管理。完全に解らなかったのがちょっと

くやしいが今度はコンソールだ!。サクサク進めるはずだぞー!?



・・・いきなりまたタスクですか・・・ orz



ん? あれ?



でも、これならわかるぞ? 番兵でしょ?

P337

うん!大ジョブ大ジョブ! これなら解る解る!

(  あーよかった・・・(^^;  )



P338

さてさて!

いよいよコンソール作り〜! こういうのはなんか楽しいな♪



P344

あーん。なるほどねぇ。ここでTASK構造体にFIFOが入るのかぁ。



P345

&fifoを&task->fifoに書き換えると・・・なるほどなるほど。もっともです。



P347

うーん。なつかしいなぁ。これ見るたび、かつてhideyOSiを

作ってた時のこと思い出すです。(いやそりゃ、ぜんぜん

レベルが違いますが・・・(^^;  )



P352

コラムに書いてあることをウチでも実験・・・・

あっれ〜??? ウチのはちょっとちがうぞ??



QWER UIOP

ASDFGHJKL:"|

BN?



ウチのキーボード+WindowsXPだと、両Shift押しだとこれしか

入力できないようだ・・・。こういうのはなんの仕様なんだろう?

キーボード? それともマザーボードかなんかかな???





さてさて〜。

タスク管理と違ってツルツル進むぞ! ←逆恨み



そんなわけで、17日目終了〜

 
name: @Guest  Comment:
13:12
16日目2
 
P324

タスクに優先順位かぁ。なるほど確かにこれは必要な仕組みですね。

そのために、TASK構造体にプライオリティーという変数を追加と。



P326

ふむふむ。タスクが2個以上ないとスイッチしないと。なるほどなるほど。



P327

なるほどぉ〜。タスクを走らせる時に優先順位をこういうふうに

指定すれば近い値が出ますなぁ。たしかに。



P328

・・・さ〜て! ここからが課題。

っと言うのは、以前はどうもここがわからなかったからなんです。



おっとっと!

さっそく!。やることがなくなるとスリープすると。

えっと。これどういう仕組みだったっけ?。チョット復習。



あー!ここ、ここ! P316だ。

なるほど。やることがなくなった場合はtaskctl->tasks[]内から

削除されると。これは要するに、順番待ちの名簿から名前を

削除されるのと同じことだね。スリープというとなにか特殊な

感じがするけど、ようは名簿から外れたので呼び出し(タスク切り替え)

が起こらず、結果なにもしないタスクということになるわけか。



P329

・・・むむむ・・・これがどうもわからんなぁ。

マウスと音楽。共に大事なんだけど、その大事なのがぶつかって

しまったら。まあそれはよくわかるんだけど、たとえばプライオリティーを

もっと細かく(たとえば100段階とか)にするってんじゃダメなのかなぁ・・・



タスクにレベルを設ける。で、上のレベルが空にならない限り、下のレベルのタスクにはやってこないと。

うーむ!。でも、例えば音楽再生みたいにずーっと処理されるようなタスクが

二個あったら、下のタスクには永遠に切り替わらない???



あ”っーーーー! ちょっと違うなぁ。



これは逆の考え方のほうがいいのかな。つまり、いままでの

優先順位だけだとタスクは全て切り替わる。順位はあるが

必ず切り替わると。

音楽再生のように忙しいタスクが出現した場合はいくつかの

タスクが下のレベルに追い出され、終わるまでは切り替わらない。

そういう考え方なのかな??





うーーーん・・・・

P331のtask_switchsub()がどうもわからないなぁ・・・



・・・こりゃちょっとダメかもしれん・・・

さすがに「3巡目」ってのはないけど、ここはちょっと棚上げ。



以上、2巡目もまた惨敗だが先に進むことを優先し、不本意ながら16日目終了・・・orz
 
name: @Guest  Comment:
8月 03 (金曜日) 2007
18:44
16日目
 
16日目〜。



P312。

ふむふむ。これはいつものパターンだよね。(Kタンのパターンなのか、プログラミング上の定石なのか??)



・・・ふーん・・・

これ見ていて思ったのだが、各関数や構造体の「入れ子状態」を

図にしてみると解りやすいかもしれん・・・

(だって〜! タスクならtaskxxばっかりでややこしいんだもん!

徳川さんチの人がみーんな家xってのと同じような。覚えにくい!)



P316

えーっと。自分自身を寝かせる関数・・・

task_sleepに渡されたtask構造体。この構造体にはflagsというパラメータがある。

このパラメータが2ならそのタスクは動作中。1ならそのタスクは動いていないというマーク。

最初のifで、動いていて、かつ、現在動作中のタスクかどうかを判断させ、tsで記憶する。

tasks[]からはずされてしまうので、次回タスクが切り替わる時にはこのタスクは対象外となる。

・・・しかし、今回はまだ切り替えを行わない。まだ動いているから・・・・

こんな感じかな???





P318

なるほど〜。これはそうむずかしくないな。





むむ〜。複雑だなぁ。タスクがスリープをするかどうかをよく

把握していないと・・・



P321

??「偶然飛び先はよくなったので性能が上がった」???

あれかな? 飛び先が4の倍数の番地だと早くなるっていう・・・



P321のコード部

・・・うむむ・・・

確かにながーいけど、なんとなくわかるぞこれは。

この構造だと基本的にはtask_bが一個だったいままでとそんなに

変わらないもんなぁ。

今はまだ未完成状態のせいだろうけど、かえって、もっとまとめられないかなぁなんて思えるくらい。

 
name: @Guest  Comment:
7月 30 (月曜日) 2007
19:14
15日目4
 
15日目4〜。



P307。

いよいよちゃんとしたマルチタスク。



ふむふむ。

ようするに、タスク切り替え専用のタイマを作って、こいつが

勝手に自動的に切り替えを繰り返すと。



これはむずかしくなかったぞ〜。



そんなわけで、やっとこさ15日目終了〜
 
name: @Guest  Comment:
16:29
15日目3
 
15日目3〜



まだP296・・・・orz



えーっと・・・ちょっと整理してみよう。「今回のHariMainの一部」の表。



・まず、なにもしない。初めて動くタスクなわけだから、ほとんどの

 レジスタは「0」でいいと。

・tss_b.eip。eipは次に実行する命令の番地を管理してる。今回は

 task_b_mainという関数のアドレスを格納している。まあつまり、

 今回初めてtask_b_mainを動かすんだから、この関数の一番最初の

 番地を入れておくという感じね。

・tss_b.eflags。eflagsはフラグの集まり。各ビットひとつひとつに

 意味があるレジスタ。

 えーっと。なになに?STIした後の値とな??

 STIってなんだっけ・・・・

 あー。そか。P89。割り込みの可否のレジスタね。

 うーん・・・これ16進数で0x00000202なんて書いてあるから意味

 わからんかった。これをP89の表&二進数に変換すると・・・



┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐

│15│14│13│12│11│10│9 │8 │7 │6 │ 5│4 │3 │2 │ 1│ 0│

├─┼─┼─┴─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤

│ │NT│IOPL │OF│DF│IF│TF│SF│ZF│ │AF│ │PF│ │CF│

├─┼─┼─┬─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤

│1 │0 │0 │0 │0 │0 │0 │0 │0 │0 │0 │0 │0 │0 │1 │0 │

└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘



こういう値が入るわけね。(・・・なんだろ?この値??なんか意味があるのだろうか???)



・tss_b.esp

 タスクBが使うスタックの番地(開始番地?)のアドレスをセットすると。

 (まあこれは当然だよね)



・es,cs,ss,ds,fs,gs

 ふーむ・・・。asmhead.nasと同じ?えとえと???

 うえーーん!わかんねぇ!P134のDS、ES、SSの思い込みのこと??

 ここはちょっと棚上げ・・・

 



P299

えーっと・・・ESP+4かぁ。

これはどういう意味かというと、P69参照。Cから渡された引数を

読みたい場合にこうするというだけ。





P301

「川合先生!秀吉君がまたかよって言ってます!」 (笑

 
●K@Guest -- 08/25 11:04
0x0202を2進数にすると、bit1とbit9だけが1になります。だからbit15が1なんじゃなくて、IFが1ですよ。

name: @Guest  Comment:
7月 15 (日曜日) 2007
17:43
15日目2
 
ふむふむ。

まずはTSS構造体を定義する。

そしてその定義に従って二つの構造体変数を宣言。

んで、レジスタ退避意外の要素、TSSの設定変数に初期値を代入と。



で、これを実際のGDTに登録〜!



・・・あれ? リミットってなんだっけ??



あー! そっかそっか! 「このセグメントの大きさはいくつ」だ!



本来のセグメントはこれを自由に好きなように設定できるけど、

TSSはP292のとおり104バイトしかいらないから、その大きさつーことね。



ふむふむ。以上で準備がOKとなったわけね。



で、タスクの切り替え。



・TRレジスタに現在のタスク番号?(実際にはTSS番号)*8を代入

・あとは切り替えたいタスク番号にファージャンプ!



なるほどなるほど!



P296、

うーん。これは、パチンとタスクがタスク4に切り替わったとき、

全てのレジスタがこうなるということを設定するわけか。

今回は初めて切り替わるので、事実上初めて動き出すのと同じこと。

なので、ほとんどのレジスタは0なわけか。

(まあつまり初期値なので0にしとくかってレベルのはず。

 
name: @Guest  Comment:
12:52
15日目
 
15日目〜。

さーていよいよマルチタスクだ!



マルチタスクは同時進行ではない。高速に切り替えているだけ。

忍者の分身の術と同じなわけですね。



ちなみに猿飛び佐助は実在しませんが霧隠れ才蔵は

実在したorモデルとなる忍者がいたとか・・・ ←超どうでもいい



ふむふむ。TSSはセグメントの一種と。



ldtrは0に。iomapは0x40000000をとりあえず代入と・・・なんでーー????

(たぶん後で出てくるはず)









 
●uchan@Guest -- 07/16 08:05
僕もiomapはよく分からなかったですが、調べてみました。URL:http://haribote.org/index.php?uchan

name: @Guest  Comment:
12:37
14日目3
 
ひさびさ〜



高解像度。まあこれは特にわからんことはなくトントンと進んでます〜。

P279、ほっほ〜。ES:DIにビデオカードの情報があると。なるほどなるほど。





P282

キーボードかぁ。

ここの表でもいいんだけど、オイラの時は実際の配置との照らし合わせに

ちょっと苦労した記憶があるのでこんなのを作っとります。

よろしかったらご活用ください〜。





P288

うーん。スルスルと解りすぎて書くことないなぁ・・・←なにを偉そうに!



動くだけで反応しないマウス・・・・

そんなの飾りです! かわい人にはそれが解らんのです!





そんな小ネタとともに、14日目終了〜

 
name: @Guest  Comment:
5月 14 (月曜日) 2007
16:51
14日目2
 
14日目2〜



ヽ(`Д´)ノモルァ わかんねー!

棚上げは棚上げで進もう!





 
name: @Guest  Comment:
5月 13 (日曜日) 2007
21:24
14日目
 
14日目〜



うみゅーー!

ここまでで一息入れて、これまででわからなかったことを整理しろと!?

ふーむ。今現在オイラが解っていないことはここのリストにまとめてある。一度調べてみるか・・・
 
name: @Guest  Comment:
1 2 (3) 4 5 6 7 8 9 10 11 12 » 

PopnupBlog V3 Denali created by Bluemoon inc.