トップページ⇒tech
982コメント407KB

OSをつくろうpart4

■ このスレッドは過去ログ倉庫に格納されています
0001ひげぽんNGNG
独自にOSを作っているまたは、作ろうとしている人たちのための
スレッドになればと思います。

前々スレッド
OSをつくろうpart2
http://pc3.2ch.net/test/read.cgi/tech/1024411711/

前スレッド
OSをつくろうpart3
http://pc3.2ch.net/test/read.cgi/tech/1027080631/
0412LightCone ◆sSJBc30S5w NGNG
>>411
とりあえず、ソースのバイト数:

アセンブラ コード部: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 NGNG
>>411
DOSSHELLはタスク切り替えというよりタスクスワップの気が

めぐたんは現在フルアセンブリです。
ついでに、最新ビルドでもまだマルチタスクをサポートしてません(つД`)
0414ひげぽんNGNG
>>411
Monaは
アセンブラコード: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
>>416
プロテクトモードのiretは結構違います
インテルの命令セットリファレンスに詳しい動作が書いてあります
0419FreeDOS教徒NGNG
>>318
いま手元に確認できる環境がないのですけど、
リアルモードとは勝手が違うのですね。

鋭い指摘ありがとうございます。
0420デフォルトの名無しさんNGNG
前スレで既出ですが一応
http://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デフォルトの名無しさんNGNG
スマソ。なぜか多重書き込みに・・・ABoneのバグか。
0424みとこ ◆AEqcy/sQU6 NGNG
タスクゲートはIDTにも置けます。
割り込みでタスク切り替えするとCR0のNTフラグ?がたって
iret命令でこのフラグチェックするれす。
0425デフォルトの名無しさん ◆mXrBwDDzyw NGNG
記念パピコ
0426デフォルトの名無しさんNGNG
monaに期待
0427ひげぽんNGNG
>>421 超先生@OS板さん
>>424 みとこさん

いろいろとアドバイスありがとうございます。
週末に試してみます。

やっぱり平日はなかなか作業できないっす。
そのかわり年末年始にガツンとがんばります。
0428デフォルトの名無しさんNGNG
わーい、今日はじめてbochsいれてhigepos.bin動かしてみました。
過去ログどおりにやったら動いた。
ちょっと感動。
0429超先生@OS板 ◆leaf/RYZgY NGNG
>424
 ∧_∧
< `ー´>-~~~
ということは割り込み用tssのtask chainに次のタスクを入れてiretすれば楽勝ですな。
元のtssはbusy flagを手動で消さないとダメか・・・。
0430超先生@OS板 ◆leaf/RYZgY NGNG
>424
 ∧_∧
< `ー´>-~~~
ということは割り込み用tssのtask chainに次のタスクを入れてiretすれば楽勝ですな。
元のtssはbusy flagを手動で消さないとダメか・・・。
0431デフォルトの名無しさんNGNG
また多重に・・・スマンカッタ。ABone作者を小一時間問い詰めておきます。
0432みとこ ◆AEqcy/sQU6 NGNG
どうでもいいけどTSSのビジー消しは面倒ですね。
昔、RMに落ちた後PM戻るPG書いたとき一般保護例外発生して困って
よく調べたらビジーTSSが原因だった、、、(><
0433ひげぽんNGNG
今の3倍くらい勉強しなければだめだ。
と最近思います。
0434デフォルトの名無しさんNGNG
ひげぽんもLタンも頑張れ
0435デフォルトの名無しさんNGNG
この静けさ。どうやら、LさんもHさんもコーディングにいそしんでるご様子。
0436デフォルトの名無しさんNGNG
ライトコーンタンってどっかで見たことあるなと思ったらこれか!Σ(゚Д゚ )

http://homepage2.nifty.com/nowsmart/index.htm
0437デフォルトの名無しさんNGNG
販売中か!カッコイイ
0438LightCone ◆sSJBc30S5w NGNG
>>437
販売中なのは、Windows用の統合開発環境です。
OSは無料で自由にダウンロードして使えるようになっています。
0439デフォルトの名無しさんNGNG
Light氏のHP見てると、とても個人の作品群とは思えないラインナップだな。
リンカ、ライブラリアン、アセンブラ、ANSI-Cコンパイラ、NWSOSですか・・・

どうも、漏れはケンカ売る相手、間違えたっぽい。
もう、このスレに来ません。ごめんなさい。
0440朝鮮製@OS板NGNG
 ∧_∧
< `ー´.>-~~~

へへへ、俺って顔つきも朝鮮人だろ?
発音も「超先生」と同じ、兄弟さ。
テポドンのOSを作ったのは、何を隠そう、このワシじゃ。

OSに関して、右に出るものはいない。
さぁ、質問してきなさい。HもLも。
ひゃひゃひゃ。
0441デフォルトの名無しさんNGNG
x86の特権レベル1と2って使ったことがないな
効果的な利用法ってあるのだろうか
0442超先生@OS板 ◆leaf/RYZgY NGNG
 ∧_∧
< `ー´>-~~~ PL1,2は使いものにならない、がファイナルアンサー。
ページレベル保護はU/Sの2段階しかないのでほとんど無意味ですな。
0443LightCone ◆sSJBc30S5w NGNG
>>442
私も同感です。

 システムコールに一旦入ってしまえば、コール元の各種属性はいくらでも
知ることができるので、わざわざCPU定義のレベル1,2で判別する意味がない
ので、もし、レベル1,2に利用価値があるなら、CPU命令を実行中の自動保護、
例えば、「ページレベル保護」などに変化が付けられるなどに限定されるはず
なんですが、IA32の場合そこに実質的な変化が付けられないので意味がない、
という説明ができると思います。

結論的には、超先生のおっしゃる事の通りだと思います。
0444441NGNG
やはり、使えませんか。

JITコンパイラ実装時にリミットの異なるセレクタを用意して、
JITコンパイラ自体を保護できないか、などと考えてみたのですが。
0445朝鮮製@OS板NGNG
∧_∧
< `ー´.>-~~~
ふむふむ、既に弟の超先生が、
レベル1,2の蛇足っぷりを示してしまったようだな。

0446ひげぽんNGNG
タスクスイッチ勉強中(若干逃避(ノ´∀`*))
http://www.research.att.com/sw/tools/graphviz/

こんなツール入れたらdoxygenで生成されるドキュメントに
カッコイイ図が!!!
こんなの↓
http://mona.sourceforge.jp/html/classX86MemoryManager__coll__graph.png
0447デフォルトの名無しさんNGNG
>>446
うぉ。カコイイ これとかカコイイ
http://mona.sourceforge.jp/html/monaTypes_8h.html
0448LightCone ◆sSJBc30S5w NGNG
>>444
 セレクタの要求レベルを使った保護なら、レベル1,2が有効に使える可能性
は有ると思います。
0449デフォルトの名無しさんNGNG
ちょいっとメモリ管理について質問します。

X386でメモリ管理する場合って、
例えば、連結リストで物理アドレスにダイレクトマッピングして
管理しているとする時でも、eip, espって結局オフセット値ですよね?

だから、コンテキストスイッチするには
最低限度、cs:eip ss:esp cr3とかは退避しないと駄目なんですか?

ハードウェアのメモリ管理機構とOSでのメモリ管理との繋がりが
よくわからないです。書ボーン。

だれか〜目から鱗落させてクダサイ><

0450デフォルトの名無しさんNGNG
そういえばアメリカの中学生グループがWindowsみたいなGUIを持ったOS作ってたよね。
あれはどうなったのかな?
0451デフォルトの名無しさんNGNG
セグメントと論理の違いをべんきょうしる。
386アーキテクチャはちょっとむずいかも。
0452デフォルトの名無しさんNGNG
S370は単純でおすすめ
0453デフォルトの名無しさんNGNG
286はなんで動作レベルが5段階にもなってたんだろう?
あれにはページングがなかったからセグメントのレベルだけで
保護してたわけだけど、意味あったのかな?
もしかして386が4段階の動作レベルを持つのってその名残?

ウンチク的な役に立たない話ですんまそん。
0454デフォルトの名無しさんNGNG
453>> 286+α=386だからあなたの予想は的中なのだ
セグメント+リミット+ページング+コールゲート
なのだ
0455朝鮮製@OS板NGNG
 ∧_∧
< `ー´>-~~~
>JITコンパイラ実装時にリミットの異なるセレクタを用意して、
>JITコンパイラ自体を保護できないか、などと考えてみたのですが。
ほうほう、君はひょっとして首藤クンかね?
0456デフォルトの名無しさんNGNG
保守
0457朝鮮製@OS板NGNG
 ∧_∧
< `ー´>-~~~
図星かね?
0458デフォルトの名無しさんNGNG
須藤先輩…(;´Д`)ハァハァ
0459デフォルトの名無しさんNGNG
part3ダット落ち。。。
読みたかったのに。
だれか保存してたら下さい。
0460みとこ ◆AEqcy/sQU6 NGNG
http://meg-os.org/2ch/1027080631.dat
0461デフォルトの名無しさんNGNG
>460

ありがとうございます!

ですが。。。なぜか家に帰ってから見たらDAT落ちしてない。。
外で見たときは落ちてたのに。
なぜだぁぁぁ・・・
0462みとこ ◆AEqcy/sQU6 NGNG
●もちですか?(;´Д`)
0463ひげぽんNGNG
最近、いろいろと勉強中で見た目上あまり進んでないのですが
年末年始にドーンと更新しようかと思います。(あくまで予定ですが)

タイマ割り込みでタスクスイッチできずです・・・
0464デフォルトの名無しさんNGNG
>>463
ひげぽんタン、がんばれり。
なまあたたかく応援sage
0465ひげぽんNGNG
>>464
なまあたたかい応援ありがとうござます(笑)

ところでこのスレを見ている人たちは
他にはどんなスレッドを見ているのでしょうか。
やっぱりNWSOSやOSASKのスレッドですかね。
0466デフォルトの名無しさんNGNG
>>465
ココしか見てない。他は自分にとってあまり有益でないから。。。と言うか『ひどいインターネット』だから
OSをつくろうはpart2から見てるけどすっごく勉強になってる。
0467デフォルトの名無しさんNGNG
コス萌え
http://www.cosmoe.com/
0468デフォルトの名無しさんNGNG
>>465
個人的にボードコンピュータを使用することがあるので、
monaを自分が制御したいもののタスクスイッチとして使えたら
いいなと思ってここ見てます。まだ夢の話ですが。
0469デフォルトの名無しさんNGNG
>>465
漏れの場合は、OSASK系スレがメイン。
ひげぽんのスレを見て和製OSを知ったり。
0470みつみ里美 ◆CBIOIS./eo NGNG
割り込み関数を書くときは、スタックフレームを
明示的に扱わないとハマるよ(`□´)くわ〜っ

さて原稿〜(;´д`)へろへろ
0471デフォルトの名無しさんNGNG
ミツミタンハァハァ
0472デフォルトの名無しさんNGNG
あの・・・
馬鹿なOS作って、実験かねて実機で動かして
マシンがぶっ壊れた(゚∀゚)なんてことはありうるのでしょうか?
あったら体験談おね
0473デフォルトの名無しさんNGNG
>>465
俺もここしか見ない。
OSASK は Web 見て、愕然としたから、もう見ない。

>>472
ディスクの中身を飛ばすことはあるが、ハードウェア的に壊れることはまずない。

(もちろん、その PC が、ロボットや溶鉱炉の制御してるとか言うんなら話は別だぞ。
あと、頑張れば BIOS 書き換えぐらいは可能性があるけど、意識的にやらないと
なかなか難しい。)

そう言う意味で、開発機と実験機は分けたほうがいいと思う。
(一緒だと、リブートの嵐だからね。)
今時なら、中古の Pen133MHz 機程度なら \5,000 ぐらいで売られてるから、そう言うのを
使えばいいと思うよ。
0474デフォルトの名無しさんNGNG
>>472
PCじゃないけど…ドライバいじってる時、なぜかNICが壊れた事あり。
原因はいまだに不明。
試作ハードだったから、ハード的な問題だったのかもしれない。
0475デフォルトの名無しさんNGNG
 概ねファイルシステムが出来たと思って遊んでいたら、ハードディスクが
論理的に破壊された経験をもつものです(汗)。
 原因は、PC-98x1のBIOS呼び出し時の、CFフラグの1,0が逆になって
いただけ。

 それからというもの、ハードディスク書き込み恐怖症になり、
さらに厳重にするため、開発機と実験機を分けるようになりました。

 一種のトラウマですが、良い経験だったかもしれませんね(^_^;;)
0476げすきーNGNG
ハナゲを抜いたときの痛さと、
OS開発時にHDを吹っ飛ばす痛さと、

どっちが痛いですか?
0477みつみ里美@しゅら場もーど ◆CBIOIS./eo NGNG
新刊落としたときの痛さに勝るものはないよ〜!≡≡(つдT)ひぃいい〜!!

>>472
初代IBM PC/ATでPICのバッファリングモード使うと焼けるよ。
SP/ENがGND直結で危険(`□´;)
最近の統合chipsetではそんなこと絶対に起きないけどね(`ー´)ふふり
0478デフォルトの名無しさんNGNG
>>465
ひげぽん、がんばれ〜こっちはマターリしてるからイイ!!
私は技術がないんでとても協力なんてできませんが
使う側としてmonaをしっかり見ていきたいと思います。

NWSOSは見てます、ちょいと揉めてるみたいですけど。
OSASKは見ていません。

でもでも、個人的にはメグOSが好きかなぁ(ボソ
キャラとかじゃなくてなんか、AIぽいのが好きなんです。HALとか・・・(オタ
0479みとこ ◆AEqcy/sQU6 NGNG
#osdev-j ・・・(ボソ
0480デフォルトの名無しさんNGNG
正直な所2ch製のOSなんて誰も使いたくないなぁ。
ひげぽんはMegaBBSとかいちごBBSでマターリやったほうがよかったんじゃないかと思う
0481デフォルトの名無しさんNGNG
2ch製といっても、作ってるのはひげぽんだからな
別にいいと思うけど。

0482デフォルトの名無しさんNGNG
>>480
おまい、2chブラウザとかも使うなよ。
0483デフォルトの名無しさんNGNG
でたよ、詭弁の特徴が。
0484デフォルトの名無しさんNGNG
なぜ誰も使いたくないと断言できるのか。不思議だ。そういうもんか。
0485デフォルトの名無しさんNGNG
monaはオープンソースですが、何か?w
0486ひげぽんNGNG
Mona環境でSTLを使えるように環境構築してくれる人募集です。

といってみるテスト
すべて使えるようにならなくていいっす
コレクションが使えるだけで十分です。

string.hで定義されている関数が必要になりそうです。

よろしくおねがいいたします。
0487デフォルトの名無しさんNGNG
ところで、
bochs-winで起動させるディスクイメージは
どうやって作ってるの?
WINDOWSで。ddとかだとバグったし・・
0488ひげぽんNGNG
>>487
http://uranus.it.swin.edu.au/~jn/linux/rawwrite.htm
rawwrite.exeで作成しています。

この辺のことは、どこかにきちんと記述をしたほうがよさそうですね。
ご指摘ありがとうございます。
0489ひげぽんNGNG
>>479
>#osdev-j ・・・(ボソ
osdev-jはレベルが高いですよね・・・
勉強不足を痛感させられる空間ですね。
0490みとこ ◆AEqcy/sQU6 NGNG
じゃひげぽんたんもっと来るれす
0491 ◆TntnZ0uG.g NGNG
>>489 超先生来てるよ
0492henoheno@OS板 ◆mXrBwDDzyw NGNG
>>486
STLの話題を出されたので。

STLの移植に関してですが、STLportはいかがでしょう。
http://pc.2ch.net/test/read.cgi/os/1039075591/337

STLport は SGI STL を移植する方向に持って行ったものから
スタートしたものです。

0493ひげぽんNGNG
>>491
相変わらずレベル高し。

タイマー割り込みによりタスク切り替えを実現すべく
インテルのマニュアルを読んでいました。

(1)EFLAGSレジスタのNTフラグをセットする。
(2)現行タスクのバックリンクを次のタスクにする。
(3)(現行TSSビジーを解除?)
(4)iret

(1)(3)のやり方が分かりません。
そもそもそんなもんは不可能だ!等アドバイスいただけないでしょうか。
0494ひげぽんNGNG
>>492
ありがとうございます。
>STLの移植に関してですが、STLportはいかがでしょう
ほう、こんなものがあるんですね。

STLは一部でも良いので使えるようになるとうれしいですね。
誰か詳しい人いないかな。
0495超先生@コーディネーター ◆leaf/RYZgY NGNG
  ∧_∧
< `ー´>-~~~
>(3)(現行TSSビジーを解除?)

NT=1でiretすれば自動的にbusy解除されるはずです。

>(1)EFLAGSレジスタのNTフラグをセットする。

popfd命令でEFLAGSを変更できるはず。
0496ひげぽんNGNG
超先生@コーディネーター さんありがとうございます

pushfd,popfdを
組み合わせれば何とかいけそうな気がしてきました。
0497デフォルトの名無しさんNGNG
>>495
ガンダムseedでつか?
0498ひげぽんNGNG
NTフラグをセットしてiretしてみました。
bochs君に IRET: TR not valid
と怒られました。
現在調査中です。
0499げすきーNGNG
ハナゲを抜いたときの痛さと、
LタンのGPL叩きの痛さと

どっちが痛いですか?
0500超先生@OS板 ◆leaf/RYZgY NGNG
  ∧_∧
< `ー´>-~~~ そういえば。
切り替え先TSSのbusyフラグを立てておかないと、無効TSSで落ちるかも。。。。

ctrl_xfer_pro.cppのBX_CPU_C::iret_protectedを参照。
0501デフォルトの名無しさんNGNG
>>どっちが痛いですか?
痛さの単位。1ハナゲ。

どっかの学者が4/1に言ってたっけ。
0502デフォルトの名無しさんNGNG
ね、ひょっとしてC++で書かれたカーネルって世界的に見ても、
MONAが先駆?
0503ぁゃしぃ肉球苦楽撫NGNG
あのぺーじ、復活させて〜。
0504デフォルトの名無しさんNGNG
>>502
NT系はC++じゃない?
0505ひげぽんNGNG
bochs2.0がリリースされた模様。
0506ひげぽんNGNG
超先生@OS板さん
ご指摘の通り、切り替え先をTSSBusyにしたらOKでした。
いつもいつもありがとうございますm(__)m

ということでタイマ割り込みによりタスクスイッチする実験に
成功いたしました。

アドバイスいただいた方々ありがとうございました。

ところでbochs2.0ですが
文字色が違いますね。
ピンク(実機&bochs1.41)
紫(bochs2.0)

なぜ?
0507デフォルトの名無しさんNGNG
>>504
C++かもしれないが、多分殆どCに近い書き方なんじゃ
ないかなあ。C++で書くと一口に言っても、その内容は
ピンきりだからねえ。
0508デフォルトの名無しさんNGNG
>>507
そういう意味ではMonaは稀有。
0509デフォルトの名無しさんNGNG
EPOCなんかはテンプレートも使っててばりばりにC++で
書かれてる。。
0510デフォルトの名無しさんNGNG
ところでそろそろ関連リンクをまとめない?
俺はやらんが。
0511デフォルトの名無しさんNGNG
>>507
なぜそう思う?
■ このスレッドは過去ログ倉庫に格納されています