2008-01-01から1年間の記事一覧
いろいろやっているうちに表示されるメッセージが変わってた。相変わらず動かないけど00008930926e[CPU ] LTR: selector.ti != 0これは何のメッセージなのだろうか?
bochsで実行すると大量のcheck_cs(0x1e97): not a valid code segment !というメッセージでコンソールがすぐ埋まってしまい、見逃してたけど標準エラーをリダイレクトしたらこんなメッセージがでてた00008930946e[CPU ] load_seg_reg(SS): rpl != CPL動作レ…
試しにTSS構造体を作り、GDTにセットしてltrを呼び出してみた結果qemuではエラーメッセージは変わらずqemu: fatal: invalid tss typeのままだったけど、bochsだとcheck_cs(0x1e97): not a valid code segment !という出力がずっと続くようになった。途中で止…
そしたらこんなエラーになった。qemuより親切なメッセージっぽい>>PANIC
特権レベル3に移行しようとして落ちるとき、こんなエラーメッセージがでてたqemu: fatal: invalid tss typeGoogleで"invalid tss type"を検索してみても日本語のページはかからない。一体何のエラーだろう?
なんとなくFedora 10にしてみたくなり、yumでアップグレードした。今回はエラーもなくうまくいったのでよかった。
特権レベル3のタスクに移行するとqemuごと落ちる。動作レベルも3にしているのに…。セグメントディスクリプタの設定がおかしいのかも?
自宅のマシンにFedora 9を入れた。何も考えずにインストールしたらいろいろ足りないものがあって困った。まずは日本語入力ができなかったので yum install scim-anthyでインストール。gccが入ってないことに気づき yum install gccでインストールした。今度…
いつもは研究室のマシンで動かしてたけど自宅のマシンの環境を整え動かしてみたところ、一見動いてるように見えたが1つのタスクしか動いていなかった。まぁ、環境が変わったら動いたっていうのも困るけど
ソフマップで1980円で売ってたので買った。半年前発売とはいえ安くなりすぎだろう
タスク2つのときでもやっぱり止まっていた。タイマの割り込みハンドラが1回しか呼び出されてないらしい
「はじめて読む486」を参考に特権レベル3のタスクを作り、動作させたところアボートした。タスクが2つのとき(特権レベル0と3)のときはアボートしないんだけど特権レベル3のタスクを2つに増やすとアボート。なかなかうまくいかないものだ
パソコンを実家に運んでもらおうとパソコン宅配サービスを頼んだのに、普通の宅配便が来てしまった。そして、パソコンは運べないから今日は無理と言われ、明日になってしまった。今日中に運んでもらいたかったんだけどなぁ
hdkさんのアドバイスで「特権レベル移行なしの割り込みゲートだとスタックポインタは変更されない」というものがあった。特権レベルなんて考えてなかったので、これは参考にしなければ
とりあえずTestという何もしないクラスを作った class Test{ }; これを2つのタスクからアクセスしてみた void taskA(){ for(;;){ Test test; } } void taskB(){ for(;;){ Test test; } } しかし、これは止まらなかった。次にTestにstaticで何もしないメソッ…
現在、複数のタスクから同じクラスにアクセスすると止まってしまうという状況に陥っているが、今のところ解決策は見つかっていない。なのでこれからどうするかを考えてみた まだ諦めずに解決策を探す 複数のタスクで同じクラスを使わないように頑張る C++を…
一つのタスクならクラスにアクセスしても大丈夫と思いきや下記のコードでも「セグメンテーション違反です」と表示されるようになった。何でだろう?IO::hlt()をasmHLT()にすれば、やっぱり動いている void taskA(){ for(;;){ IO::hlt(); } } void taskB(){ f…
マルチタスク成功したかのように見えたけど失敗してる。それは複数のタスクから同じクラスにアクセスすると止まるというものだ。以下の2つのソースはやっていることは同じだが上の方はqemuが止まり、下の方だと動きつづける void taskA(){ for(;;){ IO::hlt…
http://hrb.osask.jp/wiki/?advance/FDCを見ながらFDCの制御を実装中。I/Oポートの0x03f5に0x07,0x00を書き込んで割り込み発生を確認した。
何かマルチタスクに成功してるっぽい。あるタスクで変数をカウントアップさせて、それをまた別のタスクで表示させたら、しっかりカウントされていく様子が表示されている。これはうまくいったっぽいぞ
タイマハンドラ呼び出し部分(NASM) asmTimerHandler: _asmTimerHandler: PUSHAD CALL timerHandler POPAD IRETD タスクを切り替えてる部分 void timerHandler(){ int* stack; asm ("mov %%ebp, %0 \n" : "=g"(stack)); //今,動いているタスクのレジスタの保…
汎用レジスタ、EIP、CS、EFLAGS、ESPの保存の後、汎用レジスタ、EIP、CS、EFLAGS、ESPの書き換えを行っている。アボートはしなくなり、あと少しだと思うんだけど動かない
currentTask = (currentTask + 1) % taskCount; stack[10] = taskData[currentTask].eip; で、毎回元の位置に戻ってしまうタスク切り替えができるようになった。しかし、 taskData[currentTask].eip = stack[10]; currentTask = (currentTask + 1) % taskCou…
試しにeip[2]の値を表示させたところマイナスの値が返ってきた。初期化されてないときの値っぽいけど、しっかり代入はしてるのにな。で、試しに eip = new int[3]; eip[1] = (int)taskA; eip[2] = (int)taskB; としてeip[2]の値を表示させたら0になった。た…
タスク切り替えでまたよくわからない動作になった stack[10] = eip[1]; だと、動くのに stack[10] = eip[2]; だとアボートしてしまう。eipはサイズ3の配列だし、eip[2]にはtaskBの関数ポインタが入ってるだけだし stack[10] = (int)taskB; はしっかり動くの…
タスク切り替えでタイマ割り込み時にスタックに積まれているEIPを書き換えることでタスク切り替えを行おうと思っている。しかし、 currentTask = (currentTask + 1) % taskCount; if(currentTask == 0) stack[10] = (int)taskA; else if(currentTask == 1) s…
今日、修士論文中間発表(CSセミナー)を聞いていた人達からの評価が届いた。全体的に話し方の評価が低かった。やっぱり話すの苦手なんだなぁと思いながら評価を見ていったら、話し方以外は人によって評価がわかれていた。これは好みの問題なのだろうか。とり…
Java 1.6になってからHashで若干ソートが掛かった結果になると聞いていたが、実際に試してみたら本当にソートされていた。TreeとHashの違いを教えるときにめんどくさそうな性質になってしまったな import java.util.HashSet; public class HashSetTest{ publ…
家にいてもやることがないので研究室に行ってきた。前の大学では週2日しかいってなかったが、今の大学ではほぼ毎日研究室に行っている。とりあえず、研究を進めるのと自作OSのタスク切り替えを何とかしようとしたが、あまり進展せず。研究ではJavaを使って…
今までTask State Segmentを使っていた。けれど、それをやめて割り込み時にスタックに積まれているEIPを書き換えることで、タスクの切り替えを行おうと思った。しかし、タスクの数が2つの時は問題なく動いたが、3つ以上になると途中で止まってしまう。きっ…