マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

2008-12-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 !という出力がずっと続くようになった。途中で止…

bochsで動かしてみた

そしたらこんなエラーになった。qemuより親切なメッセージっぽい>>PANIC

エラーメッセージ

特権レベル3に移行しようとして落ちるとき、こんなエラーメッセージがでてたqemu: fatal: invalid tss typeGoogleで"invalid tss type"を検索してみても日本語のページはかからない。一体何のエラーだろう?

Fedora 10

なんとなくFedora 10にしてみたくなり、yumでアップグレードした。今回はエラーもなくうまくいったのでよかった。

特権レベル3に移行すると落ちる

特権レベル3のタスクに移行するとqemuごと落ちる。動作レベルも3にしているのに…。セグメントディスクリプタの設定がおかしいのかも?

Fedora 9インストール

自宅のマシンにFedora 9を入れた。何も考えずにインストールしたらいろいろ足りないものがあって困った。まずは日本語入力ができなかったので yum install scim-anthyでインストール。gccが入ってないことに気づき yum install gccでインストールした。今度…

環境変えたら動いたと思ったけど…

いつもは研究室のマシンで動かしてたけど自宅のマシンの環境を整え動かしてみたところ、一見動いてるように見えたが1つのタスクしか動いていなかった。まぁ、環境が変わったら動いたっていうのも困るけど

風来のシレン3購入

ソフマップで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…

とりあえずFDCの制御

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の書き換えを行っている。アボートはしなくなり、あと少しだと思うんだけど動かない

やっぱりわからねー2

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になった。た…

わからねー2

タスク切り替えでまたよくわからない動作になった 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セミナー)を聞いていた人達からの評価が届いた。全体的に話し方の評価が低かった。やっぱり話すの苦手なんだなぁと思いながら評価を見ていったら、話し方以外は人によって評価がわかれていた。これは好みの問題なのだろうか。とり…

Hashで微妙にソートされてしまう

Java 1.6になってからHashで若干ソートが掛かった結果になると聞いていたが、実際に試してみたら本当にソートされていた。TreeとHashの違いを教えるときにめんどくさそうな性質になってしまったな import java.util.HashSet; public class HashSetTest{ publ…

日曜でも研究室に

家にいてもやることがないので研究室に行ってきた。前の大学では週2日しかいってなかったが、今の大学ではほぼ毎日研究室に行っている。とりあえず、研究を進めるのと自作OSのタスク切り替えを何とかしようとしたが、あまり進展せず。研究ではJavaを使って…

タスク切り替え

今までTask State Segmentを使っていた。けれど、それをやめて割り込み時にスタックに積まれているEIPを書き換えることで、タスクの切り替えを行おうと思った。しかし、タスクの数が2つの時は問題なく動いたが、3つ以上になると途中で止まってしまう。きっ…