OSを作ろうpart5
レス数が1000を超えています。これ以上書き込みはできません。
0001(・∀・)yossy ◆FlasH.X1/s
NGNGスレッドになればと思います。
Monaプロジェクトページ
ttp://mona.sourceforge.jp/
OSをつくろうpart4
http://pc3.2ch.net/test/read.cgi/tech/1037096449/
OSをつくろうpart3
http://pc3.2ch.net/tech/kako/1027/10270/1027080631.html
OSをつくろうpart2
http://pc3.2ch.net/tech/kako/1024/10244/1024411711.html
プロジェクトメンバーになりたい方は、
[email protected] までメールをどうぞ。
最新のイメージファイルは以下のURLから落とせます。
ttp://mona.sourceforge.jp/Download.html
ソースファイルの閲覧はここからできます。
ttp://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/mona/mona_v1.0/
0002ひげぽん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG0009山崎渉
NGNG0010デフォルトの名無しさん
NGNG前半は難解だったけど最後まで読んだら
ネットについての理解が格段に深まった。
ありがとう。
他の人も、煽ってばかりじゃなくて
一度読んでみるといいと思う。
0011デフォルトの名無しさん
NGNG0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNG0015デフォルトの名無しさん
NGNG落ちたみたい
もっとガンガン埋めとくべきだった、、、
0016山崎渉
NGNG0017デフォルトの名無しさん
NGNG>Mona が Unix user にちょっとだけ出てた
だそうですが、読んだ人いませんか?
0018デフォルトの名無しさん
NGNGbochsの記事で、bochsのデバッグ機能が『mona』のブート部分の開発に役立った
というものでした。
0020デフォルトの名無しさん
NGNGなんかそれだけみると。bochsの何のために有るか分からん機能が
monaに役に立った。って書いてあるように見えるなぁ。
0021デフォルトの名無しさん
NGNGひげぽん「また落っこちました〜」
まわり「だからbochsのログだせやぁ」
の流れを思い出しました。w
0022ひげぽん
NGNG>の流れを思い出しました。w
あの時も、今もたくさんの人のお世話になっているということですね(笑)
ところで今日は、TSSを使わないタスクスイッチの簡易実験に成功しました。
eflags, csがいまいち更新されてなくて怪しいなど
不確定な要素満載ですが、一歩前に進みました。
アドバイスを下さったたくさんの方々、本当にありがとうございました。m(__)m
0023デフォルトの名無しさん
NGNGを思い出しました。
0024デフォルトの名無しさん
NGNG「タスク切り替え」なんてものは、定義が適当だし、今の段階では
実際的な「タスク切り替え」とは程遠いので、あんまり大したこと
ではない。
0025ひげぽん
NGNG>「タスク切り替え」なんてものは、定義が適当だし、今の段階では
>実際的な「タスク切り替え」とは程遠いので、あんまり大したこと
>ではない。
全くおっしゃるとおりです。
ただ今回の実験を通していろいろ勉強できたので
自分的には収穫は大きいです。
0026デフォルトの名無しさん
NGNG知りたきゃCVSから取ってこいってのは敷居高くない?
わざわざトップページ更新するほどじゃないのかもしれんが、
SF.jpに日記機能あるんだし、開発日誌みたいなの公開しないの?
https://sourceforge.jp/developer/diary.php?diary_user=2006
CVSを取ってこないと分からない例
1. STLがどうなったのか
2. VPC対応がどうなったのか
3. タスク切り替えがどうなったのか
あと64bitの話が出てたがどう考えてるの?
新規開発者が加入されたようだけどHP更新されてなくて可哀想...
ま、辛口だったかもしれんが、応援してるんで頑張ってちょ
0027ひげぽん
NGNG>何か最近Monaの進歩状況がよくわかんないな〜
>知りたきゃCVSから取ってこいってのは敷居高くない?
ご意見ありがとうございます。
こういうところは、なかなか自分で気付かない所なので
ご指摘は大変ありがたいです。
以下ひとつずつ、回答いたします。
>わざわざトップページ更新するほどじゃないのかもしれんが、
>SF.jpに日記機能あるんだし、開発日誌みたいなの公開しないの?
>https://sourceforge.jp/developer/diary.php?diary_user=2006
開発のソースレベルの変更をお知りになりたいのであれば
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/mona/mona_v1.0/src/ChangeLog
よりChangeLogを見ていただくのが良いかと思います。
CVSにコミットする場合は何らかのコメントを入れています。
それ以外に必要であれば、どこかに近況を入れようかと思いますが
どこが良いでしょうか。皆さんのご意見をうかがいたいです。
(1)sourceforge.jpの日記
(2)MonaBBS
(3)Monaトップページ
(4)作ろうスレ(ここ)
(5)メーリングリスト作成(現在非公開の開発者用メーリングリストはあります)
(6)その他
0028ひげぽん
NGNG>1. STLがどうなったのか
STLPortが使えるようになりました。
カーネルの実装にはまだ用いていませんが、いずれ使う事になると思います。
特にコレクションなど。
>2. VPC対応がどうなったのか
昨日にやっと、VPCでのブートとタスクスイッチが動作しました。
ただイメージとして公開している物は古いバージョンなので
VPCでは動きません。
イメージとして最新版を公開していないのは
現在タスクスイッチ(TSSを使用しないバージョン)の動作がまだあやしいためです。
安定後公開したいと思います。
もしどうしても最新版のイメージがほしい場合は、Make環境を整えていただくか
ひげぽんに言っていただければ、何とかいたします。
>3. タスク切り替えがどうなったのか
ここ最近、ずっと実験中かつ、実験が失敗していたので特に進捗はありませんでした。
昨日やっと、少しめどがたったのでいろいろな実機で実験しようと思っています。
0029ひげぽん
NGNGIA32アーキテクチャの理解もままならないのでしばらくは
64bit化を見据えた開発はしないと思います。
ただ、どなたか詳しい方がいらっしゃって
アドバイスいただけるのであれば、積極的に今からある程度
準備するのはありだと思っています。
>新規開発者が加入されたようだけどHP更新されてなくて可哀想...
すいません、なるべく早く追加いたします。
yuryuさんこれを見ていたら、開発者メーリングリスト宛に
メールください。
>ま、辛口だったかもしれんが、応援してるんで頑張ってちょ
貴重なご意見ありがとうございました。
他にも同じような事を思われていた方もいらっしゃると思うので
できるだけ改善していきたいと思っています。
0030デフォルトの名無しさん
NGNG> 昨日やっと、少しめどがたったのでいろいろな実機で実験しようと思っています。
こういうようなことを、自分の言葉で書ける日記は特別な意味があると思う。
→「あれやった、でも駄目だった、と思ったら勘違いだった」みたいな
他人にとっても泥臭さを通じてmonaを身近に感じる人もいるだろうし、
後で自分のやってきたことを見返すときにもきっと役立つ。
0031デフォルトの名無しさん
NGNGこういう書き方だと、
2chブラウザとかで >>1 と混同される
これに限らないがこの手の混同を避けるため
引用符と引用文の間はスペースを空ける慣習があるんだよ
0032デフォルトの名無しさん
NGNGMonaBBSではこんなにはじけちゃってるのに(藁
> (´∇`)ヒゲポソ ◆Ngzcp/NZpA
トリップは自衛の手段なんだから。
偽者がめちゃくちゃ書く可能性を自分で作ることになるよ。
こっちでもはじけちゃいなよ(藁
0033デフォルトの名無しさん
NGNGなんかあってからそのトリップつけりゃいんじゃない?
0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNG荒らすような偽者には、このスレは敷居高いと思う。
003633
NGNGぬ、MonaBBSで >>32 のトリップ使ってるのかと思ったんだが、
どうやらさっき確認した限りではそういう例が見つからなかった。
勘違いですた。
というか、トリップなんて後で適当に決めちゃってもオフイシャルページで宣言しちゃえば問題ないじゃん。
>>35
まぁね。分かるよね。騙すにはそれなりに技術レベルも必要だし。
0037デフォルトの名無しさん
NGNG一体全体、どこ探したの???
http://pc3monaos.hp.infoseek.co.jp/cgi-bin/2ch/test/read.cgi/entrance/1042291353/l50
あと誰も書き込まないMonaBBSで付けてるのに
荒らしの巣窟の2chで付けないことをなぜ擁護するか理解できん。
0038デフォルトの名無しさん
NGNGひげぽんさんが登場するのはこのスレだけではないと思われ
それこそOSASKとかNWSOSとかの絡みでしょっちゅう引き合いに出されてるし
0039デフォルトの名無しさん
NGNG004033
NGNG0041デフォルトの名無しさん
NGNGいつのまにか、いろんなGUIアプリが動いてた。ってかメモ帳程度の
ものが当たり前に動いてるし、
なんなんだ、いったい
0042デフォルトの名無しさん
NGNG#会社のPCなんで、linux入れてProxyキャッシュサーバとして稼動させる
のが本来の予定だったんだけど、NWSOS動かしたら周りの人が、なにそれなにそれ
みたいな感じで群がってきた。MONAは、今のところBIOSっぽい画面なんで
BIOSと思われてるらしく、あまり注目されてなかった。
ってことで、MONA頑張れ。
0043デフォルトの名無しさん
NGNG桜?
頑張れ。
0044デフォルトの名無しさん
NGNG0045ひげぽん
NGNG> 引用符と引用文の間はスペースを空ける慣習があるんだよ
了解しました。
> 何でひげぽんさんはこっちではトリップ付けないの?
> MonaBBSではこんなにはじけちゃってるのに(藁
>>32-40
面倒だったので付けていませんでした。>トリップ
なのでつけてみました(笑)
トリップを付けるかどうかは、結構気分かもです。ごめんなさい。
>>42
> みたいな感じで群がってきた。MONAは、今のところBIOSっぽい画面なんで
> BIOSと思われてるらしく、あまり注目されてなかった。
> ってことで、MONA頑張れ。
NWSOSと比べられたら、大負けですね。
というか、どのOSと比べても負けてる。
もっといえばBIOSのほうがすごい・・・
でもがんばります、ありがとうございます。
0046ひげぽん ◆Ngzcp/NZpA
NGNGさてMonaの進行状況は技術的なことであれば、なるべくここに書いていこうと
決めました。
昨日はタスクスイッチ実験成功コードを見直していたところ
どうも動いていたのは奇跡かもという結論に達しました。
iretではなくretで切り替わっていた模様。
なのでEFLAGS,CSチェンジが起こっていなかった。
またスタックに積まれていると予期していたものと
実際でいろいろ勘違いがありました。
ある時点でスタックに積まれている内容を
そこで処理がとまっていいので表示したい場合は
汎用レジスタにpopして表示でいいんですよね?自信なし
自分でスタックを初期化して作ったプロセスのほうは
popaように0を積んで、eflags,cs,eipとやってiret
切り替えられました。(process2)
0047ひげぽん ◆Ngzcp/NZpA
NGNGtimerHandler
schedule
switchProcess
ここで切り替え
インテルのマニュアルを読むと
エラーでない割り込みであれば
/* EFLAGS */
/* CS */
/* EIP */
と積まれているはずなのに、うまくいかないっす。
それぞれtimerHandler,scheduleのアドレスが
pushされているかと二つpopしてやってみたがうまくいかず・・・
0048ひげぽん ◆Ngzcp/NZpA
NGNGスタックの内容が表示できるよう
#define _syspop(count) { \
\
for (int i = 0; i < count; i++) { \
dword __eax; \
asm volatile("xor %%eax, %%eax\n" \
"pop %%eax \n" \
"mov %%eax, %0 \n" \
: "=m" (__eax) \
: /* no input */ \
); \
_sys_printf("_sysPop(): %x\n", __eax); \
} \
}
作ってみたけどいまいちきちんと動いてなさそうな気がする。
うーんうまくいかず。
ところでCSて16bitだけど
割り込みでスタックに積まれる時は32bit?
かなあ。
0049ひげぽん ◆Ngzcp/NZpA
NGNGすいません。
> ところでCSて16bitだけど
> 割り込みでスタックに積まれる時は32bit?
> かなあ。
32bitのようです。
サンクスmitkoさん。
0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNGどこかのWEBページで見れるように保存しておいてほしかったなぁ。
前スレがDAT落ちしまくって後から来たものにはなにがどうなってるのか
分からない罠。
前スレの保存公開は禁じられてるのなら仕方ないけど。
0052FreeDOS教徒
NGNGとりあえず過去ログどっかに置いていいんじゃない?>ひげぽん
とか言うのもナンなのでHTML化されるまで出しておきます。
ttp://guriponn.tripod.co.jp/archives/os-part4.htm
0053デフォルトの名無しさん
NGNGご苦労様です。
ありがたく拝見されていただきます。
0054デフォルトの名無しさん
NGNG0055デフォルトの名無しさん
NGNGpopしちゃうと戻れなくなるから、popせずにスタックを除き見るだけが吉だとおもわれ。
例えば、
handler:
pusha; 8個のレジスタ分つまり32bytesプッシュする
moveax, [esp+32]; eax <= エラーコード
moveax, [esp+36]; eax <= 割り込み時eip
movax, word [esp+40]; ax <= 割り込み時cs
moveax, [esp+44]; eax <= 割り込み時eflags
popa
iret
Cの関数にする場合は
void handler(unsigned long eip, unsigned short cs, unsigned long eflags)
{
interror_code = (&eip)[-1];
/* 割り込みの処理 */
asm("leave");
asm("addl $4, %esp"); /* エラーコードをpopする替わり */
asm("iretl");
}
とかするとよろし。
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNG0058ひげぽん
NGNGインラインとprintfでやってますがうまくいかないです
0059デフォルトの名無しさん
NGNG上の例を説明すると、
- 32bitモードの場合push対象が16bitでも32bit分のスペースをとる。
- esp は最後にpushした値を指す。
- C言語の関数は一般に以下のようにコンパイルされる:
func:
push ebp
mov ebp,esp
; 関数の内容
leave
ret
- C言語の関数の引数としては call 前にpushした値が逆順に与えられる。
例:
push dword 0x1234
call func
void func(unsigned long x)
{
/* x=0x1234 */
}
- C言語の関数は leave, iret ではなく leave, ret で終わるので注意。(前スレあたりでがいしゅつ)
- 例外の場合はエラーコードがプッシュされる場合があるので注意。
なんか要約したつもりが余計長くなってしまった。
0060デフォルトの名無しさん
NGNGやりたい事が良く分からないので的外れかもしれないけど
無理にインラインアセンブラにしないで
↓みたいな関数にしちゃだめなの?
; eax,ecx,edxが破壊されretで返るルールの場合
__syspop proc near
push esi
push edi
push ebx
mov edi, dword ptr[esp+16]
xor ebx, ebx
test edi, edi
jz _syspop_02
syspop_01:
push dword ptr[esp+ebx*4+20]
push offset _syspop_buf ;printfの第1引数
call _printf
add esp, 8
inc ebx
inc edi
jnz _syspop_01
syspop_02:
pop ebx
pop edi
pop esi
ret
__syspop endp
0061デフォルトの名無しさん
NGNG0062ひげぽん ◆Ngzcp/NZpA
NGNGdword stack0, stack1, stack2;
asm volatile(
"pusha \n"
"mov 32(%%esp), %%eax \n"
"mov %%eax, %0 \n"
"mov 36(%%esp), %%eax \n"
"mov %%eax, %1 \n"
"mov 40(%%esp), %%eax \n"
"mov %%eax, %2 \n"
"popa \n"
: "=m"(stack0)
, "=m"(stack1)
, "=m"(stack2)
);
_sys_printf("_sysdumpStack(): %x %x %x\n"
, stack0, stack1, stack2);
}
0063ひげぽん ◆Ngzcp/NZpA
NGNGとりあえずこれを使って、昨晩はtimerHandler突入後のスタックを
調べてみましたが
CS=0x08らしきものすらスタックに積まれている様子がなくて
戸惑っています。
考えられる可能性は
・_sysdumpStack()がバグっている
・_sysdumpStack()の前にすでにスタックが破壊されている
・ひげぽんの大きな勘違い
・その他。
とりあえずいきづまったので寝てから、もう一度冷静に考えてみます。
0065超先生@OS板 ◆leaf/RYZgY
NGNGdword* stack;
mov stack,ebp
printf("cs=%x,eip=%x,flag=%0x",*(stack+0),*(stack+1),*(stack+2));
// (stackframe) <- esp
// [cs ] <- ebp
// [eip ]
// [eflags]
0066デフォルトの名無しさん
NGNGpush ebp
mov ebp,esp
sub esp,(AUTO変数のサイズ)
で、しかも、csとeipの順序が反対なので、
// <- esp
// [AUTO変数領域
// ...
// AUTO変数領域]
// [ebp ] <- ebp
// [eip ]
// [cs ]
// [eflags]
// [外側esp](もしあれば)
// [外側ss](もしあれば)
と夢の中でお告げがありましたのでご報告いたし上げます(南無)。
0067LightCone ◆sSJBc30S5w
NGNG0068ひげぽん ◆Ngzcp/NZpA
NGNG>>66ありがとうございます。
#define _sysdumpStack2(str) { \
\
dword* stack; \
asm volatile("mov %%ebp, %0 \n" : "=m"(stack)); \
_sys_printf("_sysdumpStack2(%s):%x %x %x\n" \
, str, *(stack + 0), *(stack + 1) \
, *(stack + 2)); \
}
#define _sysdumpStack3(str) { \
\
dword* stack; \
asm volatile("mov %%esp, %0 \n" : "=m"(stack)); \
_sys_printf("_sysdumpStack2(%s):%x %x %x\n" \
, str, *(stack + 0), *(stack + 1) \
, *(stack + 2)); \
}
0069ひげぽん ◆Ngzcp/NZpA
NGNGやってみました。
timerHandler()の頭で呼んだ場合(それぞれ単独の呼び出し)
_sysdumpStack2(timer):0x002FFF6C 0x00001ED0 0x00000008
_sysdumpStack3(timer):0x00001DAD 0x00001DCA 0x00001DAD
ProcessManger::schdule()
_sysdumpStack2(schedule):0x002FFF58 0x00001DEF 0x000098E0
_sysdumpStack3(schedule):0x000053DF 0x000053FC 0x000053DF
timerHandler()ないでは0x00000008があるので
もしかしたら惜しいかも。
でも今日はよくわからず、力尽きました。
最近ずっと動くものが作れていないので、CVS コミットしてません。
ちょっと不安。
Makeは出来るけど途中で動きが止まってしまうようなやつを
コミットしても良いかと迷うのですがどうなのでしょうか。
0070ひげぽん ◆Ngzcp/NZpA
NGNGスタックダンプしてとまるぞと、怒られそうで・・・
定常的にチェックして、
ソースからMakeしている人っているのだろうか。。。
0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNGそのためのブランチでしょ。
新しい実験を開始するたびにブランチすればいい。
0073デフォルトの名無しさん
NGNGスタック扱うのに?
0074デフォルトの名無しさん
NGNGインラインですが何か?
0075デフォルトの名無しさん
NGNG保証ない
0076デフォルトの名無しさん
NGNG逆汗してみ
0077デフォルトの名無しさん
NGNGコンパイルオプションを変えただけで動かなくなるかもしれない方法を薦めないように
0078デフォルトの名無しさん
NGNGだから逆汗してみっていってるでしょ
インラインアセンブラで書いた部分が最適化の影響を受けるとは初耳
0079デフォルトの名無しさん
NGNGインライン関数がインライン展開される保証は無いのですが
VisualC++なら__forceinlineなんてものがありますが
0080デフォルトの名無しさん
NGNG今回みたいにちょこっと実験してみるにはマクロが便利でつ
コンパイルオプションとかコンパイラとか、なるべく関係ないように書くには
アセンブリ言語が一番だけどナー
0081デフォルトの名無しさん
NGNG-O付けなければ一切インライン展開されない。
-Oが付いていればレベルに関係なく100%インライン展開される。
よって>>77は正しいが、-Oさえあれば保証はある。
ま、普通のコードでさえ-O3以上だとまれにバグるので、
環境に一切左右されないのは>>80の言うようにオール汗だな。
今のmonaの開発方針とは正反対になるけど。
だから最終的には気持ちの差。
############# 終 了 #############
0082ひげぽん ◆Ngzcp/NZpA
NGNGスタックを扱うので、ちょっとインライン関数は怖かったです。
>>72
ありがとうございます。
CVSコミットしちゃいました。
関係ありそうな箇所について-Sオプションでアセンブラコードを出してみました。
http://mona.sourceforge.jp/higepon/
timerHandler()
ProcessManager::schedule()
ProcessManager::swtichProcess2()
0083超先生@OS板 ◆leaf/RYZgY
NGNGinitProcessでtimerHandlerへの戻り先他を積んでおかないとダメか。
そもそもコンテキストスイッチをesp切り替えでやるのはあまりお勧めできないが・・・。
0084デフォルトの名無しさん
NGNGCVSでCFLAGSを見る限り、-Oが付いてないですね。
これではインライン展開されないです。
>>82
インライン関数はなるべくヘッダに書いた方が良いですよ。
他のクラスから使うのであれば絶対に。
0085ひげぽん ◆Ngzcp/NZpA
NGNG超先生さん
>initProcessでtimerHandlerへの戻り先他を積んでおかないとダメか。
なるほど
二つ手があると思っています。
(1)switchProcess2()は、インライン展開されていないので
schedule()からtimerHandler()に戻るために
initProcessでスタックにtimerHandlerへの戻り値を
格納しておく。
そしてtimerHandler()でiret
(2)iret(つまりタスクスイッチ)をswitchProcess2()で行ってしまう。
この場合はinitProcess()で初期化する場合には
timerHandler()への戻り値を格納しておく必要はなく
適当な値を積んで置く。
そしてタスクスイッチの前にスタックの値を
ひとつ捨てる。
(捨てられるのはtiemrHandelerのアドレスか初期化時に設定された適当な値)
うーんどちらがよいのでしょうか。
0086ひげぽん ◆Ngzcp/NZpA
NGNG現状は、この方法しかわからないというのが真実です。
ほかに、もっとよい方法があるのでしたら
簡単でよいので教えていただけないでしょうか。
0087ひげぽん ◆Ngzcp/NZpA
NGNGアドバイスありがとうございます。
> CVSでCFLAGSを見る限り、-Oが付いてないですね。
> これではインライン展開されないです。
了解しました。
この辺の-Oオプションに詳しいサイト等ありましたら
教えていただけないでしょうか。
できれば、必ずインライン展開される/されない等
の情報があればありがたいです。
> インライン関数はなるべくヘッダに書いた方が良いですよ。
> 他のクラスから使うのであれば絶対に。
はい一応認識しています。
一応私の方針としてクラスメンバ関数のうち
インライン化するのはprivateなものだけにしようと
思っています。
まあなんとなくですが・・・
0088デフォルトの名無しさん
NGNG> -Oが付いていればレベルに関係なく100%インライン展開される。
この情報のソースある ?
VC では、forceinline 指定にもかかわらず、インラインにならない時があるんだけど。
0089デフォルトの名無しさん
NGNGmonaのソースを逆汗して確認。
0090デフォルトの名無しさん
NGNGそれってたまたまそうなってたってことじゃないのか ?
もしそうなら、「100%インライン展開される」とか書くなよ。
0091デフォルトの名無しさん
NGNGとりあえず、確認もせずにえらそうなことを言うのはやめてくれ。
インラインにならない経験があるんだったら、
それと同じケースがmonaの開発に使っている環境で再現することを示せば
背理法で何も議論する必要ないんだから。
0092デフォルトの名無しさん
NGNG要するに、100% インラインになることは、保証されてないわけね。
議論以前の問題だよ。
0093デフォルトの名無しさん
NGNG動かないとかいうのはシステム的になんか嫌だな・・・。
OS作る前にもっとコンパイラとかオブジェクトコードの勉強しないと。。。
0094デフォルトの名無しさん
NGNG何一人で熱くなってんの?
とりあえず、Monaをダウンロードして、コンパイルしないと始まらないよ。
手を動かしましょうよ。そう思って逆汗逆汗って言ったのに。
Inline Limitを超えなければInlineになることは保証されてる。
それくらい自分で見つけると思ったんだけどなあ。
0095デフォルトの名無しさん
NGNGわかった、わかった。
貴方の環境では、100% インラインになるわけね。
これでいい ?
俺の環境で、100% 保証されない事がわかればどうでもいいです。
0096デフォルトの名無しさん
NGNG殺伐とした雰囲気には余りしたくないんだが、、、一つだけ言わせてもらう。
>>90 が言うように「たまたま」そうかもってのは考えた方がいいと思う。
注意事項とか、前提条件、仮定とかはなるべく少ない方がいいからな。
そういうのが多いと、人には理解してもらいづらいし、自分で書いたソースだって
一月もたてば結構忘れてしまうから、用心するには越したことがない。
0097デフォルトの名無しさん
NGNGはい、結構です。で、本題。
興味の方向から考えるに、貴殿は組み込み用のOSを手がけておられるとお見受けしますが、
タスクスイッチはどういう風に実装しておられましたか?
0098デフォルトの名無しさん
NGNG0099デフォルトの名無しさん
NGNGと言うか、inline にする/しないなんて、コンパイラのバージョンで変わったりしそうでしょ ?
それに依存するのは、あまり良くないと思ってる。
>>97
> 興味の方向から考えるに、貴殿は組み込み用のOSを手がけておられるとお見受けしますが、
> タスクスイッチはどういう風に実装しておられましたか?
普通に TCB (Task Control Block) にレジスタセーブして、SP を再設定するだけ。
当時は、メモリ管理などはなかった。
また使ってた、68020 は、SP がユーザー/システム/割り込みで独立していたから、結構綺麗に書けた。
0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNG0102デフォルトの名無しさん
NGNG失礼しました。やはりそうでしたか。
gccは2.95の頃から-finline-limit-Nで決めていたので、
そんなに不安定なものだという感覚じゃなかったんです。
inline信者というより、gcc信者の厨房ですみません。
貴殿の書き込みを拝見していると、
コンパイラの面で色々と苦労されておられることが伝わってきて、
特にコールとスタックとかCしか使わない人は気にしないようなところに
非常に気を遣っておられたので、ひょっとしたらと思っていました。
喧嘩みたいになって皆様にはご迷惑をお掛けしましたので自分は逝きます。
0103デフォルトの名無しさん
NGNGすまん。
>>102
> gccは2.95の頃から-finline-limit-Nで決めていたので、
> そんなに不安定なものだという感覚じゃなかったんです。
>>96 も指摘してるし、>>99 にも書いたけど。それをもって 100% なんてあまり書かない方が良いと思うよ。
GCC のマニュアルにも...
Note:
pseudo instruction represents, in this particular context, an abstract measurement of function's size.
In no way, it represents a count of assembly instructions and as such its exact meaning might change from one release to an another.
と書かれてるぐらいだから。
> 特にコールとスタックとかCしか使わない人は気にしないようなところに
ちょっと勘違いしてるかと...。
俺は、>>88=>>90=>>92=>>95=>>99 だからスタックどうのこうのは書いてないよ。
ただ、このスレ見てる奴は、スタックがどうのこうのぐらいはだいたいわかってると思う。
(でないと、ちんぷんかんぷんだろうし...。)
0104デフォルトの名無しさん
NGNG-O2オプション以上をつけてれば、gccはinline展開を必ず試みます。
が、例外があって、例えば inline 関数を展開した結果、己のinline関数を
呼び出すような場合、無限inline展開に陥るので、その場合、inline属性は
無視されます。これは、C++のinline展開にも言えることで、標準委員会でも
「inline展開は必ずしもinline展開されるとは限らない」と定義されてます。
0105ひげぽん ◆Ngzcp/NZpA
NGNG早く持ちなおさないと
現状を整理してみようと思います。
(1)現在スタックポインタを切り替えることでTSSを使わないタスクスイッチを試みている
(2)割り込みハンドラではeip,cs,eflags,error(あれば)がスタックに積まれる事は
わかっている
(3)iretでは(2)とは逆にeip,cs,eflagsがpopされて実行元に戻ることがわかっている
(4)上記を踏まえてタスク初期化時にはeip,cs,eflags等をあらかじめ積んであるような
スタックを用意すれば良いという事がわかっている。
(5)(1)〜(4)のようにタスクスイッチすることは可能である。(理論的には)
問題点
・関数のinline展開等により割り込みハンドラによって積まれたはずの
eip,cs,eflagsがみつからない。
・スタックダンプマクロをつくりスッタク内を覗き見るがそれらしきものがない。
・そもそもスタックダンプマクロそのものがスタックを破壊せずに、覗き見できているか
ちょっと不安。
・esp,ebpのつじつまあわせがだんだんとよくわからなくなってきた。
とくに完全には割り込みハンドラまで戻らずiretする場合とか。。。
・スタックマクロもebp,espどちらを基準にすべきか・・・
大混乱中です。
0106ひげぽん ◆Ngzcp/NZpA
NGNG0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNG新手のタクシーですか
0109デフォルトの名無しさん
NGNG0110デフォルトの名無しさん
NGNG>・スタックマクロもebp,espどちらを基準にすべきか・・・
push pop しても値変わらんので、
ベースポインタって名前の通り ebp をベースにするのが便利でつ。
インテルアーキテクチャー上だったら普通は enter か push ebp + mov ebp, esp の組で
始まるから、ebp + 2 がコール直後の esp の値になるし。
0111110
NGNG0112デフォルトの名無しさん
NGNG> ベースポインタって名前の通り ebp をベースにするのが便利でつ。
フレームポインタの省略とかやられると辛いので、ここはきちんとアセンブラでスタックの値をとって、表示は C++ とかでやるのが良いと思う。
0113110
NGNGう、確かにそうだな。
gcc のinfoページ読んだら、-fomit-frame-pointer か -O2以上をつけると
フレームポインタ省略されてしまうってか言ってあった。フレームポインタ省略を
禁止する方法も無さそうだし。
0114デフォルトの名無しさん
NGNG0115デフォルトの名無しさん
NGNGここでレスするだけでもちょっとは助けになるんじゃない?
参加の仕方も色々。
0116ひげぽん ◆Ngzcp/NZpA
NGNGありがとうございます。
やはりespからたどるのがよさそうですね。
必要なeip,cs,eflagsが積まれてから
二つの関数に突入するので、だいぶ深いところ
にいってしまうのが難点ですね。
> ・スタックダンプマクロをつくりスッタク内を覗き見るがそれらしきものがない。
> ・そもそもスタックダンプマクロそのものがスタックを破壊せずに、覗き見できているか
> ちょっと不安。
あたりが、まだ解決していないのが痛いです。
>>107
> bochsdbg.exe等のデバッガ付きのもので追跡してみては?
bochsのドキュメント読んでみます。
>>114
>楽しげだ。でも仕事忙しくて傍観してるしか能がないおれ
最近私もだんだんと仕事が忙しくなってきました。
お互いがんばりましょう。
0117ひげぽん ◆Ngzcp/NZpA
NGNGできないのかな?
cygwinでMakeすれば出来そうだけどバイナリはないのだろうか・・・
明日ちょっと調べてみます。
0118デフォルトの名無しさん
NGNGバイナリパッケージ入れたら bochsdbg.exe ってやつが入ってるからそれ使えばいい。
0119ひげぽん ◆Ngzcp/NZpA
NGNGそれを起動させて
cygwin gdbで
gdb
target remote localhost:1234
とやってみましたが
connection refusedとなりました。
bochsのドキュメントを軽く読んだところ
./configure --enable-debugger --enable-disasm
./configure --enable-gdb-stub
内部デバッガ用、GDB用二つのバイナリがありそうな予感です。
0120名無し@沢村
NGNGところで新しいOSができたというニュースはまだ聞かないが、ヌヒ等よ何をしている?
ヌヒ等よ、早くやれ!!
0121118
NGNGbochsdbg.exe は ./configure --enable-debugger --enable-disasm の方だと思われ。
これを普通の bochs みたいに起動すると、bios の一番最初の命令で停止した状態で
プロンプトが出るから、ブレークポイント置くとかいろいろ準備した後で c で実行開始する。
0122名無し@沢村
NGNGごたくはいいから早くつくれ!!
0124デフォルトの名無しさん
NGNG何か沢村の名を騙った偽者に見える。
0126山崎渉
NGNG0127ひげぽん ◆Ngzcp/NZpA
NGNGループはあえて使ってません。
#define _sysdumpStack4() \
\
static dword* stack; \
asm volatile("mov %%esp, %0 \n" : "=g"(stack)); \
_sys_printf("%x ", *(stack + 0)); \
_sys_printf("%x ", *(stack + 1)); \
_sys_printf("%x ", *(stack + 2)); \
_sys_printf("%x ", *(stack + 3)); \
_sys_printf("%x ", *(stack + 4)); \
_sys_printf("%x ", *(stack + 5)); \
_sys_printf("%x ", *(stack + 6)); \
_sys_printf("%x ", *(stack + 7)); \
_sys_printf("%x ", *(stack + 8)); \
0128ひげぽん ◆Ngzcp/NZpA
NGNGvoid timerHandler() {
asm volatile("pushl $0x87654321");
asm volatile("pushl $0x87654321");
asm volatile("pushl $0x87654321");
asm volatile("pushl $0x87654321");
_sysdumpStack4();
/* EOI is below for IRQ 8-15 */
outportb(0xA0, 0x20);
outportb(0x20, 0x20);
/* determine next process or thread and run it */
ProcessManager& pm = ProcessManager::instance();
pm.schedule();
iret();
return;
}
0129ひげぽん ◆Ngzcp/NZpA
NGNG0x00001DBF 0x00001DBF 0x87654321 0x87654321 0x0000000E 0x00000014 0x002FFF
6C 0x00001FAB 0x0000000
と表示されます。
0x87645321が二つ消えてしまいます。
該当部をディスアセンブルしたのは
00000FD0 55 push ebp
00000FD1 89E5 mov ebp,esp
00000FD3 83EC08 sub esp,byte +0x8
00000FD6 6821436587 push dword 0x87654321
00000FDB 6821436587 push dword 0x87654321
00000FE0 6821436587 push dword 0x87654321
00000FE5 6821436587 push dword 0x87654321
00000FEA 892530800000 mov [0x8030],esp
00000FF0 A130800000 mov eax,[0x8030]
00000FF5 C70424BF1D0000 mov dword [esp],0x1dbf
00000FFC 8B00 mov eax,[eax]
00000FFE 89442404 mov [esp+0x4],eax
00001002 E849F8FFFF call 0x850
00001007 A130800000 mov eax,[0x8030]
0000100C C70424BF1D0000 mov dword [esp],0x1dbf
00001013 8B4004 mov eax,[eax+0x4]
00001016 89442404 mov [esp+0x4],eax
0000101A E831F8FFFF call 0x850
0000101F A130800000 mov eax,[0x8030]
00001024 C70424BF1D0000 mov dword [esp],0x1dbf
0000102B 8B4008 mov eax,[eax+0x8]
0000102E 89442404 mov [esp+0x4],eax
00001032 E819F8FFFF call 0x850
0130ひげぽん ◆Ngzcp/NZpA
NGNG大混乱です。
観測しようとすると状態が変わるのか
もともと状態がおかしいのか
正常なのか。
・・・・・・・
0133ひげぽん ◆Ngzcp/NZpA
NGNGその関数に入ってからスタックには積まれた者はebpからするとマイナス
ということですよね。あれちょっと自信ないです。
0134デフォルトの名無しさん
NGNGmov [esp+0x4],eax
でスタックの内容を書き換えているので正常です
0135ひげぽん ◆Ngzcp/NZpA
NGNGありがとうございます。
書き換えが起こっているのは、関数callのせいなのでしょうか。
ebp基準にして0x87654321を探ってみたところ
3つしか表示されませんでした。
スタックに全く影響を与えるのは無理なのでしょうか。
いやそんなことはないですよね。
0136デフォルトの名無しさん
NGNG> 観測しようとすると状態が変わるのか
量子力学の不確定性みたい...
>>132
> あ、もしかして他の関数をcallしてしまうとおかしくなるかも。。。
先日のinline論議真面目に読んでないんだね...
0137超先生@OS板 ◆leaf/RYZgY
NGNGasm volatile("mov %%esp, %0 \n" : "=g"(stack)); \
00000FEA 892530800000 mov [0x8030],esp
00000FF0 A130800000 mov eax,[0x8030]
00000FF5 C70424BF1D0000 mov dword [esp],0x1dbf ; 引数 "%x "
00000FFC 8B00 mov eax,[eax] ; 引数 *(stack + 0)
00000FFE 89442404 mov [esp+0x4],eax
00001002 E849F8FFFF call 0x850 ; _sys_printf
0138ひげぽん ◆Ngzcp/NZpA
NGNG>> あ、もしかして他の関数をcallしてしまうとおかしくなるかも。。。
>先日のinline論議真面目に読んでないんだね...
もちろん読んでいますが理解が遅いのです。申し訳ありません。m(__)m
0139デフォルトの名無しさん
NGNG_sys_printf("%x ", *(stack + 1)); \
_sys_printf("%x ", *(stack + 2)); \
_sys_printf("%x ", *(stack + 3)); \
_sys_printf("%x ", *(stack + 4)); \
_sys_printf("%x ", *(stack + 5)); \
_sys_printf("%x ", *(stack + 6)); \
_sys_printf("%x ", *(stack + 7)); \
_sys_printf("%x ", *(stack + 8)); \
を、
unsigned int value[9];
value[0] = *(stack + 0);
value[1] = *(stack + 1);
...
printf("%d\n", value[0]);
...
でやったらどうですか?
0140デフォルトの名無しさん
NGNGいい人 (*^_^*)
0141ひげぽん ◆Ngzcp/NZpA
NGNG0x87654321 0x87654321 0x87654321 0x87654321 0x34353536 0x00000034 0x000000
と表示されました。
ありがとうございます。
すばらしいのですが
何故解決したかと、なぜ_sys_printfの引数がスタックを上書きしたかが
わかりません・・・
0142デフォルトの名無しさん
NGNG関数callというか
00000FD3 83EC08 sub esp,byte +0x8
でコンパイラはメモリアクセス用の一時変数を確保しているのですが
その後の
push dword 0x87654321
でスタックポインタが変更されたのに気付いていないのが原因です
0143デフォルトの名無しさん
NGNG>>103
> ただ、このスレ見てる奴は、スタックがどうのこうのぐらいはだいたいわかってると思う。
0144デフォルトの名無しさん
NGNG0145デフォルトの名無しさん
NGNGとりあえずここは一旦Monaのカーネルから離れて、
簡単な関数を書いてアセンブリ出力と睨めっこすることをお勧めします。
0146デフォルトの名無しさん
NGNG0147ひげぽん ◆Ngzcp/NZpA
NGNGなるほど。
ということは、インラインアセンブラなどを使わなければ
一番最初の_sysdumpStack4()は普通にスタック内を表示
できているのでしょうか。
そもそもの動機として
割り込みのハンドラへ行くときにスタックにpushされているはずの
eip,cs,eflagsが見当たらないので
・もともとスタックが壊れている
・表示ロジックがスタックを壊している
・表示ロジックが間違っている。
の切り分けをしたいというのがありました。
なかなか難しいです。
でも勉強になります。
0148超先生@OS板 ◆leaf/RYZgY
NGNG[引数格納用] +--|<=Stackframe <- esp
[auto変数郡] +--| <- ebp
[旧ebp]
[eip]
[cs]
0149ひげぽん ◆Ngzcp/NZpA
NGNG実は最近それはやってみました。
引数がどのように格納されるか戻り値がどこに格納されるか。
AUTO変数の確保のされ方等
基本は学んだつもりなのですが
応用が利きません・・・
0150デフォルトの名無しさん
NGNGまたあらわれたLタン。
キャリアが違うと思うんだけど
0152デフォルトの名無しさん
NGNGではなくて、またLタンの話が引き合いに出された。
という意味だと思ふ。
0153超先生@OS板 ◆leaf/RYZgY
NGNGLinking C++ and Assembly
ttp://www.cs.uakron.edu/~margush/306/LinkingWithCplusplus.html
0154デフォルトの名無しさん
NGNG-fno-omit-frame-pointerで、出来ない?
0156デフォルトの名無しさん
NGNGgccでx86なら、-fomit-frame-pointerを明示的につけない限りフレームポインタは省略されません。
-Ox時に省略されるのは、省略してもデバッグ可能なアーキテクチャのみ。
それはともかく、俺なら割り込みハンドラでいきなりCコードに飛ばずに、asm glue codeを一回経由するけど。
0157ひげぽん ◆Ngzcp/NZpA
NGNG資料提示ありがとうございます。
スタック切り替えによるタスク切り替え、テストに *一応* 成功しました。
関連するコードは
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/mona/mona_v1.0/src/monaIhandler.cpp?rev=1.23&content-type=text/vnd.viewcvs-markup
のtimerHandler()
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/mona/mona_v1.0/src/ProcessManager.cpp?rev=1.54&content-type=text/vnd.viewcvs-markup
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/mona/mona_v1.0/src/include/ProcessManager.h?rev=1.23&content-type=text/vnd.viewcvs-markup
辺りです。
ただ何度もタスクスイッチを切り返すとfault0dが発生します。
これはただいま調査中です。
0158ひげぽん ◆Ngzcp/NZpA
NGNGなんとなく動いたのはうれしいのですが
漏れがありそうで怖いですね。
ちょっと時間を置いて見直してみます。
0159ひげぽん ◆Ngzcp/NZpA
NGNGMona develop beta 0.02bをリリースしました。
ダウンロードは↓からお願いいたします。
ttp://mona.sourceforge.jp/higepon/image/mona_beta0_02b.lzh
現バージョンの特徴は
・TSSを使わないタイマー割り込みによるタスクスイッチの実現
・STLの導入。std::swapは実際にタスクスイッチで使用しています。
・VirtualPC対応(匿名希望さんに感謝)
・cpuid命令によるベンダーIDの表示
・FAULT時のレジスタ・スタックダンプ
もしよろしかったら
MonaBBS動作報告版に専用スレッドを作成いたしましたので
動作報告をお待ちしています。
ttp://monaos.hp.infoseek.co.jp/cgi-bin/2ch/test/read.cgi/run/1043500934/l50
0160デフォルトの名無しさん
NGNG激しく同意。
timerEntry:
pusha
movl %esp, %eax
pushl %eax
call timerHandler
addl $4, %esp
popa
iret
0161デフォルトの名無しさん
NGNGdword edi;
dword esi;
dword ebp;
dword esp2;
dword ebx;
dword edx;
dword ecx;
dword eax;
dword eip;
dword cs;
dword eflag;
dword esp;
dword ss;
} StackFrame;
void timerHandler(StackFrame *frame)
{
printf("eip %d", frame->eip);
}
こんな感じ。
既存のOSのコードを軽く眺めてみるのも良いと思う。
0162デフォルトの名無しさん
NGNGをー!
OSカーネルにSTLを採用した例としては、世界初では?
(MSの人に、WinNTカーネルをSTLで記述しなおすみたいな話は
聞きましたが・・・バッファオーバーラン対策だそうで、でも未確定情報なんで)
0163ひげぽん ◆Ngzcp/NZpA
NGNG>>161
なるほどありがとうございます。
上記のメリットはスタックをきちんと
自分でコントロールできることでしょうか。
>をー!
>OSカーネルにSTLを採用した例としては、世界初では?
もしそうならうれしいですね。
キーボードドライバにstd::queueを使ってみて遊んでいます。
0164ひげぽん ◆Ngzcp/NZpA
NGNGwhile ((ch = km.getCharacter()) == -1);
_sys_printf("%c", ch);
とやることで、入力されたキーを出力できるようになりました。
ソースはこの辺です。
ttp://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/mona/mona_v1.0/src/KeyBoardManager.cpp?rev=1.7&content-type=text/vnd.viewcvs-markup
これはシングルタスクではうまくいくのですが
マルチタスクだとwhileループを抜けてしまいます。
つまり何も初期化されていないchを表示してしまう。
なんでだろう。。
調査中です。
でもだいぶ楽しいです。
0165デフォルトの名無しさん
NGNG何から始めれば良いの?
Visual BasicとかC言語とかあるけど、
最初はどれ?
Visual Basic?
0166デフォルトの名無しさん
NGNG0167デフォルトの名無しさん
NGNGアセンブラとC言語。
アセンブラのみでもいいのだけど、アセンブラだとJMPしまくりで、
スパゲッティに慣れるとよくないから、Cのような構造化言語と併用
していくといいよ。
0168デフォルトの名無しさん
NGNG誤爆にマジレス...
ていうか、アセンブラとCを併用するようなプログラムは入門には高度すぎだろ。
確かに両方やっておいた方が機械の仕組みがわかっていいのだが、、、
0169デフォルトの名無しさん
NGNGキーボードドライバは std::deque のほうが向いてるよ。
historyたぐるときなどは、queueよりも高機能実装できるのだ!
なんて、ツッコミが後から来ても、元の型を queue -> deque へ
変化させるだけで実装できてしまうのがSTLの強み。
L氏が指摘するように、STLを使うとコードが太る傾向があるが、
これも将来的にコンパイラ技術が上昇すると共に解決される問題なので
あまり危惧することでもないと思われ。
0170henoheno@OS板
NGNG4.5.3という事でよろしいでしょうか。( ´∀`)ネソノタメ
0171ひげぽん ◆Ngzcp/NZpA
NGNG>キーボードドライバは std::deque のほうが向いてるよ。
>historyたぐるときなどは、queueよりも高機能実装できるのだ!
なるほど。
>なんて、ツッコミが後から来ても、元の型を queue -> deque へ
>変化させるだけで実装できてしまうのがSTLの強み。
ですねぇ。うれしいです。
>>170
こんばんはhenohenoさん。
>Mona上にSTLportを移植された件、ベースになっているバージョンは
>4.5.3という事でよろしいでしょうか。( ´∀`)ネソノタメ
はい、あってます。
ところでバージョンが何か問題でしょうか。
気になります。
0172ひげぽん ◆Ngzcp/NZpA
NGNG片方のタスクで取得する実験をしてみました。
キー入力取得タスクの肝
while (true) {
while ((ch = km.getCharacter()) == -1) {}
_sys_printf("%c\n", ch);
}
これを実行するとchが不定の状態で
なぜか_sys_printfのところが実行されることがある。
「実行されることがある」とは
タスク実行中キー入力がない場合whileの条件は
ほとんどtrueになるが50回に1回くらいnot trueになる
getCharagter()の実装はまじめにキーを返すバージョンや
return -1;
オンリーだけでも上記の現象がおきる。
(1)
while ((ch = km.getCharacter()) == -1)
⇒
while ((ch = km.getCharacter()) == 120)
とやっても
この現象は起きます。
0173ひげぽん ◆Ngzcp/NZpA
NGNGwhile ((ch = km.getCharacter()) == -1)
⇒
ch = -1;
while (ch == -1)
ではこの現象は起きません。
(3)
while ((ch = km.getCharacter()) == -1)
⇒
while ((ch = testkey()) == 120)
クラスメンバではなくて普通の関数でも
この現象は起きます。
またシングルタスクモードではこの現象は起きません。
なんでだろうなあ。
0174デフォルトの名無しさん
NGNGMutexやWaitForSingleObjectみたいなの実装しないと
その手のことは安定して使えないと思われ
0175デフォルトの名無しさん
NGNGキーボード系などの資源は、タスク側に解放するのではなく、完全に隠蔽した
ほうがいいかと。キーボードの入力状況は、カーネル内の一箇所のみに蓄える。
std::deque< char > core_keybd_history;
と定義し、唯一のカーネルプロセスで
if( any_keybd_input == true )
{
core_keybd_history.push_front( km.getCharacter() )
}
という感じで蓄える。
で、km.getCharacter() とやらは、アプリ側には非公開。
で適切なタイミングで、カーネルが保持しているプロセス・デスクリプタに
historyを適切に集配する。
この適切なタイミングとは、そのプロセスに処理権利が移る瞬間かと。(本当にすまん、MONAについて何も知らないので他にもっと適切なタイミングがあるかも)
各プロセス・デスクリプタに以下のようなヒストリーバッファを用意。
std::deque< char > process_keybd_history;
アプリ側は盲目的に
process_keybd_history.end()で取り出し、不要になったら
process_keybd_history.pop_back()で実現かと。
物理的なキーボード状態が格納されてる唯一のバッファをcore_keybd_historyに絞り
あとは配布次第ってことで。
0176175
NGNGカーネルからはpush_front()で書き込まれ
アプリ側からはend() -> pop_back() 読み出されると。
0177デフォルトの名無しさん
NGNGキューに何も入ってないタイミングで、取り出そうとしたら駄目だろうね。
最初はスピンロックからでもやると良いかと。
0178デフォルトの名無しさん
NGNG上の割り込みハンドラのコードの
00000FF0 A130800000 mov eax,[0x8030]
でeaxを壊してるみたいだけど、これだと割り込みから帰ったときに動かないよ
全体を読んでないからわかんないけど
0179ひげぽん ◆Ngzcp/NZpA
NGNG>MutexやWaitForSingleObjectみたいなの実装しないと
>その手のことは安定して使えないと思われ
アドバイスありがとうございます。
Mutex調べました。
http://yougo.ascii24.com/gh/13/001328.html
なるほど、この辺の機構はタネンバウム本に
書いてあった気がします。
ただし今回のケースは
タスクは2つありますが、キーボード情報を取得するのは片方の
タスクのみなので原因がつかみきれません。
0180ひげぽん ◆Ngzcp/NZpA
NGNG>>176
> historyを適切に集配する。
> この適切なタイミングとは、そのプロセスに処理権利が移る瞬間かと。(本当にすまん、MONAについて何も知らないので他にもっと適切なタイミングがあるかも)
> 各プロセス・デスクリプタに以下のようなヒストリーバッファを用意。
> std::deque< char > process_keybd_history;
なるほど勉強になります。
適切なタイミングでpushと。
std::deque< char > core_keybd_history;
↓
std::deque< char > process_keybd_history;
あとは各プロセスにキーボードバッファを持たせればよいのかな。
0181ひげぽん ◆Ngzcp/NZpA
NGNGすいません、現段階でどの部分に当たることなのか
分かりませんが、_switchProcess()マクロに
eaxを壊すところがあったので直しました。
0182ひげぽん ◆Ngzcp/NZpA
NGNG> キューに何も入ってないタイミングで、取り出そうとしたら駄目だろうね。
> 最初はスピンロックからでもやると良いかと。
一応keyQueue_.empty()チェックを入れてるので
取り出しはしないはずです。
char KeyBoardManager::getCharacter() {
if (keyQueue_.empty()) return -1;
KeyInfo info = keyQueue_.back();
keyQueue_.pop();
if (info.modifiers & KEY_MODIFIER_UP) return -1;
if (info.keycode < 'a' && info.keycode > 'z') return -1;
return (char)(info.keycode);
}
0183デフォルトの名無しさん
NGNGif (keyQueue_.empty()) return -1;
で、-1 返してるじゃん。
とりあえず、そこで、スピンロック。
0184デフォルトの名無しさん
NGNGそういうちょっとしたバイナリでも
リリースとして↓に置いておいた方が良いと思うよ。
https://sourceforge.jp/projects/mona/files/
ダウンロード数も分かるし。
0185178
NGNGvoid timerHandler()
がいろんなレジスタ壊してるように見える…
(ほかの人もいってると思うけど、割り込みハンドラの入り口ぐらいは
アセンブリで書いたほうがいいのではないかなあ)
0186henoheno@OS板 ◆mXrBwDDzyw
NGNG> ところでバージョンが何か問題でしょうか。
> 気になります。
いずれ実装する方や将来のバージョンに合わせる方や
検証する方が来歴を知りたくなるのではないかと思い
ましたので、さわりだけ聞いてみました( ´∀`)
0187超先生@OS板 ◆leaf/RYZgY
NGNGtimerHandlerだけpusha/popaで括ってないのは何故・・・?
0188ひげぽん ◆Ngzcp/NZpA
NGNGご指摘ありがとうございます。
https://sourceforge.jp/projects/mona/files/
にリリースいたしました。
>>185
>詳しく呼んで見たけど
>void timerHandler()
>がいろんなレジスタ壊してるように見える…
すいません。
どの辺がレジスタを壊しているのでしょうか。
ご指摘いただければ幸いです。m(__)m
>>186
henohenoさん
>さわりだけ聞いてみました( ´∀`)
了解です。
0189ひげぽん ◆Ngzcp/NZpA
NGNG><後ろ頭>y-~~~
>timerHandlerだけpusha/popaで括ってないのは何故・・・?
すいません単純に_switchProcess()の最後でiretしているからです。
やはりまずいでしょうか。
019058
NGNGその時点のソースが見れたら便利なので、
(CVSで合わせて取って来させるのは敷居高すぎ)
一緒に置いておくとよいと思います。
ほとんど利用されないと思うのですが、
GPLという建前もありますし、
ソースのサイズでコード量の増減が一目で分かりますし。
0191ひげぽん ◆Ngzcp/NZpA
NGNG>その時点のソースが見れたら便利なので、
>(CVSで合わせて取って来させるのは敷居高すぎ)
>一緒に置いておくとよいと思います。
ご指摘ありがとうございます。
ソースつきのファイルもリリースしておきました。
次回からはソースつきのみのリリースとなるかと思います。
みなさんいっぱいダウンロードしてください(笑)
0192デフォルトの名無しさん
NGNG0193190
NGNG別のスレに書いたCookieに引きずられていました。
>>191
ソースとバイナリを分けて提供するのが普通ですが、
なぜ「ソース込みのバイナリ」なのでしょうか?
私が誤解を招くような書き方をしたのが原因かもしれませんが。
0194190
NGNGソースをLZHで提供する意味がよく分かりません。
Mozillaのソース配布物を見ていただくと一目瞭然ですが、
ソースが巨大になってくるとtar.bz2が群を抜いて圧縮率が高くなるので、
UNIX(的)システムを前提にするならtar.bz2をお勧めします。
バイナリなら別にLZHでも構わないとは思いますが、
MeやXPではデフォルトでZIPが扱えることも考慮されると良いかと。
0195デフォルトの名無しさん
NGNGPentium100MHz + ASUS P/I-55TP4 + その他 の自作PCで動きますた。
って動作報告はどこにするのが正しいでつか?
0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNGと ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/ ←>>196
(_フ彡 /
0198デフォルトの名無しさん
NGNG単純に落ちます。
カーネル内例外で落ちないOSないっしょ。
……ってネタにマジレスしてみた。
0199デフォルトの名無しさん
NGNG>ソースをLZHで提供する意味がよく分かりません。
LZHではいけない理由もわかりません。
>Mozillaのソース配布物を見ていただくと一目瞭然ですが、
>ソースが巨大になってくるとtar.bz2が群を抜いて圧縮率が高くなるので、
これは同意。
>UNIX(的)システムを前提にするならtar.bz2をお勧めします。
UNIX(的)システムを前提にしているのですか?
UNIX(的)システムを前提にするならtar.bz2でないといけないのですか?
>バイナリなら別にLZHでも構わないとは思いますが、
>MeやXPではデフォルトでZIPが扱えることも考慮されると良いかと。
LhasaもDLできない人がMonaをDLするとは思えませんが。
0200デフォルトの名無しさん
NGNG書く側にとってはコピペとか面倒くさいですし、
受け側にとっても集計能率が悪いです。
Webフォームみたいな形にできないですかね?
もちろん集計はリアルタイムにCGIで行われて皆で見れるような。
CGIなんか作ってる暇ない?(w
メンバ公募なんだからさ。
0201デフォルトの名無しさん
NGNGOSASK厨もよく似てるけど、不思議とNWSOS厨っていないな
Mona厨が発生しないことを祈る
0202デフォルトの名無しさん
NGNGUNIX風なシステムだったら殆ど必ず標準インストールされている .tgz が一番便利だとおもわれ。
「xxxじゃないといけない」じゃなくて、「xxxだと便利」って発想のがいいんでは?
0203デフォルトの名無しさん
NGNGhttp://lkh.linux.or.jp/kernel.html
いろいろな日本語資料がどっさりです!
JavaとC#しか扱えないくせに、OSを作ろうと勉強中に見つけました。
>>201
信者がいるようなソフトを作れるプログラマーに私はなりたいのですが...
0204FreeDOS教徒
NGNGいまは人数が少ないからいいけど、じきに出てくるって。
虫がいないソフトには夢がないでしょ。
>>203さん
> JavaとC#しか扱えない
それもそれで(゚д゚)ウラヤマスィ...
0205ひげぽん ◆Ngzcp/NZpA
NGNGいろいろアドバイスありがとうございます。
image,source共に .tgz , .zipで提供できるよう
リリースを更新しました。
関係者にご迷惑をおかけしましたことをお詫びします。m(__)m
>>195
動作テストありがとうございます。
専用掲示板を用意しましたので
こちらから動作報告していただけると助かります。
ttp://monaos.hp.infoseek.co.jp/cgi-bin/2ch/test/read.cgi/run/1043500934/l50
>>200
ご提案ありがとうございます。
各バージョンごとに動作検証項目が違うと思うので
それを管理するのは大変かもしれませんね。
現在プロジェクトページを管理してくれているyossyさんも
お忙しいので実現は難しいかもしれません。
もちろん作ってくださる方がいらっしゃるなら
大歓迎です(笑)
Wikiみたいなのもありだと思っていますが。。。
0206ひげぽん ◆Ngzcp/NZpA
NGNG資料ご提示ありがとうございます。
この資料は知っていたのですが、久々に読み返すと
以前とは違う意味で、勉強になりました。
>>JavaとC#しか扱えないくせに、OSを作ろうと勉強中に見つけました
あーそろそろ。C#本格的に勉強しなければ。。。
マイクロソフトの虫遊び依頼さわってないっすC#
0207ひげぽん ◆Ngzcp/NZpA
NGNG今ふと思いついたのですが
timerHandler()に入った瞬間にスタックからcs,eip,eflagsを取り出しておいて
タスク構造体に入れておいて
あとからゆっくりと任意の場所でスタックに戻してあげてiretすれば
便利かなあと思ったんですが、何か落とし穴があるのでしょうか。
0208涼宮茜 ◆SDeOYNgiAU
NGNG, ´f二コヽ
! l !ノ リ i l / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ノiハl.゚ ー゚ノリ <. >>207 それが一般的な実装です。
⊂)允つ \ 同時に汎用レジスタもTCBへ保存するべきですね。
く/_|〉 \____________________
し'ノ
0209デフォルトの名無しさん
NGNGんで、新しくタスクを作るときはスタックに積んどいて iret でスタートさせると。
0211henoheno@OS板 ◆mXrBwDDzyw
NGNGPukiWikiのBugTrackプラグインをご紹介。
ttp://pukiwiki.sourceforge.jp/dev/index.php?BugTrack
ただし、これはこれで(PukiWikiの)メンテナが要ります。
PHPが直せないならお勧めできない。
0212デフォルトの名無しさん
NGNGついでに、スレッドの開始アドレスを関数の先頭にしておいて、iretの戻りアドレスとして積んだその関数アドレスの
下にスレッド終了関数のアドレスと、終了関数への引数を積んでおくと、スレッドの関数からリターンしたときに
スレッドが終了するように出来る。
0213ひげぽん ◆Ngzcp/NZpA
NGNGおー。イメージ的にはそんなかんじですね。
ただPHPを勉強する暇はないので厳しいかもです。
>>212さん
なるほど。
話が変わりますが
eipは直接自分でとることは出来ないんですよね。
割り込みとかがトリガでないと取れないのでしょうか。
0214デフォルトの名無しさん
NGNG.tgzはちょっと……(ファイル形式じゃなくて拡張子)
何で.tar.gzって冗長なことになっているのかご存知?
0215デフォルトの名無しさん
NGNGGetEIP:
mov dword [esp], eax
ret
0216215
NGNG0217214
NGNG今のファイル名の付け方は独自過ぎます。
多分DOS経験が長くてUNIX文化をあまりご存知ないのかと。
うるさいやつと思われるかもしれませんが、
ちょっと知ってる人が見たらすぐ分かるという意味で、
標準的な名前の付け方に従った方が良いです。
まずtgzとzipと両方で4つは冗長すぎます。
いちいちこんなことしていたら収拾付かなくなります。
mona_beta0_02b_img.tgzというファイル名も悪いですが厨房くさいです。
ピリオドを1個にして拡張子tgzにするというのは
DOSの慣習に従ったと思われますが、
そもそも8.3形式じゃないので意味ないです。
区切りもピリオドもアンダーバーになっているので見難いです。
imgとかsrcとかの略語は8.3形式制限の産物なので無意味です。
区切りはハイフン、ピリオドは臆せず何個も付けた方が良いです。
あとβというのはリリース(完成)直前のものを指すのであって、
今の段階ではαでさえないので変です。
普通、αとかβとかは1.00αとか完成が視野に入ってから付けます。
それ以前に0.02というナンバリングが初期段階を表しているので
αとかβとか謙遜する必要もないです。
あと最近はバージョンニングは3つに区切るのが主流です。
UNIX系ではソース提供が普通なので、
ソースにはいちいちsrcなどと付けず、バイナリを補足します。
ですから次のような2つのファイルを提供することをお勧めします。
mona-0.0.2-image.zip
mona-0.0.2.tar.gz
0218LightCone ◆sSJBc30S5w
NGNG>何で.tar.gzって冗長なことになっているのかご存知?
私も、最近までUNIXのことをほとんど何も知らなかったので、
「誰がこんな意味不明の"拡張子"の付け方を広めたんだろう。全く、、、。」
と思っていたのですが、今ではなんと賢い付け方を考えたのだろう、という
風に考え方が変わりました。(^_^;)
ようするに、aaaa と言うファイルを bbbb という形式に変換した時、に、
aaaa.bbbb
というファイルができるという規則を何度も連続して適用しているんですね。
これを繰り返して、aaaa.bbbb というファイルを、さらに cccc という形式
に変換すると、
aaaa.bbbb.cccc
に変わると。
だから、aaaa というファイルを、tar でまとめた後、gz 形式に変換すると、
aaaa.tar.gz
に変わる。
逆変換(展開など)をすると、後ろの方から拡張子が消えていくと。
だから、tgz という拡張子にするより、実はtar.gzの方が凄く合理的だと
いう、、、。
0219henoheno@OS板 ◆mXrBwDDzyw
NGNGどのような意味でしょうか?
>>205
gzipの圧縮オプションは最大にして下さい。
以下は以前書いたもの。
-----------------------------
$ cat targz.sh
#!/bin/sh
#
echo "tar cf - \"$1\" | gzip -9 > \"$1.tar.gz\""
tar cf - "$1" | gzip -9 > "$1.tar.gz"
-----------------------------
$ cat release.sh
#!/bin/sh
# Release
if [ -z "$1" ]
then rel=0_9_4
else rel="$1"
fi
mod=cvsknit
CVSROOT=':pserver:[email protected]:/cvsroot/cvsknit'
cvs -z3 -d "$CVSROOT" export -r "CK_REL_${rel}" "$mod"
tar cf - "$mod" | gzip -9 > "${mod}_${rel}.tar.gz"
0220デフォルトの名無しさん
NGNGこれMakefileで何とかなりませんかね。distターゲットとか作って
make distとかでできると楽だと思うのですが、、、
# 俺には期待しないでね &heart;
0221デフォルトの名無しさん
NGNG> どのような意味でしょうか?
218でLightCone氏が詳しく説明しておられます。
0222超先生@スクリプト屋 ◆leaf/RYZgY
NGNGそもそもfile system上の"拡張子"という概念はFAT固有のものだしね。
0223デフォルトの名無しさん
NGNGどーでもいいんだけどね。
0224デフォルトの名無しさん
NGNGautotoolなら自動でルール作ってくれるけど
0225224
NGNG○ターゲット
0226デフォルトの名無しさん
NGNGtar+gzipじゃなくてzip一本でいいと思われ
0227デフォルトの名無しさん
NGNGひげぽんがcygwin使っているので、configureは時間がかかる気がする。
メリットもあまり無いと思うし、、、
# 楽なんだけどね (^^;
0228デフォルトの名無しさん
NGNG圧縮率が全然違う
0229デフォルトの名無しさん
NGNG0230ひげぽん ◆Ngzcp/NZpA
NGNGアドバイスありがとうございます。
MakeFiel
dist :
cd ../bin; zip -9 ../../mona-$(VERSION)-image.zip mona.img
cd ../../; tar cf - mona_v1.0 | gzip -9 > "mona-$(VERSION).tar.gz"
こんな感じでよいでしょうか。
0231ひげぽん ◆Ngzcp/NZpA
NGNG皆様いろいろアドバイスありがとうございます。m(__)m
こういうご指摘は大変ありがたいです。
配布形式等で違和感・不親切感が感じられるのは
マイナスなので改善していきます。
0232ひげぽん ◆Ngzcp/NZpA
NGNG今週末は
>207
あたりの実装をしようかと思っています。
0233デフォルトの名無しさん
NGNGMakeFileではなくてMakefileが普通(大文字・小文字の使い方のこと)
0234デフォルトの名無しさん
NGNG俺ならもうキレてるw
0235ひげぽそ
NGNG問題ないです。はい。
0236デフォルトの名無しさん
NGNGお疲れ様でした。
さっそくダウンロードさせていただきました。
今後とも応援していますので頑張ってください。
>>235
こういう時のためのトリップですね。
0237デフォルトの名無しさん
NGNGトップページに
> Monaダウンロード : Mona Develop Beta 0.02b がダウンロードできるようになりました。
とアナウンスがありますが、
そこからダウンロードページへリンクした方が親切だと思います。
0238デフォルトの名無しさん
NGNGMonaBBSに書こうゼ
0239デフォルトの名無しさん
NGNG0240ひげぽん ◆Ngzcp/NZpA
NGNG#define _saveRegisters(process) { \
\
asm volatile("movl %%ebx, %0 \n" \
"movl 4(%%ebp) , %%ebx \n" \
"movl %%ebx , %1 \n" \
"movl 8(%%ebp) , %%ebx \n" \
"movl %%ebx , %2 \n" \
"movl 12(%%ebp), %%ebx \n" \
"movl %%ebx , %3 \n" \
"movl %%eax , %4 \n" \
"movl %%ecx , %5 \n" \
"movl %%edx , %6 \n" \
"movl %%esi , %7 \n" \
"movl %%edi , %8 \n" \
: "=m"(process->ebx) \
, "=m"(process->eip) \
, "=m"(process->cs) \
, "=m"(process->eflags) \
, "=m"(process->eax) \
, "=m"(process->ecx) \
, "=m"(process->edx) \
, "=m"(process->esi) \
, "=m"(process->edi) \
); \
} \
0241ひげぽん ◆Ngzcp/NZpA
NGNG>お疲れ様でした。
>さっそくダウンロードさせていただきました。
>今後とも応援していますので頑張ってください。
ありがとうございます。
>>237
>そこからダウンロードページへリンクした方が親切だと思います。
近いうちに改善できるよう要望を出しておきます。
ご指摘ありがとうございます。
0242デフォルトの名無しさん
NGNGprocess がグローバル変数かスタティック変数へのポインタでなければ、
gcc が process の値を計算するときにレジスタを使って内容を壊してしまわないか心配。
というか、多分使う。
0244デフォルトの名無しさん
NGNG一応 gcc -S でアセンブラソース吐き出させて、レジスタ壊してないか確認した方が吉
0245涼宮茜 ◆AGE/HuBkMM
NGNG, ´f二コヽ
! l !ノ リ i l / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ノiハl.゚ ー゚ノリ <. >>243 pushaでスタックへ吐き出してから
⊂)允つ \ *(ebp+n)で取得するのが安全・確実です。
く/_|〉 \____________________
し'ノ
0246ひげぽん ◆Ngzcp/NZpA
NGNG/* no switch */
if (currentProcess == nextProcess) iret();
/* switch to next */
asm volatile(
"movl %2, %%ebx \n"
"movl %3, %%ecx \n"
"movl %4, %%edx \n"
"movl %5, %%edi \n"
"movl %6, %%esi \n"
"movl %7, %%esp \n"
"movl %8, %%ebp \n"
"pushl %9 \n"
"pushl %10 \n"
"pushl %11 \n"
"movl %1, %%eax \n"
"iretl \n"
: "=m"(currentProcess->esp)
: "m"(nextProcess->eax)
, "m"(nextProcess->ebx)
, "m"(nextProcess->ecx)
, "m"(nextProcess->edx)
, "m"(nextProcess->edi)
, "m"(nextProcess->esi)
, "m"(nextProcess->esp)
, "m"(nextProcess->ebp)
, "m"(nextProcess->eflags)
, "m"(nextProcess->cs)
, "m"(nextProcess->eip)
);
0247ひげぽん ◆Ngzcp/NZpA
NGNGプロセス構造体にレジスタをセーブするように変更しました。
何とか動いております。
ふぅっと。ひといき。
0248henoheno@おさらい ◆mXrBwDDzyw
NGNGソースを取り出したものをお使い下さい。(具体例は >>219)
exportコマンドを使えば 'CVS' というスペシャルディレクトリとファイルを
含まない、ほぼ純粋なソースを取り出す事ができます。
下手に "cvs co" を使うとそのユーザーの作業環境が漏れたり、
CVSサーバーの所在が漏れたり、そのソースに他の人が作業した
際に扱い辛くなったり、そのソースを別のリポジトリに追加しようと
した人が泣く事に繋がります。
なお、最新のファイルをexportする時は "cvs export -D tomorrow "
でどうぞ。
0249ひげぽん ◆Ngzcp/NZpA
NGNGhenohenoさん
おさらいありがとうございます。
cvs export次回から使わせていただきます。m(__)m
3つのタスクを実行してみました。
ttp://mona.sourceforge.jp/higepon/multi.PNG
アドバイスを下さった方ありがとうございます。m(__)m
0250デフォルトの名無しさん
NGNG0251ひげぽん ◆Ngzcp/NZpA
NGNG>コンテキストの操作にはインラインアセンブラを使わない方が賢明だと思われ。
おっしゃることは良く分かります。
インラインにするといろいろ考慮しなければいけないことが
多いです・・・
0252ひげぽん ◆Ngzcp/NZpA
NGNGttp://monaos.hp.infoseek.co.jp/bbs.html
更に書き込みやすくなりましたので皆さん
どうぞ奮って書き込みください(笑)
あとこちらもよろしくお願いいたします。m(__)m
ttps://sourceforge.jp/projects/mona/files/
0253henoheno@OS板@mac Exp
NGNGhttp://sourceforge.jp/projects/mona
へ移動するためのテキストリンクを所望します。(もし無ければ・・・)
#MonaBBSに書いたら混んでいると言われたのでこちらで( ;´∀`)
0254henoheno@OS板 ◆mXrBwDDzyw
NGNGhttp://minix-up.sourceforge.jp/ の末尾に書くことにします( ;´∀`)
0255henoheno@OS板 ◆g2j80BX5do
NGNG0256ひげぽん ◆Ngzcp/NZpA
NGNGhttp://mona.sourceforge.jp/
の下のほうにMonaPJというラベルでリンクがあります。
もっと便利な場所がいいですかねぇ。
0257デフォルトの名無しさん
NGNGそんなの普通見つけられないと思いますが……
エロサイトの入り口並み(w
0258ひげぽん ◆Ngzcp/NZpA
NGNG>そんなの普通見つけられないと思いますが……
>エロサイトの入り口並み(w
そうですよねw
実はあそこのリンクは結構使ってます。
mona.sourceforge.jpのほうが覚えやすいので・・・
0259ひげぽん ◆Ngzcp/NZpA
NGNG_sys_printf(str, ...)
}
というようなことをやりたい場合(実際にやるのは違うことですが)
printfが受け取った、引数はどうやって_sys_printf()に渡せばいいんだろう。
C言語入門からやり直そうかな・・・
0260デフォルトの名無しさん
NGNG0261デフォルトの名無しさん
NGNG0262デフォルトの名無しさん
NGNG標準ライブラリが使える場合は va_start, va_arg, va_end 等を使うけど、
mona では使わないので、結局 >>260 が言うようにスタックを操作するマクロを自分で書くしかないでつね。
というか、それ _sys_printf() でやってるじゃん。
0263デフォルトの名無しさん
NGNG始めは%s, %dくらいかな。ひげぽんがんばれ。
0264デフォルトの名無しさん
NGNGhttp://slashdot.jp/developers/03/02/03/221257.shtml?topic=1
オープンソースでWindows NT 互換OSを作るReactOSプロジェクトが、
ReactOS 0.1.0をリリースした。
アプリケーションおよびドライバーにむけてNTバイナリ互換性 を確保しようというもの。
現在、CD-ROMブートが可能で、GUIア プリケーションも初歩的ながら動いている。
GUI周りはWINEの助けを借りているそう なので、案外早くに大化けするかもしれない。"
ダウンロードのページからは実験用にBochs 2.0で起動できるイメージとBochsが
セットになったパッケージをゲットできる。
ひげぽんもガンバレ!
0265178
NGNGインクルードするだけで、ランタイムライブラリ無しでも使えた
と思うよ。
0266デフォルトの名無しさん
NGNG前者は後者を呼び出すだけにして、
実装は後者で行うようにすると簡単。
0267デフォルトの名無しさん
NGNGいわゆるLindowsみたいな感じ?
0268デフォルトの名無しさん
NGNGLindowsはOSとしてはDebianベースのLinuxで、WINEが動いてるだけ。
0269デフォルトの名無しさん
NGNGやっぱり、PC−UNIX系のOSがベースになりますねぇ?
0270FreeDOS教徒
NGNGそうとは限んないですね。
PC-UNIXの空気が合わなくてOSを作る人も
当然いるはずですから。
むしろ、新規にOSをつくる理由はだいたい、
既存のOSにない機能性を求めるところからきてるのでは?
0271デフォルトの名無しさん
NGNGCP/M-86
↓パクリ
86DOS
↓開発元シアトルコンピュータを買収して、MSが発売
MS-DOS
↓Macに対抗し、GUIベースAPIを追加
Windows
0272デフォルトの名無しさん
NGNGまぁ、最低一つのマザーボード、一つのCPU、一つのメモリは必要だろうけど。
0273デフォルトの名無しさん
NGNGそんな貴方は、ギガバイト製のマザーで自作しましょう!
USB接続のFDD,HDD,CD-ROMからOSを起動できます。
PCI接続でない限り、ホットプラグが有効です。
0274ひげぽん ◆Ngzcp/NZpA
NGNG>>263
ありがとうございます。
実は
(1)VirtualConsole* console = new SystemConsole();
(2)VirtualCosole* console = new LogConsole();
console->printf("hoge");
出力先はconsoleの中身次第みたいな作戦を目論んでいました。
SystemConsole#printfの中身は_sys_printfに任せようと思ったので
例の質問をした次第です。
>>264
ご紹介ありがとうございます。
ReacOS試してみました。すごいですねぇ。
ソースを見てみたら、結構綺麗でした。
日付を見ると98年とかあるのでリリースまでに結構かかってるのですね。
Monaはあそこまで動くまでどれくらいかかるんだろう・・・
0275ひげぽん ◆Ngzcp/NZpA
NGNG>sprintfに対するvsprintfのようなものを用意して、
>前者は後者を呼び出すだけにして、
>実装は後者で行うようにすると簡単
なるほど。ありがとうございます。
>>270
>むしろ、新規にOSをつくる理由はだいたい、
>既存のOSにない機能性を求めるところからきてるのでは?
ですね。
0276ひげぽん ◆Ngzcp/NZpA
NGNGソースの更新はないかもしれません。
やっぱり継承は微妙に使えないかも。⇒今の環境では。
0277デフォルトの名無しさん
NGNGhttp://home.interlink.or.jp/~s-nakani/doc/application.html#gcc
http://s-nakani.hp.infoseek.co.jp/eota/gcc-eota.html
0278デフォルトの名無しさん
NGNGttp://www.imasy.org/~kawai/osask/index.html
0279ひげぽん ◆Ngzcp/NZpA
NGNG>やっぱり継承は微妙に使えないかも。⇒今の環境では
SystemConsole
ttp://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/mona/mona_v1.0/src/inclue/SystemConsole.h?rev=1.2&content-type=text/vnd.viewcvs-markup
ttp://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/mona/mona_v1.0/src/SystemConsole.cpp?rev=1.2&content-type=text/vnd.viewcvs-markup
VirtualConsole
ttp://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/mona/mona_v1.0/src/include/VirtualConsole.h?rev=1.1&content-type=text/vnd.viewcvs-markup
呼び出し
monaKernel.cpp
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/mona/mona_v1.0/src/monaKernel.cpp?rev=1.42&content-type=text/vnd.viewcvs-markup
bochsででるエラー
00000648489i[CPU ] write_virtual_checks(): no write access to seg
00000648489p[CPU ] >>PANIC<< exception(): 3rd (13) exception with no resolution
継承をはずすとこのエラーはでません。
仮想関数テーブル?
0280ひげぽん ◆Ngzcp/NZpA
NGNG>00000648489i[CPU ] write_virtual_checks(): no write access to seg
>00000648489p[CPU ] >>PANIC<< exception(): 3rd (13) exception with no resolution
このエラーですがカーネルサイズによるものっぽい。
うーんどこかでメモリをこわしてるっぽい。
デバッグか(涙)
0281ひげぽん ◆Ngzcp/NZpA
NGNGcase 0: case 1: // read only
case 4: case 5: // read only, expand down
case 8: case 9: // execute only
case 10: case 11: // execute/read
case 12: case 13: // execute only, conforming
case 14: case 15: // execute/read-only, conforming
BX_INFO(("write_virtual_checks(): no write access to seg"));
exception(int_number(seg), 0, 0);
return;
このへんかな。
0282デフォルトの名無しさん
NGNG0283ひげぽん ◆Ngzcp/NZpA
NGNGそれも疑ったので、SystemConsoleを使う部分を
コメントアウトして、リンクすらやめてみました。
するとエラーは起きませんでした。
ただ、適当な_sys_printfのコードを大量に埋め込んでカーネルのサイズを
大きくすると同じエラーが出るのでメモリを壊してる予感大です。
参考Monaメモリマッピング(うそが含まれるかも)
ttp://mona.sourceforge.jp/higepon/mona_mmap.png
0284デフォルトの名無しさん
NGNGFreeDOS教徒、ひげぽんさん
趣味でやってるだけだから、JavaもC#もレベルはへたれですよw
本題ですが、私も勉強中なので間違ってる可能性大ですが...
ひげぽんさんも、仮想関数テーブルが怪しいと思われてるみたいなのですが、
私も、Monaのデータセグメント領域外に、仮想関数テーブルがあるのではないかと思います。
gccがどこに仮想関数テーブルを作るかがわかればはっきりするのですけどね...
また知っておられたら恐縮ですが...
http://www.microsoft.com/japan/msdn/vs_previous/visualc/techmat/feature/jangrayhood/
0285デフォルトの名無しさん
NGNGおそらく仮想関数テーブルが原因ではないと書いてあるよ。
0286284
NGNG281の内容は、エラーで発生した例外割り込みを処理してる部分じゃなくて、
この部分そのものがエラーの原因?
いいかげんなこと言ってしまいすみません。
もう少し勉強して物言います(泣
0287ひげぽん ◆Ngzcp/NZpA
NGNGこんばんは。アドバイスありがとうございます。
ご紹介いただいたURLは、以前一度だけ見たことがありましたが
もう一度みなおしてみます。
上のほうに書いたbochsエラーの原因が半分分かりました。
テスト用プロセス3のスタックが原因でした。
今は適当に何も考えずespを設定しているのですが
これがまずかったようです。(当たり前か)
VirtualConsole問題は相変わらず解決していません。
0288デフォルトの名無しさん
NGNG0289ひげぽん ◆Ngzcp/NZpA
NGNGプライベートでないstaticオブジェクトの初期化が問題でした。
解決の糸口を下さったniqkさん、超先生、Yas2さんありがとうございました。
m(__)m
Monaでは仮想関数も使えることが分かりました。
これからはガシガシ使います。
0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNG0292ひげぽん ◆Ngzcp/NZpA
NGNGbochsのFDCにcalibrateコマンドを送っても処理後にinterruptが発生しない。
bochsのFDCにmotorリセットコマンド送っても処理後にinterruptが発生しない。
という現象が見られます。
ただし目的のコマンドに合った動作は得られている。
これは、
「FDCによっては処理後にinterruptを発生させないものもある。」
「bochsは、FDC部のエミュレーションに未実装部分がある」
どちらなんだろう。となやんでいます。
0293デフォルトの名無しさん
NGNG実FDCもチップ毎に挙動が異なるらしい
intelのチップセットでも妙な物もある
仕様通りに動くとは期待しないほうがよさそう
0294ひげぽん ◆Ngzcp/NZpA
NGNG処理終了のにinterruptが来てなくても
MSRの状態を見て処理終了を判断、という仕様でいいのかなあ。
bochsで動かないのはまずいなあ。
0296デフォルトの名無しさん
NGNGメモリ上に読み込む事のみが目的でしたから、
割り込みはマスクしてFDCのポーリングで逃げました。
並列動作などを考えると大変でしょうね。
0297あきゅら
NGNGとっても敷居の高いスレでしたが自分も作ってみたいなぁと思いました。
アセンブラの勉強から早速やってみたいと思います。
、、、、到底追いつけるとは思えないですが、、、
0298ひげぽん ◆Ngzcp/NZpA
NGNGありがとうございます。
なるほどやはりポーリングしてだめならタイムアウトですかね。
>>297
こんばんは。
>アセンブラの勉強から早速やってみたいと思います。
>、、、、到底追いつけるとは思えないですが、、、
いえ全然すぐに追いつけると思います。
是非がんばってください。
0299デフォルトの名無しさん
NGNGひげぽんさんOS制作がんばってください
0300謎の探偵
NGNGわたしも勉強中・・・・・。でも忙しくて進んでない罠が・・。
ひげぽんさん、ファイ�dです。
0301あきゅら
NGNGfirstboot.asmのファイル中で
TEMPSEGが9f00と宣言されているのが
その少し下のほうで
ES:DI 9fe0:0000となっていて、
どこで換わったのか分りません。。
ひょっとしてすごいダメダメな質問??
0302ひげぽん ◆Ngzcp/NZpA
NGNG現在最新版のfirstboot.asmでは
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/mona/mona_v1.0/src/firstboot.asm?rev=1.8&content-type=text/vnd.viewcvs-markup
%define TEMPSEG 0x9f00
xor ax,ax
mov ds,ax
mov si,0x7c00 ; src = 0000:7C00 (DS:SI)
mov ax,TEMPSEG
mov es,ax
xor di,di ; dst = 9FE0:0000 (ES:DI)
mov cx,0x0200
となっています、コメントが間違っていますが
一応整合性は取れていると思います。
すいません回答になってますでしょうか?
0304あきゅら
NGNGなんか特別な仕組みがあるのかと。。
特にRAWRITEがどうのとかの所とか。
interfaceの7月号が売ってないですぅ。。
秋葉でも神保町でも新宿でも。。
どっかに売ってないでしょうか?
0305デフォルトの名無しさん
NGNG0308ひげぽん ◆Ngzcp/NZpA
NGNGbochs2.0.2にて現象確認(Monaの環境だけの現象かもしれません)
(1)FDCのDORに対してリセットコマンド0x00を送ると
not ready , busy状態になりいくら待ってもその状態は変わらない。
その後 not ready を無視して motor onコマンドを設定すると
ready ,not busy状態になる。
(2)recalibrateコマンドを発行後(senseInterrupt前)に割り込みが
発生しない。
ただしコマンド発行前後でready -> not ready -> readyという状態遷移はする。
0309デフォルトの名無しさん
NGNGBochsがおかしいと思うんだったら、
Lタンみたいに調べてみるべきじゃない?
そんな難しいことはできませんとか言われそうだから、
OS作るのも充分難しいと釘を刺しとく。
0310デフォルトの名無しさん
NGNGついでに言えば、ココに書くだけで情報が集まるならそれは良い事だ。
情報収集の努力はしておいて損がない。
しかし、自分で調べることが重要なのもまた事実。
0311デフォルトの名無しさん
NGNGDORに0x00(NORMAL->RESET)を書き込んだ後、
DORに0x04(RESET->NORMAL)を書くのでは?
あと、この二つの間にwaitが必要だったかもしれません。
0312ひげぽん ◆Ngzcp/NZpA
NGNG要望があったのでMonaBBSにOS勉強・資料部屋 というスレッドを作りました。
http://monaos.hp.infoseek.co.jp/cgi-bin/2ch/test/read.cgi/developmona/1045154170/l50
OS作成の資料を貼り付けたり、いろいろと活用してください。
>>309
>Bochsがおかしいと思うんだったら、
>Lタンみたいに調べてみるべきじゃない?
>そんな難しいことはできませんとか言われそうだから、
おっしゃることはもっともです。
たまにBochsのソースをgrepしたりしてますが、
今回の件は全然調べていません。
調べていない理由としては実機、VPCで動いていること
Bochsでも、特に大きな障害になっていないことがあげられます。
よっぽど障害にならない限り、とりあえずはFDCDriverの開発を
優先しようかと思います。(すこしでもMonaの開発に時間をかけたいため。)
0313ひげぽん ◆Ngzcp/NZpA
NGNG>おかしいと思う事があったら報告があるのは良いのではないかな。
>ついでに言えば、ココに書くだけで情報が集まるならそれは良い事だ。
>情報収集の努力はしておいて損がない。
フォローありがとうございます。
意図としては、単純に開発メモ(忘れないように)と
情報共有と知っている人がいたらいいなあの3つがあります。
>しかし、自分で調べることが重要なのもまた事実。
御意
>DORに0x00(NORMAL->RESET)を書き込んだ後、
>DORに0x04(RESET->NORMAL)を書くのでは?
アドバイスありがとうございます。
私の想定ではDORに0x00(NORMAL->RESET)の直後に
割り込みが発生するとおもっています。
DORに0x04(RESET->NORMALに関しては
MonaのMFDCDriverではモータスターと同時にこのコマンドを送っています。
この操作のあとの割り込みはBochs,VPC,実機で確認しています。
0314デフォルトの名無しさん
NGNGhttp://www.webtech.co.jp/undoc/
どぞ
0315デフォルトの名無しさん
NGNGん?PC98?FDCのチップ名がD765AでAT互換機のPD765と似てるけど、
互換互換性あるの?ポート番号だけ変えれば話が成り立つとか、、、
0316デフォルトの名無しさん
NGNG「D765A」じゃなくて「PD765A」の間違い。脱字スマソ
あ。「互換」も余分だ。重ねてスマソ
0317デフォルトの名無しさん
NGNG0318デフォルトの名無しさん
NGNGuPD765ですな。Aは改良版と言うことです。
コマンドなんかは同じじゃなかったかな。
0319涼宮茜 ◆AGE/HuBkMM
NGNG, ´f二コヽ / そもそもSuper I/O chipに統合されてるので
! l !ノ リ i l <. NEC uPD765(A)そのものじゃないですしね。
ノiハl.゚ ー゚ノリ \ NT4 DDKに付属するFD driver sampleは
⊂)允つ \ 完成度としては最高だと思います。
\__________________
0320デフォルトの名無しさん
NGNG0321ゆりゅ ◆6KzN17336I
NGNGこっちに1度も書いたことなかったので、ちょっと書いてみよう
yuryu で参加してます。
>>29
ごめんなさい、ずっとさぼってました。
早く gcc が mona で動けばいいね・・・
0322ひげぽん ◆Ngzcp/NZpA
NGNGありがとうございます。
>>319
NT4DDKって簡単にてにはいんるんでしょうか。
>>320
そのようですね。ありがとうございます。
>>321
ゆりゅさん
一緒にがんばりましょう。
0323ひげぽん ◆Ngzcp/NZpA
NGNGのに、FDCDriverがうまくいかない。
GPLのソースを導入するのも良いとアドバイスをうけたので
最悪その手もあるがここまでやったので・・・
DMACの設定とかを丸ごとぱくってて理解していないのが悪いのだろう。
seekはできないが、readができない。
早く先に進みたい・・・
0324デフォルトの名無しさん
NGNGNWSOSみたいにBIOSってのも手だと思う
0325LightCone ◆sSJBc30S5w
NGNG実は、FDCのドライバ書くより、はるかにBIOSを呼び出すほうが技術的に
難しいといって置きます。
32BITプロテクトモードから、BIOSを呼び出すのはかなり大変なんです。
最低でも仮想8086モードを利用するのですが、割り込みなども全部
「V8086へのリフレクト」が必要になります。
レベル遷移も上下とも自由自在に行う必要があり、かなり複雑になります。
(失礼ですが、FDCドライバが難しいと感じる人には無理だと断言しても
過言ではないと思います。)
0326デフォルトの名無しさん
NGNG資料が無いから難航しているのでは?
0327LightCone ◆sSJBc30S5w
NGNGFDC μPD765Aは、PC-8001の時代から使われていたCHIPで、資料というより
出来上がったソースが一杯あるはずなのです。
歴史が古いので、既に最適化も限界まで行われているはずで、セクタ
リード、ライトルーチンなどはそのままコピーして使えるほど簡単なん
です。BIOSのソースもあるでしょうし、それを32BITに変えることは非常に
基本的なことですよ。
0328デフォルトの名無しさん
NGNGいずれにせよVESAに手を出すとやらないといけないから脅すのもどうかと
0329デフォルトの名無しさん
NGNG> GPLのソースを導入するのも良いとアドバイスをうけたので
> 最悪その手もあるがここまでやったので・・・
別に最悪でもないと思う、ていうか現実的
FDCに限らず色々なハード全部をサポートしきれるわけない
Windowsのドライバ流用はほとんど絶望的だけど
Linuxのドライバならソースもあるしやりようはあるだろう
でも新しいOSを作るのとは技術的に趣向も違うし
誰か古狸の応援でも受ければ良い分野ではあるな
0330デフォルトの名無しさん
NGNGいまはファイルシステムいじってるのかな?
過去レスみてきま〜。
がんばれ、ひげぽん!
0331デフォルトの名無しさん
NGNGいや、小学生の頃からアセやってる様な人には簡単かもしれんが、
最近始めた人間にとっては例えソースや資料があったとしても、
デバイス相手はなかなか勝手が分からん物なのだよ。
ワシも最初は随分苦労したよ。要は慣れの問題。
今はアレでもそのうちなんとかなるさ。
このスレはそういう場所。
0332デフォルトの名無しさん
NGNG今日できなくても、明日できるかもしれない。
明日できなくても、一週間後にはできるかもしれない。
自分の趣味の時間を使ってやってるのだから、
今できるかではなく、出来るようになってやる、という気持ちのが大切。
と思われるが如何か?
0333LightCone ◆sSJBc30S5w
NGNGそれは一向に構わないんですよ。
でも、Monaのページにご覧になったかどうかは分かりませんが、
正直言って:
「今、一番将来性のあるOSかもしれません。」
は誇大だと思います。
なぜなら、もっとできる人が世の中には山ほどいるからです。
0334デフォルトの名無しさん
NGNGそれは作ってる人間が一番良く知ってるだろ。
でも、何も出来てないって事は同時にこれから何でも出来るかもしれないと
いう可能性を秘めてるわけだ。
あそこの「将来性」ってのはそういう事が言いたいんじゃないのか?
そういう意味での「将来性」ってのはWindowsやLinuxやNWSOSにはない。
Monaの専売特許だよ。あのページはそれを希望とちょこっとのアイロニー
を添えて書いてるんだよ。だから誇大でもなんでもないだろ。
アゲ足とるのはヤメレ。
0335デフォルトの名無しさん
NGNGぶっちゃけ、OS作りなんて、趣味以外の何者でもないと思う。
OSASK や Mona のように、大きな夢を掲げて楽しくみんなで開発するのも良し、
MEG-OSのように萌え路線に走るのも良しで、楽しいことが重要ではないのか?
334にかぶるが、あげ足とるのはやめて楽しめと
0336名無したん@お嬢
NGNGたまたま「萌え」を実装してみたらみんながそっちに注目してるだけだょぅ
でも、「MOE」は最近実装しましたがヽ(`ー´)ノ
0337デフォルトの名無しさん
NGNG違ったのか...スマソ
OSのことはさっぱりだが、ガムバレ メグタン
0338名無したん@お嬢
NGNG0339デフォルトの名無しさん
NGNG何様ですか?
0340デフォルトの名無しさん
NGNG('A`) ぬるぽ
0341デフォルトの名無しさん
NGNGチミも十分「何様ですか?」だがな。
0342デフォルトの名無しさん
NGNGLightCone様です。
http://pc.2ch.net/test/read.cgi/os/1039075591/
0343デフォルトの名無しさん
NGNG0344ひげぽん ◆Ngzcp/NZpA
NGNG>がんばれ、ひげぽん!
ありがとうございます。
えーと。
私のしょぼい技術のせいで、ちょっとした
騒動?になっていて申し訳ありません。m(__)m
この場であまり弱音を吐かず、技術を着実に少しずつでもつけられるよう
精進いたします。
0345デフォルトの名無しさん
NGNGよっぽど脅威に思ったと見える(藁
ある意味MONAにとっては大人の仲間入りの洗礼だね。
OSASKでもそういうことあったしね。
Lタンは、自分がプログラムに費やした時間と
アセを半年前にはじめたヒゲポソを比べて言っているのだろうか。
0346LightCone ◆sSJBc30S5w
NGNGある人が学習に費やした時間の間も、別の人にも時間があったはずです。
その間にやったことが今を作ります。もちろん、年齢も関係あるとは
ありますけれども、、、。
0347デフォルトの名無しさん
NGNGそこまで分かってるなら、話が早い。
ヒゲポソは、今までLタンがまあまあ得意な分野とは
違う分野に時間を費やしていたのでは?
Lタン冷静になれ、この分野での経験年数・基礎知識をよーく考慮してみれ。
0348LightCone ◆sSJBc30S5w
NGNG「ヒゲポソは、今までLタンがまあまあ得意な分野とは
違う分野に時間を費やしていたのでは?」
それはわかります。
しかし、その状況で、
「今、一番将来性のあるOSかもしれません」
と繋がっていくのかが分かりません。
(アセンブラも知らない、FDCの制御も出来ない、時間もない、資料も集め
られない、学習速度も個人的には早いとは思えない状況下で、、、。)
0349LightCone ◆sSJBc30S5w
NGNG自分の作っている作品の事を「将来性がある」と豪語することと、
「私は何も知りません」と言って、2chで聞きまくっている状況とが
全くか合わないように感じるのです。
(実は本心では自信過剰で、猫かぶってるんじゃないかと)
0350ひげぽん ◆Ngzcp/NZpA
NGNGただしVPCと実機のみ(Bochs)はまだです。
DMACのステータスレジスタの様子がBochsだけ違うので
ちょっと調べ中。
0351デフォルトの名無しさん
NGNGひげぽん氏の>>350の書き込みがなんだか縮こまって見えて可哀想だ。
個人的にはLightCone氏の意見に近いが、
こんなところに書いても不毛な議論(?)だろ。
0353デフォルトの名無しさん
NGNG>今、一番将来性のあるOSかもしれません
こういうキャッチコピーはふつう大げさなもんだって。
真面目に考えちゃいかんよ。
0354デフォルトの名無しさん
NGNG0355デフォルトの名無しさん
NGNGをしててそれで噛み付いてるってのも分からんでもないが、実力があるんならあるで
どっしり構えて超先生みたく暖かく見守れないものだろうかね。どうよ?>Lタン
0356デフォルトの名無しさん
NGNGよく言った!!
実はみんなそう思ってるんだろうけど...
0357デフォルトの名無しさん
NGNGどうせばれるにしろ名無しで叩かないところは流石です
0358デフォルトの名無しさん
NGNG荒 ら し は 放 置 の 方 向 で
0359hisohiso ◆g2j80BX5do
NGNGcvs rtag -f -D 2003/1/30 develop_beta_ver0_02 mona_v1.0
タグを打って、これをチェックアウトしたものと
配布パッケージを diff -r で比較しながら
cvs tag -F -r (rev) develop_beta_ver0_02 path/to/file
タグを調整すると楽ですよ
0360デフォルトの名無しさん
NGNGmeg-os.org逝ったらアダルトサイトだったんだけど…(;´Д`)
0361名無したん@お嬢
NGNG0362360
NGNG0363名無したん@お嬢
NGNG参考になるサイトとかないんですかね?
現状のスケジューラは禿しく糞らしいんで(つД`)
0364デフォルトの名無しさん
NGNGhttp://www.atmarkit.co.jp/fpc/xp_feature/display/display.html
>最新版であるVBE 3.0には、いわゆるVGA BIOSの拡張だけでなく、
>プロテクト・モードから拡張機能(VGAに対する)を呼び出す
>エントリ・ポイントが用意されており、Windows XPの標準ドライバは、
>このプロテクト・モード・インターフェイスを用いている
プロテクトモードでそのままVGA BIOSが使えるということで?
識者の解説キボン
0365デフォルトの名無しさん
NGNGそのための呼び出し手順が拡張されている様ですな。
詳細 http://www.vesa.org/vbe3.pdf
0366FreeDOS教徒
NGNGプロテクトモードで対応するVBEファンクションが
呼び出せるというだけです。
「VGA BIOSがそのまま使える」というわけではありません。
ちなみにこの機能はVBE 2.0から実装されてます。
0367デフォルトの名無しさん
NGNG多謝。PDF見ると、初期化が複雑そうなヨカン
0368デフォルトの名無しさん
NGNG0369デフォルトの名無しさん
NGNG口を出すと、自分のOSとの区別がつかなくなってくるから
それを嫌って、口を出せないのが悔しく
また、ヒゲポンタンの作業が遅々として進まないのも
もどかしく、黙って見守るのが辛くなって
口撃してみる事したのでは?
と、今更むしかえしてみる
こんな事書いてるけど、別に二人の事を馬鹿にしてる訳ではないよ
本当に
0370デフォルトの名無しさん
NGNGこのスレは面白いな
削除依頼スレに愚痴を書くLタソ萌へ
0371デフォルトの名無しさん
NGNG0372デフォルトの名無しさん
NGNGこのレスをLightConeはよく読み返してみるべきだと思う
ゴチャゴチャ口出しされたくないといいつつ、MONAや
ひげぽん自身に対して要らぬレスをしすぎ。
自分が散々叩かれたからここで憂さ晴らししてるのか。
0373名無したん@お嬢
NGNG0374デフォルトの名無しさん
NGNGそうか? 確かにここに来て、批判的な書き込みもあるが
少なくともこのスレシリーズでは、LightCone氏はヒゲポン氏に対して
「良き先輩」としての暖かいアドバイスを送っている方が多いと思うぞ。
0375LightCone ◆sSJBc30S5w
NGNGさん自身じゃなかったんですね。
ですので、#348, #349は言いすぎでした。すみません。
(でもまあ、取り立ててひげぽんさんの学習速度が早いとは思えま
せんね。すみませんが。)
0376ひげぽん ◆Ngzcp/NZpA
NGNGこんばんは。
> IRCでも指摘されたんですけど、Monaのページを作っているのは、ひげぽん
>さん自身じゃなかったんですね。
>
> ですので、#348, #349は言いすぎでした。すみません。
いえ。
LightConeさんが、そう思われた経緯も理解できますので
全然気にしてないです。
というわけで、これからもよろしくお願いします。
> (でもまあ、取り立ててひげぽんさんの学習速度が早いとは思えま
>せんね。すみませんが。)
自分でも早いと思っていないので(笑)
0377デフォルトの名無しさん
NGNG最高にくだらないもん作ってるなww
俺こういうくだらない笑いが好きだwww
0378デフォルトの名無しさん
NGNGま、冷静に考えたら、酔狂だ。
そんな漏れも、ここ読んでる時点で、糞馬鹿。(w
0379デフォルトの名無しさん
NGNG一言多くないですか?
0380デフォルトの名無しさん
NGNG俺もそう思う。
別に誰もひげぽんが早いなんて言ってないのに
いちいち言わなくてもいいんじゃない。
早くないことを指摘すると何かいいことあるのか?
0381デフォルトの名無しさん
NGNGコンピュータにだけ向かい合って来たんで、
言葉を"オブラートに包む"事が出来なくなったんだろ。
0382デフォルトの名無しさん
NGNGある種の職業病ですが、何か?
つうか、おまいら。寒いです
0383デフォルトの名無しさん
NGNG0384デフォルトの名無しさん
NGNG自分の(画期的、先進的な)アイデアは真似されたくないのに、
自分がやっていることは高度であると自慢したいから、
このスレに居着いて先輩面して箸にも棒にもかからない中途半端な助言だけしてるわけだ。
自分が中心でないと気が済まない。
このスレはタテマエはともかく、主人公はひげぽんなわけだし、
ひげぽん寄りな意見の人が多く集まるのは当然なんだが
それが理解できず、自分に賛同しない物が居るとひげぽんを叩く。
0385デフォルトの名無しさん
NGNGひげぽん寄りな意見の人が多く集まるのは当然なんだが
それが理解できず、自分に賛同しない物が居るとひげぽんを叩く。
そうそう。Lは自分がなにやってるのか分からないんだろうな。
というか、ここで、このスレと関係ない話題で盛り上がるのはイクナイから
L の 話 題 は L の ス レ で
ってことでどうでしょう?
0386デフォルトの名無しさん
NGNG次はNetBSDがきますVol.1
http://pc.2ch.net/test/read.cgi/os/1045830003/
0387NWSOS信者 ◆HX8gJR.Gyw
NGNG教祖様が叩かれているのでフォローしますと、
教祖様は単純に自己にある物差しで、人や物を観察、評価し表現するのです。
その結果、周囲が不愉快になるかどうかはまた別問題ですが、大抵の日本人は
その問題を丁寧に処理します。つまり、大多数の人が気を使うとこなのね。
だけど、教祖様はそんな情的なことには関心がないの。
そこで、謝った判断材料で「○○さんは覚えが早いとは思えません」など
国内の常識人が見れば一言多い言動となるわけです。
OSを開発している稀有な人材が集まってるのだから、つまらない揚げ足どりで
膠着させるのは止めましょう。
0388デフォルトの名無しさん
NGNGので、御教授ください。
少々長いですけどすみません。
0x07C0:0x0000 から 512バイト (ブートセクター)
0x07E0:0x0000 から 1024バイト (カーネル)
<Bochsのエラー>
Event type: PANIC
Device: [CPU ]
Message: exception(): 3rd (13) exception with no resolution
00000573597i[CPU ] protected mode
00000573597i[CPU ] CS.d_b = 16 bit
00000573597i[CPU ] SS.d_b = 16 bit
00000573597i[CPU ] | EAX=60000011 EBX=000007c0 ECX=00000002 EDX=00000000
00000573597i[CPU ] | ESP=0000fffe EBP=00000000 ESI=000000d9 EDI=000007e0
00000573597i[CPU ] | IOPL=0 NV UP DI PL NZ NA PE NC
00000573597i[CPU ] | SEG selector base limit G D
00000573597i[CPU ] | SEG sltr(index|ti|rpl) base limit G D
00000573597i[CPU ] | DS:07c0( 0000| 0| 0) 00007c00 0000ffff 0 0
00000573597i[CPU ] | ES:07c0( 0000| 0| 0) 00007c00 0000ffff 0 0
00000573597i[CPU ] | FS:0000( 0000| 0| 0) 00000000 0000ffff 0 0
00000573597i[CPU ] | GS:0000( 0000| 0| 0) 00000000 0000ffff 0 0
00000573597i[CPU ] | SS:07c0( 0000| 0| 0) 00007c00 0000ffff 0 0
00000573597i[CPU ] | CS:07c0( 0000| 0| 0) 00007c00 0000ffff 0 0
00000573597i[CPU ] | EIP=000000da (000000da)
00000573597i[CPU ] | CR0=0x60000011 CR1=0x00000000 CR2=0x00000000
00000573597i[CPU ] | CR3=0x00000000 CR4=0x00000000
00000573597i[ ] restoring default signal behavior
0389デフォルトの名無しさん
NGNGjmp 0x07C0:start ;CSコードセグメントを設定する。
start:
;セグメントの設定
mov ax, 0x07C0
mov ds, ax
mov es, ax
mov ss, ax
;ブートスタートメッセージを表示する
mov si, BootStart_Msg
call print
;FDからセカンドセクター以降を0x07E0:0x0000へ読み込み
call read
mov bx, 0x07C0
mov es, bx
mov si, KernelLoad_Msg
call print
lgdt [gdtr]
;割り込みの禁止
cli
0390デフォルトの名無しさん
NGNGmov eax, cr0
or eax, 1
mov cr0, eax
jmp flush_q1;
;--------------------------------------------------
;グローバルディスクリプタテーブル(GDT)定義
;--------------------------------------------------
gdtr:
dw gdt_end - gdt0 - 1 ; gdt limit
dd gdt0 ; start adderess
gdt0: ; segment 00
dw 0 ; segment limitL
dw 0 ; segment baseL
db 0 ; segment baseM
db 0 ; segment type
db 0 ; segment limitH
db 0 ; segment baseH
gdt08: ; segment 08(code segment)
dw 0xffff ; segment limitL
dw 0 ; segment baseL
db 0 ; segment baseM
db 0x9a ; Type Code
db 0xcf ; segment limitH
db 0 ; segment baseH
0391デフォルトの名無しさん
NGNGdw 0xffff ; segment limitL
dw 0 ; segment baseL
db 0 ; segment baseM
db 0x92 ; Type Data
db 0xcf ; segment limitH
db 0 ; segment baseH
gdt18: ; segment 18(stack segment)
dw 0 ; segment limitL
dw 0 ; segment baseL
db 0 ; segment baseM
db 0x96 ; Type Stack
db 0xc0 ; segment limitH
db 0 ; segment baseH
gdt_end: ; end of gdt
0392デフォルトの名無しさん
NGNG; 文字列を表示する
;入力レジスタ ds:si(文字列の先頭アドレス)
;使用レジスタ ah, al
;-------------------------------------------------------------------
print:
mov ah, 0x0E
mov al, [si]
cmp al, 0x00
je print_return
int 0x10 ;1文字表示(int 0x10, ah=0x0E, al=文字コード)
inc si
jmp print
print_return:
ret
0393デフォルトの名無しさん
NGNG; カーネルをFDから読み込む
;-------------------------------------------------------------------
read:
;ディスクリセットをする
mov ax, 0x0
mov dl, 0x0
int 0x13 ;ディスクリセット(int 0x13, ah=0x00, al=ドライブ番号)
jc read_err
;0x07E0:0x0000へFDから読み込む
mov ah, 0x02
mov al, 0x02
mov ch, 0x00
mov cl, 0x02 ;セクタ番号だけは0x1から始まるから
mov dh, 0x00
mov dl, 0x00
mov di, 0x07E0
mov es, di
mov bx, 0x0000
int 0x13 ;(*)
jc read_err
jmp read_return
read_err:
mov si, DiskReadErr_Msg
call print
jmp read
read_return:
ret
0394デフォルトの名無しさん
NGNGBootStart_Msg:
db 'now boot starting!!...', 0x0D, 0x0A, 0x00
DiskReadErr_Msg:
db 'disk read err', 0x0D, 0x0A, 0x00
KernelLoad_Msg:
db 'kernel load success!', 0x0D, 0x0A, 0x00
[bits 32]
flush_q1:
;ここでエラー終了する。
;セグメント間ジャンプ命令によってCSレジスタに0x0008をロードする。
db 0eah
dw set_cs_desc1 + 0x7C00
dw 0x0008
set_cs_desc1:
mov ax, 0x10 ; ds & es
mov ds, ax ; selector is
mov es, ax ; 0x10
mov ax, 0x18 ; ss selector
mov ss, ax ; is 0x18
mov esp, 1024*1024*8 ; sp is 8MB
jmp kernel
;$ 現在の行の先頭アドレスをさす。
;$$ 現在のセクションの先頭アドレスをさす。
;($-$$) セクションの先頭からのバイト数
times 510-($-$$) db 0 ;510-($-$$) bytesを0で埋める
dw 0xAA55 ;ブートシグニチャ
kernel:
0395デフォルトの名無しさん
NGNGどこかにUpした方が良かった...
御教授お願いします。
0396FreeDOS教徒
NGNG0397デフォルトの名無しさん
NGNG;ここでエラー終了する。
;セグメント間ジャンプ命令によってCSレジスタに0x0008をロードする。
db 0eah
dw set_cs_desc1 + 0x7C00
dw 0x0008
にあたるのですが、そこを逆汗してもきちんと正しいと思われる内容が
表示されていて、何故エラーなのか原因がわかりません。
0398デフォルトの名無しさん
NGNG0399デフォルトの名無しさん
NGNGIDT関連の部分は、パクリました。ゴメンなさい。
後々、独自に設定します。
一度はプロテクトモードでVRAM出力まで行けたのですが、
どういうわけか、後々のことを考えたコードに書きなおすと、
エラーで動かなくなりました。
読みにくければ、どこかにUPします。
どうか御教授ください。
0400デフォルトの名無しさん
NGNG0401ひげぽん ◆Ngzcp/NZpA
NGNG今すぐはわからなそうです。ごめんなさい。
というか忘れてる・・・
VirtualConsole作戦は時期尚早だったと後悔気味です。
newしないと、文字出力できないということは
メモリ管理オブジェクトのデバッグが非常に困難・・・
安定していると思っていた、カーネルメモリ管理クラスの挙動が怪しい。
0402デフォルトの名無しさん
NGNGIDT部分はまだ途中なので気にしないでください(コメントアウトしています)。
Make わからないので、バッチファイル使っていることも許してください...
ひげぽんさん
Part5まで、ひげぽんさんより時間かかる自信あります(笑)
私などから見れば、ものすごいスピードで進んでいるように見えますよ。
頑張ってください。
0403デフォルトの名無しさん
NGNG0404デフォルトの名無しさん
NGNGどうもありがとうございます!
そんな基本的な部分に抜け落ちがあるとは気づきませんでした。
以後、このような基本的な部分でのミスがなきよう注意します。
BochsではきっちりプロテクトモードVRAM文字出力まで行うことができたのですが、
実機ではブートセクターを読み込んだらすぐに再起動になる現象は
やはりまだ直っていないようなので、もうすこし頑張ります。
startラベル以下でのセグメントの設定をしていなかったのがまずかったのかと
思い、修正した結果がこのバグだったのです...
0405デフォルトの名無しさん
NGNG夜遅くまでお手数かけました。
実機の問題は、明日やってみることにします。
0406ひげぽん ◆Ngzcp/NZpA
NGNGタグの件ご指摘ありがとうございます。
次回のリリースの際には気をつけます。m(__)m
0407デフォルトの名無しさん
NGNGスタックポイント(sp)が設定されていないから
だと思います
mov ss,ax
の次の行に
mov sp,0xffff
を追加してみてください
0408デフォルトの名無しさん
NGNG0409デフォルトの名無しさん
NGNGに追加
"mov ss,ax"はstartラベルに近い方の事です
0411デフォルトの名無しさん
NGNG返事遅くなりました。
start:
;セグメントの設定
mov sp, 0xFFFF
;xorsp,sp
mov ax, 0x07C0
mov ds, ax
mov es, ax
mov ss, ax
と修正したところ、実機の方でもうまく動きました。
御教授ありがとうございます。
セグメント間ジャンプをしたのにSPの設定をしていないためということが原因で、
FreeDOS教徒さんが示された SP = 0x0000 に指定すると言うのは、
SP から -1 すると SP = 0xFFFF ということになり、
無駄なくセグメントを利用できるということなのでしょうか...
0412FreeDOS教徒
NGNG0x0000に指定しておけば、次に積まれるスタックの内容は
sp-2=0xFFFEに置かれます。
あと、割り込みの暗黙的な禁止はスタックセグメントの
操作後1命令だけですし、そのような順番はあまり
良くないので、mov sp,〜はmov ss,〜のすぐ後に移し
たほうがよいでしょう。
0413デフォルトの名無しさん
NGNG修正しました。重ね重ねご助言ありがとうございます。
0414デフォルトの名無しさん
NGNGプログラム技術@2ch掲示板でこんなスレ上がってますが
http://pc2.2ch.net/test/read.cgi/tech/1045907529/l50
#2ch-OS、マジで頑張ってください。
0415デフォルトの名無しさん
NGNG>突然ですがMONAはGUI実装予定ありますか?
Monaのホームページ見てから書き込みしましょう。
0416デフォルトの名無しさん
NGNGC-GUI or I(mitation)GUI なんてどうでっしゃろ。
早く言えば AA の GUI よ。
コレなら俺でも参加できる
0417デフォルトの名無しさん
NGNG勉強された方がいいかと
0418デフォルトの名無しさん
NGNG0419デフォルトの名無しさん
NGNGWindows と違うのは オープンソースだったり軽かったりセキュアだったりで
UNIX と違うのは
>>Monaはなるべく過去の負の遺産を引き継がないように
ってあたりっすか?
0420ひげぽん ◆Ngzcp/NZpA
NGNGGUIはサポート予定です。
ただし現時点では、GUIを実装する段階にはいたっておりませんので
しばらくはCUIのままだと思います。
>>416
> C-GUI or I(mitation)GUI なんてどうでっしゃろ。
面白いですねぇ。それでもまだ、現段階では時期尚早かもしれません。
>>419
>Windows と違うのは オープンソースだったり軽かったりセキュアだったりで
>UNIX と違うのは
> >>Monaはなるべく過去の負の遺産を引き継がないように
そうですね。大雑把に言って
良いものはまねする、悪いものは出来るだけ引き継がないようにするというかんじです。
0421デフォルトの名無しさん
NGNG時期がきたら、IA-32アーキテクチャ依存からの脱却キボンヌ
0422ひげぽん ◆Ngzcp/NZpA
NGNG>時期がきたら、IA-32アーキテクチャ依存からの脱却キボンヌ
これもだいぶ先ですが、できれば実現したいですね。
今日は割り込み処理をアセンブラに移行しました。
以前のC++の割り込み処理ではスタックが壊れているような印象があったので
いろいろな方のアドバイスをもとに現在の形に変えました。
0423デフォルトの名無しさん
NGNGもっとはっきり言えばヲタク的と言うか・・・いやマジで
0424デフォルトの名無しさん
NGNG何の世界を?
ヲタク的だって言いたいことはわかるが、だから世界をどう狭くしてるかわからん。
あと世界が狭くてどう悪いのかも。
別に一般的に普及させたいOSを作るスレでもあるまいし・・・
0425デフォルトの名無しさん
NGNG0426デフォルトの名無しさん
NGNGbochs でデバッグしてるときに「espが0だ変だ」って言ってpanicしたことあるけど、
大丈夫かな。
0428デフォルトの名無しさん
NGNGespではなくspなので
0でも大丈夫なのです
0430デフォルトの名無しさん
NGNG書き込み色プレーン指定、ビットマスクの指定の後、
ビットデータを書き込みたい場所のメモリ位置へ転送することで、1ドットを描画しています。
この方法では、横8ドットを一度に書き込む必要があるので、
赤白黒緑赤白黒緑 のようなランダムなドット絵を描画するには、
同じ場所をビットマスクを変えて8回ビットデータを転送しなければいけません。
色々、アルゴリズム的な最適化をしてもかなり遅いです。
Celeron1.7GのCPUで、Bochsだと全画面書き換えに1.5秒ぐらい、
実機でも書き換えがかんたんに見えるぐらい遅いです。
PC-98では、
Bプレーン 0xA8000〜 Rプレーン 0xB0000〜 Gプレーン 0xB8000〜 Iプレーン 0xE0000〜
となってて、メモリアクセスだけで高速に描画できると思います。
DOS/V の VGA に高速で書き込むには、640*480(2色) or 320*200(256色) モードに
設定するしかないのでしょうか?
0431デフォルトの名無しさん
NGNG>>430
OS側で色別に仮想VRAMを持って、それを一気に転送とか。
(実際、VGA BIOSってかなり遅いし。
ゲームとかの用途だとVGAサイズはリアルモードでは厳しいね…
プロテクトモードなら、他にVESA BIOSにLiner Frame Bufferを作ってもらうって手がある。
>>365あたり。自分は使ったこと無いんで詳細は頑張って読んで…
ただし、こっちは対応してないグラフィックカードが有るらしい。(具体的にはi815。
Master.Libのソースでも見てみるかな…
0432430
NGNG一応、作成しているプログラムはプロテクトモードOSのつもりw
なのでBISOは使えないです。I/Oポートに直接アクセスしています。
概要は、一度ビットマップ形式のバッファを作って、一気に書き込みといった雰囲気です。
素直に描画するのなら、1ドットの描画に、
書き込み色プレーン指定、ビットマスクの指定を、グラフィックコントローラーを操作して行い、
該当のメモリにビットデータを転送しています。工夫すれば、ビットマスクの指定はほとんど
しなくて良くなります。全画面更新のために、これを640*480回繰り返してるのですが、
ホントに遅いです。
VESA BIOSにLiner Frame Bufferに作ってもらうしかないのですか...
ちょっと試したことはあるのですが、内容があまり理解できてないというのもあり、
モード指定の時点でもう失敗しているので、避けたいのですけどね。
0433ひげぽん ◆Ngzcp/NZpA
NGNGリザルトステータスを見る限りでは
ST0= 0x40 コマンド異常終了
ST1= 0x10 overrun FDCからの転送要求にホストが応答しない
ST2= 0x00
C= 0x00
H= 0x00
R= 0x01
N= 0x00
DMACの設定かなと思って調査中。
スタック破壊は原因ではなかった模様。
0434デフォルトの名無しさん
NGNG俺もちょっとあやしいからどうだかわからんが…
0435デフォルトの名無しさん
NGNG0436FreeDOS教徒
NGNG640x480x256って、どのビデオモード使ってるんですか?
ふつー俺なんかだと拡張ビデオモード101hなんかを思いつくわけですが。。
それはともかく、DspVVみたいなディスプレイドライバのソースとか、
あとEOTAのソースなんかも参考になるんでないかなーとか思いますた。
現在全プレーンを一度に更新できる方法探し中。
0437430
NGNGEOTA では、構造体に描画コマンドとして蓄えてる? ようです。
Liner Frame Bufferを使うか、描画コマンドを使って、書き込みモードをかえながら描画するのか、
白黒にするのか...
あまり複雑なことしても、他の部分を作る時間が無くなりますし。
0438FreeDOS教徒
NGNGピクセル描画をいまのところサポートする必要性はないんだし、
文字書き込みがきちんとできれば、他のところに挑戦していいんでない?
いずれスクロールで頭を悩ますことになるんだろうけど(汗
0439430
NGNGもう少しだけ、色々試してみて、できそうもなければ、他の部分を作ることにします。
まだ、mallocもなく、バッファもスタックに確保してるだけなので...
0440デフォルトの名無しさん
NGNGこの辺から作っていくと面白いと思うよ。
メグタソは萌えで有名なんだけど、
AAできるフォントが使えたりもしたしね。(モナーフォント?)
ひげぽんは足腰のしっかりした本格的なOSを作ろうとして
肩肘張りすぎてる気がするな〜。
何だかんだいって下馬評通りにバンバン進んでないし。
短期的には430様のアプローチの方が楽しそう。
>>424
打倒M$だっつってるじゃん。
0441デフォルトの名無しさん
NGNG妥当M$は、たんにいいOS作るだけじゃむりなんだよなぁ……
とか逝ってみる
0442デフォルトの名無しさん
NGNGVRAMへの書き込みが特定プレーンにそのまま書き込まれるように設定してやれば、98と同じように見えるので
グラフィックコントローラの設定 4(プレーン)回
640x480/8(byte)のコピー 4(プレーン)回
ですむんじゃねーか
ライン毎とか8ドットごとでもいいけど
仮にビットマップをpacked pixelでもってるなら、packed->planeへの変換はCPUでやる。
0443430
NGNGプレーン0 を指定、640*480/8 byte を 0xA0000〜 に書き込み、
そして、プレーン0を指定、640*480/8 byte を 0xA0000〜 に書き込み、
...
という方法は実際、やってみたのですが、最後に書いたプレーンの色しか表示されていないので、
できないものかと思っていました。もう少し調べて設定ミスがないか探してみます。
Liner Frame Buffer もわかりやすいサンプルが見つかったので、こちらの方法も視野に入れて
どうするか考えます。
サンプルソース http://www.gameprogrammer.com/1-vbe.html
0444430
NGNG書いたら、見直しているのですが(汗)
0445FreeDOS教徒
NGNGもう一度きちんとグラフィックコントローラレジスタ周り見直してぽ。。
ある意味すげーよ、これで動いてるのって(汗
手もとの資料をちとコピペしとくんで、これで試してみそ。
----
Port 03C4 - シーケンサアドレスレジスタ
以下に続くマップマスクレジスタの選択のために必要です。
Port 03C5 index 02 - マップマスクレジスタ
マスクするマップを選択します。0でマスク、1で解除です。
High <- 0:0:0:0:I:R:G:B -> Low (* I=輝度)
Port 03CE - グラフィックアドレスレジスタ
以下に続くビットマスクレジスタの選択のために必要です。
Port 03CF index 08 - ビットマスクレジスタ
マスクするビットを選択します。0でマスク、1で解除です。
ビットマスクを有効にするには、あらかじめ読み取り動作を行う必要があります。
0446430
NGNGご指摘ありがとうございます。
port 0x03CF index0x01 色設定
port 0x03CF index0x08 ビットマスク
と思っていたのですが、
port 0x03C5 index0x02 色設定
port 0x03CF index0x08 ビットマスク
だったのですか...
せっかくのアドバイスなのですが、Liner Frame Buffer を使った方法に成功したので、
こちらで進めていく予定です。
http://www.gameprogrammer.com/1-vbe.html はよく読むと、
Banked/Windowed Frame Buffer を使った方法のようです。でもかなり読みやすいので、
大部分はこちらを参考にできます。
http://www.geocities.com/SiliconValley/Horizon/6933/vbe2.txt
こちらに、Liner Frame Buffer のサンプルがあります。
0447FreeDOS教徒
NGNG> http://www.gameprogrammer.com/1-vbe.html はよく読むと、
> Banked/Windowed Frame Buffer を使った方法のようです。
最初タイトル見たとき「(゚Д゚)ハァ?VESA VBE 1.2でリニアフレームバッファ
なんてサポートしてたか?」とか思いましたが、その通りでしたか。。
資料のご提示ありがとうございます。
0448デフォルトの名無しさん
NGNGttp://www.geocities.co.jp/SiliconValley-PaloAlto/6802/os_05.zip
OSと呼ばれる機能は一つもありません。
0450デフォルトの名無しさん
NGNGMEG-OSが評判になったのも萌えられるから。
しょせん、下馬評なんてそんなもん。
OS/430(仮称)がシングルタスクでGUIだけ突っ走っても、
Windows 3.1や旧Mac OS並みにはなれるはず。。。
が〜んば!
0451デフォルトの名無しさん
NGNGMonaのブートローダー周りを参考というより、流用の方が近いですが、
こんな感じで、これからもお手本として参考にさせてもらうことになると思います。
それと、グラフィックにこだわってみたいなあと思っていたのと、
参考にしてばっかりのMonaに少しでも、作っていない部分のサンプルを示して
お返しをという気持ちもありLiner Frame Bufferの使用のサンプルになればと思い
作ってみました。
流用に値しないものかもしれないですが、ライセンスはMonaと同じにするので、
よければどうぞ...>Monaプロジェクトの皆様
>>450
ありがとうございます。どこまで出来るかわかりませんがとりあえず頑張ります。
0453デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1045907529/l50
だってさ。
0454デフォルトの名無しさん
NGNGところで最近、朝鮮生、じゃなかった超先生を見ないな。
どこいった?
彼ならWindowがやってるみたいに、プロテクトモードでありながら
VGA-BIOSを叩くテクをご存知かもしれぬ。
0455デフォルトの名無しさん
NGNGWindow?
NWSOS もやってるね。
0456デフォルトの名無しさん
NGNGテクっていうか、仮想86モード使えばいいだけ。
だけっていっても結構大変だけど。
0457LightCone ◆sSJBc30S5w
NGNG>テクっていうか、仮想86モード使えばいいだけ。
馬鹿な事をおっしゃらないで下さいませんか?
そんあ程度で BIOS を呼び出せたら苦労しません。
0458LightCone ◆sSJBc30S5w
NGNG打てなかった(泣)。
0459超先生@マブラヴ100円 ◆leaf/RYZgY
NGNGVGA-BIOS程度ならV86モードだけでOKでは?
特に割り込みも必要ないし。
シングルタスクに限れば300行程度でV86 monitorを作れる。
0460LightCone ◆sSJBc30S5w
NGNG他のタスクの動作を、しばらく完全に止めてしまうような動作でよければ
そんなに難しくは無いかもしれませんけれど、はっきり言って、そういうも
のと NWSOSを一緒にされたくは無いですね。
0461LightCone ◆sSJBc30S5w
NGNG限定する場合と、BIOS用のV8086タスク以外にも、V8086モードタスクを
動かせるようにするのとでは全く話が違ってくるでしょう。
前者のようなものだと、アドレスが1MB以下の領域を、全タスク共通
にマッピングし、その領域では、線形アドレス=物理アドレスという
恒等写像にしてしまえば、BIOS呼び出し時にタスク切り替えして戻って
くる必要が全くなく、同じタスク空間で呼び出せるので簡単です。
しかし、後者のようなものだと、BIOSタスクと、一般USE16タスクの干渉を
避けるためには、BIOSタスク用には物理アドレスへの恒等写像を用い、
一般USE16タスクには、全く別の通常RAMを用いなければ成らないでしょう。
(ちなみにページ切り替えを全く用いないセグメントモデルでは、
複数のV8086タスクを干渉させずに存在させるのは基本的に不可能に
なると思います。)
そうなってくると、BIOSを呼び出すときに、BIOSタスクへスイッチして
から戻ってくるような処理が必要になります。
(タスクのラウンドを利用して出来ないわけでもないかもしれませんが、
それなりの設計力を必要とし、決して簡単とはいえないでしょう。)
(簡単な方式を用いた場合、その後の成長性が確実に下がるでしょう。)
0462LightCone ◆sSJBc30S5w
NGNG何度もしつこいようで申し訳ないですが、
>VGA-BIOS程度ならV86モードだけでOKでは?
>特に割り込みも必要ないし。
これは分かりませんよ。
割り込みのリフレクトはやった方がいいと思います。
内部で VSYNC を待つために割り込みを使っていたり、タイミング取りに
タイマーを使っているかもしれませんし。
少なくとも、仮にブートもままならないような人ならば、これを簡単と
言える資格はないと思います。
0463名無したん@マブラヴ200円
NGNG0464デフォルトの名無しさん
NGNGそんなに難しくは無いかもしれません「けれど、はっきり言って、そういうも
のと NWSOSを一緒にされたくは無いですね。」
○他のタスクの動作を、しばらく完全に止めてしまうような動作でよければ
そんなに難しくは無いと思います。
×V8086モードのタスクを、「未来永劫」、システム全体で一つのみに
限定する場合と、BIOS用のV8086タスク以外にも、V8086モードタスクを
動かせるようにするのとでは全く話が違ってくるでしょう。
○V8086モードのタスクを、「将来的にも」システム全体で一つのみに
限定する場合と、BIOS用のV8086タスク以外にも、V8086モードタスクを
動かせるようにするのとでは全く話が違ってくるでしょう。
×少なくとも、仮にブートもままならないような人ならば、これを簡単と
言える資格はないと思います。
○「必要なし]
以上、添削しました。
0465デフォルトの名無しさん
NGNGワラタ
スゲ-被害妄想
456のレス先見て見れ。
だれもNWSOSの話題なんてしてねーよ
自意識過剰もたいがいにしとけ
0466デフォルトの名無しさん
NGNG勉強になるなぁ
0467デフォルトの名無しさん
NGNG0468デフォルトの名無しさん
NGNG下らない*あげあしとり*に突っ込まれる文章は
謹んでほしいですね。
# 知らん人間が見たらどっちが厨か分からんだろう。
0469デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/os/1046271176/l50
0470デフォルトの名無しさん
NGNGそういう甘やかしは本人の為にもならんぞ。
ってか、「あげあしとり」っていうか、LightConeがケンカふっかけてるように
しか見えん。
まぁ、素でいやみったらしい口調の奴は現実に見かけるけどな。
現実なら胸の内でムカつかれておしまいってのが、2chだからストレートに
叩かれてるだけ。
0471デフォルトの名無しさん
NGNG0472デフォルトの名無しさん
NGNG私が欝になりそうであんなこと書きました。釣りに見えたらスマン。
0473デフォルトの名無しさん
NGNG> 打てなかった(泣)。
自意識過剰、駄目の二乗
(知ってる人いるかな...)
0474デフォルトの名無しさん
NGNG三石琴乃
0475ひげぽん ◆Ngzcp/NZpA
NGNG読み込み完了の割り込みを待たずにDMACをストップしていたのが
原因でした。
0476455
NGNG申し訳ないので、少し言い訳をしていくことにする。
456 は自分ではないけれど、下に続いた組合せが悪かったかな。
NWSOS の BIOS 呼び出し方法が凄いのは押さえている。
そういう人も居るはずだし、そうでない人は放っておけば良いのでは?
それで、454 に
「誰も知らないようなことではないよ?」
て事が言いたかったんだ。
基礎となる仮想8086モードは書籍にも載っている。
そこから他の用件も満たしながら実装することと
書籍を読んで分かった気になることは全く別問題だけれど。
0477デフォルトの名無しさん
NGNG0478ひげぽん ◆Ngzcp/NZpA
NGNG実機ではうまくいくのですがbochsで
FD READ完了の割り込みがこない。。。
うーん。bochs起動時のパラメータでも調べようかな。
0479デフォルトの名無しさん
NGNG凄いと主張されてることは押さえている、だろ。
455が関係者で中身を実際に覗いたのなら別だがな
0480デフォルトの名無しさん
NGNGかなり優秀な実装と考えていいのでは?
私のマシン全てでVESA関係の問題で起動できないので確認はできないが
0481456
NGNG名無しにまで牙をむき出すとは。。。
名無しの書き込みだから名誉も何もないのである意味どうでもいいんだけど、
一応弁解しておこうかな(w
> 少なくとも、仮にブートもままならないような人ならば、これを簡単と
> 言える資格はないと思います。
プ、ブートくらい開始アドレス0x7c00で512バイト以下のプログラム作ってそいつで
カーネルなり、セカンドステージローダなりよびだす***だけ***じゃん(w
Lって威張ってる割にはこれくらいのことで相当苦労したようだな。
その他の細かいノウハウは試行錯誤するか、よく考えるか、ひげぽんのように
礼儀正しく相談すればいくらでも手に入る。
一応、上で書いた情報だけで1日でプロテクトモードのローダに制御を移せましたが何か?
VGA-BIOSの件もそうだとおもうがな。VGA-BIOSとFDD制御機能が干渉することは
知らんかったので、その罠にははまるかもしれんけど、まじめに取り組めばクリアできる自信はある。
Lは他人の文献とか余り読まないようだけど、自分以外人間のの能力を相当過小評価してるらしいな。
ひげぽんの謙虚さを見習って欲しいよ、全く。。。
0482456
NGNGついでに、「自分以外のの」も間違い。
強気な書き込みしてみたのにミスが二箇所も(´・ω・`)ショボーン
0483デフォルトの名無しさん
NGNGどっから見ても、揚げ足を取り合ってるだけだじゃん
簡単だと思ってる香具師は簡単だと思ってれば良いし
難しいと思ってる香具師は難しいと思ってれば良いじゃねぇの?
0484LightCone ◆sSJBc30S5w
NGNG自慢になるので言わなかっただけで、私の場合、ブートなんて、半日も
かかりませんでした。
今のMonaの様な状態になるのも数日でした。
だからこそ、こんなに時間がかかっている人たちに、BIOSを呼び出せるか
どうか甚だ疑問なのです。BIOSを呼び出すのはそれなりに苦労しました。
是非やってみてください。
0485LightCone ◆sSJBc30S5w
NGNG>その他の細かいノウハウは試行錯誤するか、よく考えるか、ひげぽんのように
>礼儀正しく相談すればいくらでも手に入る。
うそを言わないで下さい。
実際に、2chで私が本当に必要とする情報を聞いても誰も答えてくれません
でした。というよりも、事実上、答えられる人が存在しなかったという
事だと思ってます。
経験上、この辺で答えが返ってくるのは、「慣れ」の問題で誰でも習得できる
ような知識ばかりです。例えば、「Linuxでこういう事したい時どうするの?」
といった類の質問には、大勢の人が質問者を誹謗中傷・罵倒しながらワンサカ
答えますね。確かに(笑)。
0486LightCone ◆sSJBc30S5w
NGNG>礼儀正しく相談すればいくらでも手に入る。
そもそも、全く逆さまですね。
「細かいノウハウ」というのは、「知識」ではないので優秀な人にしか
答えられないし、考える事も出来ません。
貴方がおっしゃっているような、「0x7c00で512バイト」なんて情報の
方が、2chで入手しやすい情報です。
これは、「知識型」の情報なので、知っている人にはすぐに答えられる
からです。
例えば、ハード会社に勤めてる人なら、営業マンでも資料さえ読めば
答えられるでしょう。しかし、資料がなければ全く分からない事です。
2chが有用なのはこういう部分ですね。
0487LightCone ◆sSJBc30S5w
NGNGMonaのロジック部分が本質的に成り始めてから、higeponさんがつまづいた時、
突破口となるヒントや修正箇所を提示できたのは、ほとんどの場合、
超先生と、私のみでした。
ここから得られる教訓は、私が質問しても答えられるのは、多くの場合、
超先生しかいないであろう、ということですね。
つまり、私にとっては、2chで質問しても、ロジカルな部分やアルゴリズム的な
部分に関しては、ほとんどの場合、意味がないと予想されてしまうのです。
さっきも言いましたけど、「UNIXの特定のコマンドの使い方」などの
情報は、2chでうまく手に入ると思います。
0488デフォルトの名無しさん
NGNG簡単だの難しいだのとか子供みたいな争いはやめなさいってば。。
みんなでマターリしようぜ。
0489デフォルトの名無しさん
NGNGマタ〜リ
0490デフォルトの名無しさん
NGNGたとえ無能に見えたとしても、自分の役に立たなくても
マイナーな分野で自分と同じ方面に興味を持っている人がそれなりにいる
ということが窺えるだけでも価値はあると思うが
0491デフォルトの名無しさん
NGNG0492デフォルトの名無しさん
NGNG0493LightCone ◆sSJBc30S5w
NGNGそう思われるんでしたら、今後一切、NWSOSに関する事も、私とすぐに分かる
ような表記(Lタン、LightCone)も、ここに書かないで下さい。
「NWSOSで出来ているから簡単にできるはず」なんて論調で語られる事が
多いのが非常にうっとうしいのです。
0494デフォルトの名無しさん
NGNG特に「NWSOSで出来ているから簡単にできるはず」なんて論調で語られている様子はないようですが?
本当に被害妄想じみてきていますよ
0495デフォルトの名無しさん
NGNGおいおい…ただでさえ春厨が好みそうな事言ってるのにまだ言うかね
「うっとうしい」事が分ったら進んでやると思うんだけどなー
邪魔する為に。
0496456
NGNG昨夜はちょっと酔っていた事もあり、無神経ですいませんでした。
0497デフォルトの名無しさん
NGNG0498デフォルトの名無しさん
NGNG話のわかる人で良かったyo!
499からは、
「独自にOSを作っているまたは、作ろうとしている人たちのためのスレッド」
0499デフォルトの名無しさん
NGNG; 、 、; , ; 、 、
'⌒`、lili,'⌒`
(`γ') |lili|
冫/" ,..-ー―,lili,―-、
.. / ;;| /;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ヽ
| ;;;;ヽ, /;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;l / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ;;;;;;`ー';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(,,゚Д゚)l < そう、目クジラを立てるな
`、_______,,,....つ--つ \___________
`ー‐---、,,,____ ,.,., ,.,,,ノ
"'''''''''''し'''J
0500デフォルトの名無しさん
NGNG「独自にOSを作っている人たちを応援するスレッド」もな。
500ゲトー
0501デフォルトの名無しさん
NGNG>>454-456 あたりを見て勘違いしてるんじゃ
0502デフォルトの名無しさん
NGNG0503デフォルトの名無しさん
NGNG0504デフォルトの名無しさん
NGNG0506デフォルトの名無しさん
NGNG他人に評価させたくないなら自慢すんなよ。
誤解されるといけないが別にオプソにしろっつってんじゃないよ。
NDAって手もある。
0507わたもち
NGNG呼びにくいと思うので、これから、わたもちと名乗るので、よろしくです。
OS的な機能の実現に割り込みがほとんどは関係してくると思うので、
慎重に、割り込みを作りたいと考えています。
スタックの使用は下のように使用される。
| |
|割り込み前の使用スタック↑ |
|---------------------------|
|EFLAG(4bytes) |
|---------------------------|
|CS(4bytes:下位2bytes使用) |
|---------------------------|
|EIP(4bytes) |
|---------------------------|
|ErrorCode(4byte) (*) |
|---------------------------|
|割り込み後の使用スタック↓ |
| |
(*)エラーコードをpushする例外としない例外がある。
あと EAX,EBX,ECX,EDX,ESI,EDI,EBP,DS,ES,SS,FS,GS
(EFLAG、CS、EIP以外の一般レジスタです)は、
割り込み前の使用状態のままと考えていいでしょうか?
御教授ください。
0508わたもち
NGNGタスク切り替えを行う場合、割り込みハンドラをCPL=3のコードセグメントに配置させて、
そこで、タスクのスケジューリングを行い、次に実行するタスクへのCS EIP に、
スタック上の CS EIP を書き換えて、iret でマルチタスク実現というのを考えたのですが、
どうでしょう?
特権命令は、タスクゲートを使って、CPL=0にして特権命令を実行後、
元に戻るということにしようかなと思っています。
問題点等ご指摘ください。
0509デフォルトの名無しさん
NGNG当然、CS:EIP意外のレジスタの内容も切り替えなきゃいけないけど、
それらをコピーするよりはSS:ESP切り替えた方が簡単なので、漏れはそうしてまつ。
ひげぽんはどうやってたっけ?
0510デフォルトの名無しさん
NGNG0512わたもち
NGNGMonaのソース読んでなかったのに今気づいた...
sourceforge.jp が落ちてるみたいなので、手持ちのものを見てみると、
スタックから取り出して、現在のレジスタを保存、
次のプロセスの以前保存したレジスタをレジスタにロード
私が考えていたものとほとんど同じだ。
またいらない質問してしまったようです。すみません。
SS:ESP切り替えというとどういうものなんでしょう?
良ければ御教授ください。
0513ひげぽん ◆Ngzcp/NZpA
NGNGesp切り替え
popa
ということですかね。
0514わたもち
NGNGコピーするよりSS:ESP切り替えとあったので、??と思っていました。
どうもありがとうございます。
0517デフォルトの名無しさん
NGNGあそこの板で上がっているスレは中傷通りの状況だけど、
アプリ開発者も結構いて、ドキュメントされていない質問には
丁寧な回答があったりするんだよね。
カーネルコアな人(らしい人)はあまり来ていないみたいだけど、
Linux板の話題の大半はLinuxカーネル以外の話だから仕方が無いです。
カーネルに興味がある人はYLUGのほうが盛んかな?
# スレ違いかつ板違いスマソ。
0518デフォルトの名無しさん
NGNG召喚の呪文唱えないでくれよ
0519ひげぽん ◆Ngzcp/NZpA
NGNGきちんと書き直して、カーネルスレッドを実現しようと
計画中です。
それにしてもわたもちさんは、進むのが早い(´ヘ`;)
0520ひげぽん ◆Ngzcp/NZpA
NGNGメモリ管理をきちんと実装しないといけませんね。
ページングはなんとしても実現したいです。
ちょっとボリュームが大きいですが何とかやりたい。
0521わたもち
NGNG実際に作り始めるのに大分、時間かかりましたし。
まだ、割り込み部分に少し手をつけたくらいです。
ページングといえば、私はメモリ保護でも使おうと思っています。
PTE(ページテーブルエントリ)のU/S、R/Wビットを利用したものになる予定。
いつになるやら...
0522デフォルトの名無しさん
NGNGCVSではないソース&バイナリってどこかにおいてあるんでしょうか?
0523ひげぽん ◆Ngzcp/NZpA
NGNG最新リリース(といっても古いですが)
http://sourceforge.jp/projects/mona/files/
にダウンロード可能なソースとカーネルイメージがおいてあります。
ソースに限れば
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/mona/mona_v1.0/
でdownload tarballでダウンロードできます。
0524ひげぽん ◆Ngzcp/NZpA
NGNGthread#yieldは、ソフトウェア割り込みで
カレントスレッドのコンテキストをセーブ後
runキューからはずして、どこか別のキュー(sleep?)
でスケジューラー起動。
スケジューラーはそうすると
yieldまたは、タイマ割り込みで起動でいけそう。
ソフトウェア割り込みでやるなら
呼び出し規約を定めて(レジスタに設定する値等)を
システムコールのようにしたらいいのかな。
OSASKスレッドでシステムコールについて熱い議論があったけど
そんなレベルには到底いけそうにないなあ。(しばらくの間)
0525デフォルトの名無しさん
NGNGrunキューの末尾に移すようにすればいいんじゃない?
システムコールの実装方法の方は、余り気にすると煮詰まってしまうから
気にしすぎるのもまずいけど、一応OSASKすれには目を通しておくといいかもね。
0526デフォルトの名無しさん
NGNGOSASKスレの話は、システムコールの実装ということに関しては、
あんまり参考にならない様な気がする。
x86ならINT nで実装しないとCPL上げられないし。
0527LightCone ◆sSJBc30S5w
NGNG特権レベルを上げるには、intとコールゲートの二種類あるんですが、
Windows/Linux/NWSOS のどれもがintらしいです。
コールゲートなら、スタック渡しの際に外側スタックから内側スタックへの
0〜31 DWORDの自動コピーできるメリットがあるのに、intが使われる理由は
なんなのでしょうか。
intは、命令長が短いのですが、それだけが利点でしょうか?
私なりの推測では、intの最大のメリットは、割り込み禁止可能なことです
(IDTが「割り込みゲート」になっているベクタ番号には、intは割り込み
禁止でハンドラに突入してくれます。)。
CALL GATEだと、外側レベルから内側レベルに変わった直後にどうやっても
割り込みENABLE期間が生じてしまいます。これは非常に大きな問題です。
OSを作っていくと、「全ての」レベル遷移時に割り込み禁止の状態で何かを
やっておきたいことはよくありますので。
0528ひげぽん ◆Ngzcp/NZpA
NGNGこんにちは
>runキューの末尾に移すようにすればいいんじゃない?
そうですね。waitや、sleepはとりあえずなしで
実装してみるのが簡単そうですね。
>OSASKスレの話は、システムコールの実装ということに関しては、
>あんまり参考にならない様な気がする。
ちょっと私には難しすぎました(笑)
>>527 LightConeさん
>CALL GATEだと、外側レベルから内側レベルに変わった直後にどうやっても
>割り込みENABLE期間が生じてしまいます。これは非常に大きな問題です。
なるほどこれは知りませんでした。
確かに割り込まれた痛い処理というのは存在しますね。
勉強になります。
0529ひげぽん ◆Ngzcp/NZpA
NGNG画面への出力もシステムコールとしたほうがよさげですね。
ロック機構も考えないと。
0530LightCone ◆sSJBc30S5w
NGNGしたのでご覧下さい。まだ僅かですが、ご参考になれば幸いです。
ttp://homepage2.nifty.com/nowsmart/Japanese/HowToCreateOS.htm
ttp://homepage2.nifty.com/nowsmart/Japanese/NWSOS_Stack.htm
ttp://homepage2.nifty.com/nowsmart/Japanese/Address.htm
0531ひげぽん ◆Ngzcp/NZpA
NGNG>個人的に難しく感じて、その後自分なりに解決したようなことを書いておきま
>したのでご覧下さい。まだ僅かですが、ご参考になれば幸いです。
すばらしいです。
私が将来つまづきそうなところが満載でした。
ブックマークさせていただきます。m(__)m
0532わたもち
NGNGまだ、割り込みハンドラの実装で、エラー続出レベルの私には、
遠い話ですが、きっと役に立つと思います。
どうも、有難うございます。
C言語はやっぱり向いていないなぁと感じる今日この頃w
Javaが懐かしい...(泣)
0533デフォルトの名無しさん
NGNGそうですね。waitや、sleepはとりあえずなしで
実装してみるのが簡単そうですね。
一般的には
run: 現在CPUを使用中
wait: 他のプロセスがCPUを使ってるので自分の番まで待機中
sleep: ファイル入出力待ち・プロセス間通信待ちなどの外部イベント待ち
ってことなので、runとwaitは必須。
sleepは他のプロセスやFDD等の外部デバイスとの通信をしなきゃ不必要かも。
0534わたもち
NGNGWaba(Javaサブセットの組み込み用インタプリンタ)
ttp://www.wabasoft.com/
ttp://www.cc.yamaguchi-u.ac.jp/~shingo/WabaWorld/index.html
これを、そのうち載せたいなと考えています。
スピードは気にしないでください...
0535デフォルトの名無しさん
NGNG割り込み禁止にする必要があるかどうかはOSの設計次第です。
FreeBSDのシステムコールや例外はトラップゲートだし、
NoNameのシステムコールや例外もトラップゲートです。
反対にEseBTRONというOSではシステムコールや例外は割り込みゲートです。
この違いは割り込み処理をプロセスのコンテキストの延長と見るか、
独立したコンテキストとみるかの違いでしょう。
NWSOSの場合はどうして割り込みゲートを使っているのでしょうか?
0536デフォルトの名無しさん
NGNG厳しいお言葉もライオンが子供を谷に突き落とすようなものかも...
0537LightCone ◆sSJBc30S5w
NGNG>NWSOSの場合はどうして割り込みゲートを使っているのでしょうか?
IA32は、もともとの設計では、内側レベルを呼び出して、外側レベルへ戻って
くることしかサポートされていません。ひとまず、この呼び出し方向を
「順方向」と呼ぶことにします。
NWSOSでは、「逆方向」の呼び出しもサポートしています。
IA32では、TSSにある各レベルのスタックポインタが遷移時に自動的に変更
される事は有りませんので、逆方向に呼び出してまだ帰ってこない間に、
別のシステムコールを呼び出すと、レベル0のスタックが上書きされてしま
います。
これを避けるためには、レベル遷移時する時は必ずTSSにあるスタックポインタ
を調整する必要があります。
その間、どうしても割り込みを禁止する必要があると思います。
「割り込み禁止」というと、リアルタイム制を損なう感じがするかもしれま
せんが、レベル遷移時にはもともと僅かではありますが、CPU内部で割り込み
禁止期間がありますので、その延長と考えれば、その期間が少し長くなった
と考えることが出来ます。
0538デフォルトの名無しさん
NGNG面白そうですね。非常にためになるお話でした。
よろしければ「逆方向」の呼び出しがOSの中でどういう風に
使われているかもついでに教えていただけませんでしょうか。
NWSOSのページの情報からデバドラはDPL1で動くみたいなので、
カーネル(DPL0)からデバドラを呼び出す時に使ったりするので
はないかと推測しているのですが。
0539デフォルトの名無しさん
NGNGplane pixel方式のノウハウなんてのはDOS時代の古代の技術だから
今から覚えるよりとっととpacked pixelで進めるのは良い判断と思われ
しかしANDしてORみたいなplane pixelの古代の技術が
VESA & packed pixelモードで失われたかと思ったら
windows GDIで復活し、
DirectDraw & ColorKEYで再び失われたと思ったら
DirectDrawより自力描画のほうが速いよ!となって条件分岐より数ピクセルまとめてANDしてORが復活し
DirectX8(7だっけか?)で2Dでもポリゴン&アルファチャンネルだ!となって再び失われつつあるが
いつ復活するかわかったものでないので基本として押さえとくのはいいかも
0540わたもち
NGNG描画ライブラリの作成が簡単になるようにということで、
Packed Pixel形式が使える方を選択しましたが、こちらで良かったようで
一安心です。ありがとうございます。
Packed Pixel、Plane Pixel形式、世代交代が激しいようですね...
この方面もさっぱりわからないので、参考になります。
0541デフォルトの名無しさん
NGNGもれは例外と割り込みは別の概念だと思う
0542名無したん@お嬢
NGNG0543わたもち
NGNGプレーン方式を使ってた時は、私なんかちょっとした描画でも混乱してました。
タイマー、キーボード割り込み実装したので、簡易マルチタスク機能(というか、
ほとんどスレッド程度なんだけど...)をつけたらアップする予定です。
0544名無したん@お嬢
NGNG描画ループはパックトの方が複雑かもしれん・・・
Packed PixelはBitBltで真価を発揮しそうやね
0545わたもち
NGNG今まで、Packed形式しか使ったことが無かったもので...
>Packed PixelはBitBltで真価を発揮しそうやね
ですね。
レスが大阪弁ですけど、大阪人ですか?w
0546名無したん@お嬢
NGNG0547わたもち
NGNG0548デフォルトの名無しさん
NGNG今では256MB〜あるメモリ上にファイルシステムをエミュレートできないのかな?
でも、作成したファイルなどは再起動したら消失してしまうだろうが。。。
検討はずれのこといってたらごめんなさい。
0549デフォルトの名無しさん
NGNGRAMDISK?
0550デフォルトの名無しさん
NGNGRAMDISKって聞いたことあります。
やっぱり、二次記憶のディスクより、相当高速アクセスできるんですよね・・?
0551わたもち
NGNGいえ、私はそういう方向で行こうかな〜と思っています。
やっぱり新しいハードディスクはなかなか用意できないということで、
すべてフロッピーディスクで済むようにと考えています。
保存したければ、終了時にフロッピーに書き込みでもいいかなと思います。
0552デフォルトの名無しさん
NGNGunix系だとmfsってよばれててインストーラなどで使われてることが多い。
作っておくと後で役に立つ可能性も高いので、最初に実装するのもいいかもね。
0553デフォルトの名無しさん
NGNG最近ではネットワークも拡大・高速化してますので、
たとえ、1FDのOSであっても、RAMDISKを使えば、ネットから数十MB
の動画ファイルをダウンロードして観ることも可能になりますね。
(ネットワーク対応、大容量RAMが必須になりますが。)
結構魅力的かも。。。
そういえば、RAMDISKでもFATとかいうのかなぁ。。。
0554デフォルトの名無しさん
NGNGUNIX系では/tmpとかに使われてるみたいです。
0555わたもち
NGNGその頃になれば、色々調べて実装したいと思います。
>たとえ、1FDのOSであっても、RAMDISKを使えば、ネットから数十MB
>の動画ファイルをダウンロードして観ることも可能になりますね。
夢を膨らませてもらうのは、非常に嬉しいのですが、
あまり期待しすぎないでくださいw
0556デフォルトの名無しさん
NGNGplaneだと8ドット単位の処理が基本になる。それ以外だと両端と中央の処理を分けたり、シフトしたりと「複雑」になる。
packedだと1pixelに1回でアクセスできて楽、かというと、速度を考えると話はそこで終わらない。
例えば8bit/pixelで考える。フツーならbyte*で処理するところだ。
これを例えば32bit/4pixelと考えてuint32*(適宜読み替え)で処理する。
そーするとplaneと同じく複雑になるが、メモリアクセスが1/4になる。キャッシュしない(メモリアクセスの遅い)VRAMにおいては、この差は大きい。
トータルでは4倍-「複雑な処理部分」の速度だ.
全ての描画命令に「複雑な処理」をつけるのはウザいが、blitやfillなど多用されるものにつければ効果は大きい。
#OSカーネルの話と激しくズレてるが
0557わたもち
NGNG御教授ありがとうございます。
>OSカーネルの話と激しくズレてるが
気にしないでください。
実は、Graphics_cls でその手は使っています。
最初は、素直に byte* へキャストしていたのですが、
強引に unsigned int* へキャストしてみたら、
問題なく動いたので、Java等を使っていた私にしたら、
こんなのありですか...な感じでしたw
0558LightCone ◆sSJBc30S5w
NGNGすべき物理ページを選択するアルゴリズムについて悩んでいます。
基本的に、LRU方式, ワーキングセット方式, FINUFO方式があるようですが、
FINUFO方式が選択が一番高速になると思います。
しかし、この中で一番理想的なのはワーキングセット方式なのですが、
「ワーキングセット」を高速に求めるアルゴリズムが存在するのかどうか
分かりません。
どなたかアドバイスできる方いらっしゃれば、是非教えてください。
0559ひげぽん ◆Ngzcp/NZpA
NGNGシステムコール実装テストをしようと目論んでいます。
システムコール呼出し手順はこんな感じで考えています。
■ユーザーモード想定
(1)システムコール用構造体に引数を設定
(2)(1)の構造体へのポインタをレジスタにセーブ
(3)int
■ここからカーネルモード想定
(4)レジスタから構造体へのポインタを取得(必要であればカーネルからアクセス可能なように変換)
(5)引数妥当性検討(今回はここは軽め?)
(6)処理実行
(7)必要であればリスケジューリング
システムコール自体はシステムコール構造体で管理しようと思っています。
引数の数・前処理・後処理・システムコール実体など。。。
0560デフォルトの名無しさん
NGNG引数がレジスタで渡せるうちはレジスタで渡したほうがいいんじゃないかな
将来的に仮想メモリをサポートして、(2)と(3)の間にtask switchがおきて(1)がswap outしたとすると、
(5)の前にswap inする必要がある。少なくともチェックは必要。
まあイマドキのCPUなら無視できる負荷かもしれんけど
0561デフォルトの名無しさん
NGNGまったくスレ違いで恐縮であるが、
http://www.jumptec.de/product/data/emb_int/webasdisk/webasdiske.htm
みたいなものを使えば、OSのデバッグは楽チンになるのだろうか。
0562デフォルトの名無しさん
NGNGちょいと調べてみたんだが「ワーキングセット方式」つーのは
突き詰めると実装はLRU(またはその近似)と同じ、という気がする
0563LightCone ◆sSJBc30S5w
NGNG言葉の遊びみたいになってしまいますが、「OS論」と呼ばれる学問では、
「LRU方式」と「ワーキングセット方式」とは、一応区別されていて、
いずれも、「最も最後にアクセスされたページをページアウトの候補」
とすると言う点は同じなんですが、前者は記録に用いられる時間が
「システム共通時間」なのに対し、後者では「タスクローカルな時間」
である点と、ワーキングセットアルゴリズムの場合、最近の
「利用頻度(N回分の調査記録を利用)」も考慮されるが異なって
います。
なお、「システム共通時間」で測定する場合、タスクの「活動度」が低いと
メモリアクセスがほとんどされていないように見えてしまうので、不公平に
ページアウト対象になりやすくなってしまうのではないでしょうか。
逆に、「タスクローカルな時間」で考慮されるならば、活動度が低くても
「活動している時間に対するそのページにアクセスした時間比率」が
中心的な役割を持ってくるため、そういう問題が起こりにくくなると
考えられます。
0564デフォルトの名無しさん
NGNGワーキングセットの推定をするには将来の処理の動きを読まなきゃいけないけど、
それをするには処理終了までのシュミレーションをしなきゃならないけど、
それは計算機にさせるべき処理そのものなので、それが完了した時点でワーキングセットの
推定は無意味になるので、原理的に無理。
つまり、計算量の問題ではない。
ってことで、現実的な解法として過去の挙動からワーキングセットを推定する方法が
いくつか提案されているけど、その一つがLRU方式。
って、説教たれてる割には、LRU方式の効率的な実装方法がわからなくて悩み中。
処理時間、メモリ使用量、LRUの厳密さ、これらの三つのトレードオフを巧く処理できない。
0565LightCone ◆sSJBc30S5w
NGNGものですが、日本のOS研究では、ネットや本で軽く見る限りですが、
「なるべく最適な廃棄ページを見つけるアルゴリズム」、に対して関心
が行っているようです。
しかし、物理メモリが大量に搭載された現状で、実際にOSを作る際には、
「如何に高速にページの使用統計を取るか」の方が重要の様に思います。
例えばの話、IA32のOSでは、タイムスライスのために、10(ms)程度の
周期のタイマー割り込みを使います。このタイマー割り込み内でページの
アクセス統計を取ると考えてみると、256MB の物理メモリを一杯に使った
状態では、厳密な統計を取るなら、最悪、256MB/4KB = 65536 ページ分
ものページエントリーの調査が必要になります。
つまり、秒間100回も 65536 回の forループ処理をバックグラウンドで
行わなくては成らなくなるということです。
しかも、同じCPUに、メモリを多く詰めば益々自体は悪化する傾向が
あります(なんとかしなければ。)。
0566LightCone ◆sSJBc30S5w
NGNG>ワーキングセットの推定をするには将来の処理の動きを読まなきゃいけないけど、
>それをするには処理終了までのシュミレーションをしなきゃならないけど、
>それは計算機にさせるべき処理そのものなので、それが完了した時点でワーキングセットの
>推定は無意味になるので、原理的に無理。
言葉のあやになってしまうのですが、一応、ワーキングセットの厳密な意味は、
t0 <= t < t0 + τ
の間にアクセスされたページの集合と言う意味で、それ自体の計算は可能です。
むしろ、IA32では、厳密な LRU の方が無理です。統計処理を行う時間間隔で
曖昧さが出ます。つまり、10(ms)毎に統計を取るならば、10(ms)の誤差が
出ると言う事です。
おっしゃりたいのは、「OPTアルゴリズム」の方ではないでしょうか。そちらは、
絶対に実現不可能です。証明は簡単です。未来にいくつかの可能性がある場合、
現時点で最適な選択を行う事は絶対に無理だからです。
0567LightCone ◆sSJBc30S5w
NGNGおきます。
まず、タイマー割り込み内で、物理ページが割り付けられているページエントリ
のアクセスビットを調査します。調査が済むと0にします。
そして、各ページエントリに対応して例えば1BYTEの統計情報を対応させます。
IA32では、ページエントリにはそれだけの余地がないので、別の場所に
入れます。今、k 番目のエントリのアクセスビットを参照し、accessだと
すると、
page_entry[k]->m_bit <<= 1;
page_enetr[k]->m_bit |= access;
とします。
これで、m_bit の 1 のビットの数が、直前の 80(ms)の間のページ k の
アクセス頻度になります。
このアクセス頻度が一番小さいページをページアウトするというわけです。
しかし、この処理は、256MBの物理メモリだと、最悪、秒間 100 * 65536 回の
繰り返し処理が必要になると思います。
0568デフォルトの名無しさん
NGNG>page_entry[k]->m_bit <<= 1;
>page_enetr[k]->m_bit |= access;
それくらいの機能はCPU(MMU)に積んどけってことか。
0569LightCone ◆sSJBc30S5w
NGNGあると考えるのが妥当だという前提に立つと、1エントリの調査に x クロック
必要だとすると、
x * (100*65536)/(1024*1024*1024) = 0.006 x
これが、この処理が必要とする時間の全CPUパワーに対する比率になります。
x = 10 として、6%。
IA32だと、ページテーブルエントリのアクセスビットだけでなく、
ページディレクトリ・エントリのアクセスビットもあるので、そちらで
普段は「カリング」できるので、このアルゴリズムでも余り問題ないの
でしょうか??
しかし、FLATモデルだと、複数のページディレクトリがあるので、そんな
ことで済まないような気も。
0570デフォルトの名無しさん
NGNG>でしょうか??
http://home.att.ne.jp/theta/yasunori/linux/LinuxMM/LinuxMM33.html
Linux2.2 on x86で、ちと古いのかもしれんが。
Lタンがタイマ割り込みで実行したい処理に相当するのは、これかなぁ。
知ってたらごめんね。
0571デフォルトの名無しさん
NGNGMMUつーか、メモリに載せなきゃいけない罠。
メモリ全体にこんな機能つけけるのは無駄極まりないけど、
ページテーブル専用の特殊メモリをつけるってのもありかな?
といってみたけど、プロセス数がその特殊メモリの容量に制約受けそうで嫌だな。
0572K
NGNG> しかし、物理メモリが大量に搭載された現状で、実際にOSを作る際には、
>「如何に高速にページの使用統計を取るか」の方が重要の様に思います。
そのとおりです。僕はこれについてうまい方法を既に考えています。僕の方法
では、非常に効率的に使用統計が取れます。もし興味があればOSASKスレッドで
、「OSASKのLRU管理アルゴリズムについて説明してほしい」と書いてください。
L氏が興味を持たなくても、他のどなたかが興味を持たれれば、その方が書き込
んでくださってもかまいません。
特徴をかいつまんで説明すると、僕の方法では、タイムスライスごとの定期的
な調査が不要です。それでも十分に詳しい(むしろ定期的検査よりも詳しい)使用
統計が取れます。もっというと、PTEのアクセスビットやダーティビットを参照
する必要すらありません。
0573デフォルトの名無しさん
NGNGFLATでも使えるんですか?
0574デフォルトの名無しさん
NGNG開発段階においても、(5)は重要。デバッグが楽になると思う。
システムコール用構造体を使うと、アドレス計算の分だけ処理が遅くなる思う。
しかし、誤差の範囲と言えるかも。
ただ、ユーザスレッドや非同期IOなどの実装が楽になるかもしれない。
>>560の言ってる事が起こり得るから、システムコール用構造体はswap禁止とかも有り。
しかし、システムコール用構造体が増えすぎると結局swapが必要になりますね。
やっと、わかりそうな内容になってきた感じなので素人考えを初書き込み。
0575デフォルトの名無しさん
NGNGお久ー。
0576デフォルトの名無しさん
NGNG漏れが勘違いしてる可能性大だが、
>といってみたけど、プロセス数がその特殊メモリの容量に制約受けそうで嫌だな。
統計を残したいのは、物理メモリに読み込まれてるページへのアクセス有無だから、
プロセス数はあまり関係ないと思う。
単一のプロセスが乗っかってる・使ってるページをいつもまとめてページイン・アウト
するわけじゃないから。
>>569
>普段は「カリング」できるので、このアルゴリズムでも余り問題ないの
ページが4KB単位であること自体が一種の「カリング」なんだろうよ。
256MBもの物理メモリを4KB単位1枚ずつでちまちま管理してたらだめだめだー、ってことかなぁ。
0577LightCone ◆sSJBc30S5w
NGNG>ページが4KB単位であること自体が一種の「カリング」なんだろうよ。
まあ、そうなんですが、IA32では、最低でも二段階のページ機構が
あり、4KBのページを1024個集まったものをページテーブルと言い、
1024個のページテーブルへのポインタを集めたものをページディレクトリ
と言います。一つの項目の事をエントリと言い、エントリが集まったものを
テーブルと読んでいます。
ページディレクトリには、1024個のページテーブルへのポインタが格納
されているのですが、NULL に相当するポインタを書くことが出来て、
そこに対応するページテーブルが存在しない事を意味する事が出来います。
あるページ P にアクセスがあると、該当するページテーブルの中の
該当するエントリの A ビットが1にセットされます。もし書きこみ
アクセスだと、D ビットも1にセットされます。CPUが勝手に0にリセット
することはなく、0にしたいときは、ソフト的に行います。
今説明したのは、ページテーブルのエントリのことですが、実は、
対応するページディレクトリのエントリにも、A ビットがあり、そこも
同時に 1 にセットされるということです。
ですので、ページテーブルのAビットを参照する前に、
ページディレクトリエントリのAビットで大まかに調査を省くことが
できるというわけです。#569では、これを「カリング」と表現したわけです。
0578LightCone ◆sSJBc30S5w
NGNGPTEと呼びます。
IA32の初代ではこのように「二段階」のページ機構を持っていたのですが、
最新のIA32系のCPUでは、三段階にすることも出来ます。
また、ページのサイズをもっと大きくする事(たしか、4MBと2MB)が出来ます。
なお、メインフレーム用のCPUでは、A BIT, D BIT 相当のBITだけではなく、
「アクセス時間」などの統計情報も PTE にCPUが書き込んでくれるものが
あるそうです。
0579LightCone ◆sSJBc30S5w
NGNGもしかして、既に実ページが割り当てられているページを、
アクセスした瞬間にページ例外ハンドラに通知させるために、
P BIT = 0 にしますか?
それとも、「最もページアウトするべきぺージ」を探すのを諦め、
とにかく、以前調査した時に A = 0 にしておいて、今回の
調査で、A = 1 になっているページを、リング状に探しますか?
ちなみに、これは、FINUFO(First In Not Used First Out)
アルゴリズムというそうで、Linux 2.2で使われていたようです
(Linux 2.4 では良く知りません。)。
0580デフォルトの名無しさん
NGNGわかりやすい説明サンクス。
> なお、メインフレーム用のCPUでは、A BIT, D BIT 相当のBITだけではなく、
>「アクセス時間」などの統計情報も PTE にCPUが書き込んでくれるものが
>あるそうです。
物理メモリよりも大きい仮想メモリを基準に据えれば、そうすべきなのかもな。
CPU設計はOS設計と切り離しちゃだめだと再認識。(←だからなんだよ)
ところで、Lタソは、ページングアルゴリズムの実装の工夫で何を解決しようとしてる?
・スラッシングの防止(必要メモリが物理メモリを超えた途端ダサー)
・トータルパフォーマンスの向上(曖昧だな)
それとも、単に、
・最低限のページングアルゴリズムを実装した時のパフォーマンスダウンを抑止
したいだけ?ワーキングセットが理想的なのに、それを実装すると、理想に反して
パフォーマンスが落ちるのに耐えられないのか。
OSがどのように使われるかで最適(と思われる)ページングアルゴリズムは
異なるよな。
例:
・RTOS→ページングはハードリアルタイム性を失う原因となるので法度
・サーバOS→多数のプロセスが間欠的に動作。トータルで必要なメモリ大
・ビジネス用途→フォアグラウンドのプロセスを快適に動作
・マルチメディア→RTOSほどでないにしろソフトリアルタイム性を実現
学問的には、どんなサイズでいくつくらいのメモリの塊が必要かの分布の分析に
なるだろうが、味気ないので誤解をおそれず上記のように書いてみた。
こいつらのトレードオフの重心をどこに置く?それともダイナミックに対応したいのかな。
0581デフォルトの名無しさん
NGNG「ダイナミック対応」...おもろいかも
プロセスごとに変えるといいかも。
最初はリアルタイム用のモードで動かして、必要ないようだったらページングをはじめるとか。
0582デフォルトの名無しさん
NGNG>最初はリアルタイム用のモードで動かして、必要ないようだったらページングをはじめるとか。
マルチメディア的なリアルタイム(せいぜいソフトリアルタイム)なら、可能。
ハードリアルタイムは難しいというか無理ぽ。
0583LightCone ◆sSJBc30S5w
NGNG実は#279でも書いていた通り(ちょっと一言ページでも私が気付いている
事には触れられていましたが)、本当は、実ページを割り振っている
ページに対し、アクセス統計(+書きこみフラグ)を取る目的だけのために
存在ビット(P)を0にすると言うアイデアは、置換アルゴリズムについて考え
始めた当初から気付いていました。
ただし、私のアイデアは、ワーキングセットアルゴリズムでの、
W(t0,τ)を厳密に高速に求めることができるような方法です。
例えば、W(t0,τ)を、10ms に一回調べたいならば、10ms周期で発生
させるタイマー割り込みの中で、調査対象のページのPを全て0にします。
ただし、このアルゴリズムでは、P=1のページはリストに保持できるので、
そのリストを利用してP=1のページだけをP=0にして、もともとP=0だった
ページを初期化するための時間は必要は有りません。
このようにすると、ページにアクセスされると必ずページ例外が発生します
ので、例外が起きたページをリストに加え、同時に、P=1にしておきます。
すると、次のタイマー割り込みまでには、10msの間にアクセスされた
ページのリストが出来上がります。
このリストの過去N回分から、10N (ms)分のワーキングセットを求める
のは容易です。
ただし、速度が少し心配なのと、コピー・オン・ライトや、
オン・デマンド・ページング、プリ・ページングなどと合わさった時の
事情を考慮しなくてはならない部分がちょっと心配です。
0585デフォルトの名無しさん
NGNGなるほど。
AとかDのフラグをチェックしてアクセス/書き込みがあったかどうかを調べると、
コストがかかる
->アクセス/書き込みが起こったときに例外を起こさせて(しかも1周期に1回だけ)
A,Dフラグをチェックするコストを節約するわけだな。
で、ページ例外のコストはどれくらい?
0586LightCone ◆sSJBc30S5w
NGNGの様子を細かく見てみます。
P=0 のページには、最低でも次のような種類があることになります
(まだ他にもあるかもしれません。)。
1. 予約されていない不法なページ(このときは、例外報告後、タスクを終了)
2. ディスクにページアウトされているページ
3. アクセス統計を取るためにP=0にされているだけで、本当は実ページが
が割り振られているページ
4. オン・デマンド・ページングのために予約されているページ。
しかし、3の状態のページは、P=1にしたら、即座にPTEとして利用出来る
ことが好ましいため、上記の4つの状態を区別するビットは、"AVL"の
3BITに置く事になると思います。ただし、1BITだけあれば、3の状態
であるかどうかだけは十分判別できますので、AVLは1BITだけ利用すれば
十分で、他の三つの状態のときは、PビットとこのAVLの1BIT以外の残り
30BITは、全て「ソフトウェアで利用可能」ですので、それを
利用すれば十分区別できます(ただし、2の状態のときのディスク上の
ページアウト装置番号とスロット番号を保持できる予知は必要ですが、
残り29BITが利用出来ます。)。
良く考えてませんが、初期化されないメモリを確保した時には、
オン・デマンド・ページングの状態にするのが良いかもしれません。
0587LightCone ◆sSJBc30S5w
NGNG>で、ページ例外のコストはどれくらい?
物理ページが足りなくなる事自体、頻度は余り多くありませんので、
そのためだけに普段から統計を取る重たい処理を行い続ける方針
が正しいかどうかです。
ようするに、ほとんど起こらない事のために、普段から無駄に準備を続けている
ということです。
正確なLRUアルゴリズムや、ワーキングセットアルゴリズムを行うためには、
ハードウェアからの支援が必要だと諦めてしまう方が得策かもしれません。
IA32では、FINUFO アルゴリズムでいいのかも。
0588ひげぽん ◆Ngzcp/NZpA
NGNG>将来的に仮想メモリをサポートして、(2)と(3)の間にtask switchがおきて(1)がswap outしたとすると、
>(5)の前にswap inする必要がある。少なくともチェックは必要。
>まあイマドキのCPUなら無視できる負荷かもしれんけど
システムコール実装の経験がないので
どちらが良いのかわからないのですが
例えばシステムコールに文字列を渡すときはレジスタ経由でも
結局は構造体のようなものを介さなければいけないですよね。
迷います。
開発段階においても、(5)は重要。デバッグが楽になると思う。
>> 574
>システムコール用構造体を使うと、アドレス計算の分だけ処理が遅くなる思う。
>しかし、誤差の範囲と言えるかも。
>ただ、ユーザスレッドや非同期IOなどの実装が楽になるかもしれない。
そうですね、システムコール用構造体を使用するメリットは大いにありますよね。
ありがとうございます。
0589デフォルトの名無しさん
NGNG>ようするに、ほとんど起こらない事のために、普段から無駄に準備を続けている
>ということです。
linux2.2のカーネルについてのリンク >>570
を見ただけだが・・・
メモリの用途=ヒープか、コードか、マップトファイルか、などによって、
どうでも良いメモリは(物理メモリが空いてても)積極的にページングされてもいいと
思うのだが。
そうでなくても、 >>569 で検討した数値
> x = 10 として、6%。
よりもコストを節約できるなら、「やってみる価値」はあると思う。
他との絡みもあるからそれを今決めるのは大変だろうな。
これはつまらない提案だが、ページングとか、タスクスイッチのアルゴリズムは
簡単なシミュレーションモデルで実装前に検証した方が良くないか?
研究論文関係だとシミュレーションの結果だけ、というのも多いんだろ?(←想像)
後で手戻りできなくて、後悔しつづけるより、今のうちにちょっと苦労して
シミュしておくのは、悪くないと思わない?
パラメトリックなモデルにしておけば、
・メモリ速度
・(ページアウト先の)HDD速度
・物理メモリサイズ
・プロセス数と使用メモリのサイズ
などの影響もある程度(=傾向)見積もれて、動作報告との照合が可能になるだろう。
あんまり凝るとかえって手数がかかって意味ないが。
0590LightCone ◆sSJBc30S5w
NGNGことがあるそうです。
そんなものでも、それなりの性能は得られる、と書いてありました。
しかし、そもそも、ディスクにスワップアウトした時点で、余り性能なんて
期待しないですよね? 運悪くスラッシングがおきても、ランダムに
ページアウトしていれば、そのうち最悪の事態は回避されると思いません
か?
故意にやろうとするほど、余計に自体が悪くなる事ってありますよね。
ひげを剃る時、鏡を見ながら剃るより、適当に剃った方がうまく行くと
聞いた事もあります(笑)。
0591デフォルトの名無しさん
NGNGいるんでしょうか。
本人以外はこのスレを読めば分かるけどね。
0592LightCone ◆sSJBc30S5w
NGNG置換する限り、どんなページをページ・アウトしても大抵駄目なんじゃない
かなあ、と思いますね。なぜって、そういう時は、実ページが割り当てられ
ているページ全体をまんべんなくアクセスしてるかもしれないからです。
そんなときは、どれか犠牲となる(?)タスク全体をディスクに
吐き出してしまうしか方法がないように思いますね。
今考えている方法は、どうも、実際にやるのを躊躇してしまいます。
だって、メモリを一杯積んで、絶対スワップファイルが必要ないとき
も、(不在)ページ例外だけは日常的に起きるなんて、話が変だと
思いませんか?
0593今は
NGNG0594わたもち
NGNG0595わたもち
NGNGttp://www.geocities.co.jp/SiliconValley-PaloAlto/6802/os_06.zip
色々追加したので、大分時間がかかりました。
0596デフォルトの名無しさん
NGNG0597わたもち
NGNGプロテクトモードでの実行
Packed Pixel形式での描画
文字出力用メソッド等、少数の描画用メソッド
簡易スレッドの作成、実行、停止
(メモリ保護を実装してプロセスにする予定なので、名前はProcessになっています)
イベントシステムの簡易実装
(キーイベントのみ手抜きで作ってみました)
こんな感じのことが実装されました。
0598デフォルトの名無しさん
NGNG> だって、メモリを一杯積んで、絶対スワップファイルが必要ないとき
>も、(不在)ページ例外だけは日常的に起きるなんて、話が変だと
>思いませんか?
確かに変だけど、
・理想的なアルゴリズムを実現するには
・IA32ではハードの支援が足りなくて
・コスト節約のためにわざと例外を起こす
ということなら現実解としては成り立つじゃないか。
理想的なCPU、理想的なOS、理想的なアプリが現実から乖離しているからこそ、
各種パフォーマンスのトレードオフを実装技術で調整するんだろ。
それを逆手に取った使い方とかアプリに対してはそりゃ無力だろうが。
環境やアプリをしぼればしぼるほど、実装技術はいらんだろうよ。
大型コンや、RTOSみたいにな。Lタンはそれで満足か。
0599デフォルトの名無しさん
NGNGこのスレ見てみ、ちゃんと分かってるよ
OSASKとNOWSMART-OSを褒めちぎるスレッド
http://pc.2ch.net/test/read.cgi/os/1031377826/
0600デフォルトの名無しさん
NGNGふーん、かなりイタいね、K,L両氏とも。
日本にはこんなヤシらしかいないのか、と思うとかなり
ショボーン・・・。ソフト分野でアメ公追い越すのはだいぶ
先の話だな・・・。それとも現在においてOS制作ってーのは
趣味の領域にすぎないことの現れなのか・・・。
0601デフォルトの名無しさん
NGNG0602デフォルトの名無しさん
NGNGGetSystemInfo APIで得られる値なので真偽は不明だけど
16ページまとめることでどの程度性能向上するかは不明だが
少なくとも必要なワークエリアサイズは抑えられるということかな
0604LightCone ◆sSJBc30S5w
NGNG平均発生頻度をz(T)とすると、ほぼ、
z(T) = (1/T)*h(T)
h(T) = (時間Tの間にアクセスされる仮想ページの平均枚数)
になると思います。また、メモリ・アクセスに局在性が全く無いときに、
h(T)の上限が決まるだろうと予想されるので、恐らく、
h(T) <= (T/T0) * h(T0)
に近い関係式が成り立つと思います。すると、
z(T) <= h(T0) / T0
という式になり、z(T)は、Tによらない右辺の様な式により大まかな上限が
決まることになると思います。z(T)は、”単位時間”あたりなので当然の
結果です。
T0はなんでもいいので、T0=1とすると、
z(T) <= h(1) = (単位時間あたりのアクセスされる仮想ページの平均枚数)
という結果が出ます(ある意味、当然の結果ですね。)。
0605LightCone ◆sSJBc30S5w
NGNGつまり、ページ例外の秒間発生回数は、秒間ページアクセス頻度以下になる
ということで、メモリアクセスの局在性があれば、それより少なくなるとい
うことになります。
今考えているのは、「物理メモリが不足した時にページアウトするページを
選ぶ方法」です。256MBの物理メモリを積んでいて不足する状況を考えると、
行列計算などでは、ほぼ物理メモリ全域をアクセスすると考えられるので、
256MB / 4KB = 64K枚のページにアクセスする可能性が高く、ページ例外
発生頻度は、秒間、最悪で65536回になると思います。
逆に、テキストエディタなどでは、メモリアクセスの局在性が強いので、秒間
数枚程度になると思います。
つまり、アプリケーションの種類によって例外発生頻度の変動が大きくなると
思います。
0606名無したん@お嬢
NGNG0607LightCone ◆sSJBc30S5w
NGNGT1 < T < T2
に対し、
h(T2)/T2 <= h(T)/T <= h(T1)/T1
になると思います。定義:z(T)≡h(T)/Tにより、
z(T2) <= z(T) <= z(T1)
つまり、平均的な秒間例外発生頻度は、測定周期が大きいほど小さくなると
いう、これまた当然の結果が得られます。
0608デフォルトの名無しさん
NGNG0609デフォルトの名無しさん
NGNG>>604 >>605 >>607
ページ例外の頻度(コスト)は定性的にしか取り扱えないから、躊躇しとるわけやね。
一方、統計情報の収集を素直に実装した場合のコストは定量的に求まる。
統計が嫌いなら、そもそも比較すべきでないな。
しかし敢えて指摘すると、仮想メモリ機構自体が「アクセスの局在性」に依存してるよな。
キャッシュの類も同じだ。
つまり、
>行列計算などでは、ほぼ物理メモリ全域をアクセスすると考えられるので、
という前提は、仮想メモリ機構を利用する根拠を台無しにする。
いくら統計が嫌いでも、
「ある頻度で、巨大行列計算が発生すると・・・」と捉えなければ意味が無い。
アプリのモデル化だ。仮定したモデルに近い状態でのみ想定したパフォがでるだろう。
想定外ではちゃんと動かないだろう。それは「いじわるテスト」だ。
ある程度の「いじわるな状況」でもかろうじて動作しつづける必要はあるだろう。
堅牢性や信頼性と呼ばれるかもしれない。
もともと足りない物理メモリ量をパフォの低下というコストを支払ってで実現するのが
仮想メモリなんだろ。実装技術で補えるのは、せいぜい低下するパフォをできるだけ抑えることだけだ。
いくら工夫しても、巨大行列演算は物理メモリ量に依存する。演算のアルゴリズムを変えて、
メモリ使用量を減らした方がよほど性能向上が期待できる。
0610デフォルトの名無しさん
NGNGおっと、これは単一プロセスを仮定してたな。
多数のプロセスを動かすためにも仮想メモリは必要ダナ。
もっとも、その場合は「タスクスケジューラ」と総合的にパフォを決められるよな。
物理メモリが足りないことを、この2つの場合で分けて考えてるよな。
0611デフォルトの名無しさん
NGNGそれを突き詰めると「メッセージング機構」になるんだと思われ
0612ひげぽん ◆Ngzcp/NZpA
NGNG>>>そうですね、システムコール用構造体を使用するメリットは大いにありますよね。
>
>それを突き詰めると「メッセージング機構」になるんだと思われ
なるほど。
ここで言うメッセージ機構というのはシステムコール(または別のサービス)
をメッセージという抽象化された方法でサーバ(OS)に要求するということですよね。
システムコールをメッセージ機構で実装した場合、どのような実装例があるのでしょうか。
マイクロカーネルへとつながるところでもあるので興味があります。
0613デフォルトの名無しさん
NGNGQNX
0614わたもち
NGNGユーザーモードの分離のため、システムコールを実装してゆきます。
データの渡し方には、レジスタ渡しと構造体渡しがあり、利点、欠点など、
丁寧な解説ありがたく参考にしています。
さまざまな OS のファンクションコール方法
Windows NT int 2eh eax にファンクション番号
FreeBSD int 80h eax にファンクション番号。パラメータはスタック。
Linux int 80h eax にファンクション番号。パラメータはレジスタ。
らしいです。
0615ひげぽん ◆Ngzcp/NZpA
NGNG>FreeBSD int 80h eax にファンクション番号。パラメータはスタック。
>Linux int 80h eax にファンクション番号。パラメータはレジスタ
おお。すばらしいです。
WindowsNTのシステムコールは引数渡しはどうやっているんでしょう。
>>>612
>QNX
なるほど、たしかにQNXはマイクロカーネルでメッセージを
使用していましたね。
x86での具体的な実装方法を解説したものを探すか、
ソースをみるって感じですかね。
解説はあまり期待できないかも・・・
0616わたもち
NGNG0617デフォルトの名無しさん
NGNGQNXの解説本って、
「次世代OSアーキテクチャ QNXオペレーティング・システムの世界」
http://www.amazon.co.jp/exec/obidos/ASIN/4875932006/
と、あとはインターフェイス誌の紹介記事くらいしかないな。
漏れはこの本持ってるけど、実装についてはプロセッサ固有部分については書かれてない。
0618デフォルトの名無しさん
NGNG↑GUIの実装にて、窓の重なり実装に関してどうのこうの。
LかK、教えてやれば?
0619デフォルトの名無しさん
NGNGそいつらの議論は、実装以前だ。放置の方向で。
0620デフォルトの名無しさん
NGNGこれじゃいかん?
http://www.qnx.co.jp/usr/help/product/neutrino_2.11_ja/sys_arch/about.html
0621LightCone ◆sSJBc30S5w
NGNGセスのコードやデータは全てプロセス固有空間内に格納され、他のプロセスから
は完全に不可視な状態になります。
今、アプリケーションが、write(fdsc, buf, size); でファイルへ書きこみを行
った場合を想定します。
bufは、アプリケーションの固有空間にありますので、FSPからは直接は見えま
せん。しかし、FSPは、bufのデータを読み込む必要がありますので、カーネルの
ページング・サービスを用いて自分のアドレス空間に覗き窓を作ってbufの内容
を覗くか、または、単純にアプリのプロセスにいる間に共有空間にコピーした
ものを参照する必要があるでしょう。速度面から前者を用いる事になるでしょ
うが、そもそも、FSのアドレス空間がアプリケーションと分離されていなけれ
ばこんなことは必要なく、直接見ることが出来ます。
つまり、もし、FSをモノリシック方式で書いていれば、覗き窓もコピーも
必要ないのです。FSは、いくつかのプロセスで同時に実行され、それぞれの
アドレス空間で、直接データをやり取り出来ます。
0622LightCone ◆sSJBc30S5w
NGNG可能です。やり方は簡単で、FSの特権レベルをカーネルより低くすればいい
だけです(タスク(プロセス)と特権レベルとが、独立した概念としてあり
ますので)。
また、「プロセス」の特徴として、定期的に実行に移される特徴がありますが、
FSでは、キャッシュの遅延書きこみなどに少し便利そうではありますが、それだけ
のためには、少し「大げさ」過ぎるようにも思えます。
0623LightCone ◆sSJBc30S5w
NGNGLinusもマイクロカーネルに懐疑的だそうですが、実は私も懐疑的で、
OSのサブシステムからカーネルを保護するだけなら、IA32では他の方法も
あるのではないかと思っています(懐疑的なだけで、絶対意味が無いとか
そういう意味ではありませんが。)。
最初に断っておきますが、QNXの資料にも明言されている通り、マイクロカー
ネルはカーネルが小さい事を意味するのではなく、OSの各種サブシステムを
一般プロセスとほぼ等価な形態で構成する方法を言います。
OSのサブシステムの代表であるファイルシステム(以下FS)をこのような一般
プロセスとして記述した場合を考えましょう。以下、FSのプロセスをFSPと言い
ます。
現代的なOSでは(Windows/Linux/QNXも)、特殊例を除き、個々のプロセスは、
0624LightCone ◆sSJBc30S5w
NGNGアプリを巻き添えにしなくていい、と言う点です。
モノリシックの場合、サブシステムが壊れると、そのサブシステムを呼び
出していた全てのアプリも同時にダウンすると思います。
しかも、あるアプリが原因となってサブシステムが壊れた場合にも、
そのサブシステムを「同時に」利用していた別のアプリもダウンしてしまう
ことに成ると思います。
例えば、マイクロカーネルでは、FSがダウンしても、FSを呼び出していた
アプリは、read()や、write()が異常終了するだけで済むと思います。
0625わたもち
NGNG私も、マイクロカーネルについて調べていたので、大変参考になりました。
ありがとうございます。
>>LightConeさん
モノリシック、マイクロカーネル方式のカーネルについて御教授ありがとうございます。
私は機能と作成の難易度を考慮して、以下のようにしたいと思います。
・モノシリックカーネル方式
・モジュール化をきっちり行い容易にマイクロカーネル方式へ移行できるようにする。
・システムコールは割り込みゲートを使用。パラメータはレジスタ渡し。
メモリ配置は、530で示していただいた資料を参考に、考え中です。
ありがとうございます。
Liner Frame Bufferの物理ベースアドレスが 0xE0000000 となっていたのに、
今気づいたのですが、なぜメモリは4G無いにもかかわらず、
プログラムは正常に動いているのでしょうか...
理由をご存知の方、参考になるアドレス等教えていただけないでしょうか?
0626名無したん@バカップル
NGNG0628デフォルトの名無しさん
NGNGハァッ?ネタか?
PCIのコンフィグレーション(←違ってたらごめん)で
論理アドレス0xE0000000にVGA内のメモリが割りつくだけだろ。
本体メモリを4GB積んでも、そこの512MBは使えないから、関係オオアリクイだとおもうが?
0629名無したん@バカップル
NGNG0630デフォルトの名無しさん
NGNG(悪)←カコワル
0631名無したん@バカップル
NGNG0632わたもち
NGNGISA Hole 0100_0000〜00F0_0000
AGP Aperture 〜FEC0_0000
その他色々なシステム領域 FEC0_0000〜
とありました。ありがとうざいます。
これを知らなければ、危うく、ISA Hole まで使ってしまうところでした。
システムのメモリ空間に、メインメモリ以外のものが色々割り当てられているようです。
0633デフォルトの名無しさん
NGNGhttp://www.cqpub.co.jp/column/books/2001a/34331PC_Legacy/pc-lega1.htm
こういう資料もある。
0634わたもち
NGNGここは、割り込み部分を作っている時に、よく見てました。
0635デフォルトの名無しさん
NGNG>一般プロセスとほぼ等価な形態で構成する方法を言います。
Linuxなどではdaemonプロセスが、そこを補ってるという認識。
QNXを利用したときの幸せはqnetの透過性。分散とか並列とか言わずに潔く
よそのCPUやマシンのリソースを利用できる。
しかもその場合の性能保証/測定・多重化ができる。
ネットといえばイーサしか思い浮かばない向きには関係ないだろうがな。
0637デフォルトの名無しさん
NGNG0638デフォルトの名無しさん
NGNGFSが落ちた時点でどっちみちそのシステムは死んだも同じだと思われ。
マイクロカーネルはモジュール化の一つの方法にしか過ぎないのでは
ないかとオレは思ってる。ローダブルモジュールでも十分だと。
0639デフォルトの名無しさん
NGNGというか、LスレDAT落ちしかねない静かさだがいいのか?
この際このスレに一本化するというのも手ではあるとおもうが...
0640デフォルトの名無しさん
NGNG確かに今のOS板の速度的には
あとわずか6ヶ月ぐらいの放置でdat落ちしかねないな、うん。
0641デフォルトの名無しさん
NGNG言葉のあやだよぅ
0642LightCone ◆sSJBc30S5w
NGNG間違えやすいのですが、「モノ*シリ*ック」ではなく、「モノ*リシ*ック」
です(monolithic)。SFで「モノリス」とか時々聞きますけど、それで
覚えましょう(笑)。小さいリスがコンピュータの中に一匹入っている
様子を想像するとさらにGOOD!
>>638
ハードディスクのFSが落ちた場合は、おっしゃる通り、大方再起不能で
しょうね。でも、GUIサブシステムが落ちた場合などなら、マイクロカーネル
では再ロードできるのではないでしょうか。モノリシックでは、再ロードは、
かなり難しいと思います。ただし、パフォーマンスを落とさずにGUIを
一般プロセスでどうやって組むのか良く分かりませんが。
>Liner Frame Bufferの物理ベースアドレスが 0xE0000000 となっていたのに、
>今気づいたのですが、なぜメモリは4G無いにもかかわらず、
>プログラムは正常に動いているのでしょうか...
それは、その物理アドレスにFrame Bufferが顔を出すように組まれている
からです。PCIバスなどでは、バス調停回路があって複雑ですが、
基本的な考え方を説明すると、アドレスのいくつかのビットがある
特定の1,0の組み合わせの時だけ信号線がONになるような回路を「デコーダ」
と呼びますが、そのデコーダが、Frame BufferのRAMのCS(CHIP SELECT)に
接続されているだけです。
例えば、E000 0000 〜 E00F FFFF までを Frame Bufferにしたい場合は、
上位 12 BIT が、E00 になっていればいいので、
bool CS = (PhysAddr[31-20] = 1110 0000 0000B);
みたいな回路を、AND素子とNOT素子を使って作ります。
0643デフォルトの名無しさん
NGNG頭いいな
0644わたもち
NGNGご指摘、丁寧な解説ありがとうございます、
完全に「モノシリック」と勘違いしていました(^^;
ハードウェアーの方まで、よくご存知のようで頭があがりません...
0645617
NGNGおまえがばかなだけ。でも確かにLタンはわかりやすく説明できる能力をもってる。
しかし頭いいヤシにそんな手間を取らせるのは漏れ達愚民の大罪だな。
長島監督に、毎日少年野球のコーチさせるのはもったいないだろ。
0646デフォルトの名無しさん
NGNG第2種←今は呼び名違う
レベルの知識と思われ。つまり計算機の基礎。ソフトもハードもない。基礎だ。
0647デフォルトの名無しさん
NGNGしかし物知り言っている人って2001年宇宙の旅のモノリスとか知らないのかな
0649デフォルトの名無しさん
NGNGと、これだけ書いても仕方ないので。
>>642
X window systemは、一般のプロセスなのでは?
パフォーマンスは、落ちているでしょうけど。
プロセッサが限定されますが
MTRR(Memory Type Range Register)てのがありますね。
0650デフォルトの名無しさん
NGNG情報処理試験の参考書でも買えば。
試験受けろとは言わんけど。
基礎を勉強するのには結構役立つよ。
0651デフォルトの名無しさん
NGNG知らないことが別に悪いわけじゃないよ。がんがれ。
だけど基礎はしりませ〜ん、だとコミュニケーションに無駄が増えすぎる。
内容は理解していなくてもコトバを知ってるだけで、お互いすごく楽になると思うよ。
頭の中のインデクスを作るためにも入門書は役に立つと思われ。<-糞本でもな。
「鶏のタマゴを塩化ナトリウム少量を溶かした熱湯の中で10分間熱してくれ。」
->「ゆで卵作って。」
0652デフォルトの名無しさん
NGNG半熟で頼む。
0653デフォルトの名無しさん
NGNGオトコはだまってハードボイルド。
0654デフォルトの名無しさん
NGNG書き漏らしたてるナ。
>「鶏のタマゴを塩化ナトリウム少量を溶かした熱湯の中で10分間熱してくれ。」
>->「ゆで卵作って。」
まずはこれでコミュニケーション確立。で、>>652 が言ってるみたいに、やっと
「どうやって茹でたら欲するゆで卵ができるか」の議論ができるわけ。
塩は純粋なNaClで良いのか、熱湯は常に100℃がいいのか、温泉玉子みたいに
低い温度の方がいいのか、など。
で、実装になったら、長たらしい方の表現に戻らねばならん。厳密さが必要になるからな。
いわゆる仕様書というやつだな。
0655デフォルトの名無しさん
NGNG>長島監督に、毎日少年野球のコーチさせるのはもったいないだろ。
だからLタン、1週間に1回来てくれればいいよ。(w
0656デフォルトの名無しさん
NGNG0657デフォルトの名無しさん
NGNGF5連打じゃないよw
0658デフォルトの名無しさん
NGNG誤爆です
0659デフォルトの名無しさん
NGNG時期から察するに、入試結果かな?
0660デフォルトの名無しさん
NGNG大学で proxy の cache が効いていると、
Flash を使ったページが cache からウンロードされて更新されないというケースがあった。
0661デフォルトの名無しさん
NGNG0662LightCone ◆sSJBc30S5w
NGNG水面下でいろいろやってるんです(^_^;)
API-DLLへの対応、インポート関数への対応、スタックの自動伸張、
ドライバの仕様化、予約だけして物理ページを割り当てないメモリへの
対応、ファイルバッファ容量の自動調整機能など。
さらにこれらのための下準備として、NWSLをインポート関数や特権レベル
セグメントへ対応させたり、今までALL-ASSEMBLERだったメモリ管理や
ファイル管理を全部Cに書き直したり、割り込み中でメモリの確保をやめて
固定バッファに直したりとか。
一応、DLLも扱えるようになり、ファイルシステムとメモリシステムは全部Cに
書き直せて、スタックの自動伸張にも基本的には対応できました。
アプリのファイルサイズが大分小さくなり、GUIの文字描画やエディタの
描画速度も速くなり、タスクスイッチも高速になっていますが、全て
内部構造の変化でしかなく、目に見えて分かるような機能向上がないので、
公開していないのです。
0663デフォルトの名無しさん
NGNGよっ。大統領〜。
0664デフォルトの名無しさん
NGNGすげ〜
素直に感動した。
0665デフォルトの名無しさん
NGNGアプリケーションプログラマから見れば十分機能向上してます。
もっとまめに更新してもいいんじゃないかと思いますが。
0666デフォルトの名無しさん
NGNGそしてなぜ気づかれていないと思うのだろうか。
(自称)頭いいならば、そこにまず気づけと。
0667デフォルトの名無しさん
NGNG以下は、漏れが書いたんだが、本人ではないぞ。
>>645 >>646 >>663
>>558以降、ずっとLタンに噛み合わない突っ込み入れ続けてるが。
結構楽しい。
0668667
NGNG>>613 >>617 >>619 >>628 >>630 >>633 >>635 >>636
0669デフォルトの名無しさん
NGNG> 高速に 〜
> 目に見えて分かるような機能向上がない
どっちよ?
0671643
NGNG同意。
0672デフォルトの名無しさん
NGNG( ゚д゚)ビンゴーw
おじゃましました。大学合格したら僕もOS作って見たかったのに〜
時間がぁ。゚(゚´Д`゚)゚。
0673デフォルトの名無しさん
NGNG国公立前期か。
まあ、後期で頑張れ。枠が狭くてキツいだろうけど。
0674デフォルトの名無しさん
NGNGにちゃんはほどほどにしとけよ。
0675わたもち
NGNGos_06.zipと外見はほとんど変わりそうにありません;;
0676デフォルトの名無しさん
NGNGオレはもう前期であきらめてOS作ってるんだが、まぁ、がんばれよ。
俺みたいな万年浪人生なんかになるんじゃないぞ。
0677デフォルトの名無しさん
NGNG0678ひげぽん ◆Ngzcp/NZpA
NGNGまたMona開発開始してから、よく今まで動いていたなぁ。。。
と思うような実装の抜けを発見しました。
今の実装にまずいところがありすぎるので
少しずつ既存のコードも書き直して行こうと思っています。
もう少し土台をしっかりとしたものにしないといけません。
0679676
NGNGフリーターダガナ(w
0680デフォルトの名無しさん
NGNGgogo
0681デフォルトの名無しさん
NGNGチャント家賃・光熱費・食費・プロバイダ・携帯・年金・健康保険、
全部払える程もらえる一時雇いのシゴトあるのか。
日本経済もまだまだ捨てたモンじゃないな。
それとも、OS作るために生活切り詰めてガンガッテるのか?
0682デフォルトの名無しさん
NGNG某K?
0683デフォルトの名無しさん
NGNGプロバイダは無料のヤシです。
保険は払ってませぬ。
携帯は持っていませぬ。
あとはひたすら節約
0684デフォルトの名無しさん
NGNG万年浪人生の次は万年夢想家ってか(プププ
と煽っとこう。後期に向けてちょっとでも勉強しる!
0685デフォルトの名無しさん
NGNG>あとはひたすら節約
気に入った。でもな・・・
昔近所のあんちゃんが、東京でそんな生活してて、
栄養失調→肺炎でシンだ。弱ってるとすぐ腐るからな。
腹が減ったら、盗んででもチャント食えよ。
シンんだ方がマシと、シヌよりマシは大違いだからな。
0686デフォルトの名無しさん
NGNGおまえんとこから盗んでやるから住所おしえれ。
0687デフォルトの名無しさん
NGNG0688デフォルトの名無しさん
NGNGま、いつまでも続くものではないか。
0689デフォルトの名無しさん
NGNG宅プーらしいが……。
0690デフォルトの名無しさん
NGNGだけどさあ。ウチで働いてみる?(w 一応募集はしてるけど。
0691デフォルトの名無しさん
NGNG単にホームオフィスかもしれないぞ。
0692デフォルトの名無しさん
NGNG一瞬、ホームレスと読み間違えますた(w
0693LightCone ◆sSJBc30S5w
NGNG0694デフォルトの名無しさん
NGNG座布団1枚!
0695デフォルトの名無しさん
NGNGなるほど、家庭にいながらホームレスか。禅問答だな。
そこにブラックホールがあるから、HNがライトコーンなんだな。
0696デフォルトの名無しさん
NGNG0697デフォルトの名無しさん
NGNG0698デフォルトの名無しさん
NGNG0699デフォルトの名無しさん
NGNGOSを作ってみよう
http://pc.2ch.net/test/read.cgi/os/1046271176/l50
0700超先生@ブロッコリ株100円 ◆leaf/RYZgY
NGNGNachos
ttp://www.cs.washington.edu/homes/tom/nachos/
0701デフォルトの名無しさん
NGNGUML(User Mode Linux)みたいな感じですね。
ドキュメントを斜め読みしてますが、結構面白そうです。
情報Thanks
0702デフォルトの名無しさん
NGNGカーネル書くのにC++使うのは構わんが、STLはどうなの?
動的メモリ確保するアルゴリズムは、mallocできなくてあぼーんしたりしないの?
コンストラクタの問題はどっかのスレで話題になってたけど。
っていうか、カーネル内部でmallocしようにも、メモリ管理ってOSの仕事だよな。
カーネル内部専用のmallocつくって、内部でだけ使うのかなぁ?
漏れみたいなバカは考えるだけ無駄だな。ヤッパリ。←キッパリ。
0703デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/os/1042810549/503
これの前半を読んだ瞬間、マイクロカーネルのすごさを垣間見た気がした。
カーネルスレッドの実装をしているという事は、
そろそろAPIの設計もするようになるんでしょうね。
ひげぽんさん、がんばってください。
0704デフォルトの名無しさん
NGNG0706705=703
NGNG0707デフォルトの名無しさん
NGNG0708ひげぽん ◆Ngzcp/NZpA
NGNG>カーネル書くのにC++使うのは構わんが、STLはどうなの?
>動的メモリ確保するアルゴリズムは、mallocできなくてあぼーんしたりしないの?
Monaでは、カーネルが動的なメモリを使えるように演算子new,delete
malloc(),free()を実装することでこの問題に対処しています。
>っていうか、カーネル内部でmallocしようにも、メモリ管理ってOSの仕事だよな。
>カーネル内部専用のmallocつくって、内部でだけ使うのかなぁ?
私の認識ではその通りです。
>>703
>カーネルスレッドの実装をしているという事は、
>そろそろAPIの設計もするようになるんでしょうね。
>ひげぽんさん、がんばってください。
ありがとうございます。
なるべく早く、マイクロカーネル化できる様がんばります。
0709デフォルトの名無しさん
NGNGhttp://www.zdnet.co.jp/news/0303/11/nebt_24.html
Commodore 64でWebブラウズが出来るOSって、ちょっと凄いかも。
0710702
NGNGソース嫁ばわかるはずのことなのに・・・ひげぽんタンって、いい人だね。
つまらない指摘に答えるために時間を取らせちゃって申し訳ない!
反省して、ソース読みに逝ってきます。
0711わたもち
NGNG動きそうです。
ページングの設定 mov cr3, eax でエラーが出て先に進まない;;
あともうちょっとなのに...
0712デフォルトの名無しさん
NGNGOSのAPIに渡す文字列がchar*なのは、作り手の方々はどう思っておられるのでしょう?
\0を文字列中に含めることが可能な言語(C/C++以外のほぼ全て)からだと、
APIを介すると\0以降が切れてしまう事が起こり得るわけで…
(本来ならM$に問うべきかも…)
0713わたもち
NGNG全然見当はずれなことを言っているかもしれませんが、
私が思ったことをレスしてみます。
C,C++でAPI作られているから、文字列は char* と扱うことにしている。
Java、.NETでAPIが出来ていれば、Stringオブジェクトが渡すものになる。
char* は単に配列の先頭アドレスへのポインタなので、
char[0] = 文字列の長さ
char[1]〜 文字コード
と解釈するようなプログラムにすれば、255文字までなら、
\0も使える文字列になると思います。
0714デフォルトの名無しさん
NGNGアドレスを渡してるだけなので、
内部で単なるバイナリ列として扱えば\0以降は切られない。
0715デフォルトの名無しさん
NGNG素朴な疑問だけど、サイズ渡さないと何処までがデータなのか判らない気がする。
0716デフォルトの名無しさん
NGNGそのとおりです。
712の主張が、データが\0で切られてしまうって事をどう思うかって事だと解釈したので、
レスはこれだけでいいと思いました。
0717デフォルトの名無しさん
NGNG0718デフォルトの名無しさん
NGNG0719デフォルトの名無しさん
NGNGファイル操作やディレクトリ操作など。
0720デフォルトの名無しさん
NGNGおまいら宇宙後でも話すんかい
0721デフォルトの名無しさん
NGNGアプリ的には一応対応しておきたい場合は希にある。
0722デフォルトの名無しさん
NGNGC言語がそうだからな。
C言語(or C++)がメインの言語のOSってUNIX系だけだっけ?
0723デフォルトの名無しさん
NGNGUNIXのためにC言語が作られたから そういうこと。
例えばMacintoshはもともとPascal指向なコンピューターだったから、
C言語の方にStr255という型を定義してる。
CP/Mは'$'で区切るんじゃなかったっけな…
0724デフォルトの名無しさん
NGNGlocale依存な検索機能付けたら文字列比較APIが\0以降を見てくれなかったり
クリップボードを経由したら、\0以降のデータが無くなったりしてたら迷惑でしょ。
0725デフォルトの名無しさん
NGNGカットアンドペーストをWindowsのクリップボード経由で行うバイナリエディタ作ったことあるけど、
テキストデータとしては渡さなかったな。
テキストエディタなら適当にエスケープ文字でも決めといて対応すればいいんじゃない?
文字列比較その他はAPIより自前の方がいい気がするし。
何でもOSが対応しなきゃいけないって事は無いとおもう。
0726デフォルトの名無しさん
NGNG他にコピーしたりするとちょっと嫌かも。
でもさすがに文字数渡すようにしてるか。
0727デフォルトの名無しさん
NGNG0728デフォルトの名無しさん
NGNGカーネルはスペース扱えるよ
スペース対応していないアプリが多いだけ
0729デフォルトの名無しさん
NGNG0730デフォルトの名無しさん
NGNG# 年度末の忙しさってだけなら良いんだけど
0731ひげぽん ◆Ngzcp/NZpA
NGNG# 年度末の忙しさってだけなら良いんだけど
全くもって上記の通りです。
仕事が落ち着くまでしばらく停滞するかと思われます。
0732デフォルトの名無しさん
NGNG0733わたもち
NGNG特権レベル3のユーザープロセスでVGAへの書き込みに、成功しました〜 ヽ(´ー`)ノ
もう少し整備すれば、ユーザーアプリケーションも作れるようになると思います。
またまた、実機では、FDから読み込めないというエラーが出て困っています。
cs=ds=ss=0x9000で
mov ah, 0x02
mov al, 0x21;[kernel_app_size]
mov ch, 0x00
mov cl, 0x02 ;セクタ番号だけは0x1から始まるから
mov dh, 0x00
mov dl, 0x00
mov bx, 0x1000
mov es, bx
mov bx, 0x0000
int 0x13 ;(*)
jc read_err
jmp read_return
jc read_errで、エラー処理へjmpして、
エラーコード0x04(要求されたセクタ番号が見つからない)を出力します。
al,es,bxへの代入が異なっている以外は、以前のverと同じはずなのですが...
どうかご指摘、御教授お願いします。
0734わたもち
NGNGttp://www.geocities.co.jp/SiliconValley-PaloAlto/6802/os_10_debug.zip
0735デフォルトの名無しさん
NGNG0736わたもち
NGNG単純に、セクタ番号×512で読み込みと思っていたのですが、
トラックが絡んでくるのですね。FDの構造を調べてみます。
何も知らなさすぎですね...
0737わたもち
NGNGttp://web.kyoto-inet.or.jp/people/pessi/PC9800HOWTO-16.htmlより
容量 セクタサイズ セクタ数 ヘッド数 トラック(シリンダ)数
(1) 1232KB(1.2MB) 1024バイト 8 2 77
(2) 1440KB(1.44MB) 512バイト 18 2 80
(3) 1200KB(1.2MB) 512バイト 15 2 80
(4) 640KB 512バイト 8 2 80
(5) 720KB 512バイト 9 2 80
これらのフォーマット形式のFDに、セクタ、ヘッド、トラックを指定して
書き込み、読み込みをしなければならないということですね。
セクタ、ヘッド、トラックを指定して書き込みが出来るソフトを探してきます。
0738デフォルトの名無しさん
NGNG先頭セクタあたりに、メディアのタイプを示すID(ディスクリプタ)もあるよ。
あと、ドライブ側(FDC,BIOS含む)の制限にも注意な。1024バイトセクタ読める
ドライブは絶滅寸前かと思われ。
>セクタ、ヘッド、トラックを指定して書き込みが出来るソフトを探してきます。
よほど変なフォーマットで無い限り、アクセスしたいセクタ番号(通し番号)nとすると、
セクタ:n % セクタ数
サイド:n % (サイド数 * セクタ数)
トラック:n / セクタ数 / サイド数
で求まるよ。%は剰余な。
とりあえずこれで、セクタ数、サイド数、トラック数をパラメトリックにしておけば、
対応フォーマットを増やすのも楽だと思うが。
HDDのCHS-LBA変換も基本的にはこれで済むと思うけどなぁ。
遅っいマイコンではそんな計算毎セクタごとにやってると、ディスクが回っちゃってて、
1セクタ読むごとに、1回転しちゃうんだよな。だからシーク時だけ上記の計算して、
あとはサイド、トラックの切り替わりだけどシーケンシャルに処理したりしたなぁ。
セクタの配置をばらばらにする事もあった。
そういや、トラック0だけサイド0しかないフォーマットとかもあったな。でも今時は
そんなメディア読めなくてもいいJARO
0739わたもち
NGNGMONAの
; fake boot parameter block(bpb) for RAWRITE
部分の意味がわかってきました。
738さんのレスや ttp://kone.vis.ne.jp/diary/diaryb5.html を参考に考えると、
ブートセクタ上の最初数十バイトにファイル構造を示すデータがある。
ブートプログラム(ブートセクターに配置)にフォーマット形式等を埋め込んだもの boot.img
カーネルバイナリファイル kernel.img 、アプリケーションバイナリファイル app.img とすると、
このファイルを boot.img kernel.img app.img の順にくっつけた os.img を dd等 で書き込み
カーネルの読み込みは セクタ番号(通し番号) 2〜 から読み込むということでいいでしょうか。
0740デフォルトの名無しさん
NGNGブートの詳細(ソフトから見た場合)は、
http://www37.tok2.com/home/nobusan/
(リンクフリーではないらしいので注意)
を見ればよいかと。フロッピーも基本は同じだぁ。
違いは、先頭セクタをddして見比べれば、大体わかるっしょ。
>>736
>何も知らなさすぎですね...
わたもちたんは、勘がいいみたいだから、知らないくてもすぐに知ってる状態に
なれるっしょ。勘が悪くて物知りバカの漏れみたいな人種からはうらやましいよ。
0741デフォルトの名無しさん
NGNG>>739
>このファイルを boot.img kernel.img app.img の順にくっつけた os.img を dd等 で書き込み
>カーネルの読み込みは セクタ番号(通し番号) 2〜 から読み込むということでいいでしょうか。
先頭セクタ=MBRにブートのためのコードを*まだ*置けない状態であれば、それでよいと思う。
実際にはもうちょっと後ろから実際のイメージを置くみたいだが。
メディアからブートさせるには、先頭セクタに、カーネルイメージを読み出すコードを
置いておく。そのコードがでかくて入りきらないなら、カーネルを読みだすためのコードを読み込むためのコードを置く。
でも現状はたしか、GRUB使ってるんだよな。
0742デフォルトの名無しさん
NGNGhttp://www.cqpub.co.jp/interface/download/contents.htm
の1998年9月号のFFSは移植性を意識して実装されてる。
ライセンスが厳しいのでそのまま採用には難ありか。
nobusanのページは細かすぎて全体がつかみづらいので、
http://www.cqpub.co.jp/interface/toku/200107/toku1_4.htm
で頭の中を整理しておくのが良いかも知れぬ。
0743FreeDOS教徒
NGNGMonaのfirstboot.asmを流用すれば?無粋かもしれませんが‥‥
やってることはごく単純だし、煩わしければそんな方法でもいいかと。
0744わたもち
NGNGジャンプコード、OEMラベル、セクタあたりバイト数、クラスタ当たりセクタ数、予約セクタ数
FATの数、ルート最大エントリ数、全セクタ数、メディアディスクリプタ、FATのセクタ数、
トラック当たりセクタ数、ヘッド数ぐらいまで(27bytes)、
ブートプログラムの最初に追加したいと思います。
それと、カーネル読み出し部分をヘッド、シリンダー、セクターを使用したものに書き直します。
こんな感じでためしてみます。
どうでもいいことですが、Monaのブートローダーを元に作った、ブートローダーを最初から使っています。
GRUBは、ファイルシステムが理解できて、elf形式実行ファイルを直接カーネルとして
ロードしたりできるみたいなのですが、使い方が分からないので...
>わたもちたんは、勘がいいみたいだから、知らないくてもすぐに知ってる状態に
>なれるっしょ。勘が悪くて物知りバカの漏れみたいな人種からはうらやましいよ。
えと、詳しいことはイイことです。たぶん私に思われていることは99%ぐらいウソな予感w
0745わたもち
NGNGどうも資料の提示、ありがとうございます。
今は、バイト位置を指定してロードしているだけなので、
簡単なものでもいいからファイルシステムも考えていかないといけませんね。
>>FreeDOS教徒さん
せっかく作ったので、もう少しトライしてみます。
というか自前のブートローダーといっても、firstboot.asm を流用しているのにかなり近いです。
0746デフォルトの名無しさん
NGNG>簡単なものでもいいからファイルシステムも考えていかないといけませんね。
たぶんそうだろうと思って、FFSのリンクを示してみた。
これから登る山の大きさが分かれば、気が楽になるってもんだと思ってね。
0747FreeDOS教徒
NGNG> でも現状はたしか、GRUB使ってるんだよな。
それはNoNameのほうです。
>>わたもち�d
そこらへんは自分で理解しておいた方がいいかもしれませんね。
ttp://guriponn.tripod.co.jp/boot.asm
参考までにどうぞ。
0749わたもち
NGNGどうも、非常に参考になります。
ありがとうございます。
OSの名前をOEMに入れないといけないですね。
日本の花ということでAsagaoとか考え中です。
0750デフォルトの名無しさん
NGNG日本の花って桜じゃないの?
0751デフォルトの名無しさん
NGNG0752わたもち
NGNGつけているようなので、わざとはずしました。
私もはまったその一人だったりw
このOSもそっち系にいきそうです。
0753デフォルトの名無しさん
NGNG( ゚ Д゚) ガシャ
( つ O. __
と_)_) (__()、;.o:。
゚*・:.。
0754デフォルトの名無しさん
NGNG(国会議員のバッジとか・・・)
0755デフォルトの名無しさん
NGNG0756デフォルトの名無しさん
NGNG0757デフォルトの名無しさん
NGNG0758わたもち
NGNG英語圏に住んでいたら、たぶんBlueRoseに変えるぐらいいイイ感じなのですが、
とりあえず、ひらがなで書くようなものと、
萌え系のOSになっても大丈夫なような名前でお願いします。
注文が多くてスミマセン(^^;
0759わたもち
NGNG0760デフォルトの名無しさん
NGNGAsagao でいいと思う。開発コードにChihiroとかついてるご時世だし。
萌え系ってのはショックだが。
0761わたもち
NGNG隠しているつもりはなかったのですが...
>萌え系ってのはショックだが。
やっぱりだめですか...
SwingのようにLook&Feelを変えて使用してくださいと言ってみるテストw
0762デフォルトの名無しさん
NGNG0763デフォルトの名無しさん
NGNG_, ._
( ゚ Д゚) ガシャ
( つ O. __
と_)_) (__()、;.o:。
゚*・:.。
マンセー!!
0764デフォルトの名無しさん
NGNGらいちょう・・・・って鉄道みたいになってきますたw
0765わたもち
NGNGMonaプロジェクトのみなさま、厚くお礼申し上げます。
OSの名前は、とりあえず(仮称)あさがおにしておきます。
どうも、色々な名前ありがとうございました。
また実機で動かないバグが...もう泣きそうです
Kernel.c の StartKernel -> Init -> PrintPagingOnMessage -> Graphics_SetColor までは
問題ないのですが、次の行Graphics_DrawStringで、いきなり落ちます。
どういうわけか、Bochs でも特権レベル3のプログラムが動かなくなりました。
0xDFFFFFFCでページフォルトが起きているのですが、PageManagerではきちんとページを確保しています。
原因が思いつく方、お時間ありましたら、レスください。お願いします。
ソースは前と同じにあります。
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/6802/os_10_debug.zip
0766デフォルトの名無しさん
NGNG0767デフォルトの名無しさん
NGNGいっそのこと下の部分はMonaに差し替えて、
Monaで手のついてないGUIとかに専念しては?
「あさがお」はウィンドウシステムの名前にすればいいし。
0768わたもち
NGNGこのまま本当に作れるのかと言ったら、まだまだ乗り越えないといけない課題も多いですし、
Linuxのように、カーネルにMonaを使い、ディストリビューションという形で
作っていくというのもありと思います。
でも、OSのイメージと言うと、人それぞれだとは思いますが、
ほとんどはGUIの雰囲気で決まるところがあると思います。
そんな一番おいしいところを頂くのも、気が引けます。
どうにか原因究明をして、特権レベル3での実行ができるようにしたいと思います。
0769デフォルトの名無しさん
NGNGちらっと見ただけだが、
0xDFFFFFFCにアクセスしようとするのがおかしいよな。
uint vga_memory_low = 0xE0000000;
に近いのでVRAM書き込みアドレスがあやしいかと思ったが、さして問題なさそう。
となるとスタックを疑うか。
Graphics_DrawString()の中でGraphics_DrawCharを呼ばずに、
(g->data)[0] = 0x55;
とかやってみるのはだめかな。というのは、
・VRAMアクセスで問題
・その他の問題
の切り分けが先決かと。
>原因が思いつく方、お時間ありましたら、レスください。お願いします。
PF発生時のIPはわからないのかな。レジスタ/スタックダンプも。
っていうか、動かなくなった原因は、触ったことそのものだから、
そこに問題があるというのが原則では?
0770デフォルトの名無しさん
NGNGフォルトのエラーコードはなんだったの?
0771わたもち
NGNG「VRAMアクセスで問題」でした。
0xE0000000へアクセスしてもなにも変化無く(落ちもしないし、描画もなし)、VGA_GetVram()だと落ちます。
0xE0000000と思いこんで実装している部分が無いか調べてみます。
0xDFFFFFFCでのページフォルトは、
Bochs では 3rd (13) exception with no resolutionと表示されました。
14でないのは、無理にエラー処理されて、わけがわからない場所を実行するので、
IDTへの登録と設定そして、割り込みは禁止にしてあります。
だから、そもそも割り込みハンドラが無いと表示されていると思います。
cr3 の値が0x00000000だったので、ページフォルトだと思いました。
sp = 0xE0000000となるようにスタックを積んで、iretで制御を渡しているので、
<ProcessLoader>
80000000:55 push %ebp
80000001:89 e5 mov %esp,%ebp
80000003:90 nop
80000004:eb fe jmp 80000004 <_Main+0x4>
最初のpushで0xDFFFFFFCになってページフォールトだと思います。
Process_Initの PageManager_AllocatePage(p, 0xDFFFFFFC); が
デバッグ用にあるので、ページフォルトは無いはずなのですが。
0772わたもち
NGNGcr3の値が0x00000000でないからの誤りです。
どうも、夜遅くまでバグを見つけてもらい感謝します。
0774わたもち
NGNGiretで、特権レベル3に行く直前まで無事、実機でも確認できました。
ほんとうにどうもありがとうございます。
「VRAM書き込みアドレス」が怪しいというヒントが無ければ、一人では見つけられませんでした。
バグ取りができたのも、すべて769さんのお陰です。
VBE linear buffer形式 の 開始アドレスは 0xE0000000 では無く、
その他の条件、少なくとも機種によって異なる。
偶然、Bochsでは意味ありげなきちんとしたアドレスの0xE0000000となっていた。
ということが原因だったようです。
これからこの辺を実装される方はお気をつけください。
0775デフォルトの名無しさん
NGNG外出っぽいが、
>VBE linear buffer形式 の 開始アドレスは 0xE0000000 では無く、
>その他の条件、少なくとも機種によって異なる。
漏れはVBE3.0しか見てないが、初期化してモードを選択してから、
ModeInfoBlockを見ろと書いてあるように見えるな。
0776デフォルトの名無しさん
NGNGうちの環境では、vga mode change err が出てしまいます。
int 0x10 AH=4f02
0777776
NGNGbochs2.0.2を使ってます。
int 0x10 AX=4f02が失敗というか、AHが4fのまま。。。
あと、DIは設定しなくてもいいのですかね?
bochsrcもつけてもらえると、原因がわかるかもしれません。
0778わたもち
NGNGBochsのデフォルトの設定では、VGABIOS-elpin-2.40が使われているはずなので、
VGABIOS-lgpl-latestを使用していただければ、vga mode change err はでないと思います。
bochsrc.txtです。
floppya: 1_44="pc\asagao.img", status=inserted
diskc: file="pc\c.img", cyl=20, heads=16, spt=63
romimage: file=BIOS-bochs-latest, address=0xf0000
vgaromimage: VGABIOS-lgpl-latest
megs: 32
boot: a
vga_update_interval: 300000
keyboard_serial_delay: 250
floppy_command_delay: 500
ips: 500000
mouse: enabled=0
private_colormap: enabled=0
i440fxsupport: enabled=0
time0: 0
newharddrivesupport: enabled=1
log: -
panic: action=ask
error: action=report
info: action=report
debug: action=ignore
0779わたもち
NGNG修正したものをupしました。
場所は同じです。
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/6802/os_10_debug.zip
0780777
NGNG無事ブートできました。
3rd (13) exception with no resolutionで落ちましたけど。
あと、本質的なことじゃなくて恐縮ですが、
ImageMakerでイメージを書き換えるより、ヘッダバイナリ(?)みたいなのをつくって
boot+Headbinary+Kernel+Appとくっつけたほうがよくないですかね?
もしくは、Kernel,Appコンパイル後、サイズ定義ファイルを生成して、boot.asmで読み込むとか。
もうひとつ、やっぱり本質的じゃないですが、
イメージ作成.batでパス設定してるのに、フルパス使ってるのは疑問ですが(w
Kernel,Appとファイルも増えてるし、そろそろ、Makefileを作ったほうがいいかもしれませんね。
0781わたもち
NGNGKernel.c の StartProcessLoader の iret でユーザープロセスに行ったとたん落ちます。
未だに原因わからずです。
>ImageMakerでイメージを書き換えるより、ヘッダバイナリ(?)みたいなのをつくって
>boot+Headbinary+Kernel+Appとくっつけたほうがよくないですかね?
>もしくは、Kernel,Appコンパイル後、サイズ定義ファイルを生成して、boot.asmで読み込むとか。
boot+Headbinary+image(Kernel,App等)の構成に、ユーザーレベルでの実行に成功したら
変えるつもりです。
Headbinaryには、各ファイルのサイズとimageでの位置を書いて、
デイレクトリの無いファイルシステムのつもりで実装します。
たぶん今後は、ImageMakerは、kernel, 作成したアプリ から image を
生成するようなツールになるはずです。
コマンドはかなり苦手なので、適当にbatファイル書いたら、コンパイルできたから
いいやという、いいかげんなものなので、つっこまないでくださいw
一度、makefileは作ろうとしたことがあるのですが、失敗しました。
そろそろ作らないとやっぱりいけないですよね...
統合開発環境ばっかり使ってるとこんな人間になります。お気をつけて(を
0782デフォルトの名無しさん
NGNGやまどり追いかけて
0783デフォルトの名無しさん
NGNG>一度、makefileは作ろうとしたことがあるのですが、失敗しました。
マクロとかmakeの方言を使わなければ簡単かと。
[作りたいもの] : [材料1] [材料2]
[材料1]と[材料2]から、[作りたいもの]を作るコマンド
をずらずら並べるだけでも、随分楽になるけどなぁ。
クロスだと、
install : all
copy hoge.exe a:
とやっておくだけで、生産性の改善もできるとな。
0785わたもち
NGNGどうもありがとうございます。
もう一度きちんと調べて、makefileを作ってみます。
>>784さん
割り込み番号 0x0D の例外ハンドラを実装してみて、
TTSについて、もう一度チェックしてみます。
どうもありがとうございます。
これも経験と知識の差でしょうね...
皆さんどうしてそんなに簡単にエラー見つけることが出来るのですか...(はぁ
0786わたもち
NGNG0787.oOo.
NGNGStartProcessLoaderの
push $0x80000000
を、
push $0x00000000
に直してみてください
0789FreeDOS教徒
NGNGCSのベースアドレス‥‥??
0790わたもち
NGNG0x00000000から実行ということですよね?
カーネルのページマップは
すべてのマップを 仮想アドレス = 物理アドレス としています。
ユーザーのページマップは
0x00000000〜0x7FFFFFFF と VGA 領域が 仮想アドレス = 物理アドレス
0x80000000〜0xFFFFFFFF (VGA領域を除く)となってるので、
ページマップを全体的に変えることになりそうですけど、
仮想8086モードを使わないとしても、無理なマップなのでしょうか...
原因をつかんでおかないとまた同じことを繰り返しそうなので、
エラー原因を御教授くださいませんか?お願いします。
0791超先生@ブロッコリ株100円 ◆leaf/RYZgY
NGNG> asm volatile ("push$0x00000020 \n\t"
> "push$0xE0000000 \n\t"
> "push$0x00000018 \n\t"
> "push$0x80000000 \n\t"
> "ret \n\t");
0792.oOo.
NGNGメモリーマップはこのままでもいいです。
なぜ0かというとCS(0x1b)のベースが0x80000000だからです
つまり0x1b:0x0はリニアアドレスの0x80000000になるのです
push $0x80000000や.=0x80000000
では0x1b:0x80000000=0x100000000を指すことになります
0793わたもち
NGNG恐れ入りますが、新しくDLしてください。
前はret にしていたのですが、iret でPL=3に移ると書かれたものを見たので、
iret に書き直してあります。スタック切り替えもされる思って書いたコードです。
asm volatile (
"push$0x00000023 \n\t"//20
"push$0xE0000000 \n\t"
"push$0x00000000 \n\t"
"push$0x0000001B \n\t"//18
"push$0x80000000 \n\t"
"iret \n\t");
0794わたもち
NGNGプロテクトモードに入ってすっかりベースのこと忘れ、そのことに気づいていませんでした。
どうも有難うございます。
CS.base 0x80000000 で、exe.ls = 0x00000000 とするか
CS.base 0x80000000 -> 0x00000000 で exe.ls = 0x80000000 とすればいいのですよね。
0x80000000 以下で実行されると困るので、
CS.base 0x80000000 で、exe.ls = 0x80000000 がよさそうですね。
0795わたもち
NGNGCS.base 0x80000000 で、exe.ls = 0x00000000 ですた
0796わたもち
NGNG"mov%ax, %ds \n\t"
"mov%ax, %es \n\t"
"mov%ax, %fs \n\t"
"mov%ax, %gs \n\t");
asm volatile ("push$0x00000023 \n\t"//20
"push$0xE0000000 \n\t"
"push$0x00000000 \n\t"
"push$0x0000001B \n\t"//18
"push$0x00000000 \n\t"
"iret \n\t");
と、
無効TSS 例外(#TS)(int 0x0A)、セグメント不在例外(#NP)(int 0x0B)、一般保護例外(#GP)(int 0x0D)
ページフォルト(int 0x0E)
を設定して実行してみても、
割り込み番号 0x0E、エラー原因のアドレス 0xDFFFFFFF、割り込みハンドラに入る前のeip = 0x00000000
となってるようです。謎w
787,788も修正しました。どうもありがとうございます。
0797わたもち
NGNGページテーブルのフラグの意味を取り違えていました。
フラグを修正すると、動きましたぁ〜〜
これで、ようやくOSらしくなってきましたw
0798ひげぽん ◆Ngzcp/NZpA
NGNGわたもちさんはすごいなぁ。
カーネルスレッド実装がだいぶ落ち着いてきました。
スレッドというよりは、プロセスになってしまいましたが・・・
コンテキストをkthread構造体に保存する形になりました。
デバッグに四苦八苦したため、全ての流れを一応把握できているつもりです。
セマフォを用いたロックもうまくいっている模様です。
依然見られたスタック破壊もなくなりだいぶ安定してきました。
システムコールでkthread_yieldを簡易実装予定。
明日までに終わればいいなあ。
0799わたもち
NGNG>わたもちさんはすごいなぁ。
C++で、マイクロカーネルのOSを作るという先進的なことに取り組まれているようで、
とても足元にも及びません。
このスレッドの皆さんのおかげと、Monaのソース、LightConeさんのまとめ書き等があったことと、
時間が有り余ってるので、ここまで実装できました。
でもまだまだ、キーボード割り込みもスキャンコードを取得しているだけですし、
メモリ管理は一応作ってあるのですが、バグだらけの予感です。先は遠いです。
0800ひげぽん ◆Ngzcp/NZpA
NGNG>とても足元にも及びません
C++はともかく、マイクロカーネルは果てしなく遠いです(笑)
ページングも、ユーザーモードでのプロセス実行も実装できていないので
参考にさせていただきます。m(__)m
0801デフォルトの名無しさん
NGNG0802ひげぽん ◆Ngzcp/NZpA
NGNG以下のサイトからダウンロード可能です。
https://sourceforge.jp/projects/mona/files/
動作をテストしてくださったかたは、ぜひ以下の掲示板に
動作報告にご協力をお願いいたします。
http://monaos.hp.infoseek.co.jp/cgi-bin/2ch/test/read.cgi/developmona/1048392706/l50
・フロッピィディスクの読み書きの実装
・ぐりぽん氏によるグラフィックモード対応(半角英数カナフォント)
・フォント表示のラッパー作成(GraphicalConsole)
・割り込み処理の正常化
・カーネルスレッドの実装
デモの'M' 'o' 'n' 'a'の文字は、それぞれ個別のスレッドが描画を担当しています。
また、スレッド情報を表示しているのも別スレッドです。
・システムコール KTHREAD_YIELDの実装
・セマフォによる排他ロックの実現
・その他細かい修正
0803デフォルトの名無しさん
NGNG0804803
NGNG0805デフォルトの名無しさん
NGNG0806LightCone ◆sSJBc30S5w
NGNGttp://homepage2.nifty.com/nowsmart/Japanese/binary_integer.htm
理論内容自体は自由にお役立て下さい。
ただし、論文やソフトなどで、少しでも参考にしたり、利用したりした場合
などは、必ず論文の参考文献として、または、プログラムのドキュメント
の一部や、ホームページなどで定理の発見者が私(LightCone)であることを
明記するようにして下さい。
0807デフォルトの名無しさん
NGNGうわ、見てて頭が痛くなる論文だ(笑)
てか、改めて数学はどんな分野よりシンプルでかつ難しいと感じました。
0809デフォルトの名無しさん
NGNGSS めっちゃかっこよくなってんじゃん。リアルで『スゲー』とか言っちゃった
0810デフォルトの名無しさん
NGNG> [Web] はめて読む486の正誤表
いやらしい…。
それはさておきリンクが
ttp://www.ascii.co.jp/books/support/4-7561-0213-1/errata/
に変わっているようです。
0811デフォルトの名無しさん
NGNG0812デフォルトの名無しさん
NGNG0813ひげぽん ◆Ngzcp/NZpA
NGNG>そろそろ、混乱しないように、Mona的な用語定義とかインタフェース仕様とかがあると便利かも。
そうですね。システムコールのドキュメントはいずれ用意しなければいけないと思っています。
インターフェース仕様というのは具体的にはどのようなものでしょうか。
ドライバとかでしょうか。
>>809さん
>SS めっちゃかっこよくなってんじゃん。リアルで『スゲー』とか言っちゃった
それはありがとうございます。
これからも精進いたしますのでよろしくお願いいたします。
>>810さん
>ttp://www.ascii.co.jp/books/support/4-7561-0213-1/errata/
>に変わっているようです。
ご報告ありがとうございます。
反映させていただきます。
0814わたもち
NGNGttp://www.geocities.co.jp/SiliconValley-PaloAlto/6802/os_12.zip
ユーザープロセスの実行、ページング、システムコール、色々なバグつぶしが主な変更です。
見た目には、ほとんど変化ないですw
次ぐらいで、少しアプリケーション開発ができるようにしたいです。
0815デフォルトの名無しさん
NGNG乙カレー
0816わたもち
NGNGありがとうございます。
メモリの扱い、イベントの扱い、ファイルの扱い、GUIはどのように作るか等
まだまだ決めることが多いので萌え風味を出せるまでしばらくかかると思いますが、
できるだけ早く実現できるよう頑張ります。
0817FreeDOS教徒
NGNG萌え進行は正直、ちょっと楽しみです。。
がんばってください。
0818デフォルトの名無しさん
NGNG検索して見つかったものでよさげだった奴
ttp://www.justsystem.co.jp/tech/atok/atokapi.pdf
APIのインタフェースを使う人に対して説明したものですね。
APIの機能を詳しく説明したものを機能仕様書or機能設計書。
実装に関する部分まで詳しく説明したものを詳細設計所と、
呼んでいたような感じがする。
インタフェース仕様書は、機能仕様所に含まれる場合もある。
とりあえず、インタフェース仕様書があると、簡易OSサーバとか簡易アプリケーションとかを
一般ユーザさんが少しずつ作り始めることができるかと。
0819わたもち
NGNGありがとうございます。意外にも好感を持ってもらい嬉しいです。
萌えっていうと正確にはどういうことを言うのかなと、
ちょっと思っています。
ファンシーとかなら大丈夫っぽいですが、キャラクター関係だと絵が苦手な罠。
主にアプリケーション開発環境はJavaでできたらいいなと考え中です。
0820デフォルトの名無しさん
NGNGJavaVMってVMで使われているシステムコールをどうにかしたら、
性能は悪くても、動くようになるんですかねぇ。
0821デフォルトの名無しさん
NGNGWavaおすすめ。
Javaの開発環境がつかえるし、機種依存部の分離がきちんとしてるので、比較的簡単に移植できる。
0822わたもち
NGNGインタプリンタを移植する予定なので、煩雑な計算を行うものだと
スピードに問題が出てくると思いますが、一般的なGUIアプリケーションでは、
実用的なものになるようにできると思います。
Javaが遅く、.NETが早い理由がおそらく解決のポイントだと思います。
クラスライブラリーの作成の時
1.スピードのネックになるところは、C,C++を使用する
2.できるだけ抽象度を下げる
Javaのクラスライブラリーのように、互換性を大事にするためにできるだけJavaで作ることをせず、
グラフィック関係はCで作ったものを薄くJavaでラップするぐらいの気持ちで作りたいと思います。
>>821さん
ありがとうございます。
もともと、Wabaには目をつけていました^^
クラスライブラリーについては、kaffeのクラスライブラリーを流用したいと思います。
java.utilとかとても一人で作れるものじゃないですw
欲を言えば、例外やスレッドが使えるインタプリンタがいいのですが、無理っぽいので
このへんで...
0823デフォルトの名無しさん
NGNG外野のたわごとですが、アプリの動かないOSなんて誰も使わないので
たとえばエミュが軽快に動作するマイクロカーネルなんて面白いんじゃないかと思ってました。
上位(GUIとか)層を一から作るのも面白いとは思いますがそんなに広まることないので
将来的にはWindowsもUnixアプリも動くといいなぁっとか。OS/2みたいに別レイヤで動くとかね。
たわごと失礼。
0824デフォルトの名無しさん
NGNGチンコスのかほりがプンプンするなw
0825潜伏名無しさん
NGNGと言ってみるテスト。
0826デフォルトの名無しさん
NGNGほら、もっと面白いスレ
http://pc.2ch.net/test/read.cgi/os/1042810549/
0827わたもち
NGNG名無したんですか?
潔くお茶を濁したように見せかけて、コソーリ内部はきっちりつくってみたりするかもしれない。
とか言ってみるテストw
0828わたもち
NGNG読み間違えてますた。最初読んだとき、だいぶん、へこんでますた。
もともと萌えキャラはかけないので、お茶を濁すのは無理ぽです。
助言ありがとです。
0829わたもち
NGNG気をつけないと...ゴメンナサイ
0830デフォルトの名無しさん
NGNG萌え萌えなキャラクターが、あなたの代わりにお仕事しますとか。
エージェント指向なOSとは、(技術的に)どのようなOSか、漏れにも
よく判らないけど。
0833818
NGNGあまりこういうのは書いてないんで、どのように書くのがいいのかはわかりませんが、
いろいろ見てみると、参考になると思います。
以前に、manコマンドで表示される形式で書けと言われたこともあります。
>>830
オブジェクト指向もよく理解できてない凡人ですが、
ユーザからの要求をそのときのシステム状態(プロセス数とかCPU使用率など)に
応じて要求受付モジュールがより細かい単純な仕事に分解し、優先度付けして、
それぞれの仕事をするモジュールに渡す。ようなものだと思っています。
エージェント指向は、オブジェクト指向に人工生命や人工知能の技術の一部(進化と自律性?)を
取り入れたものでしょうかね。この辺りはエージェントの定義が多種多様なので詳しくはわかりません。
とかいっても、プログラムしたことしかできないので、結局、オブジェクト指向になってしまう。
(プログラムしたこと以外をされても困るし(w
C++で記述されてるMonaならこれからの設計次第で、将来はエージェント指向OSにばけるかもしれませんねぇ。
#まとまりのない長文で悪い。。。
0834デフォルトの名無しさん
NGNG0835デフォルトの名無しさん
NGNGスレからは外れるが...
> インタプリンタを移植する予定なので、
何故か、interpreter を「インタプリンタ」と書く人が多いんだが、どこをどう読んだら新型のプリンタみたいに聞えるんだろう...。
0836デフォルトの名無しさん
NGNGよく見てますねぇ。まったく気付かなかった。
標準出力がプリンタってのを思い出してしまった(w
0837わたもち
NGNGインタプリンタ、やっちゃいました^^
言われると、そうだったと気づくのですが、いつのまにか気づかずに、
またやっちゃいそうですw
10回言うと、いつのまにかインタプリタ...インタプリンタになってたり。((((;゚Д゚)))ガクガクブルブル
0838デフォルトの名無しさん
NGNG0839デフォルトの名無しさん
NGNG>10回言うと、いつのまにかインタプリタ...インタプリンタになってたり。((((;゚Д゚)))ガクガクブルブル
1日1回、100回ぐらい連続で言うと、もはやプリンタと言うつもりでもプリタになったり、、チガウ!
これを 3日ほど続けるともう間違えなくなるYo-。
0840デフォルトの名無しさん
NGNGじゃあなんていうんだYO!
0841デフォルトの名無しさん
NGNGインタプリタ (ン無し) あ、ネタだった?
0842デフォルトの名無しさん
NGNG0843840
NGNGネタって書いたけどマジでどこが違うのかわからんかった。
インタプリ "ン" タなんて言う香具師いるんだな。どっちもインタプリタだとしかよめんかった。
>>840
ttp://mona.sourceforge.jp/
ここからソースとかたどって見ました?
MONAはGPLですよ
0845デフォルトの名無しさん
NGNGあ、そうなんですか。
0846ひげぽん ◆Ngzcp/NZpA
NGNG概要が以下のURLにありました。
http://www.spa.is.uec.ac.jp/~kinuko/slidemaker/fs-survey/
一番最初の実装としてはFAT12, UFSあたりが現実的かとは思うのですが
迷い中です。
Nonameの( ´ -`)さんも触れられていましたが
Solarisや、linuxのVFSのようなものをMonaでも想定しています。
全く一緒かどうかは分かりませんが・・・
MEGのように独自ファイルシステムが良いのか・・・
ファイルシステムの資料をあさり中です。
0847デフォルトの名無しさん
NGNGBFSはどうでしょう。
BeOSで採用されているファイルシステムです。
ttp://www.zdnet.co.jp/magazine/behive/hacker17b.html
0849ひげぽん ◆Ngzcp/NZpA
NGNGよくわからないので資料を探しています。
ファイルシステムの実験はMonaと切り離して実行できるのがうれしいですね。
0850デフォルトの名無しさん
NGNG書いて見ました。
0851ひげぽん ◆Ngzcp/NZpA
NGNGどなたかはわかりませんがありがとうございます。
どうも知っている人っぽいのですが、本当にありがとうございます。
0852デフォルトの名無しさん
NGNGあんなにOSあったんだな
0853わたもち
NGNG何を思ったかGUI部分を作ってみました。
すべてのコンポネントイベントで再描画したり、かなりいいかげんな作りなので、動きがおかしいです。
エミュレータというか、クロスプラットホームのGUIライブラリーを動かしていると言った方が
近いような気もします^^
エミュレータ(Java1.4以上がないと動きません)
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/6802/AsagaoEmulator.jar
上のエミュレータを実行させた画面
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/6802/emu.png
実行させたプログラム
public static void main(Application app) {
Frame f1 = new Frame(app);
f1.setTitle("テスト1");
f1.setSize(400, 200);
f1.setVisible(true);
Frame f2 = new Frame(app);
f2.setTitle("テスト2");
f2.setSize(300, 300);
f2.setVisible(true);
app.run();
}
スレッドの作成は出来ない予定なので、シングルスレッドで動かすために、ちょっと.NETっぽくなりましたw
0854デフォルトの名無しさん
NGNGこれは素晴らしい
用途から言うとNWSOSの互換ライブラリを思い出したよ
内容は全然違うけど(w
MEGのristiaの狙ってるのとも重なるかも
みんなJava好きだね〜
0855わたもち
NGNG色々修正したものを同じ場所にアップしました。
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/6802/AsagaoEmulator.jar
まだ、システムコールはどういうのが必要かとか、色々作ってみないと分からないと思って
作ってみたものなので、結構いいかげんなところもありますが、全部のソースです。
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/6802/EmuSource.zip
イベントディスパッチ部分のきちんとした実装が良く分からないので、
もう少しほかのGUIライブラリーを調べてみます。
>>854さん
ありがとうございます。
気をつけてクラスライブラリーを作れば、OSを選ばず動くものが作れるのと、
Java言語自体の良さもあって好きな人がいっぱいいるんでしょうね。
0856デフォルトの名無しさん
NGNG> イベントディスパッチ部分のきちんとした実装が良く分からないので、
> もう少しほかのGUIライブラリーを調べてみます。
これはめっちゃ言語に依存する部分。
自前イベントループで自前ディスパッチなんかしなくていいように
隠蔽することを前提にすると……
Cだとコールバックしかない。
C++だとコールバックはきつ過ぎるのでメッセージマップで隠蔽とか、(MFC)
独自プリプロセッサでグルーコードを自動生成するとか、(Qt)
似たようなことをテンプレートでやり繰りするとか、(Gtk--)
継承必須で仮想関数だけでやっちゃうとか、(wxWindows)
みんなめっちゃ苦労してる。
Javaだと仮想関数とインターフェースでのリスナーを使うのがAWT/Swing。
原理的には同じようなことはC++でもできる。(libqv)
コールバックをやろうと思えばリフレクションで出来るだろうけど
実際にそれを実行に移したものは見たことない。
C#だと委譲が強力でオブジェクト指向とコールバックがうまく両立している。
このC#の仕様があってWindows Formsは単純かつ強力に仕上がっている。
(ちなみにJ#はJavaに委譲が追加されている)
Objective-CはC#の状況に似てるかな。
とにかく言語に依存するよ。C#が一番扱いやすいと思ワレメ。w
0857わたもち
NGNG書き方が悪かったです。お手数かけました。
イベントの処理を書く部分は、
MFCではたぶんオーバーライドで、
Javaではインタフェースを使った委譲モデルで、
C#ではデリゲーション(メソッドオブジェクトみたいなものっぽい)を使った委譲モデル
というのは知ってるのですが、
困っているのは実際イベントキューからどのようにイベントを伝えるかです。
ComponentEventはそのまま発生元がイベントの伝え先なのですが、
MouseEventやKeyEventはどこへ伝えようかなと、なかなか良い方法が考えつきません。
ちなみに私はC#のデリゲーションは嫌いだったり。
class MainFrame() extends Frame {
MainFrame() {
addMouseListener(new MouseEventHandler());
addMouseMotionListener(new MouseMotionEventHandler());
}
class MouseEventHandler() extends MouseAdapter{
}
class MouseMotionEventHandler() extends MouseMotionAdapter{
}
}
こんな感じでイベントごとにグループわけできないからC#でたくさんイベントハンドラ書くと意味不明になりますw
構造体とかデリゲーションとかいらない機能多すぎです。C#ではきちんとした内部クラスが書けません。
MouseEventHandlerの中から直接MainFrameのフィールドにアクセスしたりできないのです。
言語の好みは人それぞれなんですけどね。
0858わたもち
NGNG今は
MouseEventのTYPE_MOUSE_PRESSED、TYPE_MOUSE_RELEASEDは最前面にあるウィンドウだけに
TYPE_MOUSE_MOVEDは全部のウィンドウに
ComponentEventはイベントの発生元に
イベントキューからイベントを送るということにしているのですが、
色々考えるとこれだとまずいですしね...難しいです
0859デフォルトの名無しさん
NGNG> MFCではたぶんオーバーライドで、
オーバーライドじゃない部分のメッセージマップがミソです。
> 困っているのは実際イベントキューからどのようにイベントを伝えるかです。
Javaモデルそのものなので、AWT/Swingのソースを見れば一発では?
> 言語の好みは人それぞれなんですけどね。
ここは必読です。
http://itpro.nikkeibp.co.jp/members/NBY/techsquare/20030117/3/
0860デフォルトの名無しさん
NGNGワラタ
0861デフォルトの名無しさん
NGNG0862デフォルトの名無しさん
NGNGまともな人間のすることとは思えんが
0863ひげぽん ◆Ngzcp/NZpA
NGNG実機,VirtualPCではうまく動いているようです。
EOTパラメータではまりそうになりました。
bochsでは相変わらず
write終了後の割り込みがこない
writeコマンド後のリザルトフェーズ時にMSRがreadyにならない。
という二つの現象が見られ、気持ち悪いです。
後者の現象は前者を無視してリザルトフェーズにいったのが悪いのかも
他のOS作者さんたちがどのように対応しているかが知りたいところです。
0864デフォルトの名無しさん
NGNG> Objective-CはC#の状況に似てるかな。
似てるのかな〜?
http://wwwa.dcns.ne.jp/~nito/OSPT/frameospt.html
0865bloom
NGNG0866デフォルトの名無しさん
NGNG0867デフォルトの名無しさん
NGNGActionの扱いが委譲そっくり。
0868デフォルトの名無しさん
NGNG> ここは必読です。
> http://itpro.nikkeibp.co.jp/members/NBY/techsquare/20030117/3/
C++やRuby, MixJuiceなどと比較しており、
C#との比較のことがほとんど書かれていないし
Javaの欠陥といってもC#にも共通する欠陥が多いね。
0869デフォルトの名無しさん
NGNGOS作りにはVM上で動くJavaやC#よりも
C/C++のほうが適していると思ったりする。
もうそんな考え方古い?
0870デフォルトの名無しさん
NGNG0871デフォルトの名無しさん
NGNG条件を限定しないと荒れるよ。
0872デフォルトの名無しさん
NGNG>write終了後の割り込みがこない
mona-0.0.5.tar.gzのソースMFDCDriver.cppを見た。
たぶん、確認済みだと思うのであるが、
while(!waitInterrupt());
は中身が、
return interrupt_;
だけだな。ちゃんと実行コードは生成されてるのかな。
特に、MFDCDriver::writeでは、直前に
interrupt_ = false;
があるからな。お子ちゃまが書いたコンパイラでもニフラムで消し去れるな。
割り込みで書き書きする変数にはvolatile付けとけ。C++でも使えるJARO。
DMA使ってるんなら、DMAの完了でええやんけ、と思うのは無責任かな。
参考文献:「トラ技スペシャルN.11 フロッピ・ディスク・インターフェイスのすべて」
0873872
NGNG連続カキコスマヌ
あらためて、mona.tar.gzをダウソしてソースを見た。FDCDriver.cpp
-Sオプションでアセンブルリスト見たが、volatileは関係なさそうだな。自信無し。
普段gcc/g++使ってないから悪ぃね。でもvolatileはつけといた方が良いよ。
で、「割り込みがこない」と判断した理由は何かな?
bool FDCDriver::waitInterrupt()
で、数えてるcounterのカウントアップかな?
でもこいつは「waitInterrup()を呼び出す全て」でカウントしちゃうよ。
シークしてるあいだに5000くらい行っちゃわない?たとえbochsでも。
しかもリセットされないしな。
void FDCDriver::waitPrint(const char* msg)
みたいに、500000くらいにした方がいいんじゃないかなぁ。
bochsでDOS6使ってるけど、フロッピーはやたら遅いしなぁ。
あれは明らかに1シークあたり、1回転してしまってる感じだけどなぁ。
(1回転=0.1秒オーダー)
bochsのソースもちらと見たが、DMA転送完了時に
割り込みを起こすつもりのように見えるけどなぁ。
まぁ、漏れなんかの書くことは気にせずに、他の作者さんの情報を待った方が
いいだろうな。うんうん。
0874デフォルトの名無しさん
NGNG書けないって断言されると書きたくなっちゃう ♥
0875ひげぽん ◆Ngzcp/NZpA
NGNG>は中身が、
> return interrupt_;
>けだな。ちゃんと実行コードは生成されてるのかな。
すいません。そこまでは思いつかなかったです。
確かにその可能性があるので調べる必要があると思います。
>DMA使ってるんなら、DMAの完了でええやんけ、と思うのは無責任かな。
>参考文献:「トラ技スペシャルN.11 フロッピ・ディスク・インターフェイスのすべて」
おお。ありがとうございます。そのような完了判定方法もあるのですね。
0876ひげぽん ◆Ngzcp/NZpA
NGNG> bool FDCDriver::waitInterrupt()
現在の最新版のソースでは
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/mona/mona_v1.0/src/FDCDriver.cpp?rev=1.11&content-type=text/vnd.viewcvs-markup
console_->printf("\ninterrupt:");
interrupt_ = true;
となっているので割り込みが来ていないことが分かっております。
>みたいに、500000くらいにした方がいいんじゃないかなぁ。
それも考えたのですが、CPUに依存してしまうのでどうも
採用しかねています。
>まぁ、漏れなんかの書くことは気にせずに、他の作者さんの情報を待った方が
>いいだろうな。うんうん。
いえいえ。ソースまで見ていただいてありがとうございます。
これからもよろしくお願いいたします。
0877872
NGNG>console_->printf("\ninterrupt:");
>interrupt_ = true;
>となっているので割り込みが来ていないことが分かっております。
void FDCDriver::interrupt()
のことだな。trueにするやつは他にもいて、counterのカウントアップがそれだな。
まだ、割り込みが来ないとは言い切れてないよな。
現状だと、「interrupt:」と表示されずに、waitInterrupt()が抜ける、だけであって、
それをもって割り込みが来ないと断言してはいかん。
できれば、何十秒か何分か待って、なおかつDMAの転送も終わって、ディスケットに
データが書き込まれているのに、なお「interrupt:」が表示されないことを
確認すべき。第一、読み込みでも割り込み起こらないの?
「期待した以上に遅れて割り込みが起こるかもしれない」という可能性を捨ててはいけない。
実際問題bochsの挙動に問題があろのだとしても、上記のようなデバッグでは
問題が切り分けできていないとおもわれ。
本当に正しくは、何秒以内に割り込みが起こるはずかを見積もるべきであるが、bochsでは
できない。充分すぎるくらい長い時間を想定すべきかと。
ハードウェアリトライという恐ろしいコトバを記しておこう。
>それも考えたのですが、CPUに依存してしまうのでどうも
counterをタイムアウトの意味で使ってるなら、counterの実装自体がCPU依存であり、
カウントアップ値で5000を選ぶかどうかは上記デバッグの考え方に基づくべき。
bochsでカウンタ5000回回すのに、1秒もかからないような気がする。かかるのか?
>おお。ありがとうございます。そのような完了判定方法もあるのですね。
いや、十ン年前の話だし、8ビット機での話だからな。あてにはならん。
あの本は、98について書かれてるから、一層あてにならん。
それでは申し訳ないので、ついでにWin2000のDDKのFDC.Cを見てみた。
やっぱり書き込み完了後に割り込みがくることを期待するコードになってた。
0878ひげぽん ◆Ngzcp/NZpA
NGNGなるほど。これは重いお言葉です。
確かにその通りだと思います。
>やっぱり書き込み完了後に割り込みがくることを期待するコードになってた。
わざわざ確かめていただきありがとうございます。
まずは問題の切り分けから週末にはじめていきたいとおもいます。
0879872
NGNG毎度思うが、ひげタンは人当たりがソフトな書き方らねぇ。
>まずは問題の切り分けから週末にはじめていきたいとおもいます。
読み書き自体は動作していて、実機では問題ないなら、TODOリストにだけのっけておいて
放置する戦術もありだと思ふ。
そのうち通りすがりでその道の達人が指摘してくれるかもよ。
ただし、TODOリストが公開される必要はあるが。
doxyなら、@todo Help達人 て書いときゃいいんじゃないかな。
0880デフォルトの名無しさん
NGNG漏れもさんかしようかなぁ
0881デフォルトの名無しさん
NGNG0882ひげぽん ◆Ngzcp/NZpA
NGNG>放置する戦術もありだと思ふ。
そうですね。今日実験してみたところ、3時間ほど放置しましたが
やはり割り込みはきませんでした。(仕事しながらだったのでちょっと自身なしですがw)
TODOリストにあげておいて、後回しがいいかもですね。
いろいろとありがとうございました。m(__)m
0883872
NGNG0885ひげぽん ◆Ngzcp/NZpA
NGNGぐりぽん氏に教えてもらった
http://www.vector.co.jp/soft/data/hardware/se016321.html
の資料で奮闘中。
ファイルシステムの開発はMonaとできるだけ切り離して行えるよう
別環境を用意して開発中です。
インターフェースDiskDriverが、その役割を担っています。
ルートディレクトリのエントリの取得と512byte以下のファイルの中身が取得できました。
ファイルシステムでどこまでのパラメータ等をメモリに持つかを迷います。
必要なときに読むか、一度読み込んで変更があるまではキャッシュしておくか等迷いどころです。
ファイルバッファのキャッシュは、更に上位のレイヤーで行おうと目論んでいるのですが
果たしてそこまで行くかどうか。
0886デフォルトの名無しさん
NGNGhttps://sourceforge.jp/projects/muramura/
0887デフォルトの名無しさん
NGNGなんだか俺が忘れてしまったものを思い出したみたいだよ。
昔はコンピューターをいじくっているだけで楽しかったのに、いまは仕事になっちゃった。
おまえいらの熱意に乾杯。
モナープロジェクトを全部読み直して、俺も参加準備するぜ!
0888デフォルトの名無しさん
NGNGがんばれー。
漏れも参加準備しようかな。
0889デフォルトの名無しさん
NGNGPC1台ありゃ済むよ。一体、何を準備するの?
0890887
NGNGいろいろ準備はあるぜ。
もう俺はクロックやペアを考えながらアセンブラでかけなくなっちまったし、
makeファイルもかけねえ。
VisualStudioとかJBuilderとかのIDEがないとプログラムが書けない屁たれになっちまった。
あとな、
そ も そ も モ ナ ー プ ロ ジ ェ ク ト が
ど う い う も の か わ か っ て な い
0891デフォルトの名無しさん
NGNG深く考えなくていいでない?昔、アセがかけていたなら思い出すでしょう。
当たって砕けてください。
makeは、
<生成物> : <材料1> <材料2>...
<tab>コマンド1
<tab>コマンド2
例)
hello : hello.o
gcc -o hello hello.o
hello.o : hello.c hello.h
gcc -c hello.c
すべての材料の更新日付と生成物の更新日付を比較して、生成物のほうが
古かったらコマンドを実行する。
これとマクロの使い方を知っていればすぐ使えると思う。
マクロ(特別なマクロも)は他の人よろしく。↓
0892デフォルトの名無しさん
NGNGヾi\ _、-
lヽ ヾlll\ _,.-‐'''llllllllヽ
|ヾ゙l ,,,,,,,,,;;;;;;;;;;;)lllllllllllllllllllllllllllllヽ
|ヾ゙l ;;;;;;;;;;;;;;;;_、-‐'''^^~~ ̄ ̄ ̄ ̄ ̄ ̄~~`^^^ ー--、
|ヾ゙ ,.、--‐‐''´ ___ l i /⌒l ヽ
| (ー----−−― ―― ''^^^~ =二三/ l l ヾ'''ノ __,ノ
|//`ー‐--、,._____ ゛゙ l ト、_  ̄`ゝ
|ノ,/ /////////~`^ヽ、_____ ___,,..、、、ト-テ‐‐‐'' ̄
|ノ/ `~^ー‐--、////ノlllllllノ~`^^^フll/
|ノ  ̄ ̄/lll/ //
// `
`'
0893デフォルトの名無しさん
NGNGとか言いたかった…
0894デフォルトの名無しさん
NGNGワラタ
0895山崎渉
NGNG0896デフォルトの名無しさん
NGNG0897山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0898デフォルトの名無しさん
NGNG突然だが、Gentoo 1.4 rc_4 の Live CD がものすごく格好良いす。
参考になればと思って言ってみますた。
0899ひげぽん ◆Ngzcp/NZpA
NGNGFAT12のドライバをMonaとは切り離して実装中です。
読み込みに関しての仕様をやっと把握できたのでがりがり実装中です。
ただ仕事が最近も忙しいため、昔ほどは思うようには時間が取れない状況です。
やる気だけは、あるのですが・・・
一応以下の感じで進む予定です。
ファイルシステムの実装
ユーザーモードの実装
ファイルシステムをユーザーモードで呼び出すことにより
マイクロカーネル化
シェルの実装
0900名無したん@オレンジペッコー
NGNG0901デフォルトの名無しさん
NGNGファイルシステムって絶対決めちゃわないといけないんですか?
よく判らないんですが、例えば MacOS X ではバーチャルボリウムレイヤがあって、その上で動いてますよね?
だから、バーチャルボリウムレイヤが対応していればどんなファイルシステム上でも一応動作できるようになってますよね?
そう言う風には出来ないんですか?
って言うのがどれほど大変な事なのかも判らないやつなんですけどね。
変な事書いてすんません。
0902デフォルトの名無しさん
NGNG> そう言う風には出来ないんですか?
いくらでもできるだろ。
と言うか今時の OS は、複数のファイルシステムをサポートするのは珍しくない。
当然どっかのレイヤーで仮想化していると思うよ。
それに仰々しい名前を付けて知ったか君にネタを提供するかだけの差だと思う。
0903デフォルトの名無しさん
NGNG>だから、バーチャルボリウムレイヤが対応していればどんなファイルシステム上でも一応動作できるようになってますよね?
バーチャルボリウムレイヤはあくまでも「バーチャル」なので、論理的な存在だということ。
どっかで物理的なフォーマットを用意する必要があって、OSのレベルだとそれも用意しておく必要あるってこと。
実際にファイルにアクセスして読み書きすることもOSの仕事のうちだからね。こんなところでOK?
0904ひげぽん ◆Ngzcp/NZpA
NGNGその結果、現在のMonaのソース行数は以下のようになっています。
stl_portは、私の書いたソースではありませんので*.cpp, *.hが
本当の行数ですね。
SLOC Directory SLOC-by-Language (Sorted)
42535 src_stlport ansic=42533,sh=2
2889 src_top_dir cpp=2323,asm=566
957 src_include cpp=678,ansic=279
92 src_FreeBSD ansic=92
57 tools cpp=57
Totals grouped by language (dominant language first):
ansic: 42904 (92.21%)
cpp: 3058 (6.57%)
asm: 566 (1.22%)
sh: 2 (0.00%)
0905デフォルトの名無しさん
NGNG自分が参加して引っ張る余力もないから批判はできないねぇ……
0906デフォルトの名無しさん
NGNGどうでもいいが、それホントにマグロか?
0907デフォルトの名無しさん
NGNG0908デフォルトの名無しさん
NGNG0909ひげぽん ◆Ngzcp/NZpA
NGNGたしかに、Monaの開発速度は以前より遅くなっていると思います。
多忙なせいなのもありますし、ひげぽんの怠慢もあると思います。
何とかモチベーションを維持してがんばります。
というわけで、Monaにはまだ組み込まれていませんが
FAT12ドライバーの読み込み部がなんとなくできましたw
ドライブレターをまだ決めてないのですが一応ファイル内容が読み込めています。
以下テストサンプルコード
0910ひげぽん ◆Ngzcp/NZpA
NGNGint errorNo = fat->getErrorNo();
if (errorNo == FAT12::BPB_ERROR) printf("BPB read error \n");
else if (errorNo == FAT12::NOT_FAT12_ERROR) printf("NOT FAT12 error \n");
else if (errorNo == FAT12::FAT_READ_ERROR) printf("NOT FAT12 error \n");
else printf("unknown error \n");
/* error */
return -1;
}
printf("fat initilize\n");
if (!fat->open("SOMEDIR\\DIR1\\DIR2\\DIR3\\DIR4", "SOME.CPP", FAT12::READ_MODE)) {
printf("open failed");
}
while (fat->readHasNext()) {
byte buf[512];
fat->read(buf);
for (int i = 0; i < 512; i++) printf("%c", (char)buf[i]);
}
0911デフォルトの名無しさん
NGNG0912ひげぽん ◆Ngzcp/NZpA
NGNG気分だけ盛り上がって、放置気味のファイルを公開します。
何かMonaでの有用な使い道が見つかったり、改良してくれる人が
いたりしたらうれしいです。
BitMap.cpp/h
ファイルシステム実装勉強中に勢いあまって作ったものの使用していない
メモリ管理やら、クラスタ管理やらに使えるかも。
rtc.cpp
リアルタイムクロックで、日付時刻を取得しようとしつつ
いつの間にか忘れてました。FAT12書き込みのときまでには必要ですね。
Monaのほかの部分と結構独立しているので誰か、完成させてくれないかなあ(ボソ
SystemInfo.cpp
cpuidという命令を使用して、現在Monaを実行しているCPUが何者なのかを
知ろうとする機能を持たせようとしました。
ベンダーIDを取得したところで別の機能の実装に入ってしまいました。
これもうまく拡張すればいろいろ便利かも。
0913ひげぽん ◆Ngzcp/NZpA
NGNG>Monaの他のOSと比べてのアドバンテージは何?
今現在は全然アドバンテージにはなっていないですが
カーネルがNASM, GCCを用いて少量のアセンブラと大量のC++で実装されていること。
オブジェクト指向をカーネル実装にも適用しようとしている。
UNIXクローンや、POSIX準拠を目指しているわけではないので
フットワークが軽い?
あたりでしょうか。
0914デフォルトの名無しさん
NGNGひげぽんの人柄、 これにつきる
0915デフォルトの名無しさん
NGNG特に初めの方は、またいつものネタスレかよ... という感じで叩かれもしたけど、きちんと対応してたからここまで来れたんだと思う。
俺も色々勉強になったし、何よりやる気が重要であることを再確認させられた。
厨房化が著しいこの板で一番まともなスレだと思う。
0916ひげぽん ◆Ngzcp/NZpA
NGNGなんだかとても恐縮です。m(__)m
今日は
>>912
で書いていたBitMapクラスを
FAT12のクラスタ管理に使用するようにしました。
FAT12.cppは、読み込み部だけでソースが10KBなので
他の機能と比較してわりとコード量が多めですね。
0917ひげぽん ◆Ngzcp/NZpA
NGNGcreateFile,changeDirectory, read, writeの実装が
なんとなく完了しました。
事前に用意していたBitMapクラスが意外と重宝しました。
残すは
bool FAT12::rename(const char* from, const char* to) {return true;}
bool FAT12::remove(const char* file) {return true;}
bool FAT12::removeDirecotry(const char* name) {return true;}
bool FAT12::makeDirectory(const char* name) {return true;}
ですが、優先度が低いため後回しにされる可能性が高いです。
とりあえず来週は、FAT12.cppをカーネル本体に組み込むテストと
りファクタリングに時間をとる予定です。
少しでも対応するファイルシステムを増やしたいので
ファイルシステムに共通のインターフェースを考えて行きたいです。
Solarisのvnodeインターフェースメソッドのようなものの簡易版ですね。
read, write, open, close, mkdir, rmdir, rename, link, unlink
seek, fsync, ioctl, create
あたりでしょうか。
0918ひげぽん ◆Ngzcp/NZpA
NGNGFAT12#writeで
ファイルサイズが小さくなる場合に、クラスタを開放する処理を
入れ忘れました。しまった・・・
0919名無したん
NGNG0920デフォルトの名無しさん
NGNGところでヒゲポンさんは、WINとの相性は
考えます?
0921ひげぽん ◆Ngzcp/NZpA
NGNG相性とは
FAT12@MONAで読み書きしたディスクがWindowsでも
読み書きできるということですか?
そうであれば、多少は気にしています。
OSとしての互換性、例えば実行ファイル形式等は
特に相性は考えていません。
FAT12の実装をしていて個人的に思ったのですが
既存のファイルシステムのドライバ?が欲しいのであれば
習作以外では、誰かのを作ったのを流用するほうが賢いと思いました。
私は素人なので勉強になったのですが
OSのほかの部分に時間を割いたほうがいい場合もあるかなと。。。
0922デフォルトの名無しさん
NGNG0923ひげぽん ◆Ngzcp/NZpA
NGNGWindows上からも一応認識してくれている模様。
ただ918のやつはまだ対応していません。m(__)m
0925デベロッパー名無したん
NGNG0926デフォルトの名無しさん
NGNG「作ろう」って言うだけ逝って逃げるウンコとは違うようだ。
最終的にはWINDOWSなしで直に起動できればおもろいんだがなぁ。
ってそれが目標ですか?
0927ひげぽん ◆Ngzcp/NZpA
NGNG>最終的にはWINDOWSなしで直に起動できればおもろいんだがなぁ。
>ってそれが目標ですか?
こんにちは。Monaは、いちおうWindowsなしで起動しますよ。
ただそれは、Monaがすごいとかではなく
兄貴分?のNWSOS,OSASK,MEG-OSでもとっくに実現されていることです。
OSとしての機能を以下に追加していくかが課題です。
いまはMonaは最低限の機能さえ実装できていないので
まずはそこからです。m(__)m
0928デフォルトの名無しさん
NGNG開発も大変でしょうががんばってください。応援してます。
(へっぽこプログラマな私には何もお手伝いできませんが・・)
0929デフォルトの名無しさん
NGNG> 既存のファイルシステムのドライバ?が欲しいのであれば
> 習作以外では、誰かのを作ったのを流用するほうが賢いと思いました。
完全なマイクロカーネルにまでは時期尚早ですが、
何らかのダイナミックロードというかプラグインが出来るようにして、
OSサーバとして他のフリーなOSのコードがそのまま動くようにしておくと、
(そのままと言ってもサーバ部分の再コンパイルは必要ですが)
いくらでも潰しが利くんじゃないかと思います。
別にPOSIX準拠が目的でなくても、
DarwinみたいにBSDレイヤを動かせば自動的にBSDになりますし、
Mona独自サーバを動かせば独自モードになります。
それがマイクロカーネルですから。
DarwinのソースとFreeBSDのソースを比較してみると色々と面白いです。
古いDarwin 1.3.1はVPCでも動くはずです。
> 私は素人なので勉強になったのですが
> OSのほかの部分に時間を割いたほうがいい場合もあるかなと。。。
純粋に効率から言うとそうですね。
見たところ一部FreeBSDのコードが入っているみたいですが、
こうやってつなぎで取り合えず突っ込んでおいて、
後で純血(?)を追求できる余裕があるときにでも
リプレースしてしまうというのも手です。
0930デフォルトの名無しさん
NGNGbochsでエミュレートする時fd.cという名前のファイルをリンクしたバイナリから起動したら
3rdExceptionを吐いてしまいます。
そこでfd.c->aiueo.cに変えてみると今度は動くのです。
bochsに禁止語句か何かあるのでしょうか?
エラーはLOCK PREFIX UNALLOWEDと出ています。
bochs 2.02 on linuxでの話です。
0931デフォルトの名無しさん
NGNG0932ひげぽん ◆Ngzcp/NZpA
NGNG>近々Monaの上でMona用のアプリが作れて動かせるようになったら色々やってみたいですね(w
>開発も大変でしょうががんばってください。応援してます。
ありがとうございます。道のりは長いですががんばります。
>>929さん
>OSサーバとして他のフリーなOSのコードがそのまま動くようにしておくと、
>(そのままと言ってもサーバ部分の再コンパイルは必要ですが)
>いくらでも潰しが利くんじゃないかと思います。
なるほど参考になります。
>DarwinのソースとFreeBSDのソースを比較してみると色々と面白いです。
>古いDarwin 1.3.1はVPCでも動くはずです。
おお。面白そうですね。
ソースを探してみたのですがちょっとどの部分がcoreなのか分かりませんでした。
ttp://www.opensource.apple.com/darwinsource/1.3.1/index.html
>後で純血(?)を追求できる余裕があるときにでも
>リプレースしてしまうというのも手です
なるほど同感です。
>>931さん
>エェーPOSIX準拠目指してよぉ
現在はPOSIX準拠は視野に入っていません。
というか詳しく知らないのが現状です。
もっと勉強してから考えさせてください。
0933デフォルトの名無しさん
NGNG自分で頑張れ。
ここはそういう板 (のはず) だ。
0934920
NGNG>読み書きできるということですか?
そうですね^^読み書きだったら、FATの考えかただけ
わかれば作れるのですが、WINだとどうなっているか?と
考えると、少し行き詰ってしまうんですよね^^
>OSとしての互換性、例えば実行ファイル形式等は
>特に相性は考えていません。
実行ファイル・・・考えたくない事項ですなぁ^^;
0935デフォルトの名無しさん
NGNG> ソースを探してみたのですがちょっとどの部分がcoreなのか分かりませんでした。
xnuです。
あと以前誰かが言ってましたが、
引用符">"と引用文の間に空白を入れておかないと
数字が行頭に来たときにリンクだと誤認識されてうざいです。
0936デフォルトの名無しさん
NGNG> 現在はPOSIX準拠は視野に入っていません。
> というか詳しく知らないのが現状です。
> もっと勉強してから考えさせてください。
POSIXを自前実装するのは時間の無駄と思う。
DarwinやRT-Machと同じようにFreeBSDをOSサーバ化して乗っけた方が簡単。
別にLinuxでやってもいいけど。(MkLinux)
というかはっきり言ってそうでもしないと個人レベルの作業量じゃ無理。
# RT-Machのページは閉鎖されちゃったみたいで残念……。
0937デフォルトの名無しさん
NGNGαとかβとかの意味わかってる?>ヒゲポソたん
0938デフォルトの名無しさん
NGNGとりあえず、知ったかぶるのは止めといた方がいいと思うよ。
0939デフォルトの名無しさん
NGNGグローバルスタンダードの時代に俺用語はまずいだろ
0940デフォルトの名無しさん
NGNG俺用語はまずくて俺OSはいいわけですか。そうですか。
0941デベロッパー名無したん
NGNG0942デフォルトの名無しさん
NGNGttp://pc.watch.impress.co.jp/docs/2003/0509/kaigai01.htm
0943デフォルトの名無しさん
NGNG0944デフォルトの名無しさん
NGNG0945デフォルトの名無しさん
NGNG作業効率が上がりそうなOSだねぇ。
0946デフォルトの名無しさん
NGNG演 出 過 多
0947ひげぽん ◆Ngzcp/NZpA
NGNG> xnuです。
ありがとうございます。いま登録しました。
> あと以前誰かが言ってましたが、
> 引用符">"と引用文の間に空白を入れておかないと
> 数字が行頭に来たときにリンクだと誤認識されてうざいです
失礼しました。m(__)m
>> 937
> なぜα版品質にもなってないのにβ名乗ってるの?>Mona
> αとかβとかの意味わかってる?>ヒゲポソたん
するどいですねぇ。
まああまり気にしないでください。(笑)
0948ひげぽん ◆Ngzcp/NZpA
NGNGごめんなさい。
お詫び?に久々にdoxygenドキュメントを公開します。
よくよむとMonaの全貌がうっすらと見えるかもしれません。
ttp://mona.sourceforge.jp/document/
0949デフォルトの名無しさん
NGNG乙彼〜
ところでちょっとした疑問なんですが何故日本語で書かないんですか?
それだけでも厨房にとっては読みやすさが月とすっぽんです〜
海外の開発者を呼び込もうって言うならそもそもsf.jpじゃなくてsf.net使うべきだし……
0950デフォルトの名無しさん
NGNGdoxgenで日本語を扱いづらいからだと思う
このぐらいの英語で困る人もあまり居ないだろうし
0951デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1052537020/
0952デフォルトの名無しさん
NGNGttp://www.miv.t.u-tokyo.ac.jp/~yabuki/tip/doxygen/doxygen.htm
日本語のコメントはHTMLドキュメントの中で文字化けしますが、
ファイルDoxygenでHTML_HEADERを設定しておくとこの現象は起こらないようです。
0953ひげぽん ◆Ngzcp/NZpA
NGNG> ところでちょっとした疑問なんですが何故日本語で書かないんですか?
> それだけでも厨房にとっては読みやすさが月とすっぽんです〜
> 海外の開発者を呼び込もうって言うならそもそもsf.jpじゃなくてsf.net使うべきだし……
そうですね。一応海外の開発者を呼び込もうという目論見でしたが
呼び込まれていません。(笑)
0954わたもち
NGNGこれはいいものを見せてもらいました。
デザインパターンにそった非常にまとまりのいいコードのようなので、
読みやすいです。コメントが日本語なのも心強いです(笑
言語自体も、型を取り去って、簡略化したJavaみたいなものなので、
分かりやすく、気楽な感じでイイと思います。
Wabaだとクラスファイルへのコンパイラを用意しないといけないのですが、
これならその必要もないですし、このへんからやってみるのもいいかなと思っています。
0955デフォルトの名無しさん
NGNG\∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!! ,,、,、,,,
/三√ ゚Д゚) / \____________ ,,、,、,,,
/三/| ゚U゚|\ ,,、,、,,, ,,、,、,,,
,,、,、,,, U (:::::::::::) ,,、,、,,, \オーーーーーーーッ!!/
//三/|三|\ ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
∪ ∪ ( ) ( ) ( ) )
,,、,、,,, ,,、,、,,, ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
,,、,、,,, ( ) ( ) ( ) ( )
0956デフォルトの名無しさん
NGNG0957957
NGNG0958デフォルトの名無しさん
NGNG0959デフォルトの名無しさん
NGNG0960デフォルトの名無しさん
NGNG0961デフォルトの名無しさん
NGNG0962デフォルトの名無しさん
NGNG0963デフォルトの名無しさん
NGNG0964デフォルトの名無しさん
NGNG0965ひげぽん ◆Ngzcp/NZpA
NGNG0966デフォルトの名無しさん
NGNG0967デフォルトの名無しさん
NGNG0968デフォルトの名無しさん
NGNG0969デフォルトの名無しさん
NGNG0970デフォルトの名無しさん
NGNGひげぽんカワイイw
0971デフォルトの名無しさん
NGNG0972972
NGNG0973973
NGNG0974デフォルトの名無しさん
NGNG0975デフォルトの名無しさん
NGNG0976デフォルトの名無しさん
NGNG0977デフォルトの名無しさん
NGNG0978デフォルトの名無しさん
NGNG0979979
NGNG0980デフォルトの名無しさん
NGNG0981デフォルトの名無しさん
NGNG0982デフォルトの名無しさん
NGNG0983デフォルトの名無しさん
NGNG0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNG0986デフォルトの名無しさん
NGNG0987デフォルトの名無しさん
NGNG654321
0988デフォルトの名無しさん
NGNG最初何のことか分からなかったけど気付いて笑っちゃった
0989デフォルトの名無しさん
NGNG0990デフォルトの名無しさん
NGNG0991991
NGNG0993デフォルトの名無しさん
NGNG0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNG0999ひげぽん ◆Ngzcp/NZpA
NGNG10001000
NGNGr l l n
| 、. !j
ゝ .f _
| | ,r'⌒ ⌒ヽ、
,」 L_ f ,,r' ̄ ̄ヾ. ヽ.
ヾー‐' | ゞ‐=H:=‐fー)r、)
| じ、 ゙iー'・・ー' i.トソ ひげぽんマンセー
\ \. l、 r==i ,; |'
\ ノリ^ー->==__,..-‐ヘ___
\ ノ ハヽ |_/oヽ__/ /\
\ / / / |.
y' /o O ,l |
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。