OSをつくろうpart4
■ このスレッドは過去ログ倉庫に格納されています
0001ひげぽん
NGNGスレッドになればと思います。
前々スレッド
OSをつくろうpart2
http://pc3.2ch.net/test/read.cgi/tech/1024411711/
前スレッド
OSをつくろうpart3
http://pc3.2ch.net/test/read.cgi/tech/1027080631/
0331LightCone ◆sSJBc30S5w
NGNGまず基本的なことから知りたいのですが、sh,csh,bashなどは、
「コンソールの枠」としての「kterm」中で起動し、エスケープ
シーケンスの処理は、kterm がやっている、ということなんで
しょうか。
どうやら、kterm のエスケープシーケンスとMS-DOS のそれとは互換性が
あるようですが、あってるでしょうか。
0332LightCone ◆sSJBc30S5w
NGNGhttp://www.google.com/search?hl=ja&inlang=ja&ie=Shift_JIS&q=xterm+ESC+%5B&lr=
0333デフォルトの名無しさん
NGNG> カーソルを移動したり色を変えたりするエスケープコードみたいなものが
> 決まってるんでしょうか。
termcap/terminfo
0334LightCone ◆sSJBc30S5w
NGNGtermcap や terminfo を変えれば、「UNIXの端末使用(xterm,kterm)」と
同じでなくても emacs等が動くかもしれない、ということでしょうか?
0335LightCone ◆sSJBc30S5w
NGNG0336デフォルトの名無しさん
NGNGプログラム中にエスケープシーケンスをハードコーディングしたりすると特定端末でしか動かなくなるから、Unix ではカーソル制御ライブラリを使うのが定石。
これによって、プログラムはカーソルの論理的な動きを記述すれば良い。
実際にエスケープシーケンスへの変換は、カーソル制御ライブラリが行う。
更に、各種の端末に対応するため端末毎に変換規則をデータベース化してある。(termcap/terminfo は、データベースの名前。)
だから、カーソル制御機能がある端末に対応した termcap/terminfo が書ければ、どんな変な端末でも emacs とか動くよ。
0337LightCone ◆sSJBc30S5w
NGNG>実際にエスケープシーケンスへの変換は、カーソル制御ライブラリが行う。
>更に、各種の端末に対応するため端末毎に変換規則をデータベース化してある。
解説有難うございます。UNIXでのカーソル制御や文字装飾制御は、
思った以上に柔軟性が高く、
1. アプリ--->カーソル制御ライブラリ
2. カーソル制御ライブラリ--->エスケープシーケンス
(termcap/terminfoでカスタマイズ可能)
3. エスケープシーケンス--->端末(xterm, kterm)
の3段構えだったんですね。
興味深いのは、アプリやカーネルを対応しなくても、各種環境に
1. カーソル制御ライブラリの置き換え
2. termcap/terminfo の書き換え
3. 端末(kterm/xterm)の書き換え
などで対応できそうな点です。
0338デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/os/1039075591/l50
0339デフォルトの名無しさん
NGNG遅レスですまんが・・・
cmd *.doc *.txt の'*'は自明のとおりshellが展開する。
copy *.doc *.txt みたいなことは基本的にできない。
できないというより、copy Src dst っていうアトミックな
機能だけをコマンドが提供し、ループはshellが担当する
ってのが機能分割の面でメリットあると考えられたからだと
思う。
もし、copy がファイル名を展開できたとしても、次にmove という
コマンドを作るとしたら、同じようにコマンドがファイル名展開
できないと違和感あるし、コマンドの作者が違うと、ルールの
統一をするのも大変だし・・・
あとshell scriptを書かなくちゃいけないって疑問は半分正解で
半分違うと思う。
shell はスクリプトの入力先が、ファイルでも標準入出力でも
気にしないので、コマンドラインから while を打ち込んでも全然
問題ないし。
だから、コマンドラインから直接、
$ for i in *.doc
do
j=`echo $i | sed 's/doc$/txt/'`
cp $i $j
done
やるしね。
ここらへんは文化背景になっちゃうから軽くながしておいてね。
0340デフォルトの名無しさん
NGNGワラタ。
0341デフォルトの名無しさん
NGNG0342デフォルトの名無しさん
NGNG0343名無しさん
NGNG0344名無しさん
NGNG0345デフォルトの名無しさん
NGNG# っていうか俺は全然気にしてないけど。低脳な話してるわけじゃないんだし。
0346デフォルトの名無しさん
NGNGLightConeは餓我なのか?あんま度がすぎるとム板に
NWSOSの開発スレ作ってやるぞ
0347ひげぽん
NGNGMonaでは
secondboot.asmにてGDT上に
セグメント 0x08 type=0x9a(特権レベル0,コードセグメント)
セグメント 0x10 type=0x92(特権レベル0,データセグメント)
セグメント 0x18 type=0x96(特権レベル0,スタックセグメント)
とセットしてブートしています。
ブート後sgdtを実行して
GDTの中身を表示してみると
セグメント 0x10 type=0x93(特権レベル1,データセグメント)
セグメント 0x18 type=0x97(特権レベル1,スタックセグメント)
特権レベルがデータセグメント・スタックセグメントで変更されています。
これのせいでタスクスイッチ時にfault0dが発生しているような気が
するのですが、どこでこのような状況に陥ったかが
つかめていない状況です。
どなたかアドバイスいただけないでしょうか。
よろしくお願いいたします。
0348デフォルトの名無しさん
NGNG原因は別だと思います。
0349LightCone ◆sSJBc30S5w
NGNGNWSOSの初期化コードです。参考にして下さい。
このコードは、16BITコード(USE16)です。
OPER_PREFIXequdb66h
moveax,cr0
;AM=0(アラインメントチェックをしない)
;PG=0(ページングをしない)
;CD=NW=0(WriteThrough キャッシュ有効)
andeax,01ffbff10h
;ET ビット有効
oreax,1;PE=1,PG=0(ページングは無し)
movcr0,eax
;nosmart
;”16ビット”のプロテクトモードへ入る。
db0e9h;jmpnear ptr Init1
dw0
Init1:;本当の32ビットプロテクトモードへ入る
OPER_PREFIX
db0eah;jmp far ptr(Direct Inter Segment)
dd0
dwGDT_INIT32_CODE
Mona の場合、0eah が、16BIT版を使ってますが、このコードでは、
32BIT版を使ってます。
0351ひげぽん
NGNG>それはアクセスビットがたっただけではないでしょうか?
>原因は別だと思います
アドバイスありがとうございます。
ということなので現在の状況を書かせていただきます。
もし何か気になる点がありましたら、ご指摘いただけたらと思います。
「はじめて読む486」のようにprocess1(),process2()という関数を
作成して実行の切り替えを試みています。
■前提条件
0x08 CS
0x10 DS
0x18 SS
0x20 TSS process1用
0x28 TSS process2用
0352ひげぽん
NGNG/* グローバル変数 */
TSS tss[2];
byte stack[512];
{
/* process2用のTSSを用意 */
setTSS(tss + 1, 0x08, 0x10, process2Tester, 0x200, stack, 0x10, 0, 0);
/* GDT 0x20, 0x28にtssのアドレス等をセット */
/* gdt_はgdtr.base */
setDT(gdt_ + 4, (dword)tss , sizeof(TSS), TypeTSS);
setDT(gdt_ + 5, (dword)(tss + 1), sizeof(TSS), TypeTSS);
/* 現在のタスクはprocess1ですよ */
ltr(0x20);
/* 開始 */
process1();
}
0353ひげぽん
NGNGwhile (true) {
_sys_printf("process1");
/* プロセス2へ切り替え */
asm volatile("jmp $0x28, $0\n");
}
return;
}
void process2() {
while (true) {
_sys_printf("process2");
}
return;
}
■ひげぽんの予想する結果
process1process2process2process2process2process2・・・
■bochs上での実際の結果
00000431987i[CPU ] task_switch: bad LDT segment
00000431987i[CPU ] task switch: posting exception 10 after commit point
00000431987p[CPU ] >>PANIC<< can_push(): SS invalidated.
0354ひげぽん
NGNGLDTが必要と言われているっぽいので
GDT ldt[1];
GDT sss[1];
それぞれのtssに tss->ldt = 0x30;
/* GDT に0x30 LDT用追加 */
setDT(gdt_ + 6, (dword)(ldt), sizeof(GDT), TypeLDT);
setDT(ldt , (dword)(sss), sizeof(GDT), TypeLDT);
setDT(sss , (dword)(0), sizeof(GDT), TypeLDT);
lldt(0x30);
■結果
0000487970e[CPU ] load_seg_reg ss: LDT: index > limit
0000487996e[CPU ] prefetch: running in bogus memory
■やってみたこと3
GDT ldt[1];→GDT ldt[2];
■結果
process1fault0dと表示される。
コンソールには
002547802e[CPU ] prefetch: running in bogus memory
と表示されます。
0355ひげぽん
NGNGありがとうございます。
一部とはいえ、NWSOSのコードを見たのは初めてです。
0356超先生@OS板 ◆leaf/RYZgY
NGNG0357ひげぽん
NGNGいつもお世話になっております。m(__)m
>TSS中のLDT SegmentSelectorやFS/GSレジスタが正しく埋まってないとか・・・?
LDTセグメントセレクタは 0x30としています。
gs,fsは0に設定しています。
そもそもLDTってこの場合必須なのでしょうか。
だいぶ煮詰まってきました。
0358LightCone ◆sSJBc30S5w
NGNG今後数百回はこういう作業の繰り返しになると思います。
最終的には誰にも頼れないかもしれませんが。
0359ひげぽん
NGNG>今後数百回はこういう作業の繰り返しになると思います。
>最終的には誰にも頼れないかもしれませんが。
本当ですね。非常に厄介です。
また実践的な資料をなかなか見つけられないのがつらいですね。
ちょっとした間違いで失敗しているのも、全く見当違いのことをしているのも
見た目上、区別がつかないです。(特に独りよがりになっていると・・・)
そこは、LightCone さんや、超先生@OS板さんのような
先人のアドバイスを頂きながら進めると良いなあと勝手に思ってたりします。
いつか、私もOSを作ろうとしている人たちにアドバイスできるほどになりたいです。
0360LightCone ◆sSJBc30S5w
NGNGsetTSS()や、setDT()の中身が正しいか、TSSの構造体が定義通りになって
いるか等を丹念に調べることと、きちっとCPUの動作を理解するしかないです。
0361LightCone ◆sSJBc30S5w
NGNGとりあえず、MonaのSourceに一箇所間違いを見つけました。
void ProcessManager::setTSS(TSS* tss, word cs, word ds, void (*f)(), dword eflags
, byte* esp, word ss, byte* esp0, word ss0) {
memset(tss, 0, sizeof(TSS));
tss->cs = cs;
tss->ds = ds;
tss->eip = (byte)f;
tss->eflags = eflags;
tss->esp = (byte)esp;
tss->ss = ss;
tss->esp0 = (byte)esp0;
tss->ss0 = ss0;
tss->ldt = 0x30;
return;
}
何箇所か、(byte) でキャストしてますが、(byte *)か、(dword)の
間違いだと思います。
これは明らかに間違った挙動を起こすはずです。
0362ひげぽん
NGNG貴重なお時間を割いていただいて大変恐縮です。
ご指摘の部分を修正したところ、ばっちり二つのタスクが交互に動くようになりました!!!!
ひとえにLightCone さんのおかげです。
厚くお礼を申し上げます。
成功した瞬間に、背筋がぞくぞくっと来ました。
どうもありがとうございました。
0364LightCone ◆sSJBc30S5w
NGNGそういえば、Monaのソースでは既にコンストラクタやデストラクタは
正常に動作するようになってるんでしょうか。
OSを書くときに非常に便利そうなんですが。
0365ひげぽん
NGNGどうもありがとうございます。
>そういえば、Monaのソースでは既にコンストラクタやデストラクタは
>正常に動作するようになってるんでしょうか。
>OSを書くときに非常に便利そうなんですが
正常に動作しています。
ただし継承関係のあるクラスできちんと動くかどうかは
確かめていないです。
きちんとカプセルかできるだけでもかなりのメリットです。
0366LightCone ◆sSJBc30S5w
NGNG対応する位でも相当便利になるんでしょうけれども。。。
でも、デストラクタを呼び出すタイミングが意外に厄介そう
だし。
0367LightCone ◆sSJBc30S5w
NGNGメンドクサそうなのでやってないんですが。
0368ひげぽん
NGNG>対応する位でも相当便利になるんでしょうけれども。。。
>でも、デストラクタを呼び出すタイミングが意外に厄介そう
>だし。
なるほどあまり深く考えていませんでした。
今のところインスタンスを大量に作ったりしないので
問題になっていないですが・・・
覚えておきます。
0369LightCone ◆sSJBc30S5w
NGNG#366では、コンパイラを作る時のボヤキだったんですが、
OSを作る上でも、もしかしたら、デストラクタの呼び出し
タイミングとかが問題になる可能性もあるかもしれませんね。
でも、きっと、純粋なCで書くより開発効率は上がると
思います。羨ましい。
0370デフォルトの名無しさん
NGNGでもOSを記述するなら、list vector などを void* ポインタ限定に
してしまえば、cでもSTLもどきは実現できる。
0371LightCone ◆sSJBc30S5w
NGNG>c++の本領が発揮するのはSTLだと思う。
>でもOSを記述するなら、list vector などを void* ポインタ限定に
>してしまえば、cでもSTLもどきは実現できる。
リストを自動化できれば便利ですよね。NWSOSでは、おっしゃっているような
方法を用いてます。同じリスト関数群で色んなリストに適用してます。
0372ひげぽん
NGNG記念にimgファイルを↓におきました。
http://mona.sourceforge.jp/に
今回の件は、Monaにとって大きな節目だと考えています。
イメージサイズも33kbになりました。
FreeDOS教徒さんのブートコードも順調です!!
今までアドバイスいただいた方、手伝って下さった方々に
深く感謝いたします。m(__)m
0373FreeDOS教徒
NGNGマルチタスク化おめ〜♪
0374LightCone ◆sSJBc30S5w
NGNGよくこんな状態にたどり着きましたね。未だに信じられません。
0375ひげぽん
NGNGありがとうございます。
これからもよろしくお願いしますね(必須)(笑)
>>374 LightCone さん
>それにしても、当初アセンブラも余り使われた事のないような状態から
>よくこんな状態にたどり着きましたね。未だに信じられません。
私も信じられないです(爆)
LightConeさんにはお世話になりっぱなしです。
0376デフォルトの名無しさん
NGNG* *
* ∧_∧ *
* (´∀`) *
* *
* *
* * *
|
|
Mona マルチタスク化 おめでとー
0378デフォルトの名無しさん
NGNG耳のずれ方にか?w
0379デフォルトの名無しさん
NGNGHurdと"MAC OS X "のコアMachはこのスレの住人的にはどうなのよ?
マイクロカーネルってMachかWindowsNT系以外思いつかんが
いちおリンク
http://www-2.cs.cmu.edu/afs/cs.cmu.edu/project/mach/public/www/mach.html
http://www.zdnet.co.jp/news/0104/09/e_torvalds.html
0380FreeDOS教徒
NGNGこれからもできる限りお手伝いさせて頂きますw;
>>379
当方マイクロカーネル方面に疎いため、
その方式のどこがいいのか分かりません。
モジュールに分割したら、何かいいことがあるのでしょうか。
0381LightCone ◆sSJBc30S5w
NGNG発想であって、論理的なモジュール分けを行うこと自体はモノリシックカーネル
でも行われます。単にカーネルの外にAPIの実装を出すのとも違うので、DLL
でAPIを実行するだけでは、マイクロカーネルとはいえません。
利点ばかりであれば、大手を上げて賛同したい所ですが、本来の
目的とは裏腹に、下手すると設計がむしろ複雑になる危険性や、
速度パフォーマンスの低下の問題などもあり、反対意見が出てもおか
しくないと思います。
(システムコール発行から結果が出るまでの速度(ターンアラウンド時間)
において不利な一方、割り込み禁止区間の粒度を「確実に」小さくできる
利点があったりして悩みどころ。)
0382LightCone ◆sSJBc30S5w
NGNGときに、「知りたい」と思う人が沢山出てきて、本当にその概念が「良いもの」
かどうかは別としてその新しい概念の研究が盛んに行われる傾向があるので、
研究が盛んであっても、その都度ちゃんと判断して見極めることが大事だと
思っています。その見極めがどっちに転ぶかは人それぞれということで。
0383LightCone ◆sSJBc30S5w
NGNG組み込み向けのiTRONと、超漢字(bTRON?)だけなんですか。
日立やNECのスーパーコンピュータのOSとかはどうなってるんでしょう。
日本では「研究」は盛んですが、実際に作っている人が少ないと
思うのは気のせいですか? あと、OSの研究とは、OSの歴史分類や概念の
取りまとめのことなんですか? 「実際の作り方」の研究はしない?
0384FreeDOS教徒
NGNGよく分かる説明をありがとうございます。
実装を軽くするにはモノリシックカーネル内でモジュール化
するほうが楽そうですね。参考になりました。
0385LightCone ◆sSJBc30S5w
NGNGさえあるのは、独立プロセスとしてサブシステムをどうやって記述すれば
いいかが自明でないからかもしれません。
仮想記憶とファイルシステムとの結びつき、メモリシステムと仮想記憶の
結びつき、サブシステム用のプロセスのローディングとファイルサブシステム
との結びつきなど、自明とは言いがたい問題が沢山あるため、研究してみな
いとマイクロカーネル自体の利点や問題点さえ正確に把握する事が
できないのかもしれません。
告白すると、わたしもよく知りません。
0386デフォルトの名無しさん
NGNG0388デフォルトの名無しさん
NGNG> あと個人的な疑問なんですが、日本で独自なOSを研究以外で作ってるのって、
>組み込み向けのiTRONと、超漢字(bTRON?)だけなんですか。
TRON系を除いて、私の知る範囲で入手可能である非研究OSは
以下のが挙げられます。きっと他にもあるでしょう。
XTAL
ttp://www.xtal.org/xt2.html
Human-OS
NOWSMART-OS
ttp://homepage2.nifty.com/nowsmart/nwsos.htm
H8/OS
ttp://www.linet.gr.jp/~mituiwa/h8/
GR-DOS
ttp://www.nekok.jp/green/k2/gr_dos/gr_dos.htm
> 日本では「研究」は盛んですが、実際に作っている人が少ないと
>思うのは気のせいですか?
気のせいです。
0389FreeDOS教徒
NGNGGR-DOSはもう一昔前に開発を終了しているはずですが?
あと、確かにこれ以外にも人知れずOSを開発してる人はいます。
世界と比べても、そう少ない割合だとは思いません。
0390LightCone ◆sSJBc30S5w
NGNGあと、x86、GUI付きに限定したりすると?
0391デフォルトの名無しさん
NGNGMac OS Xは動いてるしHurdもいちを実用段階には入ってるんだよね?
Machっていうのは単体で動くものなの?
0392デフォルトの名無しさん
NGNGなんでx86限定なんだw
たしかにゴミのように今後もあふれるであろう32bit-x86CPUの再利用っていうのは
大事なテーマになると思うが。
0393デフォルトの名無しさん
NGNGGUI実装目指して頑張ってください
0394デフォルトの名無しさん
NGNGそれぞれのサーバプロセスを複数のマシンに分散できたり・・・
カーネルを2台以上のマシンで走らせたり、カーネルマシンが落ちたとしても
ホットスタンバイしてるカーネルマシンにスイッチできたりとか・・・
ドラえもんレベルの空想でごめん。
0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNGWindowsがあるし、linuxがあるし、BSDもBeOSもあるし。
特にGUIの性能はWindowsがずば抜けてるし、わざわざ用意する必要がない。
日本の場合、FEPの開発もせねばOSとして使い物にならないことが
多いゆえ、OS開発の敷居は高い。それこそ、「超漢字」などという名前のOSが
あるくらい。
一方、米国人だとか欧州人はとても裕福。
週休4日なんてあたりまえで、いわゆる自分の時間を多く確保しても
メシに困らないほどの経済力がある。だから、余暇でOSやツール群に
夢中になる人の割合が多い。
この差だ。
日立、富士通、NECなどの大手は30年も昔からスパコン用のOSを作ってる。
IBM機OSのエミュがあまりにも互換性が高すぎるゆえ、スパイ罪として逮捕された
事件もあるほど。
うぬぼれるな、青木。もっと見識を「豊か」にしろ。
0397ひげぽん
NGNGありがとうございます。
思うところがあって、Linkers&Loadersという本を買いました。
初心者向けっぽいですけど、勉強になりますね。
あと、Monaはマイクロカーネルで行く予定です。(あくまでも予定ですが・・・)
0399LightCone ◆sSJBc30S5w
NGNG出来ないのは単純に技術力がないからだと思ってたんですが。
0400ひげぽん
NGNGasm volatile("ljmp $0x20, $0\n");
はOKなのに
word selector = 0x20;
asm volatile("ljmp %0, $0": /* no output */:"g"(selector));
は
Error: suffix or operands invalid for `ljmp'
と怒られます。
この辺詳しい方いらっしゃいましたら教えていただけないでしょうか。
アセンブラ板のほうがいいのかもしれないですが・・・
0401デフォルトの名無しさん
NGNG日本は世界第二の経済大国ですが。
>日立、富士通、NECなどの大手は30年も昔からスパコン用のOSを作ってる。
それは、マルチタスクや、GUIを持ってましたか。
0402デフォルトの名無しさん
NGNG足引っ張るな!
0403デフォルトの名無しさん
NGNGgcc -Sしてみるとわかりますが
ljmp _selector , $0
というふうにインライン展開されています。
asmには定数を渡す必要があるので
#define FOO_CS 0x20
などとしてやる必要があります。
0404ひげぽん
NGNGありがとうございます。
ということは、ljmp先は動的に指定できないということでしょうか。
拡張インラインアセンブラの入力パラメータは使えない???
でも、ljmpのオペランドは即値だけでなくメモリ、レジスタもOKだと
思っているのですが・・・
何か大きな勘違いをやらかしてそうです。→私
0405デフォルトの名無しさん
NGNGセレクタだけメモリというわけにはいかないので
struct {
dword ofs;
word sel;
} far_ptr;
こんな感じで6byteのポインタを渡す必要があります。
あとあまりお奨めできない方法として
push word selector
push dword 0
retf
(NASM風記述。gasニーモニックは忘れました。)
0406ひげぽん
NGNG>dword ofs;
>word sel;
>} far_ptr;
>こんな感じで6byteのポインタを渡す必要があります
ありがとうございます。
出来ました!!!!
0407LightCone ◆sSJBc30S5w
NGNGhttp://www.ertl.jp/ITRON/SPEC/mitron4-j.html
スケジューリングなどが参考になります。
OSの勉強に使えそう。
0408FreeDOS教徒
NGNG32ビットでマルチタスクのOSといえば、OSASK、NWSOS、EOTA、MEG-OS、Mona
ぐらいしか思いつきません。
x86系、GUI付きOSはそれにMonaを除いてもう1つあります。
0409LightCone ◆sSJBc30S5w
NGNGSCE(SONY COMPUTER ENTERTAINMENT), 東芝, 米IBM が、2005年をめどに
新OS を開発中(SONY の AIBOは、Aperios という独自OSが載ってるらしい。)
大手電機メーカー各社のWorkstationには、UNIXの移植版が
載っている模様。
スパコンは、UNIXの他、独自OSが載っているのもあるらしい。
でも多分、ハードメーカーが載せてるUNIXは、海外ソフトメーカーに委託
したか、FreeBSD等を載せているんだと思う。
BTRONは、超漢字,EOTA など。
0410デフォルトの名無しさん
NGNGところが資金力尽きて、ついにWindows帝国に敗北。
正確には、土地バブルに載って購入した土地資産が1/10以下になって撃沈。
実力はあったのに本業をおろそかにして、
駄目だと言われ続けてたWindowsの拡張工事に余念のなかったマイクロソフトに
頭を下げたのが '93だから、あれからはや10年。
元、ジャスト社員より
0411超先生@OS板 ◆leaf/RYZgY
NGNG< `ー´>-~~~
PC-98用のMS-DOSについてきたDOS-SHELLは手動タスク切り替えもできたよな・・・。
ところで、高級言語とassembleの比率は今のところどのくらいなんでしょう。 >> NWSOS他
0412LightCone ◆sSJBc30S5w
NGNGとりあえず、ソースのバイト数:
アセンブラ コード部:754KB
アセンブラ データ部:30.4KB
アセンブラ ヘッダ部:63.4KB
C言語 コード部:362KB
C言語 ヘッダ部:39.8KB
です。
今のところ、アセンブラ部が大きすぎると思うのですが、内訳は
初期化:34KB
カーネル:193KB
ファイル:99KB
割り込み:58KB
メモリ管理:66KB
DISK-DRIVER:37KB
内臓PROMPT:43KB
旧EMS MANAGER:32KB
旧DPMI MANAGER:53KB
このうち最後の3つは、今後削除する可能性があります。
0413みとこ ◆AEqcy/sQU6
NGNGDOSSHELLはタスク切り替えというよりタスクスワップの気が
めぐたんは現在フルアセンブリです。
ついでに、最新ビルドでもまだマルチタスクをサポートしてません(つД`)
0414ひげぽん
NGNGMonaは
アセンブラコード:10KB(ブートからプロテクトモード移行まで)
C++コード:70KB
C++ヘッダ:10KB
ただしC++部には、ごく一部インラインアセンブラが含まれています。
またdoxygenコメントに対応するため、コメント量が多くなっていますので
C++部は実際は半分のサイズくらいだと思います。
NWSOSとの規模の差が歴然ですね・・・
0415ひげぽん
NGNG気づきました。
タスクスイッチの前にEOIは発行しなければいけないと思うのですが
iretは?疑問がいっぱい出てきました。
この辺のことに詳しい資料とかないでしょうか。
そろそろ「はじめて読む486」だけでは限界がきたかもしれません・・・
もし良い資料等ありましたら教えてくださいm(__)m
0416FreeDOS教徒
NGNGインテルのマニュアルさえあればいいと思う。
iret自体は通常のretfにpopfを追加したものだった気がする。
必要なところを探す能力があれば、それなりに役に立つよ。
0417ひげぽん
NGNG>>iret自体は通常のretfにpopfを追加したものだった気がする。
>>
>>必要なところを探す能力があれば、それなりに役に立つよ。
ありがとうございます。
全くおっしゃるとおりですね。
ちょっと調べてみますです。
0418デフォルトの名無しさん
NGNGプロテクトモードのiretは結構違います
インテルの命令セットリファレンスに詳しい動作が書いてあります
0420デフォルトの名無しさん
NGNGhttp://www.intel.co.jp/jp/developer/download/index.htm
インテルの日本語マニュアルPDF版
0421超先生@OS板 ◆leaf/RYZgY
NGNG< `ー´>-~~~ TSSはあまり使ったことがないが・・・・。
IDT上に割り込みハンドラ用のタスクゲートを置くとかできたっけかな。。。
割り込みハンドラをタスクに見立ててTSSを作っておき、
iretの代わりに実行するTSSへ向かってjmpするとか。
for(;;)
{
/* 割り込み時はここへ飛んで来る */
....
....
jmp tss_next_task; /* 次のタスクへ */
}
0422超先生@OS板 ◆leaf/RYZgY
NGNG< `ー´>-~~~ TSSはあまり使ったことがないが・・・・。
IDT上に割り込みハンドラ用のタスクゲートを置くとかできたっけかな。。。
割り込みハンドラをタスクに見立ててTSSを作っておき、
iretの代わりに実行するTSSへ向かってjmpするとか。
for(;;)
{
/* 割り込み時はここへ飛んで来る */
....
....
jmp tss_next_task; /* 次のタスクへ */
}
0423デフォルトの名無しさん
NGNG0424みとこ ◆AEqcy/sQU6
NGNG割り込みでタスク切り替えするとCR0のNTフラグ?がたって
iret命令でこのフラグチェックするれす。
0425デフォルトの名無しさん ◆mXrBwDDzyw
NGNG0426デフォルトの名無しさん
NGNG0427ひげぽん
NGNG>>424 みとこさん
いろいろとアドバイスありがとうございます。
週末に試してみます。
やっぱり平日はなかなか作業できないっす。
そのかわり年末年始にガツンとがんばります。
0428デフォルトの名無しさん
NGNG過去ログどおりにやったら動いた。
ちょっと感動。
0429超先生@OS板 ◆leaf/RYZgY
NGNG∧_∧
< `ー´>-~~~
ということは割り込み用tssのtask chainに次のタスクを入れてiretすれば楽勝ですな。
元のtssはbusy flagを手動で消さないとダメか・・・。
0430超先生@OS板 ◆leaf/RYZgY
NGNG∧_∧
< `ー´>-~~~
ということは割り込み用tssのtask chainに次のタスクを入れてiretすれば楽勝ですな。
元のtssはbusy flagを手動で消さないとダメか・・・。
■ このスレッドは過去ログ倉庫に格納されています