調子どう?
がんばってねん。
新スレおめ〜♪
>>4 ありがとうございます。
ブートコード問題が一段落したのでほっと一息です。
ついでにA20問題も一応対処しました。
>ひげぽん
忙しいとは思いますが、がんばってください。
僕も大学の後半からプログラミング初めて、
趣味でi486(386)エミュレーションなど体験し
遊びました。(なかなか安定しませんが)
結局マクロアセンブラなどはあまり解りませんが、
楽しく板を読ませて頂いております。
忙しいけど、またエミュはじめたいなあ。
7 :
デフォルトの名無しさん:02/11/13 02:39
2げっと
firstboot.asm の readsector ですが、bx=0以外のときには対応して
ないと思うのですが、それより問題になると思うのが、
laddr = (es * 16 + bx)
から始まるバッファが、64KB の境界をまたぐとき、PC/AT 機の BIOS
が対応していない(機種がある)ことです。
>Because of the architecture of the DMA channel, an error will
>occur if the buffer in memory for the sectors overlaps a 64K page
>boundary. A 64K page boundary is a memory location which is one of
>the following (10000h, 20000h, 30000h, etc.). Ensure that no part
>of your buffer falls on such a boundary. If it does, create a new
>buffer or start the buffer just after the boundary.
とあります。
お節介なようですが、もう一つ気になる所があります。
以前にも書きましたが、cf = 1 で返ってきた時の処理です。PC/AT の
DISK BIOS は、失敗した時に自分でリトライするのですが、単に繰り返すだ
けでは駄目で、ah = 0 で、"RESET" する必要があることです。
たしか、ハード的に現在のシリンダの絶対位置を取得することができないが、
シリンダ0へだけは正確にシークできるそうで、"RESET"はそうする
そうです(相対的には、盲目的にではあっても正確に動かせるそうです。)。
以下を参考までに。
>If an error is encountered reading a sector, use Service 0 to
>reset the drive and retry the operation. It is recommended that at
>least 3 retries be attempted before an error is signalled, since
>the error may have resulted from the diskette motor not being up
>to speed.
>>LightCone氏
そこら辺は私が提供したのですが、明らかに手抜きしてました。
DMA境界をまたぐ時これじゃ問題ですよね。
早いうちに修正します。
>>10 FreeDOS教徒 様。
少なくとも、今のところ、
>mov ax, 0x0100 ; 512 byte from 0040:0000 is BIOS work area
>mov es, ax ; ... but usually it wasn't use only 256 byte
>xor bx, bx
>mov ax, 0x0001 ; read kernel from next sector
>mov di, 0x0040 ; 64 sectors
>call readsector
となっていて、512 BYTE * 64 SEC = 8000h バイトに対して、
ES:BX=100:0 ---> 線形アドレス=1000h
ということで、1000h〜9000h のバッファなので、#8の方は現状は問題ない
んですね。
>>11 まだ32KB程度ですが、すぐ64KBを超えると思います。
640KBに近付いたらまた別の対策が必要でしょうね。
>>12 多分、基本的なファイルシステムを含めて、カーネルの基本部分は、
640 KB のイメージに収まるでしょうから、それを超える部分は、
カーネル起動後の正式なファイルシステムを利用できるのではないで
しょうか。
NWSOS では、まず、BIOS がブートセクタを読み込み、
そのブートセクタが、2KB程のローダーを読み込んで、
さらに、そのローダーが、FAT 情報を見ながら、通常のファイル形式の
カーネルイメージ(Ver 0.030現在で110KB程度)をロードする仕掛けを
採っています。
JIS フォントを 216KB ロードする必要があるのですが、それは、
カーネルの持つ正式なファイルシステムを用いてロードしています。
フォントが読み込まれるまでは、まだ、表示系統がある意味では不完全
な状態ではあるのですが、もし、このときにエラーが起きて表示するときは、
JIS FONT相当の部分は、いわゆる「豆腐」を表示すれば暴走は防げます
ので。
>>6 うえぽんさん
ありがとうございます、私もなかなかアセンブラが得意でなく
苦労しています(→勉強しろって感じですが・・・)
この機会にまた始められたらどうでしょうか。
LightConeさん、FreeDOS教徒さん
ひげぽんが考慮漏れしているところをいろいろとご指摘
していただきありがとうございます。
とりあえずLightConeさんのおっしゃっている
> 多分、基本的なファイルシステムを含めて、カーネルの基本部分は、
>640 KB のイメージに収まるでしょうから、それを超える部分は、
>カーネル起動後の正式なファイルシステムを利用できるのではないで
>しょうか。
ということを踏まえて、ファイルシステム部構築に取り組もうかと思っています。
>>14 私は、アセンブラは擬似命令などは結構慣れていても、アセンブラで
書くと良く間違いをするタイプの人です。大き目の関数などだと、
C言語で書いたときより、開発やデバッグに何倍も時間がかかります。
特に最初から書いていくときはまだしも、後から修正したい場合なども、
アセンブラの場合は、関数全体のソースコードをかなり理解してから
でないと大抵正しく修正できないのでめちゃくちゃ大変です。
>>16 例えばの話、FILE_MAX みたいなマクロがあったとしても、GREP置換で、
g_maxFile みたいな変数に置き換えて、再コンパイルするだけで修正
完了となる所が、アセンブラだと、一々ソースを眺めて
xxx [ebx],FILE_MAX
みたいな部分なら、
mov eax,g_maxFile
xxx [ebx],eax
見たいに修正するわけですが、もし、eax が使われているなら、
ecx や edx が使えるかどうか探してどれも駄目なら、push eax, pop eax
で囲って、というような判断を手作業でやっていくしかないですから、
めちゃくは大変です。
> 私は、アセンブラは擬似命令などは結構慣れていても、アセンブラで
>書くと良く間違いをするタイプの人です。大き目の関数などだと、
>C言語で書いたときより、開発やデバッグに何倍も時間がかかります。
これは分かります。
そんなに大きいものは書いたことがありませんが
いくら賢く書いたつもりもでもやはりメンテナンス性は
なかなか上がらないです。
>push eax, pop eaxで囲って
これは良く見かけますね・・・
賢い人の書いた良いソースに触れる機会があって、さらにバリバリ自分でも
書くようにすれば多少は進歩するとは思うのですが
どちらもやっていません・・・
ファイルシステムをカーネルには組み込まないのが一番だと思われます。
スレッド管理、プロセス管理、メモリ管理などのみをカーネルに組み込み
ファイルシステムは、特殊1プロセスに過ぎない存在にすることをお奨めします。
ちなみにlinuxのカーネルは圧縮しても512kbを越えて大変なことになった時期が
あるそうです
>>519 マイクロカーネルですね。
NWSOSでは、今のところカーネル内に持っていますが、DLL形式にして
分離すれば効率を落とさずに済むのでしょうか。
そういえば、マイクロカーネル方式だと、瞬間瞬間では、1プロセスのみが、
ファイルシステムのコードを走行するのでしょうか。もしそうだとすると
並列製が落ちる可能性はありませんか。
モニリシックカーネルだと、複数プロセスが同時にカーネルコードを
走行できるので、タスク間の並列性が上がったりするのではないかと
思うのですが。
>>14 ひげぽんさん
>>6 では敬称略などしてしまい、申し訳ありませんでした。
x86エミュレーションの保護モード部の実装のために、マニュアルでは
解りにくい動作を実機で調べたりするのですが(i486搭載pc9821使用)
タスクやページングを使おうとすると DDEB.EXEなどではもうお手上げです。
エミュレーションの方はもう少し動作原理を理解すれば、
安定性が上がりそうな気もしますが・・・実モード部も遅くて不安定だし(泣)
>>16 LightCone ◆sSJBc30S5w さん
なるほど。
かなりの経験者の方でも、Cのように気軽に組んでいくのではなくて、
根気が必要なわけですね。たしかにマクロアセンブラでも、レジスタ資源
が限られているわけだから、そういった苦労がつきものですね。
擬似命令も結構わからない部分が多いですが、少しづつ勉強しながら
レスを読ませていただきます。
ライトコーソタンのマンコ見たい。
>そういえば、マイクロカーネル方式だと、瞬間瞬間では、1プロセスのみが、
>ファイルシステムのコードを走行するのでしょうか。もしそうだとすると
>並列製が落ちる可能性はありませんか。
subsystemサーバープロセスのスレッド数を、プロセッサ数×n (※)などで
決め打ちしておき、message-queueで処理するとか。(nまで再入可能)
※ threadが極めて軽量な実装ならば、ユーザー側スレッドのトータル数でもいいかも。
>>19さん曰く
>ファイルシステムをカーネルには組み込まないのが一番だと思われます。
>スレッド管理、プロセス管理、メモリ管理などのみをカーネルに組み込み
>ファイルシステムは、特殊1プロセスに過ぎない存在にすることをお奨めします。
LightConeさん曰く
>マイクロカーネルですね
以下略ですすいません。
higeposは一応マイクロカーネルを目指しています。
また、ファイルシステムが容易に差し替え可能である手段として
ファイルシステムをカーネルに組み込まないというのはありだと思っています。
そのばあいは、やはりプロセス管理からはじめないといけないですよね。
minixのファイルシステムとカーネルの関係がいまいちつかみきれていないので
勉強中です。
>>21うえぽんさん
>>14 ひげぽんさん
>>6 では敬称略などしてしまい、申し訳ありませんでした。
全然気にしてないです、というかひげぽんで良いですよ。
>x86エミュレーションの保護モード部の実装のために、マニュアルでは
>解りにくい動作を実機で調べたりするのですが(i486搭載pc9821使用)
この辺の姿勢には全く頭が下がります。見習わなくては・・・
プロセス管理のほうを
ファイルシステムよりも先に実装したほうがよさそうな気がしてきました。
ここは考えどころですね。
マイクロカーネルの勉強もしないといけない。
27 :
デフォルトの名無しさん:02/11/16 00:38
>>27 こんなおもしれーマニュアルが、、、知らんかった。
情報サンクスポ
>>27 有用なリンク紹介ありがとうございます。
>ところで、たんねんばうむの本はどのくらい進んだ?
一応ソース以外は、斜め読みしたのですが
結局辞書代わりになっていますね。
あの辺にこんなことが書いてあったはず、みたいな感じで
何回も読み返しています。
おい、乱子交濡(ライトコーン)。
てめえさっさとやらせろやおけ!
動作テストは、主にbochsで行っています。
そして大きな変更があったときや、CVS commitする前に
実機で動作確認を行っています。
他のOS製作者の方々は、どういう手段を用いているのでしょうか。
bochsではいずれ限界が来るのかな・・・
vm wareも以前評価版を入れていましたが、本格的に使うとなると
買わなきゃいけないんでしょうね。
OS開発者はタダ!!みたいなライセンスではないだろうな・・・
32 :
デフォルトの名無しさん:02/11/16 16:52
そのうちどうしても実機が必要になると思われる。
33 :
デフォルトの名無しさん:02/11/16 17:11
VS.NETのMSDNデラックスっていうのを買って登録したら
OSやらサーバーやらオフィスやらいろいろ送られてきたから、
何人かで分けて使ってるけど、これって違法じゃないよね?
マイクロソフトから何か言われた人いる?
35 :
デフォルトの名無しさん:02/11/16 17:32
当面の目標は、タスク(プロセス)管理です。
2つのタスクの実行の切り替えの実験から始まると思います。
一から勉強します。
>>37 で、Monaの由来どうするの?
Micro Kernel
Operating System
with
Network Suit
Architecture
とかにするの?
こんばんは
>Micro Kernel
>Operating System
>with
>Network Suit
>Architecture
なかなか良いですね
がんばって早く、Network Suitにしないと(笑)
41 :
デフォルトの名無しさん:02/11/17 22:19
MONA
OS is
Not
Abone
MONA OSは落ちません。
MONA
OS
does
Never
Abone
は、どうよ?
2ch生まれだから『MONA』それでいかんの?
>>41 >>43 いいですねぇ。
>>44 >まぁ、落ちるんだろうけどな。
なるべく落ちないようにがんばりまふ。
>>45 >2ch生まれだから『MONA』それでいかんの?
という意見もありますね。
MONA・・・モナー・・・マナー・・・マナマナ・・・ガクガク(((゚д゚;)))ブルブル
MinOr kNown Application
MONA・・・モナー・・・マナー・・・マナカナ・・・ガクガク(((゚д゚;)))ブルブル
>>43 doesは不要かと。
Mona is a Operating system Never Abone
とか。
というかaboneなどという英単語は無いし。
Abortならわからんではない。
MOna is Not A giko
MOna is Not Asso
とか。
MOna is Not an Application
Mona is an Operationg system, Not an Application
あれ?これガイシュツかな?
51 :
デフォルトの名無しさん:02/11/18 08:20
>というかaboneなどという英単語は無いし。
いや、あってたまるか。と。
>>50 >>51 笑いました。
ところでvmwareって高いですね。ちょっと手が出ない(笑)
LightConeさん
nwsosのソースって公開されているんでしょうか。
ちょっと見てみたいなあと最近思います。
すんません独り言です、気にしないでください・・・
>>52 nwsosは商用を目指しているので、ソース公開はあり得ないんじゃないかな?
個人的には、商用クローズ開発と、オープン開発、お互いにどういう経路で
発展していくか?に興味あるので、nwsosとmonaに激しく注目している。
今のところ、さすがにnwsosとは比較にならない工事段階だけど、
比較対照としてはおもしろいと思ってます。
簡単にソース見ちゃ詰まらないと思いますよ。
現在の段階では、識者からアドバイスを受けて成長するのが一番。
このスレの存在意義に、ひげぽんさんの成長も含まれていると思う漏れ。
>>52 >nwsosは商用を目指しているので、ソース公開はあり得ないんじゃないかな?
>個人的には、商用クローズ開発と、オープン開発、お互いにどういう経路で
>発展していくか?に興味あるので、nwsosとmonaに激しく注目している。
そうですよね。
商用であるということ&今までクローズでやってきた事から
オープンにするメリットは少ないかもしれませんね。
>簡単にソース見ちゃ詰まらないと思いますよ。
>現在の段階では、識者からアドバイスを受けて成長するのが一番。
>このスレの存在意義に、ひげぽんさんの成長も含まれていると思う漏れ。
そうなんですよね。
簡単にソースを見ちゃあいけない・・・分かっています。
ただ、煮詰まったときに 賢い人の書いたソースを見ると
目から鱗ですごく自分の成長になるんですよね。
もう少し煮詰まるまでがんばってみます。
56 :
デフォルトの名無しさん:02/11/19 01:32
Mysterious Occult Night Affair
神秘的で超自然的な夜の出来事
57 :
デフォルトの名無しさん:02/11/19 01:35
つーか、意図的にxはずしたってことはPOSIX互換にしたくないってことなの???
なんのために???
>>そういえば、マイクロカーネル方式だと、瞬間瞬間では、1プロセスのみが、
>>ファイルシステムのコードを走行するのでしょうか。もしそうだとすると
>>並列製が落ちる可能性はありませんか。
>subsystemサーバープロセスのスレッド数を、プロセッサ数×n (※)などで
>決め打ちしておき、message-queueで処理するとか。(nまで再入可能)
>※ threadが極めて軽量な実装ならば、ユーザー側スレッドのトータル数でもいいかも。
ご返答有難うございます。
これは、例えば、ファイルシステムのプロセスが、内部的に固定的に、
5個のスレッドを持っているような状況を想像すればいいのでしょうか。
こういう仕組みでも一応「1プロセス」と言えなくもないわけですね。
これだと、確かに並列性は落ちないかもしれませんね。
マイクロカーネルは、それぞれのサブシステムがシングルスレッドしか
持ってないのだとに思っていたので、もっと並列性が落ちるのかと思って
ました。
>>52 残念ながら、今のところ公開はされてません。
ところで、公開されていると、逆に詰まらなくなったりしませんか?
>>19,
>>23 なんだか、NWSOSも、マイクロカーネルを採用したくなってきました。
ファイルシステムのプロセスが、メモリ空間的に分離されている別
プロセスのバッファを扱う仕組みを1分くらい考えてみたのですが、
どのようなものが考えられるでしょうか。
ちょっと思いついたのは、個々の一般ユーザープロセス内に、DLL の形で
「ファイルシステム-サポートライブラリ」みたいなものをロードして、
ファイルシステム本体のプロセスと通信するようなものです。
サポートライブラリ自体は、それぞれのユーザープロセスの全メモリが
可視なので、共通メモリなどを介して(コピーして)ファイルシステム本体
と通信をする、という方法です。
(ちょっと難しくなりそうですが、ページングを駆使すれば、コピーせずに
済ますこともできるかもしれませんが。)
仮想メモリ(固定ディスクとのSWAP)などとの連携も難しそうですが。
>>55 >煮詰まったときに 賢い人の書いたソースを見ると
>目から鱗ですごく自分の成長になるんですよね。
私のコードにも恥かしながら汚い場所がいっぱい有り、それが公開に
踏み切れない理由の一つでも有ります。
他人のソースを見ると目から鱗、というのは、確かにありますね。
、、、
このスレでもやってるな
58と60、59と61は一つのレスにまとめられるだろうに。
行き当たりばったりでレスせずに、もっと思慮を入れろよ
>>62 「まとめた方が良い」ということが絶対的に正しいのですか。
少なくともレス数の節約にはなるだろ
>>64 逆に、スレを分けた方が分かりやすいと思う人がいたとしたら?
それは文章の書き方次第。工夫すれば読みやすい文章はいくらでも書ける。
>>65 とりあえず、文章書いたあと30分位置いてみる。
これくらいの流れなら、多少寝かせても亀になることはなかろう。
>>67 文章が汚い、読みにくい、まとまりが無い、ということは認めます。
そういうことなら納得です。ついつい、殴り書きみたいな感じで書いて、
一度も読み返さない癖がありますので、、、(読み返すと何故かイライラ
するんです。)。
今くだらん論争でレス数を無駄に消化してるという自覚はないの?お前ら。
少々レスが多いほうが、見てて楽しいのですが。
技術的なウンチクばかりじゃ飽きますし、頭も痛くなります。
レスが多いのは結構な事だが、
同一人物の連続投稿はウザいだけ
プロセス管理について勉強しつつ
あーでもないこーでもないと考えるのが楽しいですね。
二つのプロセスの切り替え実験をやろうと思うのですが
設計の段階でいろいろと欲張りすぎて・・・破綻
の無限ループに陥ったりします。
自作自演大好きなひげぽんがウザいだけ
定期ageするひげぽんがウザいだけ
荒れてきたね( ̄ー ̄)ニヤリッ
>(ちょっと難しくなりそうですが、ページングを駆使すれば、コピーせずに
>済ますこともできるかもしれませんが。)
既存のOSには見られない傾向ではあるんですが、ここは思い切って
アプリケーションが読み込みエリアを指定することができないファイルAPI作ってみては
いかがでしょ?通常、freadなどはポインタも指定しますが、これを指定させない。
で、かわりに、FileOpen時にメモリハンドラを貰う。
アプリはこのメモリハンドラ経由でアクセス。
OSがメモリプールを責任もって確保。
posixにあるようなfreadとかって前時代的な仕様だと思うんですよ。
アプリ屋のミスで不法なメモリでも平気でガツガツ書き込んでしまうし。
保護例外で止まってくれればまだありがたいんですがね。
>>75 >アプリケーションが読み込みエリアを指定することができないファイルAPI作ってみては
>いかがでしょ?通常、freadなどはポインタも指定しますが、これを指定させない。
>で、かわりに、FileOpen時にメモリハンドラを貰う。
>アプリはこのメモリハンドラ経由でアクセス。
>OSがメモリプールを責任もって確保。
一度聞いてみたいアイデアなような気がしますので、
ここでおっしゃる「メモリハンドラ」というものの詳細や、この方式での
具体的なファイルアクセスの手順を聞ければ幸いです。
>posixにあるようなfreadとかって前時代的な仕様だと思うんですよ。
>アプリ屋のミスで不法なメモリでも平気でガツガツ書き込んでしまうし。
>保護例外で止まってくれればまだありがたいんですがね。
アプリ側が不法なバッファアドレスを指定した場合、fread() API 内部で、
スーパーバイザ権限で「身代わりアクセス」してしまうことを指摘されて
いるのですね。
ご存知かもしれませんが、これを防ぐ手は一応存在していて、API の処理冒頭
で、メモリが合法かどうかをソフト的にチェックするルーチンをかませば、
跳ね返せます。CPUの保護機能だけでは無理で、通常のCPU命令を用いて
ページテーブルやセグメントの属性やフラグ類をチェックしなければならない
ので、確かに煩わしいのですが。
暫定版PJホームページを公開しました。
たいしたコンテンツはありませんが、最新版ブートイメージが
ダウンロードできます。
http://mona.sourceforge.jp/ タスク切り替えを試みているのですが
実際の切り替え部分(セグメント間ジャンプ)て、
インラインアセンブラでも可能でしょうか?
いろいろとやっているのですが、もし不可能なことを
試みているのであれば、方向転換が必要です。
>>77 >タスク切り替えを試みているのですが
>実際の切り替え部分(セグメント間ジャンプ)て、
>インラインアセンブラでも可能でしょうか?
単体のアセンブラでさえ、通常はOS作成を前提にしていない場合が多い
ため、far jmp、その中でも特殊セグメントへの jmp 命令は記述が無理か、
または、出来たとしても特殊なOBJファイルを掃いてしまう場合があるため、
一番安心なのは、db 命令で直接埋め込む方法かもしれません。
あと、IA32の場合、タスク切り替え用の jmp 命令は、通常の命令の
組み合わせで書けてしまいます。フラグ類の設定を通常命令の組み合わせ
でやってしまうだけです。実はそちらの方が楽だったりします。
>>78 IA32には、「タスク間jmp/call」「レベル遷移jmp/call」など色々
用意されていますが、なんのことはない、メモリ中のデータ構造のフラグ
変更と、レジスタセットの値の変更を超えるものではないんですね。
ページディレクトリの物理アドレスを保持するcr3、ローカルセグメント
のテーブルを設定する ldtr、Protect/V8086 モードを区別するeflags、
TSSセグメントセレクタtr などの設定を変えることや、全レジスタの
保存・復帰以外とには、特にやることは無かったと思います。
(tr から全ての情報がたどれますが、ltr 命令だけでは、確かcr3や、
ldtr は変更されなかったような気がします。)
LightConeさん
> 単体のアセンブラでさえ、通常はOS作成を前提にしていない場合が多い
>ため、far jmp、その中でも特殊セグメントへの jmp 命令は記述が無理か、
>または、出来たとしても特殊なOBJファイルを掃いてしまう場合があるため、
>一番安心なのは、db 命令で直接埋め込む方法かもしれません。
目から鱗です。db命令で埋め込むとは気づきませんでした・・・
最悪の場合この手があるのですね。ありがとうございます!!!
> あと、IA32の場合、タスク切り替え用の jmp 命令は、通常の命令の
>組み合わせで書けてしまいます。フラグ類の設定を通常命令の組み合わせ
>でやってしまうだけです。実はそちらの方が楽だったりします。
これは一応認識していたのですが、
たしかに、おっしゃる通りかもしれません。
>>78, 79
おかげでProcessManagerの設計指針が見えてきました。
ありがとうございます。
monaでは
secondboot.asmにてgdt関連の設定を行っています。
dw gdt_end - gdt0 - 1 ; gdt limit
dd gdt0 + 0x100 * 16 ; start adderess
プロテクトモード移行後
インラインアセンブラで
asm volatile("sgdt %0\n"
: /* no output */
: "m" (gdtr)
);
_sys_printf("gdtr.limit = %d\n", gdtr.limit);
_sys_printf("gdtr.base = %d\n", gdtr.base);
とやってみると
gdtr.limit = 31
gdtr.base = 0
と表示されます。
limitは意図どおりの値なのですが
baseの値が0というのが違和感があります。
何か大きな勘違いをしてそうで・・・
trの参照先のTSSが32bitならcr3があるよ。
ldtrは使ってないんで覚えてないがあるはず。。。
ぶー何処いった?
>75 じゃないから、違っているかもしれないけど...
>>76 > 一度聞いてみたいアイデアなような気がしますので、
> ここでおっしゃる「メモリハンドラ」というものの詳細や、この方式での
> 具体的なファイルアクセスの手順を聞ければ幸いです。
メモリハンドラは、単なるポインタでいいと思う。C で書けば...
File F = fopen("test.txt", "r");
char *p = fread(F, 100);
とかすれば、OS が 100バイトの領域を確保して、そこにデータを読み込んでから、そのアドレスを返してくれるという感じかと...。
C だと、free(p) とかしないとダメだけど、Java とかならそれも必要ないだろうし。これで、fread() が間違ったアドレスにデータを書き込んでしまうことは防げるでしょ ?
> アプリ側が不法なバッファアドレスを指定した場合、fread() API 内部で、
> スーパーバイザ権限で「身代わりアクセス」してしまうことを指摘されて
> いるのですね。
今時、そんなタコな OS は無いでしょう。当然...
> ご存知かもしれませんが、これを防ぐ手は一応存在していて、API の処理冒頭
> で、メモリが合法かどうかをソフト的にチェックするルーチンをかませば、
> 跳ね返せます。
ぐらいはやってはず。そうではなく、fread() に間違ったアドレス指定して、自分で使う領域を壊したりするのを防ぎたいんだと思う。最近のコンピュータウィルスで使われるバッファーオーバーランとかを避けたいだけじゃないでしょうか。
> CPUの保護機能だけでは無理で、通常のCPU命令を用いてページテーブルや
> セグメントの属性やフラグ類をチェックしなければならないので、確かに
> 煩わしいのですが。
プロセサによっては、保護機能を使えるのもありますよ。(68K の moves とかね。)
>>82 新たにTSSを追加をする場合
dt分のスペースをお尻に確保しなければならないことに気がつきました。
secondboot.asmで仮に設定しておいて
C++に移行してからもう一度設定しなおしたほうがいいのでしょうか。
うーん勉強が足りません。
バッファを固定にしてユーザーモードからバッファを転送すれば何も考えなくても保護機能が動きます。(*゚ー゚)
少し無駄ですが、、、
>>88 あれってソースがただ印刷されて、コメントが日本語訳されてるだけじゃなかった?
役に立つような解説はなかったような。
カーネルをダウンロードして読むってのじゃだめなのかな?
>>88 詳細Linuxカーネル 5800円:高いですが参考になりそうなので一ヶ月ほど前に購入。
Linux2.4 インターナル 3200円:内容は上記より少なめですが、短いので読みやすいかも。
OS そのものとは関係有りませんが、SHELL プログラミングでお勧めなのが、
SOFT BANK「入門UNIXシェルプログラミング」Bruce Blinn著 山下 哲典 訳
>>87 (恐らく)転送時間が1レベル増えるであろうことを気にしないなら単純でよさそうな方法
ですね。
セクタの内容をキャッシュするセクタバッファの他に、ファイルごとに
キャッシュするファイルバッファというものがあるそうですが、後者を
うまく使えばバッファの転送時間もかなり減らせるかもしれませんが。
>>85 >そうではなく、fread() に間違ったアドレス指定して、自分で使う領域を
>壊したりするのを防ぎたいんだと思う。最近のコンピュータウィルスで使わ
>れるバッファーオーバーランとかを避けたいだけじゃないでしょうか。
fread()の場合は取得サイズをアプリ側が指定するので特に問題は
ないと思うのですが、OS側から可変長のデータを取得する時には
その問題を感じます。
例えば、何らかの文字列データ(例では他のタスクの名称)をOSから
取得したい時、APIによっては次のような形式を用いますが、ちょっと問題
を感じます。
<<続く>>
<#94の続き>
//int GetTaskName(HTASK hTask, char *pFilename);
void PutTaskName(HTASK hTask)
{
int size = GetTaskName(hTask, NULL);
if (size == 0) {
put_err("hTask is wrong?");
}
char *pName = malloc(size + 1);
if (ptr == NULL) {
put_err("Memory shortage!!");
}
else {
GetTaskName(hTask, pName);
printf("The name of task(%08X) is %s\n", hTask, pName);
free(pName);
}
}
一言メモ:
GetTaskName(hTask,pName)は、pName にNULLを指定すると、
受け取るタスク名の長さを返す。通常、二度呼び出して、pNameのバッファ
をアプリ側が確保する。
<#95の続き>
ここで問題となるのは、hTaskの名前が二度のGetTaskName()呼び出しの
間に変化する可能性です。起動後のタスクではタスク名が絶対変化しないよう
なシステムだと問題なくても、SetTaskName()のようなAPIが用意されている
場合に問題が起きます。
もし、今の例の様に、GetTaskName()を二度呼ぶような仕様だと、
何らかのロック処理が必要になるはずですが、現実のよく知られたOSでは
私の知る限りそれが出来ないケースがあります。
このような場合には、
const char *GetTaskName2(void);
のようなAPIの方が簡単では有ると思います。ただし、これにも短所が
あります。空システムメモリ空間が圧迫される可能性があることです。
>>90 >こっちと勘違いしてた。上のは見たことない。
おお、こんなのもあるんですね。
指定されたURLのレビューを見ると詳解の後に
読むことを薦めていますね。
>>92 LightConeさん
>詳細Linuxカーネル 5800円:高いですが参考になりそうなので一ヶ月ほど前に購入。
えっと、だいぶ背中を押されました(笑)
たぶん買います、いやきっと買うでしょう。
>OS そのものとは関係有りませんが、SHELL プログラミングでお勧めなのが、
>SOFT BANK「入門UNIXシェルプログラミング」Bruce Blinn著 山下 哲典 訳
これ会社の同僚が持っていた気がします。仕事でcshを使うので
ちょっと見せてもらってみます。
>>97 OS作りでは、実はコマンドラインSHELLがかなり重要なのではないかと
思えてきた今日この頃です。
UNIX好きの人でも、CYGWIN環境があれば満足してしまう人も多いようで、
一番大きな理由が、UNIX互換のシェルが使えるからだそうです。
UNIXは、カーネルも優れた側面を持っていると思いますが、
シェル、特にシェルスクリプトの機能(その一行切り出しとしての
コマンドライン解釈部)が強力なことも見逃せないと思います。
それにしても UNIX のシェルはいいですね。
割込み、すいません。
C言語でモニタとコルーチンを実装(ライブラリを作成)したいのですが、
WEBで探してもなかなか合った文献がみつかりません。
どなたか、実装方法教えてくれませんか?
WEBや書籍でもいいのでお願いします。
*Modula-2からCへの移植を行うため、モニタとコルーチン機能がCで必要になりまし
た。
>>98 中級ぐらいと思う。
メインはデバドラとブートコード。
「詳解Linuxカーネル」はあまりLinux板では評判よくなかった。
自分ももってるけどLinuxOSの概念の説明で
具体的なコードが書かれてないからすきじゃない
>>101 良いことを聞きました。
「詳細Linuxカーネル」は訳本のせいもあるのか文章量が多めで、途中から
斜め読みするには辛いものを感じていたのですが、よく考えるとこの本は、
プログラミング言語で書かれた部分は、構造体定義のみで、他は
ほぼ全て自然言語で書かれています。プログラミング言語も適度に有った
方が分かりやすいのかもしれませんね。今度ご紹介の本を見てみたいです。
103 :
デフォルトの名無しさん:02/11/28 19:47
Linuxのソースを参考にしながら開発するとmonaはGPLになると思われるがよいか?
>>103 ソースをコピーしない限りは、恐らく大丈夫かと。
特許が採られてない限り、技術の内容を真似ること自体は自由では?
そうでないと、知らず知らずにGPLのソースを偶然目に触れてしまって、
いつのまにか真似てしまった場合などにおかしなことになるかと。
>>104 > ソースをコピーしない限りは、恐らく大丈夫かと。
これはGNUプロジェクトでは"駄目orグレー"だと認識されています。そのため
GNU Coding Standardには"他の実装(Implementation)"を見ないことを推奨し
ていて、見てしまった場合は別の実装を考えるように推奨しています。
日本の法律ではコピーしなければ大丈夫だったと思うけど、海外から訴えられ
たらたまらんですな。
>>103 >>104 >>105 >Linuxのソースを参考にしながら開発するとmonaはGPLになると思われるがよいか?
一応monaはGPLなので問題ないかと。
LightConeさんの仰るとおり
>ソースをコピーしない限りは、恐らく大丈夫かと。
という認識で私もやっています。とおもったら・・・
>これはGNUプロジェクトでは"駄目orグレー"だと認識されています。そのため
>GNU Coding Standardには"他の実装(Implementation)"を見ないことを推奨し
そうなんですか・・・
いろいろなフリーのOSのソースを見て勉強してしまっているんですが・・・
いちおう参考にすることはあっても、コピーはしないようにしています。
自分のためになりませんし・・・
>>106 >> ソースをコピーしない限りは、恐らく大丈夫かと。
>これはGNUプロジェクトでは"駄目orグレー"だと認識されています。そのため
>GNU Coding Standardには"他の実装(Implementation)"を見ないことを推奨し
>ていて、見てしまった場合は別の実装を考えるように推奨しています。
こわばら こわばら。
「見てない」って言い張るだけで回避可能とかではない?
GNU GPLにそこらへんの基準は載ってないのね。
‥‥ていうか、コピペまがいの行為はしないから、大丈夫でしょ?
実装が似通う例なんて腐るほどあるし。
>>110 >‥‥ていうか、コピペまがいの行為はしないから、大丈夫でしょ?
してないつもりです。
>実装が似通う例なんて腐るほどあるし。
そうですよね、、、。
もし、GPLのソースを見て勉強しただけで、自分のプログラムのライセンスまで
制約されると言うのならば、かなり無理が有りませんか。
112 :
デフォルトの名無しさん:02/11/28 21:57
こわばらage
>>110 > GNU GPLにそこらへんの基準は載ってないのね。
いや、GNUの場合はUNIXの著作権を侵害しないように気を付けろってことだし、
"よりCoolな実装"を目指せば、同じにはならないでしょ。
似たものになっても、より優れていれば大丈夫。
当然、悪くても可 > オレモナー
114 :
デフォルトの名無しさん:02/11/28 22:07
>>111 そう言ってるともとれるのがGPLです。
>>96 > ここで問題となるのは、hTaskの名前が二度のGetTaskName()呼び出しの
> 間に変化する可能性です。
普通、ユーザーが確保した領域に書き込む API は、サイズを渡すように
なっていて、気の聞いた API/OS なら、入りきらない時は必要なサイズを
返すようになってたりすると思うけど ? (例えば、Win32 の
GetWindowsDirectory() とか。)
悪いけど、もう少し他の OS の勉強した方がいいと思うよ。
> 何らかのロック処理が必要になるはずですが、
そんなことしたら、わざとロックかけて SetTaskName() しようとしている
タスクの実行を邪魔することができちゃうよ。(バッファを別に持つとかし
て、回避できるだろうけど、複雑になるしね。)
> ただし、これにも短所があります。空システムメモリ空間が圧迫される
> 可能性があることです。
どう言うこと ?
>>116 きっとタスク名をシステムメモリ空間に確保したバッファに書き込んでユーザープロセスに返すのでしょう。
どうやって読み出すのかは知りませんが。
>>116 >普通、ユーザーが確保した領域に書き込む API は、サイズを渡すように
>なっていて、気の聞いた API/OS なら、入りきらない時は必要なサイズを
>返すようになってたりすると思うけど ? (例えば、Win32 の
>GetWindowsDirectory() とか。)
そういうAPI仕様は知ってはいましたが、#94-#96では言及できてません
でした。すみません。
UINT GetWindowsDirectory(
LPTSTR lpBuffer, // Windows ディレクトリが格納されるバッファ
UINT uSize // ディレクトリバッファのサイズ
);
その方法では結局、実際に文字列を取得する際のサイズが前回取得した
文字列のサイズ以下になるまで繰り返しが必要になり、単に文字列を
取得したいたびにそのようなループを書く必要があることになる
わけですよね。
結局#96での結論と同じく、
const char *GetTaskName2(HTASK hTask);
というような API 仕様だと便利だと思うんです。
>>118 >きっとタスク名をシステムメモリ空間に確保したバッファに書き込んで
>ユーザープロセスに返すのでしょう。
その通りです。 ただし、API呼び出し時に書き込むのではなく、元々存在
している場合の方が多いかもしれませんが。
>どうやって読み出すのかは知りませんが。
共通空間でも、ユーザーが読めるようにすることは可能です(書けるように
することも可能ですが)。
メモリ空間がタスク固有空間か共通空間かと、アクセス禁止属性は独立
して扱えますので。
一応、NWSOS でも、
const char *GetTaskFilename( HTASK hTask );
というAPIにしてみています。
http://homepage2.nifty.com/nowsmart/nwsosapi.htm#NWSOS API
GC完備すれば「バッファサイズ」なんて死語になるのに。。。
122 :
デフォルトの名無しさん:02/11/29 10:57
『GC』て何?
>>122 文脈から、ガーベッジ・コレクションの略だと思います。
理解が間違っているかもしれませんが、
LightConeさんはカーネル内部にTASKのデータを持たせておいて、
外部からはHTASKで操作し、
>>116さんはTASKのデータをTASKに持たせておいて、
カーネルではTASKのIDとかで識別できる程度にしておいて、
カーネルからのメッセージでTASKが動作するといったイメージでしょうか?
# 必要なデータはTASK側で確保するってこと。
そうだとすると、マイクロカーネルを目指すmonaとしては後者の方が
有利だと思うのですが、何か間違ってます?
セグメントディスクリプタテーブルについて
どなたかアドバイスください。
長文になることをご了承くださいm(__)m
Monaではsecondboot.asmにて以下の手順で
ディスクリプタテーブルの設定を行っています。
(1)lgdtにてロード(エントリー数は4)
(2)プロテクトモードに移行
(3)far jump 0x08へ
(4)レジスタの設定
(5)オフセットアドレス決めうちでCで実装したコードへjump
ここまで前提です。
最近タスク管理を実装しようと思い勉強していたのですが
基本的にはタスクひとつにつきTSSが必要っぽいことが分かりました。
エントリー数が足りない・・・
そこでアドバイスいただきたいです。
(A)セグメントのエントリ数はどのくらいが適当か?
(B)固定or動的にエントリ数を増やせるような仕組み
どちらが一般的でしょうか?
もし固定であればsecondboot.asmにて
エントリー数分メモリを確保しようと思っています。
(C)動的な場合
エントリー数が増えた場合、連続領域にメモリを確保し
lgdtをしなおさなければならないと考えていますが
lgdtを複数回行うのはありでしょうか。
(D)secondboot.asmにてlgdtを行わず
プロテクトモード移行後に、Cで実装している部分
monaKernel.cppでlgdtを行うことは可能か?
「はじめてよむ486」にはプロテクトモード移行後
セグメントレジスタにセレクタ値をロードするまでは
リアルモードのセグメント配置を引きずるとあるのですが・・・
※これが可能であれば、エントリ数を増やすときに
secondboot.binのサイズを固定のままでよいかと考えています。
(C)(D)は実際に自分で、いろいろやってみているのですが
現時点では成功していません。
>>126 >TASKのデータをTASKに持たせておいて、
>カーネルではTASKのIDとかで識別できる程度にしておいて、
>カーネルからのメッセージでTASKが動作するといったイメージでしょうか?
「メッセージでTASKが動作する」と言う意味がよく分からないのですが、
TASKならではの情報は、なるべくそのTASK独自のメモリ空間に入れるべ
きだということは同感です。
しかし、共通空間に入れたほうが簡便になる場合もあるので、事情に
よりけりだと思います。
他のタスク固有の情報を、「運んでくる」と言うのは結構メンドクさく
感じます。多分、
1. ページングで「窓」をあける。
2. 一旦、ソース側のタスクにいる時に共通空間にコピー、デスト側に来た時に
共通空間からコピー
みたいな感じになるのでしょうか。
>>127 >基本的にはタスクひとつにつきTSSが必要っぽいことが分かりました。
>エントリー数が足りない・・・
基本的にはそうで、最新版のNWSOSでは、タスクごとにTSSを用意して
いるのですが、同一タスクのスレッド(軽量タスク)では同じTSSを指
しています。
しかし、Linux 2.4 では、TSSはひとつだそうです。
ちなみに、タスクゲートは、Linuxでも用いていないそうです(NWSOSでも)。
∧_∧
< `ー´>y-~~~
個人的にはTSSを使うのはあまり好きじゃないな・・・。
コンテキスト保存用のブロックが無駄に大きすぎる。
nest-taskができるのは便利なんだが。
>>128 調べて見たところ、NWSOSでは、lgdt は、初期化時に一回だけ、
8192 個のリミットで確保していました(TSS領域自体は、動的に
確保しています。)。
多分、lgdtは何度でも行えると思うんですが、その際必要となるのが、
「連続した”物理”アドレス」ですので、動的に伸張していく際、
必要なサイズの「連続した物理アドレス」が空いてない場合は、
どこかにページングされているものから集めてくる処理が必要にな
ると思います。
LightConeさん こんばんは
>基本的にはそうで、最新版のNWSOSでは、タスクごとにTSSを用意して
>いるのですが、同一タスクのスレッド(軽量タスク)では同じTSSを指
>しています。
なるほど、スレッドは、メモリ空間?を共有している特殊なタスクということですね。
ということは、エントリ数は512とか256位必要な気がしますね。
>しかし、Linux 2.4 では、TSSはひとつだそうです。
どういう方法をとっているのでしょうか。なぞです。
でも結局はTSSに相当するものはどこかに持っていないとおかしいですよね。
>>131 超先生@OS板さん おひさしぶりです。
>個人的にはTSSを使うのはあまり好きじゃないな・・・。
>コンテキスト保存用のブロックが無駄に大きすぎる。
勉強不足なのですがTSSの使用はmustではないのでしょうか?
segment typeはTSSでなくても、結局は使用するセグメントを
ディスクリプタテーブルに登録しなければならない気がするのですが
激しく勘違いしているかもしれません。
>>131 超先生、コメント有難うございます。
Linuxの参考書を見るべきかもしれませんが、
TSSを固定するとなると、I/O 許可ビットマップは利用しないという
ことなんでしょうか。in/out 命令は全部例外を起こさせて
エミュレートするか、I/O用システムコールを利用?
LightConeさん
> 調べて見たところ、NWSOSでは、lgdt は、初期化時に一回だけ、
>8192 個のリミットで確保していました(TSS領域自体は、動的に
>確保しています。)。
わざわざ調べていただいて恐縮です。
なるほどNWSOSでは最初に一回多めにとっているのですね。
結局は、この方法がベストな気がします。
>多分、lgdtは何度でも行えると思うんですが、その際必要となるのが、
>「連続した”物理”アドレス」ですので、動的に伸張していく際、
>必要なサイズの「連続した物理アドレス」が空いてない場合は、
>どこかにページングされているものから集めてくる処理が必要にな
>ると思います。
おっしゃるとおりですね。
動的拡張は、ちょっと面倒であまりメリットがないかもしれません。
結局は初期サイズで余分に取っておくでしょうし・・・
レベル遷移時に、どうしても、TSSの内側レベルのスタックポインタ
(SS0:ESP0, SS1:ESP1, SS2:ESP2) がCPUによって自動参照されて
しまうはずなので、TSSの切り替えをしない場合は、そこをタスク
スイッチ時に書き換える必要がありますよね。違っていたらNWSOS
では無駄なことをしていることになりますが、それをしないと確実に
暴走するので間違いないと思います。
最新版のNWSOSでは、スレッドを切り替える際は、TSSを変更せずに、
そこだけを書き換えてます。
他の項目は、タスクゲートなどを使わないなら書かなくていいん
はずですよね。TSSの CR3,LDTR などもどうでもいいんですよね。
TSSの「レジスタセーブ領域」は、自信を持って書き換える必要がないと
言えます。
なぜなら、最新版NWSOSでも利用せずに、独自の構造体に入れてますので。
>>134 使わないというか、TSS一つを共有と。
>TSSを固定するとなると、I/O 許可ビットマップは利用しないという
>ことなんでしょうか。in/out 命令は全部例外を起こさせて
>エミュレートするか、I/O用システムコールを利用?
そもそもi386以外ではI/O access mapのようなものはないですからね。
移植性を考慮すると、subsystemプロセスに限定しても、
直接ユーザーランドからI/O命令を発行するような実装は綺麗でないです。
>>134 >勉強不足なのですがTSSの使用はmustではないのでしょうか?
恐らくその通りで、Linux でも、TSSは、一つだけは使っています。
超先生がおっしゃっているのは、TSSを複数使うかどうかだと思います。
#135 の私の質問も、その意味で書いたつもりです。
>>138 >そもそもi386以外ではI/O access mapのようなものはないですからね。
なるほど。
ご返答有難うございます。
やはり、「I/O許可ビットマップ」は使わない、ということなんですね。
Linuxが、in/out 命令をユーザーレベルで直接使わずに、関数コール
しているのかが今分かった気がします。
やはり、TSSは、一つだけ固定的に持つのが一番賢そうですね。
そして、タスクスイッチ時は、「TSSの内側スタックポインタ」だけを
書き換えればいいわけですよね?
一人レベルが低くて申し訳ないのですが
>やはり、TSSは、一つだけ固定的に持つのが一番賢そうですね。
となると、TSSをタスクの数だけ用意するのは
何もメリットがないのでしょうか?
TSSディスクリプタを一つだけ固定で持つということすよね。
そうすればセグメント間ジャンプのときに
セグメントタイプがTSSであることをCPUが検知してくれて
TSSの内容を参照し、セグメントを切り替えてくれる。
OS側では、タスク切り替えの前にTSSディスクリプタが持つ
TSSのアドレスに切り替えたいタスクのTSS構造体のアドレスを設定する。
うーんなんか間違っている気がします・・・
>>142 >となると、TSSをタスクの数だけ用意するのは
>何もメリットがないのでしょうか?
複数使うメリット:
1. タスクゲートなどを使ったCPUネイティブなタスクスイッチが行える。
2. 割り込みなどをタスクゲートで行える。その際「ネスト」できるハズ。
3. TSSの「内側レベルのスタックポインタ」を頻繁に書き換えないで済む。
4. I/O 許可ビットマップを(一々コピーすることなく)利用できる。
複数使うデメリット:
1. タスク数に制限がついてしまう
2. I/O ビットマップを使うとなるとメモリが無駄。
3. セグメントレジスタの DWORD align が無駄
(だけどアクセス高速化のためには結局必要かも)。
>>143 >そうすればセグメント間ジャンプのときに
>セグメントタイプがTSSであることをCPUが検知してくれて
>TSSの内容を参照し、セグメントを切り替えてくれる。
CPU定義のタスクジャンプや、タスクコールを使わないで済ますんです。
あと、タスクスイッチを伴うjmpは、「セグメント間ジャンプ」
とは言わない習慣のはずです。
GDTは連続した物理アドレスではなくリニアアドレスが必要だと思ったんですが。
物理アドレスを使うのはCR3とページディレクトリ・ページテーブルだけですよね?
>>119 > その方法では結局、実際に文字列を取得する際のサイズが前回取得した
> 文字列のサイズ以下になるまで繰り返しが必要になり、単に文字列を
> 取得したいたびにそのようなループを書く必要があることになる
> わけですよね。
ライブラリというものの存在はご存知 ?
個人的には、OS が勝手に領域を確保するという仕様は好みでない。
全ての言語が動的メモリーをサポートしているわけじゃないからね。
文字列領域をユーザーに確保させるか環境が確保するのかは言語/ライブ
ラリ作成者が決めればいい話で OS が決めることではないと思う。
重要なことは、const char *GetTaskName2(HTASK hTask); と言う API
を使って領域を確保しないでタスク名を取得することはできないけど、
GetWindowsDirectory() なら、ライブラリで領域を確保することもでき
るし、ユーザーに領域を確保させることもできると言う自由度があると言
うこと。その自由度を捨てて OS でできる限り安全にすると言うのも一つ
の方向ではあるけどね。
>>126 >
>>116さんはTASKのデータをTASKに持たせておいて、
> カーネルではTASKのIDとかで識別できる程度にしておいて、
>>116 では、タスク名称の置き場所とかには言及してません。
まあ、普通は TCB (Task Control Block) 等のタスク管理領域に置くと
思う。
> カーネルからのメッセージでTASKが動作するといったイメージ
> でしょうか?
これは、まずいと思う。ps や taskmgr.exe で、ハングアップしたタス
ク名称が取得できなくなってしまう。
>>129 >>148 説明ありがとうございます。できるだけ小さいカーネルと、周りのプログラム
というのが実現できればいいと思ったのですが、ある程度のメモリサイズは
どうしても必要になるのですね。書籍の勉強だけでなく実装の勉強も
してみます。ありがとうございました。
>>146 ホントですね。すみません。
lgdtで指定するのは「連続した線形アドレス」でした。
gdtrやidtrは、「セレクタ」が必要ないんでしたか。最近忘れてます。
GDTRとIDTRは開始アドレスとリミットで構成される擬似デスクリプタという構造体だったと思います。
セレクタが必要なのはLDTRやTRですね。
>>151 そういえば、そうそう。gdtrとidtrのディスクリプタだけは、
「擬似」なんですよね。
TSSを使わないスタック切り替えは工房の頃に力技で試しましたね。
タスク切り替えが頻繁に起きると大変な事になりそう。。。
めぐではどうしようかな。
>>153 >TSSを使わないスタック切り替えは工房の頃に力技で試しましたね。
素晴らしい。
>タスク切り替えが頻繁に起きると大変な事になりそう。。。
最近のCPUで改良されたかもしれませんが、
速度パフォーマンス的には、CPUが持つタスク切り替え機能も
クロック数はかなりかかるので、気になるほどの差は出ないように思います。
>>153 Linuxでは、バージョンアップ時の改良として、TSSが一本化された
こともありますし、超先生の見解通り、TSSを一本化(使わない)方針が
よいように思います。
私の個人的見解でもTSSを用いたタスクスイッチはやめたほうが
いいと思います。理由はTR用のセレクタ数にGDTの制限が出てしまう
ことと、実際問題上、コールゲートを呼び出してタスクスイッチする
のは、逆にメンドクサイことになりそうだからです。
経験上、CR3 等だけ変更して、CS:EIP は連続していた方が何かと楽
です(コードの流れは連続して、メモリマップだけを切り替える方が
楽です。)(CPU定義のタスク切り替えだと、EIPなども変えようと
してしまうわけで)。
あの頃はカーネル(リング0)スタックをタスク切り替えの際に毎回コピーしなおしてた気が・・・
>>156 >あの頃はカーネル(リング0)スタックをタスク切り替えの際に毎回コピーしなおしてた気が・・・
逆に思いつかない(^_^;)
TSS操作とかページ切り替えをしないように考えてたらスタックコピーという荒業を思いついたのですが、、、
若いって素晴らしい(汗
幾つか質問します
1.OSを作っている言語は何ですか?
2.発表時期は何時?
3.有料?無料?
4.CUI系?GUI系?どちらで操作するようにするのですか?
5.ソースコードは公開するのですか?
私も参加してみたいですねぇ…
160 :
デフォルトの名無しさん:02/11/30 18:01
過去ログ読めやぁ
>>159 3種のOSの作者が来ていて、一つのOSを共同制作しているわけではない
ことはいいですか?
ひげぽんさんの OS(higepos, Mona?)は、GPLなので参加者は歓迎されると思い
ます。
私は NWSOS を作っていて、ソースコードは今のところ非公開。開発言語は
C とアセンブラです。GUIのWindowの中でCUIをサポートしています。
「発表時期(?)」というのは意味がわかりません。今のところ売れそうも
ないので無料です。将来はわかりませんが有料でもただ同然になるはず
です。
みとこさんは、MEG-OS の作者です。
どうもIA32におけるタスク切り替えの本質を理解できずに
苦しんでいます。
インテルのマニュアルによると
>プロセッサは次の4 つのどれかが起こった場合に他のタスクへ実行を転送する。
>• 現行プログラム、タスクまたはプロシージャが、GDT 内にあるTSS ディスクリプタに対
>してJMP またはCALL 命令を実行した。
>• 現行プログラム、タスクまたはプロシージャが、GDT または現行LDT 内にあるタスク・
>ゲート・ディスクリプタに対してJMP またはCALL 命令を実行した。
>• 割り込み/ 例外ベクタがIDT 内にあるタスク・ゲート・ディスクリプタを指している。
>• EFLAGS レジスタのNT フラグがセットされているときに現行タスクがIRET を実行した。
そこで私は、TSSディスクリプタ、TSSを用意し
そのTSSディスクリプタに対してjmp(call)すれば
タスクが切り替えられそうだと言うことをなんとなく理解しました。
タスクの切り替えとは大まかに言って
コンテキスト
コードセグメント
データセグメント
スタックセグメント
開始アドレス等
を切り替えることだと思っているのですが
>LightConeさんの仰る
>超先生の見解通り、TSSを一本化(使わない)方針が
>よいように思います。
>
> 私の個人的見解でもTSSを用いたタスクスイッチはやめたほうが
>いいと思います。
超先生@OS板 さんの仰る
>使わないというか、TSS一つを共有と。
がよく理解できないのです。
Intelは、タスク一つにつき、ディスクリプタとTSSを一組
を用意せよと言っているのに対して
TSSは一つを共有すればよいと仰っていると思うのですが
その場合具体的にはどういう方法でOSが何をすればよいのかが
分かりません。
この辺のことはどのような勉強方法で学習されたのでしょうか。
>>159 >幾つか質問します
以下、私が中心となって開発しているMons(旧名higepos)について
書かせていただきます。
>1.OSを作っている言語は何ですか?
アセンブラ、C++
>2.発表時期は何時?
すいません、何の発表ですか。
まだ完成していないのでリリースは当然していないです。
>3.有料?無料?
無料です。
>4.CUI系?GUI系?どちらで操作するようにするのですか?
現在はCUIです。
将来はGUIを目指しています。
>5.ソースコードは公開するのですか
sourceforge.jp上で開発していますので公開しています。
http://mona.sourceforge.jp/ >私も参加してみたいですねぇ…
熱意とやる気のある方であれば大歓迎です。
>>164 訂正です。
>以下、私が中心となって開発しているMons(旧名higepos)について
→以下、私が中心となって開発しているMona(旧名higepos)について
>>163 >この辺のことはどのような勉強方法で学習されたのでしょうか。
私の場合、
工学社「80386 プログラミング」
John H,Crawford + Patrick P Gelsinger 著
岩谷 宏 訳
をじっくり読みました。
この本の中には「命令の論理ソース」がC言語風に掲載されていて、
タスクスイッチが内部的にどのように処理されているのかが厳密に
分かるようになっています。文章量が多くて少々難解ですが、
「論理ソースコード」は参考になります。
その本を見ると、タスクゲートや、TSSセレクタに対する jmp や call
も、mov cr3,reg や、ldtr, ltr などの組み合わせで書けることが分かる
ようになっています(一目瞭然とまではいかないまでも。)。
>>ひげぽん
Typoです(Mons->Mona)
うわ。先に訂正されてしまった。ゴメソ。
何はどもあれプロジェクトに協力できる人募集中です(;
>>162 要するに、それは、IA32のCPUが、
タスクとはこうである、タスクスイッチとはこうである、と定めた
内容を書いているだけで、タスクスイッチとは、所詮、ページテーブル
の変更と、ローカルセレクタの変更、汎用レジスタの復帰、などに
他ならないんです。
ページテーブルの変更--->レジスタ CR3 の変更(mov cr3,reg)
ローカルセレクタの変更--->ldtr の変更(LLDTR)
汎用レジスタの復帰--->通常mov命令
でことたります。
ただし、一点だけ注意することとして、内部レベルへの遷移時には、
TSSの SS0:ESP0 が自動的に参照されてしまうことです。この動作
だけは、変更することが出来ない(はず)です。
>>167 >>168 FreeDOS教徒さん
ご指摘ありがとうございます。
>>ひげぽん
>Typoです(Mons->Mona)
OS名だけ見事にtypo、もうバカかと・・・
>何はどもあれプロジェクトに協力できる人募集中です(;
大募集ですm(__)m
>>169 LightConeさん
>タスクスイッチとは、所詮、ページテーブル
>の変更と、ローカルセレクタの変更、汎用レジスタの復帰、などに
>他ならないんです。
これを知らずに、タスク切り替え部をいびつに
実装してしまったら後悔するところでした。
ありがとうございます。
工学社「80386 プログラミング」 探してみます。
ちなみに、この本の初版は、昭和63年です。私のは平成4年版です。
初版は、14年も前なんですね、、、、、、、、。
はい、分かりました。
凄いです。
あ、発表って正式リリースの事です。
>>174 絶版本を探すには、古本屋に行くといいのではないでしょうか。
個人的には、中古でも、探していた本が見つかった時は、新しい
本よりも嬉しく感じます。
何はどもあれ -> 何はともあれ
>絶版本を探すには、古本屋に行くといいのではないでしょうか。
>個人的には、中古でも、探していた本が見つかった時は、新しい
>本よりも嬉しく感じます。
近くの図書館と、オンライン古本屋では見つかりませんでした。
ますます欲しいーーーー
>>178 typo伝染りましたね。
前々スレから読み始めてやっと追いつきました。
このスレをたどっていくと、誰でもOSを作れそうですね。
じゃあ俺も
「NanihaDomoare MONS」っていうOS作るよ!
>>180 >このスレをたどっていくと、誰でもOSを作れそうですね。
正直言って、誰でもとは言わないまでも、Cとアセンブラプログラムが
できる方なら基本的なOSは時間さえあればできると思います。
大事なのは、CPUアーキテクチャの正しい情報を得ることと、
もう一つがデバッグに耐えられる忍耐力があることではない
かと思いますが、どちらも「やる気」の問題が大きいように思います。
スケジューリングやファイルキャッシュの優秀さなどを追求するのは
実験的と勘でやっていけばいいでしょうし、時間が取れなければ先人の
結果を、Linuxの解説本やOSの基礎論の本で見ることで済ませられますし。
私も含めて不注意な人にはちょっぴりデバッグ回数が増えてしまうのが
大変な所ですが(笑)。
183 :
デフォルトの名無しさん:02/11/30 23:06
>>180 俺もそう思う。
「OS作るのって難しそう」と思ってる人にそう思わせる、
このスレは文化的価値がある思う。
実際、Lたん、ひげぽんってどうなの?
実力的に
>>183 禿同。まあ、誰でも作れるとまでは言わないけど、「OS だって、単なる
プログラムだ」と多くの人に思わせた功績はある。
これからも頑張ってね。> ひげぽん さん
>>184 Lタンはあれだけのものを作るので結構すごいんじゃない?
ひげぽは、学習能力が高そうなのでこのまま作り続ければ
NWSOSやOSASKレベルにはまちがいなく到達できると思う。
>>180 #182 だけだと誤解を生みそうなので少し補足します。
本当にこのスレを読んだ「だけ」だと、ブート部分と簡単なキー入力とその
エコー程度のところまでしか行けないと思います。
難しくはないと思いますが、ファイルシステムがどういう仕組みで作られて
いるか、マルチタスクがどうやって実現されているか、割り込みとは何か、
グラフィックのLINEやCIRCLEやPAINTどうやって処理されているか、
排他制御とは何か、デッドロックを防ぐ方法、ページングとは何か、
セグメント、セレクタとは何か、みたいなことの理解が必要になってきます。
今度はそれらをIA32でどうやって実現すればいいかという
ことを調べる必要があります。ページングが何かが分かっても、
次には、IA32においての、ページディレクトリやページテーブルの具体的
な仕組みを知らなければ、本格的なOSを組むことは出来ません。
このスレではそこまでは説明されてません(higepon さんのMonaも、
ページングは、まだなはずなので。)。
あと、Windowシステムを組むのは、既存のOSのWindowシステムを体験
してからでないと難しいかもしれません。私も(MS)Windowsのプログラムを
練習する前に独自にWindowシステムを作ってみたことがあるのですが、かなり
無理があるような構造になってしまったことがあります。やはり、
一度は既存のWindowシステムの仕組みを体験することがGUIのOSを作るに
は必要だと思います。
>>186 >ひげぽは、学習能力が高そうなのでこのまま作り続ければ
本当にひげぽんさんの成長ぶりには驚かされます。
しかし、ひげぽんさん自身が、「何も知りません」と言うような場面
があったら、心の中で(「また、ご冗談を」)と言いましょう。
スレの浪費と言われそうですが、#182 で「やる気」があれば、IA32が
理解できる、とは言ったものの、#166 で紹介した本は、全部で687ページ
有ります。
これは、初代の80386の本なので、キャッシュや、その後に追加された
特殊ビットや、MMX/SSE/SSE2 は、IntelのPentium4のPDFファイル3本組み
読まないと分かりません。
上巻:378ページ(基本アーキテクチャ)
中巻:878ページ(命令リファレンス)
下巻:634ページ(システム・プログラミング・ガイド)
ちなみに、日本では、こういう知識は何故か大学などでは(普通は)教えてくれ
ないので、自分で勉強するしかないです。場合によってはOSの専門家でもIA32の
ことを知らない人もいますので、「教育機関」に行ってもなかなか学べません。
こういうことを勉強したい人は、自分でこつこつやるしかないので、
海外のように巷にOS作者が溢れてこない理由はそこだと思います
(専門家からの猛反撃を受けそうなので、なかなか言えないことですが、
これで鬱になります、、、)。
>海外のように巷にOS作者が溢れてこない理由はそこだと思います
これなんだけど、OSに限らずソフトウェア業界全体的に、日本の勢力って
よわっちぃ-です。もちろん、人口比率以上に弱いという意味。
教科書もないのは、海外も同じで、結局、やる気あるやつの人口が桁違いに
多いんだと思うね、向こうは。
東大の情報系学科3年でやるCPU実習ではCPU設計から始めてOS制作までやるはず。
>>191 たしか論理合成までできて、やる気があればマザーボードの設計まで
できる環境になっている。うらやますぃー
余談だが、OSASKのソースを最近見たが激しくスパゲッティだね。
いずれ破綻すると思う。
NWSOSとmona?は大丈夫?
>>191 自分でCPUを設計して、そのCPUでOSを書くことだけでいいのでしょうか。
IA32の複雑さには定評がありますし。
>>193 NWSOSは、大丈夫です、と言っておきます(笑)。
>>195 OSASKのスパゲッティ状態についてどう思う?
あと、学校でやる場合、実際の売り物のマザーボードとは複雑さがけた違い
だったりしませんか。
ブリッジが何段階もあって、レガシーハードを引きずっている現状を
勉強してこそ(笑)、真の実力が身につくのではないかと。
>>196 NWSOSの場合、C言語で書けることもあって、かなり楽なんです。
OSASKの場合、現状「エセ」だそうですので最後まで見守る必要があるかと。
>>191 数年前の話だけど、OSまではやらなかったよ。
ROMに書き込んで直接実行させてた。
I/Oはシリアルだけだったかな。
>>190 >教科書もないのは、海外も同じで、
それはちょっと疑問があります。
OSの教科書については分かりませんが、3Dグラフィック関係の本は、
高度でしかも分かりやすい教科書がアメリカには沢山あるようです。
日本の教科書は、抽象的過ぎるか、または基礎過ぎるように感じます
(抽象的なものはある意味では高度ですが)。
Lタン教科書、書いてくれ
>OSASKのスパゲッティ状態についてどう思う?
いや、別に。おまえのソース解析力が、近代的なプログラミング作法に
慣れすぎたが故に、スパゲッティに見えるだけだ。
ためしに、linuxやgccのソース見てみぃ。latexでもいいし、Bシェルのソース
でも構わん。
>>201 NWSOSをもとに、OSの書き方を実践的に書くとか?
現状のNWSOSでは、スケジューリングとかが馬鹿すぎるのでちゃんと
してからでないと、バッシング受けそうで怖いです。
>>199 グループによるんじゃない?
実際に環境をつくってgcc移植してる人のHPを見た記憶があるんだよ
>>202 >ためしに、linuxやgccのソース見てみぃ。latexでもいいし、Bシェルのソース
>でも構わん。
linux-0.01のソースを見たことがあるが、きれいに構造化されていたよ。
linusやるねぇ。と思った記憶がある。
他のはみたことない・・・
じゃあOSASKは、近代的プログラミング作法を用いず
どういうスタイルなの?スパゲッティ作法(w
最近のOSなら近代的プログラミング作法使おうよ
>>204 実は、授業ではなく、クラブ活動だったりして。
>>190 英語は世界に広まってるから、余計に強いよね。
逆に日本語で書籍出してもいわゆるニッチな市場だから生き残れない。
日本ではとにかく数が売れないとどうしようもないから。
>>193 アレよりは遥かにマシ。間違いねぇ。
俺はC++使えないけどMonaの流れは掴めるし。
>>204 gccの移植(というかアーキテクチャ依存部分の作成?)
はおそらくコンパイラ担当者がそうしたかったんだろうねえ。
つか、コンパイラの作成方法も言語の選択もお任せだった。
課題としてOSを載せろ、という要求は無かった。
今はもしかしたら違うのかもしれん。そこは勘弁。
>>202 > ためしに、linuxやgccのソース見てみぃ。latexでもいいし、Bシェルのソース
> でも構わん。
悪いけど、LaTeX とちゃんと書いて欲しいし、この文脈で LaTeX は筋違いかと。
LaTeX が何で書かれているか理解してるか ?
出たよ、名称粘着が
>>211 > 出たよ、名称粘着が
プッ、そっちにしか突っ込めないのかよ。
お前 LaTeX ってなんだか知らないんじゃねーのか ?
亀レスですが
LightConeさんの言うとおり
>Cとアセンブラプログラムが
>できる方なら基本的なOSは時間さえあればできると思います。
> 大事なのは、CPUアーキテクチャの正しい情報を得ることと、
>もう一つがデバッグに耐えられる忍耐力があることではない
>かと思いますが、どちらも「やる気」の問題が大きいように思います。
この辺が大事だとおもいます。
やる気が続くかどうかが鍵かと。
>>185 >これからも頑張ってね。> ひげぽん さん
ありがとうございます。
>>186 >Lタンはあれだけのものを作るので結構すごいんじゃない?
同意
>ひげぽは、学習能力が高そうなのでこのまま作り続ければ
>NWSOSやOSASKレベルにはまちがいなく到達できると思う。
それはどうでしょうか(笑)
まだだいぶ差がありますので
>>189 LightConeさん
>こういうことを勉強したい人は、自分でこつこつやるしかないので、
>海外のように巷にOS作者が溢れてこない理由はそこだと思います
確かに英語圏にはOS作者があふれていますね。
おかげで参考になりますが・・・
ただ、その分レベルが様々ですね。
>>193 >余談だが、OSASKのソースを最近見たが激しくスパゲッティだね。
>いずれ破綻すると思う。
>NWSOSとmona?は大丈夫?
Monaは一応きれいに書こうとは試みていますが
あとでリファクタリングしようとほっとかれてる部分もあります。
一から書き直したいところがちらほら
OSASKはキューにシステムへのメッセージを溜め込むという構造らしいので、
近代的といえば近代的な気もするのですが?
OSASKのソースがスパゲッティ状態だとは思いませんが、
ASKA部分の定数直打ちは勘弁して欲しいです。
内部のシステムコールの番号とかへたれな私にはもはや記憶不可能な状態です。
>お前 LaTeX ってなんだか知らないんじゃねーのか ?
知識は増やすだけだけど、心理は減らさないと求めることはできないよ?
そろそろ大人になったらどうだい?つか俺tex系不便だし
UNIXMagazineみたいに辛気臭いのばっかできあがるからつかわね。
知らないに1票
心理?真理じゃなくて?
俺tex系不便だし??
アフォ
ネェネェミンナ( ´∀`)・ω・) ゚Д゚)・∀・) ̄ー ̄)´_ゝ`)マターリシヨウヨ
LaTeXがどのようなものなのか知らないアフォがOSを作るとかほざいてるのか・・・
世も末だな。きっとこういう輩はPerlが内部的に持ってる中間言語の
形態についても全く知らないんだろうな。ダメすぎ。
OSから入っている人はアプリにたどり着いた時に、アプリから入った
人より遥かに深い理解ができると思います。
道のりが遠いので、今現状の理解度については目をつぶらないとね。
自慢げに煽っていると、そのうちに立場が逆転するかも知れませんよ。
というか、LaTeXってそんなに凄いもんなんか(藁
________________
|マターリシヨウヨ|
 ̄ ̄| | ̄ ̄
⊂ ´⌒つ゚ー゚)つ
LaTeXってなんじゃい?ptexの親戚かなんかか?と思って調べてみた。
何だ、まんまじゃねえか。
つかさ、どっちもどっちだよ。ソフトを知ってることがそんなに偉いの?
>>226 > ソフトを知ってることがそんなに偉いの?
じゃなくて、知らないでえらそうに書くことが恥ずかしいの。
わかった ? >
>>202
\
\
\
\ /| 。.
,,-'―\ _,/ノ . .
___,,-―――='' ̄ ̄ _,,-'―=''' ̄_,/| o *
_,,-―=''' ̄ ___,,-―――='' ̄ __,-―='' ̄ / . . .
_,,-―=''' ̄ _,,-―='' ̄ ヽ / +
 ̄ ̄ _,,-―=''' ̄ \ / . . . .
,,-='' ̄ ヽ / . 。. ★ ☆
,,,-'' ヽ/ 。. .
-―'' ̄ /\ ___, /\ | . ☆ +
. | ..::::::::::::... | / ..:::::::... | + . . .
| | / | . . ☆
ヽ γ´~⌒ヽ. | / /☆ . * +. . また〜りしよっ♪
――ヽ / ヽ | / /⌒ヽ、. . . .
\/ | |_/ / ヽ +★
/ | / ノ * ☆
>>223 別に、OS 作るのに LaTeX がどのようなものか知る必要はあるとは思えんし、Perl の中間言語が OS と何か関係あるのか ?
>>224 そう言う話じゃないよ。
LaTeX について知らないんなら黙ってた方が良いと思うよ。
今時は、LaTeX なんか知らなくても別に問題ないし。
asm volatile("sgdt %0\n"
: /* no output */
: "m" (gdtr)
);
_sys_printf("gdtr.limit = %d\n", gdtr.limit);
_sys_printf("gdtr.base = %d\n", gdtr.base);
baseが0で返ってきます。
実機でもbochsでも・・・うーんなぜだ・・・
ちなみに、私は、OSを専門的に勉強したことはないです。
これスレ面白いね。
正直、何が討論されているのかさっぱり理解できんが、
なんつーか、プログラミングを初めて覚えたころの
ドキドキ感を味わえているような気がしてくる。
スレ汚しごめんね。あとマターリしる!
>>230 構造体のアラインの問題かも。
だとすれば、dd 0x12345678
のようにするとすぐに分かる。
要するに、latexを知らないとOSを作れないといいたいんだな?
>>233 >超先生@OS板さん
ビンゴです!!!
ありがとうございます。
>>233 >>235 #pragma pack(2)
/*! gdtr */
typedef struct {
word limit;
dword base;
} GDTR;
#pragma pack()
のようにしたところ目的の動作が得られました。
ありがとうございます。
現状、MONAに傾こうか、NWSOSに傾こうか、日和見中。
趣味にしても、時間は限られてるしね。
ひげぽん氏は、GUIもサポートする予定ありますか?
GUIをサポートしようとすると、OS作りってとたんに難しくなると思われ。
海外では確かにOS作ってる人がたくさんいるけど、GUIまでのサポートと
なると、かなり限られてくる。
>>237 NWSOSの方に来るとマイレージが入ります、と言ってみるテスト。
だれかめぐに傾いてよ・゚・(ノД`)・゚・
>>240 マイレージためたら何かあるの?
ちなみに漏れはOSASK派。
MEG-OSの進展してるの?
一応サイトいったけど
スローペースですが一応リリースのたびにAPI増えてます。。。
現時点ではOSとしての完成度は「ライバルOS」と称されている他のOSより
遥かに遅れてるんですよね。
技術的な革新点も特にないし。
だめぽ。・゚・(ノД`)・゚・
>>242 マイレージが増えれば増えるほど、幸福感が増すでしょう、、、
きっと。
>>237 >現状、MONAに傾こうか、NWSOSに傾こうか、日和見中。
>趣味にしても、時間は限られてるしね。
MONAにおいでくださいまし(笑)
>>238 >NWSOSの方に来るとマイレージが入ります、と言ってみるテスト。
やられますた。
Monaの方に来ると楽しいですよきっと、多分。おそらく。
>>238 >ひげぽん氏は、GUIもサポートする予定ありますか?
あります。と言っておきます。
>GUIをサポートしようとすると、OS作りってとたんに難しくなると思われ。
>海外では確かにOS作ってる人がたくさんいるけど、GUIまでのサポートと
>なると、かなり限られてくる。
そうですね。
その点においてNWSOS、OSASKはすごいですね。
スレ違いなのは重々承知の上で質問させてもらいますが、
国内で独自のJavaVMとかJavaネィティブコンパイラ(バイトコードをネィティブコードに変換)
を開発してるとこってあるんでしょうか?
Monaは、ゆっくりと開発を行っているのですが
みとこさん、LightConeさんは、どういうペースで開発されてるんでしょうか?
開発の定義があいまいですが・・・
私の場合は、平日は本を読んだり、構想を練ったりしてます。
土日はテストコードを書いたり、ちょっとだけOSのコードを書ければ
いいかなって感じです。
250 :
デフォルトの名無しさん:02/12/02 22:27
GUIはアプリケーションで実現してほしいんだけど・・・。
つーか、Xでいいじゃん。だめ?
>>250 それもありだと思います。
MonaはGUIの機能をアプリケーションに任せるつもりです。
あくまでも予定ですが。
>>249 他にもいろいろとやってるので開発ペースが安定してません。
なるべくめぐに時間を注いでますが。。。
でも単純比較なら開発時間はひげぽんさんより長いはず。
ついでに作り始めたのも。。。
>>249 PC/AT機版の元となったOSを開発を始めたのはだいぶ前です。
そのとき数ヶ月開発し、そのまま放置していたのを、2002年に
なってから移植し始めました(4月頃かな?)。
☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・)< みとこさんは女ですか?
\_/⊂ ⊂_)_ \____________
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
l ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| .|
| |/
255 :
デフォルトの名無しさん:02/12/03 18:14
つーかマンコだろ?
>>244 >技術的な革新点も特にないし。
個人的に、Windowsで「アプリレベルで根本的に出来ない事柄」
「根本的に不足している事柄」を探してみてますが、めったに見つからない
です。
裏を返せば、他のOSの出る幕がほとんどないということでは?
「強いてやろうと思えばできるけど、手間がかかること」はあるの
で、そこに対案を出して売りにするしかないかもしれません。
257 :
デフォルトの名無しさん:02/12/03 21:58
wide系で、&osdev:*.jp なんてのを立ててみた.
一応匿名なので、暇なら誰か来て
258 :
◆cIQBj36mnM :02/12/03 22:02
>>258 irc.tokyo.wide.ad.jp
OS作る系匿名チャンネル
>>256 > 「強いてやろうと思えばできるけど、手間がかかること」はあるの
> で、そこに対案を出して売りにするしかないかもしれません。
反対じゃないの ?
もっとシンプルでスマートな OS を作って欲しいと思う。
(でも、売れないんだよなァ...。)
>>260 「反対じゃないの」と、
「もっとシンプルでスマートな OS を作って欲しいと思う。 」
との繋がりが分からない。
「反対」だと思う理由を書いてください。
>>261 そもそも Windows には...
>「強いてやろうと思えばできるけど、手間がかかること」
と言うのがあまりない。これほど強力な API/ライブラリ等が揃っている OS はそうそうない。
だから...
> で、そこに対案を出して売りにするしかないかもしれません。
なんてことするのは、非常に困難。
その代わり、全体的に複雑で統制の取れていない設計があちこちにある。
このために、プログラムを作るのに覚えることがたくさんあって大変だし、サブシステム毎に思想がばらばらだから同じようなことをしようとしても苦労が絶えない。
だから、もっと「シンプルでスマートな OS」を作って、それを売りにした方がいいと思う。
(というか、機能の豊富さ (≒ 開発の物量) で MS と勝負してもしょうがないでしょ ?)
> 「反対」だと思う理由を書いてください。
なんで、これぐらいわからんのか... ?
Windows がシンプルでスマートな OS と思ってるのかなぁ...。
>>252 みとこ さん
>>他にもいろいろとやってるので開発ペースが安定してません。
>>なるべくめぐに時間を注いでますが。。。
なるほどみとこさんは、めぐに時間を注ぎ
ひげぽんは、モナーに時間を注ぐのですね(笑)
冗談はさておき、やはりOS作成には時間がかかりますね。
一応私は5年計画ですが。。。
>LightCone さん
>PC/AT機版の元となったOSを開発を始めたのはだいぶ前です。
>そのとき数ヶ月開発し、そのまま放置していたのを、2002年に
>なってから移植し始めました(4月頃かな?)。
なるほど、NWSOSと比べてMonaは2年分くらいの差があると感じてます。
全くの私の主観ですが・・・
もっとがんばらなくては・・・
PROJの最初から考えるともう5年以上たったかもしれない、、、
今のコードベースは一年くらいかな
みとこ さん
>PROJの最初から考えるともう5年以上たったかもしれない、、、
>今のコードベースは一年くらいかな
ひえー、大先輩ですね。
今後ともよろしくお願いいたします。
いろいろあって#osdev-jに変えました
ひげぽんさん、LightConeさんも、お暇なら是非来てください
∧_∧
<後ろ頭> y-~~~ 面白そうになってきたな。
私もちょいと昔のを引っ張りだしてこようかな。
>>265 むしろ、長くても大成するとは限らない見本ということで。。。
煽り騙りは2chの華ってか。
ちなみに私もPC/ATでのOS作りに今日から参戦することにします。
普段は組み込み機器でリアルタイムLINUXのカスタマイズを仕事にしてます。
mips系ばかりでx86は初めてですが、NWSOSを追い抜くべく頑張ります。
BIOSがかなり整備されてるっぽいところが、唯一の月明かり・・・
> ∧_∧
><後ろ頭> y-~~~ 面白そうになってきたな。
おー。超先生、も参戦ですか?
>>262 >その代わり、全体的に複雑で統制の取れていない設計があちこちにある。
>このために、プログラムを作るのに覚えることがたくさんあって大変だし、サブシステム毎に思想がばらばらだから同じようなことをしようとしても苦労が絶えない。
それは同感。
274 :
デフォルトの名無しさん:02/12/04 16:59
IRC寂しいすぎ
>>275 修正
>なお、テキストエディタは、SHIFT+ESC で出力を取り込んでエディタが
>起動できます。
テキストエディタのことではなく、SHELL のことです。
SHELL が、Vz エディタのように、SHIFT+ESCで、コンソール出力を
エディタに取り込んで編集モードに入れるようになってます。
ファイルバッファのサイズを動的に変更する方法が知りたいです。
他の目的で使うメモリが不足すると、ファイルバッファの内容をディスクに
フラッシュして、ファイルバッファのサイズを小さくし、メモリとして
利用できるようにしたいです。
でも、まだ漠然として上手い方法が今一よくわかりません。
一応、今のところ思いついた必要条件っぽいものは、
・ディスクにフラッシュしようとした際に、ファイルシステム自体が
新たにメモリを要求してはいけない(?)。
・もし、マイクロカーネルでこれを行う場合、メモリを必要とするタスクは、
一時的に停止状態にし、その間に
「ファイルサブシステムのタスク」がディスクにフラッシュする(?)。
(ちょっと不思議)
・仮想記憶(SWAP IN, OUT) と上手く折り合いをつけないといけない。
そもそも、SWAP OUTしてはいけない部分も有りそうだし、、、。
>SHELL が、Vz エディタのように、SHIFT+ESCで、コンソール出力を
>エディタに取り込んで編集モードに入れるようになってます。
おいらの指は、この10年間、Viに慣れきったんで
ViがNWSOSに移植されれば、遊びに行くYO。
sedがパイプで使えるってことは、Viが移植される日も近い?
NWSOSの最新バージョンみたよ!
数ヶ月ぶりにFDにインストールして、起動してみたんだけど、開発は順調みたいだね。
テキストエディタ(かなり前からあるようだけど)も、HD上のファイルから
S-JISが問題なく読み込めたし、HDアクセス中も、FireDEMOが止まらないし。
難いえば、マウスカーソルが異様に遅いことかな?
現状、Windows2.0程度といったところ。
もっと頑張れ!
sedが動いててびびった。おそらくGPLのソースをほとんどそのままコンパイル
したんだろうけど。
というか、unix系ツールはほとんどコンパイルしなおせば動くんでないの?
これら基盤ツールはGPLで構わんと思うよ。
実行ファイルとして分離されてるんだし、NWSOSとGPLとは無縁でいられる。
Lightタンは、カーネル、Windowマネージャなどは、NWSOSとしてがっちり
開発し、周辺ツールはソース込みでこれら古典的なツールをGPLでがんがん
出してみてはいかが?
>>280 >というか、unix系ツールはほとんどコンパイルしなおせば動くんでないの?
理想的にはそうであって欲しいのですが、SEDの場合は、いったん、
Visual C++でコンパイルできるように修正(確認)してから、NWSOS
用にさらに微妙に修正する必要がありました。
POSIX互換(風)のライブラリを整備していけば、だんだん改善されていく
と期待してるのですが。
>周辺ツールはソース込みでこれら古典的なツールをGPLでがんがん出してみて
>はいかが?
そうしたいです(有志の人に手伝って欲しいです。)。
>>279 >NWSOSの最新バージョンみたよ!
有難うございます。
>難いえば、マウスカーソルが異様に遅いことかな?
これは、単に移動速度が遅い(1カウントあたりの座標の変化が少ない)と
いうことですか? それとも、、、。
>>278 >おいらの指は、この10年間、Viに慣れきったんで
>ViがNWSOSに移植されれば、遊びに行くYO。
>sedがパイプで使えるってことは、Viが移植される日も近い?
sedよりは大変かもしれませんが、多分、気合を入れれば移植できると思います。
DOS/Windows だと、rename *.doc *.txt のようにして拡張子を
変更可能なんですが、UNIX 系だとシェルスクリプトを書くしかないの
でしょうか?
UNIX では、ワイルドカードはシェルの段階で展開してしまうので、
cmd *.doc *.txt としても、doc と txt が一列に並んでしまうので、
cmd側は区別できませんよね。
(DOSだと、copy *.c *.old とかも使えたのですが。)
cmd *.doc *.txt
と書いたときに、
cmd x1.doc x2.doc x3.doc dlm y1.txt y2.txt y3.txt
のように、間に dlm という「仮想ファイル名」を渡してしまい、
dlm をオープンすると、nul デバイスのように働くようにするとか。
あ、*.txt はそういう風に展開できないか、、、。
対案:
行頭に ! を書くとワイルドカードを展開しないことにする。
!rename *.doc *.txt
と書くと、renameコマンドは、
argv[0]=rename
argv[1]=*.doc
argv[2]=*.txt
という引数を受け取る。
一般化:
「ファイル名変換支援ツール」 fncnv.exe を用意して、
x1.doc, x2.doc, x3.doc
と言うファイルがカレントディレクトリにあるとき、
!fncnv *.doc *.txt とすると、例えば、
x1.doc x1.txt x2.doc x2.txt x3.doc x3.txt
という文字列を標準出力に出すようにして、これを個別のコマンドで
利用する手も考えました。
LightConeタンへ
マウスカーソルがカコ(・へ・)ヨクナイ!
""で括るとワイルドカード展開しない。
という仕様が一般的な気がします。
sh/csh系だけの話なのかもしれませんが。
>>290 実は既に現状のNWSOSでもそうなってはいるのですが、
rename "*.doc" "*.txt"
と書くのがなんとなく納得行かないことと、どんな記法で書いたとところで、
最終的に
argv[0]=xxx.exe
argv[1]=*.doc
argv[2]=*.txt
となってしまうのなら、各xxx.exeでの判定が必要になるので、
しっくり来ません。
#288では、fncnv.exe と連携して、
xxx.exe x1.doc x1.txt x2.doc x2.txt x3.doc x3.txt x4.doc x4.txt ...
と展開してやることを思いついたのですが。
>>289 いずれ形状を変更できるようにしますのでお待ちください。
MONAのスレがNWSOSスレ化している気が…
ただいまからこのスレはめぐたんスレになりますたヽ(`ー´)ノ
guiよりも先にネットワーク対応した方が使用者増えるよ
もう使えるのかな?試してないんでわからないんだけど
296 :
デフォルトの名無しさん:02/12/05 20:23
めぐたんハァハァ
てか、NWSOSスレでやろうよ>LightConeたんほか
みとこタンのエロ画像キボン!( ●∀●)
MONAのスレじゃないと思うけど・・・。
Σ(●∀● )あんのか!
ひげぽんさん、感動しますた!
漏れはやっとVBとかCができる程度ですが、
(ヘボですが)Webデザインなら多少応援してあげられますけど。。。
これからも、がむばってください!
>ひげぽんさん、感動しますた!
>漏れはやっとVBとかCができる程度ですが、
ありがとうございます。VBとCができるだけで既に
すごいです。VBは良く分からんです。
>(ヘボですが)Webデザインなら多少応援してあげられますけど。。。
Monaプロジェクトは、慢性的WEBデザイナー不足なので
もしお力を貸していただけるのであれば
[email protected]までメールくださいm(__)m
NWSOSは、シェルが進化しましたね。
やはりLightConeさんはすごいですね。
Monaはタスクスイッチ実験中です。
あまりうまくいっていませんが、少しずつ前に進んでます。
>>295 ネットワークにも対応したいんですが、WEB-BROWSERも、GUIを
最低限整備しないと作れないわけでして(笑)。
優先順位はやはりGUI>>>>ネットワークかと。
タスクスイッチと、タスクをロードして実行を開始するあたりが、
OS作りでひとつの山場っぽいですよね。
割り込み中でメモリ空間やスタックを切り替えるのは、普段絶対に
経験しないことですし。
あと、タスクをロードできると言うことは、
メモリ管理やファイルシステムがその程度の使い方ではバグ
フリーになった証拠でもあるわけで。逆にいえば、それらの
支援機能のバックアップがなければタスクをロードできないわけで。
ircクライアント入れてみたが、使い方が良く分からない・・・
ってMona開発に精を出せって話ですね。
306 :
デフォルトの名無しさん:02/12/05 22:16
>>305 ひげぽんさん
LimeChatがお勧めですよ!
#osdev-j チャンネルに参加してもらえると
かなりうれしいです!!
ネットワーク技術は全くの素人なんですが、
「ネットワーク対応」とは一体どういう状態のことなんでしょう。
COMポートやLANカードのドライバを提供することでしょうか。
それとも、ソケットみたいなものへの対応?
LANカードを直接制御すれば、OSの支援機能がなくてもなんとか
なるんじゃないかと素人考えしてしまうのですが。なんらかの調停が
必要なものなんでしょうか。
あるOSがネットワーク対応してます、と表明していたら、
TCP/IPスタックとbsd socket互換インターフェースがあり、
物理層としてethernetが使えることを期待しちゃいます。
> OSの支援機能がなくてもなんとか
パフォーマンスを考慮しないのであれば問題ないでしょう。
guiのブラウザなんかずっと後でいい
cuiのftpクライアント一つあるだけで相当便利になると思う
>>306 おかげさまで、有意義な時間が過ごせました。
また顔出します。m(__)m
>ネットワーク技術は全くの素人なんですが、
>「ネットワーク対応」とは一体どういう状態のことなんでしょう。
そのネットワーク対応ってのは、俺が言ったものではないけど、俺的希望としては
LANなどで接続されたNWSOS起動中マシンへ実行ファイルなどを送り込み、
runできるという環境が欲しいかな。要はリモート機として機能することね。
これでぐっと、NWSOSのアプリ移植は早まると思うな。
営業妨害するつもりはないが、NWSC-Cは、現状、C++は未対応なんだし、
当分はVC++だとかgccに頼ることになるでしょ?(NWSOSの実行ファイル作るに
しても)
>>310 いえいえこちらこそ
また是非いらしてください。
>>311 物理層のドライバ書くだけでも大変そうですね。
そもそも、LANカードの共通規格は無いんですよね?
でも、LANでつながずに、RS-232Cケーブルでシリアル接続
でいいなら、簡単に出来そうです。ネットワークと言うより、単なる
シリアル通信ですが(笑)。ポケコンとPCの間でもできるぐらいのもの
なので。
話はずれますが、"UNIVERSAL-DRIVER 計画"みたいなのがあるそうです
よね。しかも、あのMSも積極的っぽいらしく。
いや、RS-232Cじゃ転送速度に限界あるし。
linuxのLANカードドライバのソースコードでも引っ張ってきて、
NWSOS向けに移植するしかないのでは?
nwsos上にセルフ環境構築しても人は寄ってこない。
様々な便利なツールが、linuxだとかwindowsにあって、
体や指がそれに慣れきってるから。生理学的な問題ってことで。
てなわけで、nwsosがリモート操作できるという環境ができるならばおいらも賛成。
一番ご利益があるのはむしろ、L氏では?
あ、でも慣れるまでの橋渡しってことで>>リモート環境構築
NWSOSのshellはいい線、いってると思う。
バックログがキー操作一発ででき、しかもそのまんま編集が出来てしまう
という環境は、unix系のshellでは見たことない。
shellとeditの融合shell?
この手の、他にはない優位性が標準として実装されればNWSOSの自立性としての
価値が輝いてくると思う。(あーもちろん、カーネル書ける人からみたら
シェルは一アプリケーションに過ぎないことは当然承知の上でな)
>>315 >shellとeditの融合shell?
Vz Editor からアイデア貰いまくりです。(^_^)
>この手の、他にはない優位性が標準として実装されればNWSOSの自立性としての
>価値が輝いてくると思う。(あーもちろん、カーネル書ける人からみたら
>シェルは一アプリケーションに過ぎないことは当然承知の上でな)
他の もの でも、「ちょっと優位」なだけで輝いて見える場合って意外に多い
ような気もしませんか。
ウォークマンも、「小さい」ことに意義があるのだし、
軽自動車だって走行性能は普通自動車に劣るかもしれないのに人気が有るし
(どちらも「小さい」という共通点が有るのが不思議)。
でかけりゃいいってもんじゃないことを肝に銘じておいてくださ〜い♪by ペリー
>>314 そうですね。
ただ、今のカーネルや SHELL でも、まだまだ至らない部分が多いので、
そちらを先に改良したいです。
ドライバ仕様の確定とDLLへの対応の優先順位はかなり高いと思います。
あと、コマンドをパイプやリダイレクトを使わずに起動しても、
今の shell ではコマンドの stdin に直接データを送れません。
これ改善するには、カーネル側とshellの両方の修正が必要だと
思ってます(パイプ関係で)。
>バックログがキー操作一発ででき、しかもそのまんま編集が出来てしまう
>という環境は、unix系のshellでは見たことない。
M-x shell の環境が近いかな?
tab補完はできるの?
>>319 >M-x shell の環境が近いかな?
恥ずかしながら、名前も聞いたこと有りいません。
>tab補完はできるの?
今のところ出来ません。
>>320 >>M-x shell の環境が近いかな?
>恥ずかしながら、名前も聞いたこと有りいません。
emacs ってエディターの中でシェルを使えるモードがあるんです
tab補完はほしいなぁ、ディレクトリが深くなる場合無いときついです
>emacs ってエディターの中でシェルを使えるモードがあるんです
そんなモードがあるとは始めて知りました。
>tab補完はほしいなぁ、ディレクトリが深くなる場合無いときついです
私もそう思ってます、、、。
でも、実の所、そういう機能はいつでも追加できるので優先順位的には
低く思ってるんです。
323 :
デフォルトの名無しさん:02/12/06 23:04
>>320 emacsはUnix系で広く使われているテキストエディタ兼
統合環境です。vi系と人気を二分してきました。
emacs系は、Win環境ではMeadowが広く使われています。
Cygwin環境用のemacsもあります。
emacsは慣れると手放せなくなる良品ですね。
LightConeさんには特にお奨めです。だまされたと思って
試してみてください。
>>323 >emacsはUnix系で広く使われているテキストエディタ兼
>統合環境です。vi系と人気を二分してきました。
emacs と vi が人気を二分していたとは知りませんで
した。今まで、emacs,nemacs,kemacs(?)が圧倒的に人気が有るのかと。
Muleもemacs系ですか?
>emacsは慣れると手放せなくなる良品ですね。
それはよく聞いてます。LISPマクロ(?)がいいんでしょうか?
最初、カーソルキーが使えなくて面食らったことがありますが。
>>324 > それはよく聞いてます。LISPマクロ(?)がいいんでしょうか?
TAGSファイルとか使うと本当に便利ですが、Cのコーディングスタイルが
押しつけられるので、好き嫌いはあると思います。
でも、emacsでアセンブラは二度とやりたくないです。自分でmodeを作る能力が
なかったため、字下げがわけ分からん状態になりました。
>Win環境ではMeadowが広く使われています
MonaのコーディングはMeadowを使ってます。
確かに便利ですね。
MakeもMeadow上から実行しているので
Meadowがないとつらいですね。
とりあえず、NWSOS標準Shellがunixの端末仕様に揃えれば
Vi系だとかEmacs系などの移植も進むと思われ
なんつうかそうなっちゃうとたんなる亜種になりさがっちゃう気がして...
>>327 >とりあえず、NWSOS標準Shellがunixの端末仕様に揃えれば
>Vi系だとかEmacs系などの移植も進むと思われ
カーソルを移動したり色を変えたりするエスケープコードみたいなものが
決まってるんでしょうか。
昔、REMOTE LOGIN で、自宅のDOSで遠くのemacsが動いてびっくりしま
したが。
>>328 >なんつうかそうなっちゃうとたんなる亜種になりさがっちゃう気がして...
基本的な部分を UNIX と似せておくことはプラスになると思います。
Windowsでも POSIX(UNIXの標準仕様みたいなもの)に大まかに対応し
てますが、Winを UNIX と思う人はいないわけで。
MacOSXのように個性が出せればですね。
>カーソルを移動したり色を変えたりするエスケープコードみたいなものが決まってるんでしょうか。
http://vt100.net/ この辺でしょうか?ちゃんと読んではいませんが。
>>330 まず基本的なことから知りたいのですが、sh,csh,bashなどは、
「コンソールの枠」としての「kterm」中で起動し、エスケープ
シーケンスの処理は、kterm がやっている、ということなんで
しょうか。
どうやら、kterm のエスケープシーケンスとMS-DOS のそれとは互換性が
あるようですが、あってるでしょうか。
>>329 > カーソルを移動したり色を変えたりするエスケープコードみたいなものが
> 決まってるんでしょうか。
termcap/terminfo
>>333 termcap や terminfo を変えれば、「UNIXの端末使用(xterm,kterm)」と
同じでなくても emacs等が動くかもしれない、ということでしょうか?
使用--->仕様
>>334 プログラム中にエスケープシーケンスをハードコーディングしたりすると特定端末でしか動かなくなるから、Unix ではカーソル制御ライブラリを使うのが定石。
これによって、プログラムはカーソルの論理的な動きを記述すれば良い。
実際にエスケープシーケンスへの変換は、カーソル制御ライブラリが行う。
更に、各種の端末に対応するため端末毎に変換規則をデータベース化してある。(termcap/terminfo は、データベースの名前。)
だから、カーソル制御機能がある端末に対応した termcap/terminfo が書ければ、どんな変な端末でも emacs とか動くよ。
>>336 >実際にエスケープシーケンスへの変換は、カーソル制御ライブラリが行う。
>更に、各種の端末に対応するため端末毎に変換規則をデータベース化してある。
解説有難うございます。UNIXでのカーソル制御や文字装飾制御は、
思った以上に柔軟性が高く、
1. アプリ--->カーソル制御ライブラリ
2. カーソル制御ライブラリ--->エスケープシーケンス
(termcap/terminfoでカスタマイズ可能)
3. エスケープシーケンス--->端末(xterm, kterm)
の3段構えだったんですね。
興味深いのは、アプリやカーネルを対応しなくても、各種環境に
1. カーソル制御ライブラリの置き換え
2. termcap/terminfo の書き換え
3. 端末(kterm/xterm)の書き換え
などで対応できそうな点です。
338 :
デフォルトの名無しさん:02/12/07 23:32
>>284 遅レスですまんが・・・
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
やるしね。
ここらへんは文化背景になっちゃうから軽くながしておいてね。
光円錐タン。。
LightConeマヂギレ!!!
俺は、LightCore氏が連続カキコしてても気にならないけどなあ・・。
344 :
名無しさん:02/12/08 11:21
前スレがあがっていたのでage
名無しで連続カキコしてるやつもいるからな。コテハンだから目立つだけだよ。
# っていうか俺は全然気にしてないけど。低脳な話してるわけじゃないんだし。
Emacsがどうとかシェルがどうとかはどうでもイイ話だろ?
LightConeは餓我なのか?あんま度がすぎるとム板に
NWSOSの開発スレ作ってやるぞ
タスクスイッチに実験中(いまだ成功せず)なのですが
Monaでは
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が発生しているような気が
するのですが、どこでこのような状況に陥ったかが
つかめていない状況です。
どなたかアドバイスいただけないでしょうか。
よろしくお願いいたします。
それはアクセスビットがたっただけではないでしょうか?
原因は別だと思います。
>>347 NWSOSの初期化コードです。参考にして下さい。
このコードは、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版を使ってます。
>>348 >それはアクセスビットがたっただけではないでしょうか?
>原因は別だと思います
アドバイスありがとうございます。
ということなので現在の状況を書かせていただきます。
もし何か気になる点がありましたら、ご指摘いただけたらと思います。
「はじめて読む486」のようにprocess1(),process2()という関数を
作成して実行の切り替えを試みています。
■前提条件
0x08 CS
0x10 DS
0x18 SS
0x20 TSS process1用
0x28 TSS process2用
■やってみた事
/* グローバル変数 */
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();
}
void process1() {
while (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.
■やってみたこと2
LDTが必要と言われているっぽいので
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
と表示されます。
LightCone さん
ありがとうございます。
一部とはいえ、NWSOSのコードを見たのは初めてです。
TSS中のLDT SegmentSelectorやFS/GSレジスタが正しく埋まってないとか・・・?
こんにちは超先生@OS板さん
いつもお世話になっております。m(__)m
>TSS中のLDT SegmentSelectorやFS/GSレジスタが正しく埋まってないとか・・・?
LDTセグメントセレクタは 0x30としています。
gs,fsは0に設定しています。
そもそもLDTってこの場合必須なのでしょうか。
だいぶ煮詰まってきました。
こういう部分がOS作りで厄介な所ですよね、、、。
今後数百回はこういう作業の繰り返しになると思います。
最終的には誰にも頼れないかもしれませんが。
>こういう部分がOS作りで厄介な所ですよね、、、。
>今後数百回はこういう作業の繰り返しになると思います。
>最終的には誰にも頼れないかもしれませんが。
本当ですね。非常に厄介です。
また実践的な資料をなかなか見つけられないのがつらいですね。
ちょっとした間違いで失敗しているのも、全く見当違いのことをしているのも
見た目上、区別がつかないです。(特に独りよがりになっていると・・・)
そこは、LightCone さんや、超先生@OS板さんのような
先人のアドバイスを頂きながら進めると良いなあと勝手に思ってたりします。
いつか、私もOSを作ろうとしている人たちにアドバイスできるほどになりたいです。
今のケースは、
setTSS()や、setDT()の中身が正しいか、TSSの構造体が定義通りになって
いるか等を丹念に調べることと、きちっとCPUの動作を理解するしかないです。
>>359 とりあえず、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)の
間違いだと思います。
これは明らかに間違った挙動を起こすはずです。
LightCone さん
貴重なお時間を割いていただいて大変恐縮です。
ご指摘の部分を修正したところ、ばっちり二つのタスクが交互に動くようになりました!!!!
ひとえにLightCone さんのおかげです。
厚くお礼を申し上げます。
成功した瞬間に、背筋がぞくぞくっと来ました。
どうもありがとうございました。
>>362 そういえば、Monaのソースでは既にコンストラクタやデストラクタは
正常に動作するようになってるんでしょうか。
OSを書くときに非常に便利そうなんですが。
>>363,364
どうもありがとうございます。
>そういえば、Monaのソースでは既にコンストラクタやデストラクタは
>正常に動作するようになってるんでしょうか。
>OSを書くときに非常に便利そうなんですが
正常に動作しています。
ただし継承関係のあるクラスできちんと動くかどうかは
確かめていないです。
きちんとカプセルかできるだけでもかなりのメリットです。
NWSCも、メンバ関数とコンストラクタ、デストラクタだけに
対応する位でも相当便利になるんでしょうけれども。。。
でも、デストラクタを呼び出すタイミングが意外に厄介そう
だし。
goto文でコンストラクタを迂回した時にエラーを出したりするのが
メンドクサそうなのでやってないんですが。
>NWSCも、メンバ関数とコンストラクタ、デストラクタだけに
>対応する位でも相当便利になるんでしょうけれども。。。
>でも、デストラクタを呼び出すタイミングが意外に厄介そう
>だし。
なるほどあまり深く考えていませんでした。
今のところインスタンスを大量に作ったりしないので
問題になっていないですが・・・
覚えておきます。
>>368 #366では、コンパイラを作る時のボヤキだったんですが、
OSを作る上でも、もしかしたら、デストラクタの呼び出し
タイミングとかが問題になる可能性もあるかもしれませんね。
でも、きっと、純粋なCで書くより開発効率は上がると
思います。羨ましい。
c++の本領が発揮するのはSTLだと思う。
でもOSを記述するなら、list vector などを void* ポインタ限定に
してしまえば、cでもSTLもどきは実現できる。
>>370 >c++の本領が発揮するのはSTLだと思う。
>でもOSを記述するなら、list vector などを void* ポインタ限定に
>してしまえば、cでもSTLもどきは実現できる。
リストを自動化できれば便利ですよね。NWSOSでは、おっしゃっているような
方法を用いてます。同じリスト関数群で色んなリストに適用してます。
LightConeさんのおかげでマルチタスク実験に成功しました。
記念にimgファイルを↓におきました。
http://mona.sourceforge.jp/に 今回の件は、Monaにとって大きな節目だと考えています。
イメージサイズも33kbになりました。
FreeDOS教徒さんのブートコードも順調です!!
今までアドバイスいただいた方、手伝って下さった方々に
深く感謝いたします。m(__)m
>>ひげぽん
マルチタスク化おめ〜♪
それにしても、当初アセンブラも余り使われた事のないような状態から
よくこんな状態にたどり着きましたね。未だに信じられません。
>>373 FreeDOS教徒さん
ありがとうございます。
これからもよろしくお願いしますね(必須)(笑)
>>374 LightCone さん
>それにしても、当初アセンブラも余り使われた事のないような状態から
>よくこんな状態にたどり着きましたね。未だに信じられません。
私も信じられないです(爆)
LightConeさんにはお世話になりっぱなしです。
* * *
* *
* ∧_∧ *
* (´∀`) *
* *
* *
* * *
|
|
Mona マルチタスク化 おめでとー
>>376 ありがとうございます。
感動しますた。
379 :
デフォルトの名無しさん:02/12/10 02:06
>>ひげぽん
これからもできる限りお手伝いさせて頂きますw;
>>379 当方マイクロカーネル方面に疎いため、
その方式のどこがいいのか分かりません。
モジュールに分割したら、何かいいことがあるのでしょうか。
マイクロカーネルの本質は、サブシステムを独立「プロセス」で動かすと言う
発想であって、論理的なモジュール分けを行うこと自体はモノリシックカーネル
でも行われます。単にカーネルの外にAPIの実装を出すのとも違うので、DLL
でAPIを実行するだけでは、マイクロカーネルとはいえません。
利点ばかりであれば、大手を上げて賛同したい所ですが、本来の
目的とは裏腹に、下手すると設計がむしろ複雑になる危険性や、
速度パフォーマンスの低下の問題などもあり、反対意見が出てもおか
しくないと思います。
(システムコール発行から結果が出るまでの速度(ターンアラウンド時間)
において不利な一方、割り込み禁止区間の粒度を「確実に」小さくできる
利点があったりして悩みどころ。)
はっきり個人的意見を言っちゃうと、どの分野でも「新しい概念」が現れた
ときに、「知りたい」と思う人が沢山出てきて、本当にその概念が「良いもの」
かどうかは別としてその新しい概念の研究が盛んに行われる傾向があるので、
研究が盛んであっても、その都度ちゃんと判断して見極めることが大事だと
思っています。その見極めがどっちに転ぶかは人それぞれということで。
あと個人的な疑問なんですが、日本で独自なOSを研究以外で作ってるのって、
組み込み向けのiTRONと、超漢字(bTRON?)だけなんですか。
日立やNECのスーパーコンピュータのOSとかはどうなってるんでしょう。
日本では「研究」は盛んですが、実際に作っている人が少ないと
思うのは気のせいですか? あと、OSの研究とは、OSの歴史分類や概念の
取りまとめのことなんですか? 「実際の作り方」の研究はしない?
>>LightConeさん
よく分かる説明をありがとうございます。
実装を軽くするにはモノリシックカーネル内でモジュール化
するほうが楽そうですね。参考になりました。
現状、「マイクロカーネル」そのものをテーマに研究が行われること
さえあるのは、独立プロセスとしてサブシステムをどうやって記述すれば
いいかが自明でないからかもしれません。
仮想記憶とファイルシステムとの結びつき、メモリシステムと仮想記憶の
結びつき、サブシステム用のプロセスのローディングとファイルサブシステム
との結びつきなど、自明とは言いがたい問題が沢山あるため、研究してみな
いとマイクロカーネル自体の利点や問題点さえ正確に把握する事が
できないのかもしれません。
告白すると、わたしもよく知りません。
Hurdの開発者がマイクロカーネルはそれほど遅くなかったとか言ってたな
>>386 実は、マイクロカーネルの最大の問題点は設計が難しいことかもしれません。
388 :
デフォルトの名無しさん:02/12/10 21:31
>>388 GR-DOSはもう一昔前に開発を終了しているはずですが?
あと、確かにこれ以外にも人知れずOSを開発してる人はいます。
世界と比べても、そう少ない割合だとは思いません。
32BIT, MultiTask に限定したりすると?
あと、x86、GUI付きに限定したりすると?
391 :
デフォルトの名無しさん:02/12/10 23:36
Machマイクロカーネルはオーバーヘッドがどうとか言っても
Mac OS Xは動いてるしHurdもいちを実用段階には入ってるんだよね?
Machっていうのは単体で動くものなの?
>>あと、x86、GUI付きに限定したりすると?
なんでx86限定なんだw
たしかにゴミのように今後もあふれるであろう32bit-x86CPUの再利用っていうのは
大事なテーマになると思うが。
マルチタスク化おめでとうございます。
GUI実装目指して頑張ってください
空想マニアのたわごとでゴメンだが、将来的にマイクロカーネルが洗練すれば、
それぞれのサーバプロセスを複数のマシンに分散できたり・・・
カーネルを2台以上のマシンで走らせたり、カーネルマシンが落ちたとしても
ホットスタンバイしてるカーネルマシンにスイッチできたりとか・・・
ドラえもんレベルの空想でごめん。
20年ぐらい前からそう言われてますた。
>あと、x86、GUI付きに限定したりすると?
Windowsがあるし、linuxがあるし、BSDもBeOSもあるし。
特にGUIの性能はWindowsがずば抜けてるし、わざわざ用意する必要がない。
日本の場合、FEPの開発もせねばOSとして使い物にならないことが
多いゆえ、OS開発の敷居は高い。それこそ、「超漢字」などという名前のOSが
あるくらい。
一方、米国人だとか欧州人はとても裕福。
週休4日なんてあたりまえで、いわゆる自分の時間を多く確保しても
メシに困らないほどの経済力がある。だから、余暇でOSやツール群に
夢中になる人の割合が多い。
この差だ。
日立、富士通、NECなどの大手は30年も昔からスパコン用のOSを作ってる。
IBM機OSのエミュがあまりにも互換性が高すぎるゆえ、スパイ罪として逮捕された
事件もあるほど。
うぬぼれるな、青木。もっと見識を「豊か」にしろ。
>>393 ありがとうございます。
思うところがあって、Linkers&Loadersという本を買いました。
初心者向けっぽいですけど、勉強になりますね。
あと、Monaはマイクロカーネルで行く予定です。(あくまでも予定ですが・・・)
FEPとかは、JUST SYSTEM等に任せればいいかと。
出来ないのは単純に技術力がないからだと思ってたんですが。
gccインラインアセンブラの話なんですが
asm 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'
と怒られます。
この辺詳しい方いらっしゃいましたら教えていただけないでしょうか。
アセンブラ板のほうがいいのかもしれないですが・・・
>一方、米国人だとか欧州人はとても裕福。
日本は世界第二の経済大国ですが。
>日立、富士通、NECなどの大手は30年も昔からスパコン用のOSを作ってる。
それは、マルチタスクや、GUIを持ってましたか。
>>400 gcc -Sしてみるとわかりますが
ljmp _selector , $0
というふうにインライン展開されています。
asmには定数を渡す必要があるので
#define FOO_CS 0x20
などとしてやる必要があります。
>>403 ありがとうございます。
ということは、ljmp先は動的に指定できないということでしょうか。
拡張インラインアセンブラの入力パラメータは使えない???
でも、ljmpのオペランドは即値だけでなくメモリ、レジスタもOKだと
思っているのですが・・・
何か大きな勘違いをやらかしてそうです。→私
>404
セレクタだけメモリというわけにはいかないので
struct {
dword ofs;
word sel;
} far_ptr;
こんな感じで6byteのポインタを渡す必要があります。
あとあまりお奨めできない方法として
push word selector
push dword 0
retf
(NASM風記述。gasニーモニックは忘れました。)
>struct {
>dword ofs;
>word sel;
>} far_ptr;
>こんな感じで6byteのポインタを渡す必要があります
ありがとうございます。
出来ました!!!!
>>LightConeさん
32ビットでマルチタスクのOSといえば、OSASK、NWSOS、EOTA、MEG-OS、Mona
ぐらいしか思いつきません。
x86系、GUI付きOSはそれにMonaを除いてもう1つあります。
あと、
SCE(SONY COMPUTER ENTERTAINMENT), 東芝, 米IBM が、2005年をめどに
新OS を開発中(SONY の AIBOは、Aperios という独自OSが載ってるらしい。)
大手電機メーカー各社のWorkstationには、UNIXの移植版が
載っている模様。
スパコンは、UNIXの他、独自OSが載っているのもあるらしい。
でも多分、ハードメーカーが載せてるUNIXは、海外ソフトメーカーに委託
したか、FreeBSD等を載せているんだと思う。
BTRONは、超漢字,EOTA など。
JUST-SYSTEM が昔作ってた、JUST-Windowというのが国産GUI-OS。
ところが資金力尽きて、ついにWindows帝国に敗北。
正確には、土地バブルに載って購入した土地資産が1/10以下になって撃沈。
実力はあったのに本業をおろそかにして、
駄目だと言われ続けてたWindowsの拡張工事に余念のなかったマイクロソフトに
頭を下げたのが '93だから、あれからはや10年。
元、ジャスト社員より
∧_∧
< `ー´>-~~~
PC-98用のMS-DOSについてきたDOS-SHELLは手動タスク切り替えもできたよな・・・。
ところで、高級言語とassembleの比率は今のところどのくらいなんでしょう。 >> NWSOS他
>>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つは、今後削除する可能性があります。
>>411 DOSSHELLはタスク切り替えというよりタスクスワップの気が
めぐたんは現在フルアセンブリです。
ついでに、最新ビルドでもまだマルチタスクをサポートしてません(つД`)
>>411 Monaは
アセンブラコード:10KB(ブートからプロテクトモード移行まで)
C++コード:70KB
C++ヘッダ:10KB
ただしC++部には、ごく一部インラインアセンブラが含まれています。
またdoxygenコメントに対応するため、コメント量が多くなっていますので
C++部は実際は半分のサイズくらいだと思います。
NWSOSとの規模の差が歴然ですね・・・
タイマー割り込みハンドラ内でタスクスイッチをしようとして
気づきました。
タスクスイッチの前にEOIは発行しなければいけないと思うのですが
iretは?疑問がいっぱい出てきました。
この辺のことに詳しい資料とかないでしょうか。
そろそろ「はじめて読む486」だけでは限界がきたかもしれません・・・
もし良い資料等ありましたら教えてくださいm(__)m
>>ひげぽん
インテルのマニュアルさえあればいいと思う。
iret自体は通常のretfにpopfを追加したものだった気がする。
必要なところを探す能力があれば、それなりに役に立つよ。
>>インテルのマニュアルさえあればいいと思う。
>>iret自体は通常のretfにpopfを追加したものだった気がする。
>>
>>必要なところを探す能力があれば、それなりに役に立つよ。
ありがとうございます。
全くおっしゃるとおりですね。
ちょっと調べてみますです。
>>416 プロテクトモードのiretは結構違います
インテルの命令セットリファレンスに詳しい動作が書いてあります
>>318 いま手元に確認できる環境がないのですけど、
リアルモードとは勝手が違うのですね。
鋭い指摘ありがとうございます。
∧_∧
< `ー´>-~~~ TSSはあまり使ったことがないが・・・・。
IDT上に割り込みハンドラ用のタスクゲートを置くとかできたっけかな。。。
割り込みハンドラをタスクに見立ててTSSを作っておき、
iretの代わりに実行するTSSへ向かってjmpするとか。
for(;;)
{
/* 割り込み時はここへ飛んで来る */
....
....
jmp tss_next_task; /* 次のタスクへ */
}
∧_∧
< `ー´>-~~~ TSSはあまり使ったことがないが・・・・。
IDT上に割り込みハンドラ用のタスクゲートを置くとかできたっけかな。。。
割り込みハンドラをタスクに見立ててTSSを作っておき、
iretの代わりに実行するTSSへ向かってjmpするとか。
for(;;)
{
/* 割り込み時はここへ飛んで来る */
....
....
jmp tss_next_task; /* 次のタスクへ */
}
スマソ。なぜか多重書き込みに・・・ABoneのバグか。
タスクゲートはIDTにも置けます。
割り込みでタスク切り替えするとCR0のNTフラグ?がたって
iret命令でこのフラグチェックするれす。
記念パピコ
monaに期待
>>421 超先生@OS板さん
>>424 みとこさん
いろいろとアドバイスありがとうございます。
週末に試してみます。
やっぱり平日はなかなか作業できないっす。
そのかわり年末年始にガツンとがんばります。
わーい、今日はじめてbochsいれてhigepos.bin動かしてみました。
過去ログどおりにやったら動いた。
ちょっと感動。
>424
∧_∧
< `ー´>-~~~
ということは割り込み用tssのtask chainに次のタスクを入れてiretすれば楽勝ですな。
元のtssはbusy flagを手動で消さないとダメか・・・。
>424
∧_∧
< `ー´>-~~~
ということは割り込み用tssのtask chainに次のタスクを入れてiretすれば楽勝ですな。
元のtssはbusy flagを手動で消さないとダメか・・・。
また多重に・・・スマンカッタ。ABone作者を小一時間問い詰めておきます。
どうでもいいけどTSSのビジー消しは面倒ですね。
昔、RMに落ちた後PM戻るPG書いたとき一般保護例外発生して困って
よく調べたらビジーTSSが原因だった、、、(><
今の3倍くらい勉強しなければだめだ。
と最近思います。
ひげぽんもLタンも頑張れ
この静けさ。どうやら、LさんもHさんもコーディングにいそしんでるご様子。
販売中か!カッコイイ
>>437 販売中なのは、Windows用の統合開発環境です。
OSは無料で自由にダウンロードして使えるようになっています。
Light氏のHP見てると、とても個人の作品群とは思えないラインナップだな。
リンカ、ライブラリアン、アセンブラ、ANSI-Cコンパイラ、NWSOSですか・・・
どうも、漏れはケンカ売る相手、間違えたっぽい。
もう、このスレに来ません。ごめんなさい。
∧_∧
< `ー´.>-~~~
へへへ、俺って顔つきも朝鮮人だろ?
発音も「超先生」と同じ、兄弟さ。
テポドンのOSを作ったのは、何を隠そう、このワシじゃ。
OSに関して、右に出るものはいない。
さぁ、質問してきなさい。HもLも。
ひゃひゃひゃ。
x86の特権レベル1と2って使ったことがないな
効果的な利用法ってあるのだろうか
∧_∧
< `ー´>-~~~ PL1,2は使いものにならない、がファイナルアンサー。
ページレベル保護はU/Sの2段階しかないのでほとんど無意味ですな。
>>442 私も同感です。
システムコールに一旦入ってしまえば、コール元の各種属性はいくらでも
知ることができるので、わざわざCPU定義のレベル1,2で判別する意味がない
ので、もし、レベル1,2に利用価値があるなら、CPU命令を実行中の自動保護、
例えば、「ページレベル保護」などに変化が付けられるなどに限定されるはず
なんですが、IA32の場合そこに実質的な変化が付けられないので意味がない、
という説明ができると思います。
結論的には、超先生のおっしゃる事の通りだと思います。
やはり、使えませんか。
JITコンパイラ実装時にリミットの異なるセレクタを用意して、
JITコンパイラ自体を保護できないか、などと考えてみたのですが。
∧_∧
< `ー´.>-~~~
ふむふむ、既に弟の超先生が、
レベル1,2の蛇足っぷりを示してしまったようだな。
>>444 セレクタの要求レベルを使った保護なら、レベル1,2が有効に使える可能性
は有ると思います。
ちょいっとメモリ管理について質問します。
X386でメモリ管理する場合って、
例えば、連結リストで物理アドレスにダイレクトマッピングして
管理しているとする時でも、eip, espって結局オフセット値ですよね?
だから、コンテキストスイッチするには
最低限度、cs:eip ss:esp cr3とかは退避しないと駄目なんですか?
ハードウェアのメモリ管理機構とOSでのメモリ管理との繋がりが
よくわからないです。書ボーン。
だれか〜目から鱗落させてクダサイ><
450 :
デフォルトの名無しさん:02/12/17 00:31
そういえばアメリカの中学生グループがWindowsみたいなGUIを持ったOS作ってたよね。
あれはどうなったのかな?
451 :
デフォルトの名無しさん:02/12/17 00:40
セグメントと論理の違いをべんきょうしる。
386アーキテクチャはちょっとむずいかも。
452 :
デフォルトの名無しさん:02/12/17 00:44
S370は単純でおすすめ
286はなんで動作レベルが5段階にもなってたんだろう?
あれにはページングがなかったからセグメントのレベルだけで
保護してたわけだけど、意味あったのかな?
もしかして386が4段階の動作レベルを持つのってその名残?
ウンチク的な役に立たない話ですんまそん。
454 :
デフォルトの名無しさん:02/12/17 01:38
453>> 286+α=386だからあなたの予想は的中なのだ
セグメント+リミット+ページング+コールゲート
なのだ
∧_∧
< `ー´>-~~~
>JITコンパイラ実装時にリミットの異なるセレクタを用意して、
>JITコンパイラ自体を保護できないか、などと考えてみたのですが。
ほうほう、君はひょっとして首藤クンかね?
保守
∧_∧
< `ー´>-~~~
図星かね?
須藤先輩…(;´Д`)ハァハァ
part3ダット落ち。。。
読みたかったのに。
だれか保存してたら下さい。
>460
ありがとうございます!
ですが。。。なぜか家に帰ってから見たらDAT落ちしてない。。
外で見たときは落ちてたのに。
なぜだぁぁぁ・・・
●もちですか?(;´Д`)
最近、いろいろと勉強中で見た目上あまり進んでないのですが
年末年始にドーンと更新しようかと思います。(あくまで予定ですが)
タイマ割り込みでタスクスイッチできずです・・・
>>463 ひげぽんタン、がんばれり。
なまあたたかく応援sage
>>464 なまあたたかい応援ありがとうござます(笑)
ところでこのスレを見ている人たちは
他にはどんなスレッドを見ているのでしょうか。
やっぱりNWSOSやOSASKのスレッドですかね。
>>465 ココしか見てない。他は自分にとってあまり有益でないから。。。と言うか『ひどいインターネット』だから
OSをつくろうはpart2から見てるけどすっごく勉強になってる。
>>465 個人的にボードコンピュータを使用することがあるので、
monaを自分が制御したいもののタスクスイッチとして使えたら
いいなと思ってここ見てます。まだ夢の話ですが。
469 :
デフォルトの名無しさん:02/12/19 20:46
>>465 漏れの場合は、OSASK系スレがメイン。
ひげぽんのスレを見て和製OSを知ったり。
割り込み関数を書くときは、スタックフレームを
明示的に扱わないとハマるよ(`□´)くわ〜っ
さて原稿〜(;´д`)へろへろ
ミツミタンハァハァ
あの・・・
馬鹿なOS作って、実験かねて実機で動かして
マシンがぶっ壊れた(゚∀゚)なんてことはありうるのでしょうか?
あったら体験談おね
>>465 俺もここしか見ない。
OSASK は Web 見て、愕然としたから、もう見ない。
>>472 ディスクの中身を飛ばすことはあるが、ハードウェア的に壊れることはまずない。
(もちろん、その PC が、ロボットや溶鉱炉の制御してるとか言うんなら話は別だぞ。
あと、頑張れば BIOS 書き換えぐらいは可能性があるけど、意識的にやらないと
なかなか難しい。)
そう言う意味で、開発機と実験機は分けたほうがいいと思う。
(一緒だと、リブートの嵐だからね。)
今時なら、中古の Pen133MHz 機程度なら \5,000 ぐらいで売られてるから、そう言うのを
使えばいいと思うよ。
>>472 PCじゃないけど…ドライバいじってる時、なぜかNICが壊れた事あり。
原因はいまだに不明。
試作ハードだったから、ハード的な問題だったのかもしれない。
概ねファイルシステムが出来たと思って遊んでいたら、ハードディスクが
論理的に破壊された経験をもつものです(汗)。
原因は、PC-98x1のBIOS呼び出し時の、CFフラグの1,0が逆になって
いただけ。
それからというもの、ハードディスク書き込み恐怖症になり、
さらに厳重にするため、開発機と実験機を分けるようになりました。
一種のトラウマですが、良い経験だったかもしれませんね(^_^;;)
ハナゲを抜いたときの痛さと、
OS開発時にHDを吹っ飛ばす痛さと、
どっちが痛いですか?
新刊落としたときの痛さに勝るものはないよ〜!≡≡(つдT)ひぃいい〜!!
>>472 初代IBM PC/ATでPICのバッファリングモード使うと焼けるよ。
SP/ENがGND直結で危険(`□´;)
最近の統合chipsetではそんなこと絶対に起きないけどね(`ー´)ふふり
>>465 ひげぽん、がんばれ〜こっちはマターリしてるからイイ!!
私は技術がないんでとても協力なんてできませんが
使う側としてmonaをしっかり見ていきたいと思います。
NWSOSは見てます、ちょいと揉めてるみたいですけど。
OSASKは見ていません。
でもでも、個人的にはメグOSが好きかなぁ(ボソ
キャラとかじゃなくてなんか、AIぽいのが好きなんです。HALとか・・・(オタ
#osdev-j ・・・(ボソ
正直な所2ch製のOSなんて誰も使いたくないなぁ。
ひげぽんはMegaBBSとかいちごBBSでマターリやったほうがよかったんじゃないかと思う
481 :
デフォルトの名無しさん:02/12/20 14:24
2ch製といっても、作ってるのはひげぽんだからな
別にいいと思うけど。
>>480 おまい、2chブラウザとかも使うなよ。
でたよ、詭弁の特徴が。
なぜ誰も使いたくないと断言できるのか。不思議だ。そういうもんか。
monaはオープンソースですが、何か?w
Mona環境でSTLを使えるように環境構築してくれる人募集です。
といってみるテスト
すべて使えるようにならなくていいっす
コレクションが使えるだけで十分です。
string.hで定義されている関数が必要になりそうです。
よろしくおねがいいたします。
ところで、
bochs-winで起動させるディスクイメージは
どうやって作ってるの?
WINDOWSで。ddとかだとバグったし・・
>>479 >#osdev-j ・・・(ボソ
osdev-jはレベルが高いですよね・・・
勉強不足を痛感させられる空間ですね。
じゃひげぽんたんもっと来るれす
>>491 相変わらずレベル高し。
タイマー割り込みによりタスク切り替えを実現すべく
インテルのマニュアルを読んでいました。
(1)EFLAGSレジスタのNTフラグをセットする。
(2)現行タスクのバックリンクを次のタスクにする。
(3)(現行TSSビジーを解除?)
(4)iret
(1)(3)のやり方が分かりません。
そもそもそんなもんは不可能だ!等アドバイスいただけないでしょうか。
>>492 ありがとうございます。
>STLの移植に関してですが、STLportはいかがでしょう
ほう、こんなものがあるんですね。
STLは一部でも良いので使えるようになるとうれしいですね。
誰か詳しい人いないかな。
∧_∧
< `ー´>-~~~
>(3)(現行TSSビジーを解除?)
NT=1でiretすれば自動的にbusy解除されるはずです。
>(1)EFLAGSレジスタのNTフラグをセットする。
popfd命令でEFLAGSを変更できるはず。
超先生@コーディネーター さんありがとうございます
pushfd,popfdを
組み合わせれば何とかいけそうな気がしてきました。
NTフラグをセットしてiretしてみました。
bochs君に IRET: TR not valid
と怒られました。
現在調査中です。
ハナゲを抜いたときの痛さと、
LタンのGPL叩きの痛さと
どっちが痛いですか?
∧_∧
< `ー´>-~~~ そういえば。
切り替え先TSSのbusyフラグを立てておかないと、無効TSSで落ちるかも。。。。
ctrl_xfer_pro.cppのBX_CPU_C::iret_protectedを参照。
>>どっちが痛いですか?
痛さの単位。1ハナゲ。
どっかの学者が4/1に言ってたっけ。
ね、ひょっとしてC++で書かれたカーネルって世界的に見ても、
MONAが先駆?
あのぺーじ、復活させて〜。
bochs2.0がリリースされた模様。
超先生@OS板さん
ご指摘の通り、切り替え先をTSSBusyにしたらOKでした。
いつもいつもありがとうございますm(__)m
ということでタイマ割り込みによりタスクスイッチする実験に
成功いたしました。
アドバイスいただいた方々ありがとうございました。
ところでbochs2.0ですが
文字色が違いますね。
ピンク(実機&bochs1.41)
紫(bochs2.0)
なぜ?
>>504 C++かもしれないが、多分殆どCに近い書き方なんじゃ
ないかなあ。C++で書くと一口に言っても、その内容は
ピンきりだからねえ。
EPOCなんかはテンプレートも使っててばりばりにC++で
書かれてる。。
ところでそろそろ関連リンクをまとめない?
俺はやらんが。
513 :
デフォルトの名無しさん:02/12/22 21:28
皆さんのおかげで
タスク管理のテストにだいぶ成功してきました。
そこで本格的にタスク管理の設計に入る前に
どうも自分がきちんと理解できていないメモリについて
勉強をしようと思っています。
メモリについては、はじめて読む486以外では
あまり勉強できていません。
特に、以下のキーワードの理解があいまいで
非常に心許ない状態です。
OSを作るうえで非常に重要だと思うので
参考になる書籍・WEB資料を教えていただけないでしょうか。
■キーワード
・スタック
・CS,DS,ES
・フラットモデル
・セグメント
・ページング
・タスクゲート
・GDT
・ローダー
よろしくお願いいたします。
>>ひげぽん
‥‥ドンマイやね。
【フラットモデル】
あるアプリケーション内でコード、データ、スタックが同一のレジスタですべて
アクセスできること。
要するにセグメントレジスタ不要な環境のこと、らしいですよ。
516 :
デフォルトの名無しさん:02/12/23 00:34
>>515 どうもです。
そこまでは分かるのですが
どういうメリットがあって、他にどういうモデルがあるかとか
タスクスイッチが絡んだ場合どうなるかとかが知りたいです。
>>516 本人ですよ(笑)
資料ご提示ありがとうございます。
どうも表面的なことは分かるのですが
上記のキーワードは
ちょっと突っ込まれると自信がなくなるやつらです。
人に教えるほどは分かってない状態です。(これで伝わりますでしょうか。)
こいつらの理解が浅いため、Linker&Loadersとか
読むと???状態に陥ります。
基礎体力が足りません。
恥は今のうちにかいておきます。
>>ひげぽん
私はWindowsプログラミングをしたことないのでアレなんですが。
「アーキテクチャ徹底解説 Microsoft Windows2000」
なんかが良かった記憶が。
>>519 >「アーキテクチャ徹底解説 Microsoft Windows2000」
ありがとうございます。
本屋で立ち読みしてみます。
今日はいろいろと勉強の日にしようかと思います。
>>521 ありがとうございます。
フラットモデルについて
CS=DS=SS=ESとすることのようですが、疑問点があります。
どなたかアドバイスをいただけないでしょうか。
プロテクトモードではGDTにより、セグメントを定義できます。
フラットモデルの場合、各レジスタの指すセグメントがまったく同一
(つまりベースもリミットも同じ)という理解で良いんでしょうか。
GDTにはセグメントタイプを指定するところがあるので4つエントリを作成して
それらのエントリはベース・リミットも同一ということでしょうか。
もし仮に上記のようだと仮定した場合、物理メモリ上におかれるコードと
スタックは位置的にどのような関係にあるのでしょうか。
連続書き込みご容赦ください。
スタックオーバーフローという言葉を耳にしますが
スタック領域が足らず、コードやデータを破壊してしまう
ことだと認識しています。
スタックが上方、下方どちらに伸張するかを別にしても
CS=DS=SS=ESの場合、スタックとコードの区分けは誰が管理
しているのでしょうか。
OS、CPU、各アプリケーション?
またタスク切り替え時には、スタックの切り替えが必須ですが
タスクAのスタックとタスクBのスタック
区別・管理するはOSという認識であっていますでしょうか。
この辺のことはおそらく基礎の基礎だと思うのですが
理解できていません、どなたかアドバイスをいただけないでしょうか。
>>523 OSが実現したいと思っているメモリ保護モデルを、
CPUはサポートするだけであって、強制するわけじゃあない、
というのはOKですかいな?
なんかCPUに流されてるように見える...
>>524さん
>OSが実現したいと思っているメモリ保護モデルを、
>CPUはサポートするだけであって、強制するわけじゃあない、
>というのはOKですかいな?
OKです。
・どんなメモリ保護モデルがあるのか?
・そのモデルを実現するにはどのような手段があるか?
・ターゲットCPUはどのようなメモリ保護機構を備えているか?
等、次元が違う事柄を混ぜて考えて混乱しているのだと思うのですが
勉強すると
>>522>>523のような疑問がでてきてしまいます。
CSとDSとSSのリミットやベースを変えると高級言語の多くの処理系で問題が出てきます
(コード領域の定数やスタック上のデータをデータ領域のデータと同様に扱うため)
ページング機構で各プロセスのメモリ空間自体を分離するのが一般的だと思います
このモデルの利点は(一部の安価なCPUを除きますが)移植性が比較的高いことです
セグメント機構はx86に強依存するので積極的には使われていません
(例外はTOWNS-OSやOSASK、286を意識したWindows3.1のようなOS)
コード領域は読み込み専用ページにして保護
スタックの前後に読み書き不可ページを用意してオーバーフロー、アンダーフローを検知
オーバーフローを検知したら実ページを割り当てスタック伸長
タスクスイッチのスタック切り替えはページテーブル(のアドレスCR3)とESPを切り替える
>>526さん
アドバイスありがとうございます。
>CSとDSとSSのリミットやベースを変えると高級言語の多くの処理系で問題が出てきます
>(コード領域の定数やスタック上のデータをデータ領域のデータと同様に扱うため)
なるほど了解いたしました。
>ページング機構で各プロセスのメモリ空間自体を分離するのが一般的だと思います
はじめて読む486にもページングの解説がありましたので読みなおしてみます。
>コード領域は読み込み専用ページにして保護
>スタックの前後に読み書き不可ページを用意してオーバーフロー、アンダーフローを検知
>オーバーフローを検知したら実ページを割り当てスタック伸長
>タスクスイッチのスタック切り替えはページテーブル(のアドレスCR3)とESPを切り替える
なるほどなるほどページングを利用するとこんなことが出来るのですね。
現在Monaではページングを利用していないのですが
ページングを利用しないときには、タスクスイッチ時の
スタックポインタはOS側が切り替えるという認識であっていますでしょうか。
便乗で申し訳ないが
タスク切り替え時のEBPとかはどうなってるのか知りたい。
Monaで
CS,DS,SSすべて、BASE=0,LIMIT=0xFFFFFFFFとしてみました。
bochs君に
[CPU ] can_push(): expand-down: esp-N < limit
と怒られてしまいました。
>529
>bochs君に
[CPU ] can_push(): expand-down: esp-N < limit
と怒られてしまいました。
espがssのlimit下回ると#GPが発生するみたいですね。(えくすぱんどだうんでは。)
えくすぱんだうんはどこか理解しにくいですね。(へんな気分になる(爆))
>>530 どうもありがとうございます。
ということは、ssのリミットは大きくしてしまうと
それだけでエラーになってしまうということでしょうか。
INTEL依存のOS作っている人なら分かると思いますが、
OSといってもソフトウェアなわけで、結局のところハード依存
になってしまうんですよね。
だから、数学的な理論以外ではソフトでは限界なんです。
だから、OS作成にツーな方は、そのうちCPU設計の方に興味が
行きやすいですね。
現にリーナス氏はlinux作成者ですが、半導体メーカに勤めていることが
その理由だと考えられます。
>531
esp > ssのlimit であればエラーは起きない筈。
だから、limit = 0xffffffff
ってありえないんですかね?
実はよくしらないっす(汗)
☆CPUをつくろうpart1☆
だれかつくってw
>>529 expand-down
0<-アクセス不可->limit<-アクセス可能->0xffffffff
eapand-up
0<-アクセス可能->limit<-アクセス不可->0xffffffff
>>535 >expand-down
>0<-アクセス不可->limit<-アクセス可能->0xffffffff
>eapand-up
>0<-アクセス可能->limit<-アクセス不可->0xffffffff
ありがとうございます。
expand-upにすれば良いということですね。
...と調べてみたのですが分からなかったので
intelのマニュアルを精読中です。
537 :
デフォルトの名無しさん:02/12/23 21:33
同じく文字化け
Opera 6.05
SJISとCSSの関係か?
すいません。私のアップロードミスです。
直りましたか?
ちなみにこのページは (・∀・)yossy◆FlasH.X1/s さん作です。(感謝)
IE6.0 + SP1
直った!
ひげぽんがんがれ
METAタグで
text/html; charset=Shift_JIS
を指定して
ファイルの文字コードをSHIFT-JISにしているのに
文字化けが起きていたようなので、
緊急避難的にEUCに変換後アップロードしました。
するとIEは文字コード自動認識でEUCと判断してくれて
OKという状態のようです。
でもこんどはNN4.78で文字化け(泣)
皆さん、始めまして
秘密裏にMonaWebDesignerになっていた(・∀・)yossy◆FlasH.X1/sです
これからちょくちょく2chにも顔だそうかと思います。
今、MPDN(MonaProjectDeveloperNetwork)という、開発者向け情報のページを作成中です。
お楽しみに。
ちなみに、>512は私です。
>>541 sourceforge.jpは、EUC-JP以外ダメっす。
charset=euc-jp指定しましょう。
>>543 アドバイスありがとうございます。
IE6 & NN4.78で確認できますた。
(・∀・)yossy さん本当にありがとうございます。
直ったぞ。
Opera 6.05
>>545 ご確認ありがとうございます。
ついでにカウンタも動くようになりました。
あした去勢に逝ってきます
現在: NWSOS > MEG > MONA
半年後: MONA > NWSOS > MEG
>>549 >現在: NWSOS > MEG > MONA
>半年後: MONA > NWSOS > MEG
いやそんなことないです(断言)
現実的に考えて、無理です。
現在の私の主観では、ひげぽんが現在レベル2だとすると
LightConeさん、みとこさんはレベル50以上です。
経験・知識・今までの実績すべてにおいてぜんぜんかないません。
まあお二人を追い抜くことを目標にするのはありかもしれませんが(笑)
さて次の目標は「ページングを実現すること」
にします。
幸い「はじめて読む486」に詳しい解説があるようなので
やってみます。
でもメモリに関しては、まだ?なところがたくさんあります。
552 :
デフォルトの名無しさん:02/12/24 01:06
>>534 焼くのが目標なのか、エミュレータを作るのが目標なのか・・・・
>>550 御安心下さい。
自作自演レベルは既に50以上ですよ。
>>半年後: MONA > NWSOS > MEG
まともなGUIを配備している唯一のOSはNWSOSだし、
MONAはまだそういう段階ではないので、未知数。
というか比較不能。
カーネルレベルでは、確かにMONAがNWSOSを追い抜く可能性は高いけど
GUIは別。実際、リーナス氏ですら、GUIに関してはとんだ素人だしね。
>>553 そういうのヤメレ
モチベーションヲ下げてどうする。
556 :
みとこ ◆AEqcy/sQU6 :02/12/24 02:39
見た目にだまされちゃだめ。
現時点のカーネルの完成度は NWSOS > MONA > MEG ですよvv
慣れないブラウザ使ったんであげちまったっす。
吊ってきまつ。。。
>まともなGUIを配備している唯一のOSはNWSOSだし、
NWSOSの各窓には、Windowsのようなデバイスコンテキストみたいなものがあるの?
点を打ったりラインを打ったりするのも、デバイスコンテキスト経由かな?
というか、NWSOSのGUI-APIのドキュメントってどこ?
ぷりーず!
>>558 >NWSOSの各窓には、Windowsのようなデバイスコンテキストみたいなものがあるの?
あります。
>点を打ったりラインを打ったりするのも、デバイスコンテキスト経由かな?
そうです。
しかし、Windowsだと、hDC を、全てのGDI関数の第一引数に渡しますが、
NWSOSだと、「カレントDC」をスレッド単位に持っていて、暗黙のうちに
カレントDCに対して描画されます。
>というか、NWSOSのGUI-APIのドキュメントってどこ?
http://homepage2.nifty.com/nowsmart/nwsosapi.htm#NWSOS API
の「グラフィック API」のところに一覧があります。
カレントDCを設定するAPIは、今のところ三種類用意されてます。
BOOL gfSetWholeDC( HWND hWnd ); カレントウィンドウを設定(全体描画)
BOOL gfSetClientDC( HWND hWnd ); カレントウィンドウを設定(クライアント領域)
BOOL gfSetClipDC( HWND hWnd, int clipX, int clipY, int clipSx, int clipSy ); カレントウィンドウを設定(任意領域)
仮想デバイスコンテキストなんかも、作れるの?
>>560 >仮想デバイスコンテキストなんかも、作れるの?
今のところ作れません。
>>560 ただ、描画している様子を見せたくないと言う事が目的なら、
仮想VRAMを利用できます。
また、独自のグラフィックライブラリを作りたい場合は、
>void gfPutImage( int tx, int ty, int sizeX, int sizeY, BYTE *pImage, EIMAGE_TYPE typeImage ); 指定イメージの描画
>自動形式変換機能搭載
こういうものを利用すると出来ます。
> ただ、描画している様子を見せたくないと言う事が目的なら、
>仮想VRAMを利用できます。
ん、あ、例えば、CADなんか作ってると、Windowに収まらない領域なんかへも
きちんと描画しとかないと、毎回描画しなおしなわけで。
裏側に、大きな仮想画用紙を用意しておき、必要な領域だけWindowに転送
するっていうのが欲しかっただけなんだけどね
Windowsってそのへん、明らかに設計ミスってるでしょ?
NWSOSのカーネルAPIってどのような手順で呼び出されるのでしょ?
x86のユーザーモードからカーネルモードへの変換タイミングってどこ?
みたいな感じで。MONAはどうなんだろ?ソースみるか・・・
>>563 >裏側に、大きな仮想画用紙を用意しておき、必要な領域だけWindowに転送
>するっていうのが欲しかっただけなんだけどね
今のところそういう設計にはなってませんが、検討してみます。
>>564 >NWSOSのカーネルAPIってどのような手順で呼び出されるのでしょ?
>x86のユーザーモードからカーネルモードへの変換タイミングってどこ?
現状で言えば、NWSOSのAPIは、int 22hをライブラリでラッピングしたもの
です。
int 22h で、ユーザーモード ---> カーネルモード への切り替えを行って
います。
ただし、この仕様は変更される可能性があるので、必ずライブラリ関数を
呼び出してください。
>>563 >Windowsってそのへん、明らかに設計ミスってるでしょ?
メモリに確保したビットマップのDCを取得して描画・転送できます
そのへんもOSにまかせたいという話ならわかりますが
設計ミスとまではいえないのではないでしょうか?
>メモリに確保したビットマップのDCを取得して描画・転送できます
>そのへんもOSにまかせたいという話ならわかりますが
>設計ミスとまではいえないのではないでしょうか?
ん?いや、完璧な設計ミスだよ。
画面外の描画もOS内部で引き受けてれば、窓サイズが変化しただとか
他の窓が上にかぶさったときだとか、わざわざアプリにDrawメッセージを
送ることなくOS内部で処理できたんだからね。
スクロールバーで動かしたときも、わざわざアプリに問い合わせる必要も
なかったしね。
そのへん、X-Windowなんかはよく出来てるよ。
一度、窓でCADなどを設計すれば分かると思うけど、
Drawメッセージが来たからといってクライアントDCにがしがし描画すると
とても使い物にならない。
そこで、MSが薦めるように、アプリ側で巨大な互換DCを作成し、通常はそこに
描画し、Drawメッセージが来たときは、必要な矩形のみをクライアントDCに
BLTしてください・・・と。
けど、これって、OSメーカの設計ミスを
アプリ屋に尻拭いさせてるに過ぎないんだよね。
互換DCへの描画って、グラフィックアクセラレータの恩恵を受けないし、
重いし・・・
Xみたいに描画コマンドをOS内部のワークにキューイングされる仕組みだったら
必要なコマンドをクリップに応じてチョイスし、それをレンダリングするという
ことが可能だった。
OSメーカの設計ミスによる怠慢は、後々ひびく。
ひげぽんさん
私もOSを作ろうとかねてから考えていたものです。
僕CとPascalしか今のところできませんが、「はじめて読む486」を買
いがんばって追いつこうと思いますので、どうか協力させてくださいm(_ _)m
「はじめて読む486」早く買いたいのですが、なにぶん「8086マクロアセンブラ入門」という本を買ったばかりなので、お金がなくて買えません
がんばってください...
568-569の話を真に受けるとメモリ食いすぎになりそうでイイ!
>>569 ちょっと話の内容がずれますが、
>Xみたいに描画コマンドをOS内部のワークにキューイングされる仕組みだったら
描画コマンドをいったんバッファに入れておいて、バッファが一杯になった
り、gfFlush()(仮)を呼び出したときに描画する、と言う仕様はNWSOSでも
将来やりたいと思っています。
Windowsの話になりますが、
>互換DCへの描画って、グラフィックアクセラレータの恩恵を受けないし、
私もそんな感じがしたことがあります。
WindowsでCADをやるには、GDIを使わずに OpenGL を使った方がいいと思い
ます。DirectX と競争できる程度に速いようですので。
>>568 >画面外の描画もOS内部で引き受けてれば、窓サイズが変化しただとか
>他の窓が上にかぶさったときだとか、わざわざアプリにDrawメッセージを
>送ることなくOS内部で処理できたんだからね。
サイズ変更に関してはそれだけではすまないんじゃないでしょうか。
なぜなら、多くのアプリケーションでは、Window-Sizeが変更されたとき、
論理的な描画内容も変更するからです。
例えば、エディタでは、「折り返し」の文字数が変化します。
>Windowsの話になりますが、
>>互換DCへの描画って、グラフィックアクセラレータの恩恵を受けないし、
>私もそんな感じがしたことがあります。
同感してくれて、どうもありがとう。
>WindowsでCADをやるには、GDIを使わずに OpenGL を使った方がいいと思い
>ます。DirectX と競争できる程度に速いようですので。
んー、DirectXのことは全く知らないけど、OpenGLを使ったからといって
アプリ側が即解決できる問題でもないんだよね。
gl系の描画関数をOS側が全て保持し、OS側がクリップし、ハードレンダかけないと。
OSが気軽にアプリにDrawメッセージ送りつけられても、アプリ側がクリッピングするのって
大変だし、そもそもそんな共通処理をアプリに押し付けるってどうよ?みたいな。
例えば、2chみたいな縦にながーいHTMLをブラウザに表示するにしても、
どうする?CADだったら、ある程度巨大なDCを用意するだけで済んだけど、
2chみたいに長いと(もっと長い例あるけど)、描画コマンドを蓄えて、描画前に
クリップを見積もって・・・・って処理、アプリがせねばならない。IEもやってるように。
このあたりNWSOSがまともにサポートすれば、アドバンテージになるのでは?
>568-569の話を真に受けるとメモリ食いすぎになりそうでイイ!
実際には描画単位はもっと細切れにできるんで、RECT配列を作り
クライアント領域との衝突判定をし、必要なぶんだけ描画するのが
望ましいのだけど、例えば、サイズの異なるフォントが混在する文書を
表示するとき、結局、最後まで描画するはめになるのよ。
このあたりは実務を積めば、そうそう、と納得してくれると思うがね。
もしかしてScrollDCを知らないとか...
>>574 >gl系の描画関数をOS側が全て保持し、OS側がクリップし、ハードレンダかけないと。
>OSが気軽にアプリにDrawメッセージ送りつけられても、アプリ側がクリッピングするのって
OpenGL は、描画コマンドを「記憶」させておいて、「再生」できますよね。
>>もしかしてScrollDCを知らないとか...
スクロールされたあとは、結局、その領域に対して描画せねばならない。
あのAPIはなにも解決してくれない。
結局、アプリ側の描画指定群をOS側で保持してくれないかぎり
どうにも解決できない問題。(もしくはその解決はアプリの責任)
#568さん、IRCの、
#osdev-j
で、話しませんか。
ご存知かもしれませんが、IRCは、リアルタイムチャットのプロトコルで、
私は、LimeChat というアプリで利用してます。
>OpenGL は、描画コマンドを「記憶」させておいて、「再生」できますよね。
っていうのをアプリに押し付けるのは止めて欲しいというお話。
>>582 オブジェクトの「カリング」自体も、OSにやってくれ、ということですか?
Windowサイズ変更時などに、描画コマンドの記憶・再生するのをOSが勝手に
やって欲しいと言う事ですか?
>オブジェクトの「カリング」自体も、OSにやってくれ、ということですか?
OpenGL対応のカードならハードウェアで図形ポリゴンのカリングをしてくれるので
OSでやらずしてどこでする?みたいなのり。
> Windowサイズ変更時などに、描画コマンドの記憶・再生するのをOSが勝手に
>やって欲しいと言う事ですか?
そういうこと。サイズ変更時に発生するテキストの折り返しがやりたければ、
アプリ側が描画コマンドを再構築すればよいだけの話で、そうでなければ
OSが保持している描画コマンドに従ってレンダリングするのみ。
>>585 HTMLやワープロデータの描画などで時間がかかるのは、描画自体ではなく、
データの解析と計算にありますよね。
「カリング」で高速化できる一番大きな理由は、解析と計算を省けるから
ですよね。
>>586 なるほど。
そういう所までなら、OSで自動化できますね。
#587の様な意味での解析や計算行為の「カリング」はOSには無理ですが。
最初から完璧なOSなんか期待してないよ。
ボロくてもいいから出せばいい
それをみんなで良くしていけばいいじゃないか
Lたん = にしだ わた○ と...。
あ、当然俺はこんなの手伝わないけど(w
>>589 実はそうはいかなかったり。
設計の段階でボロくやってしまうと後で重大な欠陥が見つかって
その修正に物凄い時間がかかる。
まあマターリしませう
Linuxなんて酷かったから、修正するのにあんなにかかったもんな。
もっとマトモに設計していればそうでもなかったと思うけど、
マトモに設計してたら誰も寄り付かなかっただろうな。
MonaOSの開発に参加させてもらったのは
みんなのレベルに追いつけるかなぁ〜(汗
とりえあえず「はじめて読む486」買いに行こうと思ったら
どこにもない(泣
仕方がないから注文しました...
今年中には無理そうなので、それまでにみんながどんどん進んでいって
置いてきぼりにされそう...
とりあえず全身全霊を込めてがんばります
「8086マクロアセンブラ入門」今手元にこの本があるのですが
この本はどうなんでしょう?何方かお持ちでないでしょうか?
個人的にはこの本すごくわかりにくいような気がするのですが...
>>594 初心者さん
>とりえあえず「はじめて読む486」買いに行こうと思ったら
>どこにもない(泣
>仕方がないから注文しました...
確かになかなか町の本屋さんでは見かけませんねぇ。
この本が一番元を取っているかもしれません。
>今年中には無理そうなので、それまでにみんながどんどん進んでいって
>置いてきぼりにされそう...
いえいえそんなあせることないですよ。
年明けまでにそんなには進まないと思います。
>とりあえず全身全霊を込めてがんばります
一緒にがんばりましょう。
>「8086マクロアセンブラ入門」今手元にこの本があるのですが
>この本はどうなんでしょう?何方かお持ちでないでしょうか?
>個人的にはこの本すごくわかりにくいような気がするのですが...
読んだことなですねぇ。
アセンブラ勉強しなきゃ・・・
とりあえず
キーの入力をストロークするプログラムを作ったw(一文字だけだけど)
動いたときすごい感動しました!!
第二のひげぽんキター?
C++で変な現象が起きていて困っています。
キーボード入力を受け付けるKeyBoardManagerクラスは
シングルトンパターン(インスタンスの唯一性を保証する)で
実装されています。
具体的には、インスタンスを必要とするときは
KeyBoardManager& km = KeyBoardManager::instance();
とinstance()メソッドを介します。
instance()メソッドはこんな感じです。
static KeyBoardManager& instance() {
static KeyBoardManager theInstance;
return theInstance;
}
OSを起動してはじめてinstance()メソッドを
呼ぶとint atexit( void (*func)(void))が呼ばれて
いるようなのです。そのとき引数としてfuncには
~KeyBoardManager()が渡っています。
これって通常の動作なのでしょうか。
何かエラーが起きているのでしょうか。
※ちなみにX86MemoryManagerも同様の実装ですが
このような現象は起きていません。
また以前はこの現象は起きていませんでした。
デバッグしてみると
static KeyBoardManager theInstance;
のところでatexit()が呼ばれてるようです。
instace() {
引数なしコンストラクタKeyBoardManager()が終了直後に
atexit(~KeyBoardMangerへのポインタ)が呼ばれる
}
どなたかアドバイスいただけないでしょうか。
∧_∧
<後ろ頭>-~~~ それは当然の動作のような。
staticなオブジェクトならプログラム終了時にデストラクタがよばれるよう、
atexitで予めデストラクタ関数が呼ばれるように登録しておく。
逆言えば、atexitを呼ばないX86MemoryManagerが怪しい。
#デストラクタが空っぽなら自動的に省略されるという可能性あり。
超先生ありがとうございます。
> ∧_∧
><後ろ頭>-~~~ それは当然の動作のような
そうなんですね。失礼いたしました。
ということは、OS終了時に後片付けをする場合はatexitを活用するのですね。
ちょっとWEBで調べたところ、通常atexitは登録された関数を
登録と逆順で呼んでくれるそうです。
ただし、Mona内のお話の場合、atexitを実装する責任があるのは
ひげぽんにあるんですかね。
きちんと実装してもメリットがあるかどうかが非常に疑問ですが。
C++もいいかげんきちんと勉強しなきゃいけないですね。
OSを作り始めたころにはじめたも同然なので・・・
アセンブラよりは得意かもしれませんが、精進いたします。
BIOS関連の質問ですが、
プロテクトモード以降前に
mov al, 0xD1; classical AT type
out 0x64, al; write output(0xD1), keyboad control port(0x64)
mov al, 0xDF; enable A20 line(0xDF)
out 0x60, al; keyboard read/write port(0x60)
in al, 0x92; PS/2 type
or al, 0x02
out 0x92, al
でA20を有効化しているのですが、そのせいあってか、IDT初期化後sti
するとかならず、キー割込みが入ってしまいます。
A20有効化の後に、in al, 0x60 でフラッシュしても、割り込まれます。
また、int 0x13で読み込んだ後にFDモータをとめるには
どうすればいいんでしょうか?
>>604 PICで、割り込みマスクしとけばいいんでは?
モータはFDCにコマンドを送って止めるんではなかったかと。
手元に資料が無いので、詳しい事は自力であたってくれ。
s/604/603/
すまそ。
自分で割り込み許可しといて「割り込みが来ます。なんとかしる!」というのはどうかと。
∧_∧
<後ろ頭>-~~~ KBCのfifoバッファをクリアしないとダメやね。
最近A20関連でそんな事をやったようなやらないような。
609 :
デフォルトの名無しさん:02/12/26 02:06
MonaのDoxygenドキュメントはどこ?
質問だけど、超先生がいつも住んでいるOSはなんですか?
青村OSかと…
>>609 すいません、現在はWebでは公開していません。
もうまもなくMPDNで公開する予定です。
しばらくお待ちください。
ソースをダウンロードして、Makeすれば
一応ドキュメントが生成されます。(doxygen必須ですが・・・)
age
みとこさん
>VirtualPCでは一応起動したけど、タスク切り替えだめぽ。。。
ご確認ありがとうございます。
タスク切り替えの所で止まってしまうのでしょうか。
もう一つの顔が表示されてない・・・
動作確認できているのは、bochs1.41,bochs2.0,我が家の実機2台
タスク切り替えで何か間違いをやらかしてそうですね。
LDTあたりで。
みとこさん
VirtualPC持っているんですね。
うらやますぃ。
vmware,virtual PC高いですよ。
OS開発者ライセンスないかな。。
mona.sourceforge.jpにバナー貼るから(笑)
_ _
l|゙i 《l| ヽl| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ノノノノノ )) 〉 | Un_death_too(); /* 挨拶 */
(( (リ ゚ヮ゚ノlヽ <. TSSにLDTは必須ではないわさ。
>>615 ))⊂)l水!つ ) | iret()マクロのiret命令はiretdだと思うんだわさ!
( / 人 〉 ( \_________________
し'ノ
そもそもタスク切り替えしてないんじゃないかと
_,.'⌒)
, ´f二コヽ
! l !ノ リ i l 「そもそも割り込みゲートを使っておきながら
ノiハl.゚ ー゚ノリ TSSのbacklinkでタスク実行するは設計上のバグですね。
⊂)允つ 割り込みハンドラ自体をTSSにしないと」
TSSってIDTにおけたっけ?
IDTはゲートしか置けない気が
大空寺あゆ さん
こんにちは
>TSSにLDTは必須ではないわさ
そのはずなのですが、bochs君がLDTを要求するようなので
ダミーのLDTを作成した次第であります。
こいつが悪さをしたのかなあ?
>iret()マクロのiret命令はiretdだと思うんだわさ
iretではまずいのでしょうか。iretdでmakeしたらasに怒られました。
_,.'⌒)
>>620 , ´f二コヽ 「もちろんIDTにはタスクゲートを置きますよ。
! l !ノ リ i l 現在の実装だと、一方のタスクが再び実行された時、
ノiハl.゚ ー゚ノリ ハンドラ内から走り始めてしまいます。
⊂)允つ それだと多重割り込みを受け付ける場合に不味いです」
>>618 みとこさん
>そもそもタスク切り替えしてないんじゃないかと
eflagsレジスタのNTフラグを立てる
切り替え先のTSSの属性をBUSYにする。
backlinkの設定
iret
とタスク切り替えをしているつもりなのですが
間違っているでしょうか。
>涼宮茜 さん
>割り込みハンドラ自体をTSSにしないと
最初の動機として、タイマ割り込みでタスクスイッチしたいというのが
ありました。
今採用している方法しか分からないというのが現状です(ToT)
上記の方法をもう少し詳しく教えていただけないでしょうか。m(__)m
gasでは
iret(32bit) iretw(16bit) iretl(32bit)
masmでは
iret(16bit) iretd(32bit)
_,.'⌒)
, ´f二コヽ
! l !ノ リ i l 「そういえば、割り込みハンドラ内でpusha/popaをしていないようですが、
ノiハl.゚ ー゚ノリ これでは汎用レジスタが破壊されてしまうと思います」
⊂)允つ
void *****_handler()
{
pusha();
popa();
iret();
}
>625
割込みではCPUが
push eflags
push cs
push eip
するみたいですが
汎用レジスタは保障されないのかぁ
涼宮茜さん
>pusha/popaをしていないようですが、
>これでは汎用レジスタが破壊されてしまうと思います
アドバイスありがとうございます。
早速取り入れさせていただきます。
>するみたいですが
>汎用レジスタは保障されないのかぁ
保障されないよ。ハンドラがaxレジスタしか使わない場合などは push ax -> pop ax
で済んでしまうケースもあるってことで、大抵のCPUは汎用レジスタはセーブしない。
$sp相当のCPUすらセーブしないこともしばしば。
馬鹿な質問ですが、おゆるしを。。。
TSSを設定するときで、tss->eipに関数のアドレスを入れたいのですが、
(void *)funcとして、入れるとその場でfunc関数が実行してしますいます。
(当たり前のことですが。。。)
そもそもfunc関数の開始アドレスってどうすれば分かるのでしょうか?
set_tss(tss_t* tss, void (*fn)(void), void* esp);
set_tss(tss, (void*)func, stack);
× (void*)func()
○ (void*)func
基本的においらはオープン派が好き。
だから、NWSOSっていうかMONAびいき。
いや、L氏に加担するわけじゃないけど、
ソースを公開してしまうと、役に立つかもしれないが、
逆に「そんなものか」と思ってしまい、つまらなくなる。
手品だって種明かしちゃつまらんだろ。
でも、オープンのいいところは、
バグ報告があるってことで、ものの質的にはよくなるけどね。
linuxのソースのかなりの部分を占める(?
関数自体を定義するんではなくて、
#define switch_to(prev,next,last) do {\
asm volatile("pushl %%esi\n\t"\
"pushl %%edi\n\t"\
"pushl %%ebp\n\t"\
.......................
についてどう思う?
折れ的には、かなりイケテルように見えるんだが・・・。
普通化か?
シクジッタ...
shikujitta...
>>635 ∧_∧
< `ー´>-~~~ あまりにも普通という罠。
>>635 全くの偶然ですが、NWSOSでも、タスクスイッチはマクロでやってます。
ただし、NWSOSの場合は、NWSSのMACRO,ENDM文でやってますが。
年明け早々、両者の出方が気になる。
ひげぽんも正月休利用してガンガン開発を進めるみたいだし、
NWSOSもバージョンアップが予想されるし。
NWSOSはスクリーンショットを見る限り、そろそろファイルエクスプローラ
くらいなら出てきそうな感じだな。
>>640 >NWSOSはスクリーンショットを見る限り、そろそろファイルエクスプローラ
>くらいなら出てきそうな感じだな。
ファイルマネージャは、時期としては後になります。
それは設計上の理由からです。
>>640 >ひげぽんも正月休利用してガンガン開発を進めるみたいだし
勉強ばかりで思うように進んでません。。。
しかも風邪ひいてるし
さて徹夜するか・・・(ё_ё)
まぁ、ここは相対的には過疎板なんだけど
MONA−OSって完成度さえ高めればそれなりに普及しそうな予感。
やっぱFDブート中におなじみのAAが出せるのは、ユーザーの引き込みって
点でキャッチーだと思う。PC−WEEKだとかASCII−NEWSなんかで
ちょっと取り上げられれば、その存在は一躍ヒーローになる予感
もちろん、OSとしての基本的な機能、性能は備えた上で
>点でキャッチーだと思う。PC−WEEKだとかASCII−NEWSなんかで
>ちょっと取り上げられれば、その存在は一躍ヒーローになる予感
そんなことはないと思います。
キャッチーといえばMEG-OSですよ。
まいりますた。
MEG-OS
http://meg-os.org/ >もちろん、OSとしての基本的な機能、性能は備えた上で
がんばります。m(__)m
ドライバ書かせてくれ。
>MONA−OSって完成度さえ高めればそれなりに普及しそうな予感。
「OSの完成度を高める事」って結構難しいと思う。
ある意味、ずっと完成度高めることができるなら、LinuxやWindowsまで
行くことになってしまうけど、そこまでいけるのは極稀。
それができる人材も稀有。
>ある意味、ずっと完成度高めることができるなら、LinuxやWindowsまで
>行くことになってしまうけど、そこまでいけるのは極稀。
けど、現実的にNWSOS、MONA、MEG-OSなど、32BitOSが続々と
リリースされてきてるのも現実。特にNWSOSは、VC++が使えるし、
APIエミュ次第では、GUIも含めたWindowsクローンの可能性もある。
一番の大敵は、「どうせWinには追い越せない」などといった弱音だと思われ。
MEG-OSも確かにある意味キャッチーだな。
個人的にはひーちゃうけど、「萌え」なフィーリングはなんとなく分かる。
>>648 >けど、現実的にNWSOS、MONA、MEG-OSなど、32BitOSが続々と
>リリースされてきてるのも現実。特にNWSOSは、VC++が使えるし、
>APIエミュ次第では、GUIも含めたWindowsクローンの可能性もある。
NWSOSの作者の腕のよさ、才能は考慮されてますか?
NWSOSの出来が良いからと言って、他の新規参入OSがそこまで至る
と短絡的に考えるのはおかしい。
誰かが上手く作ったからと言って、別の誰かもうまく行くと考えるのは
悪い平等主義です。上手く行くのは、限られているんです。
>>648 >一番の大敵は、「どうせWinには追い越せない」などといった弱音だと思われ。
それは、NWSOSの作者が、「マイナス思考」である事を意味してる。
マイナス思考は弱音ではない。
マイナス思考であるからこそ、NWSOSの今の姿がある。
最近の日本人は、馬鹿でも間抜けでもプラス思考になってしまって、自分の
力を過信する弊害が出てきている。
マイナス思考のメリットもあることをお忘れなく。
あるいは、謙遜であるかもしれない。
>NWSOSの出来が良いからと言って、他の新規参入OSがそこまで至る
>と短絡的に考えるのはおかしい。
けど、MONAの進化速度だとかも考慮に入れると、
OS開発の才能を持ってるのがLだけだと決め付けるのも短絡的だろ?
>>653 >けど、MONAの進化速度だとかも考慮に入れると、
習い事を考えてみ。
入門から標準レベルに行くのは誰でも早い。
そっから後に行けるかどうかが分かれる。
あと、NWSOSの作者の「進化速度」と比較して無いじゃん。
もっと早いよキット。
>>653 Monaの状態を1とすると、NWSOSは、1000位のところに有るんだよ。
悪いけど、ひげぽんの最初のレベルがあまりにも低すぎたため、
成長速度が速いかのように思えるだけ。
でも、NWSOSとは全然違うよ。
OSASKのK氏は、TOWNS用のPC-9801VXエミュレータを作った経験をもつ。
ttp://www.imasy.or.jp/~kawai/download.html で、ソースもダウンロードしてみると、そこそこの腕が有ることが
分かると思うが、NWSOS >>>>>> OSASK である現状が何を意味するかを
よく考えねばならない。
果たして、Mona陣営は、V98レベルのものを作れるだろうか、ム板のみんな
もよく検討あれ。
NWSOSとMONAの決定的な違いは、OSそのものにも当然あるが、
作者のソフトウェアにおいての基礎体力じゃないかと思う。
(ここでの基礎体力はハード知識、機械語、リンカ、ローダなど。)
L氏は自分で言語処理系を作成できるほどの凄まじい基礎体力を
持っている。だから、そこそこなOSも作成できる。
別に基礎体力をつけてからでないとOSを作成できないわけじゃないけど。
たびたび詰まることになる。L氏が初登場時に言ったように、ひげぽんは
OSを作りながらも、もっと基礎体力をつけるべき。そうすれば、
L氏を1000として、ひげポンは5,600位には到達できると思う。
まあ、少なくとも、2年くらいはかかるけどね。
>L氏を1000として、ひげポンは5,600位には到達できると思う。
出来ないに一票。
あのなあ、ひげぽんの年齢で基礎知識を学び始めるのはもう手遅れなんだよ。
20も超えれば、できる奴は頭角を表すんだよ。
いいすぎたか。。。
300くらいでどうか。。
余り関係ないかもしれないかもだけど。
情報系大学の教授たちがよく言うことだけど、
集積回路や電磁波などの、ハード的なことは後々勉強ということでは
間に合わない(手遅れ)が、、ソフトウェアは文系でも十分間に合う」
ってのはウソだったんですか。。。
実際問題、自分も「ほんとに間に合うのか。。」
と思ってはいたのですが。。
ひげぽんは、確かに最初のスタートレベルが低かった(OSの分野では)
そのため成長速度が速く見えたのは事実だな。
逆に言えばほとんどゼロからOSの知識を蓄えたという事実と
OSの知識不足を補う、何かがあったからここまで来たのでは?
ひげぽんは仕事をしながらここまで来たという
事実も忘れてはならないと思う。
500位まではあと、半年もすれば行くだろう。
>NWSOSとMONAの決定的な違いは、OSそのものにも当然あるが、
>作者のソフトウェアにおいての基礎体力じゃないかと思う。
>(ここでの基礎体力はハード知識、機械語、リンカ、ローダなど。)
>L氏は自分で言語処理系を作成できるほどの凄まじい基礎体力を
>持っている。だから、そこそこなOSも作成できる。
L氏の専門は、ソフトじゃないのはご存知?
予備知識であれだけの体力があると言う驚愕の事実。
>>661 >集積回路や電磁波などの、ハード的なことは後々勉強ということでは
>間に合わない(手遅れ)が、、ソフトウェアは文系でも十分間に合う」
>ってのはウソだったんですか。。。
ソフトは表面的に組めるようのは簡単。
でも難しい処理を組んだり、効率の良いロジックを考え出したりするのは、
素質もある。
>663
L氏の専門って何?
聞いたところによると、ゲーム業界?
>>662 >500位まではあと、半年もすれば行くだろう。
行かないな。
知識だけの差と考えるのも納得できないな。
プログラムの腕の差って、単純な知識の差だと思うか?
しかし。。俺らって無駄にスレ浪費してるな。。
「プログラムには作者の魂、情熱が埋め込まれている」
∧_∧
< `ー´>-~~~ ひげぽんて何歳だっけか。
シナリオライターでもプログラムは書ける。
>>671 >シナリオライターでもプログラムは書ける。
「簡単な部分」に絞ればそうです。
確か24歳くらいとスレのどこかに書いてあった。
dat落ちしたからわからんが。
L氏、K氏は20代後半の後半。
ちょっとまて。
L氏がすごいと言うが、井の中の蛙って落ちってことない?
世界は広い
>>674 え?そうなの。
基礎体力の差は年齢差という落ちか。
Lタンハアハア
まあ、L氏がすごいというのは認めるしかない。
相撲で言えば、前頭筆頭ぐらいかな(爆
誰が書いてるのか知りませんが、「予想」してもしょうがないと思いますよ。
待てば分かる事です。結果でしかわからないと思うなあ。
L氏の自己評価
Kタン、Hタンの評価を聞いてみたい。
主観でいいよ。
>>671 >シナリオライターでもプログラムは書ける。
うーん。
実際には、プログラマの腕の差はあると思いますね。
企業内でも、書き手が交代した際に、
「急にやる気がでて、スイッチがオンになりましたね」
といわれた経験もありますしね。
米国の調査でも、開発効率に数千倍の差がある結果が出たと聞いてます。
>>682 なぜ?
書いてしまってよいと思うが。
ぼろくそに書いても褒めてもいい。
それはL氏の意見であって、事実とは異なる場合もあるのだから。
>>683 トラブル起こすような事を勧めないで下さい。お願いします。( ̄へ ̄;
スレ汚しですみませんが、一般に知識と暗記は違う意味で使われているの
ですか?
自分の中では、知識=暗記とほぼ同義だと思ってしまっているんですが。
プログラミングには、暗記は、要らないですよね。
ところでニックLIGHTCONEの由来はなんですか?
苦し紛れに解釈すると、
まず、[light=軽い-->ケイ-->啓]
そんで、[Cone=円錐----------------->介(とんがりっぽい(汗))]
ずばり、Lタンの本名は「啓介」(-_-)y--~~~ドウダ
特殊相対性理論の初歩の初歩で一番最初に出てくる4次元ミンコフスキー空間
の中の、時間軸を中心線と、中心線と母船との角度が45度の円錐の事です。
現在の時空を原点にすると、現在の時空から出た光は常にこの円錐上を通過
することから、「光の通る円錐」と言う意味で、light-cone と名付け
られています。そこから取りました。
訂正:スマソ
時間軸を中心線とする、中心線と母線との角度が45度の円錐の事です。
わざわざ、詳しい説明どうもです。
やっぱ、ニックのつけ方といい、Lタンすげーわ。
このスレはOS開発者を比べっこするのが目的じゃないでしょ。
サンデープログラマっぽい趣味のプログラマがOSなんてスゴソー
なものを作る過程をマターリと見守って、一緒に一喜一憂するスレ
だと思うんだが。
ひげぽんたん。
来年もがんばってください。
C/C++ライブラリはSourceForgeにC99対応とかってのが
あった気がしますぞ。
ありがとうござます。
くじけない限りがんばります。
C99調べてみます。m(__)m
あけおめ。
ひげぽんがんがれ。
>>687 (´Д⊂ヽ
何言ってるかわかんないよ〜
>>695 ランダウ・リフシッツの訳本でも(略
ほげぽんあけましておめでとう。
今年もがんがってくだちい。
まじで開発終了かよ!
>699
ネタだろ?
いかにも彼が好きそうな下らんネタだな
ちょうど動作報告しようと思ってたトコなのになー。
ということでMEG-OS Liteの開発は終了しました。みとこは名無しに戻ります。
裏でヒソーリ開発させてください。←ここ見た?
MEG-OS.ORG is now for sale.
>>702 みんな見たんじゃない?
古典的なやり方だし。
いや〜、上手に騙されたw
でも、色々考えた。
やっぱり、プロジェクトとして公開してると
プレッシャーがかかってくる。
コソーリ開発が一番なのだと・・・。
ほげぽん。
プレッシャーに負けるな。
↑「ほげぽん」ワラタ
けど、MEG-OSも開発を本格化するってことで、
いよいよ2003は国産OSが火花を争う三国志元年となるわけですな。
(#ま、現状、NWSOSがぶっちぎりなのは置いといて)
'60、OS開発ってのは終わりがないものだと学者が言ってた。
実際、40年たったいま、やっぱ終わってない。
>三国志元年
3つのOSはなに?
MEG、NWSOS、???
??? = MONA だろ、きっと。
gccで開発できて、sourceforgeでcvs公開されてるんで
開発者はがんがん増えると思われ。
おいらも来年は仕事が少なくなるんで、モナに参加する予定。
魅力は発展途上。
CGIタイムボム仕掛けて正月休みに入ってる間になんかいろいろ言われてるみたいだけどFDC,RTCのデバドラの骨組みは完成したっす。
基本的なデバドラはだいたい揃ったんでそろそろいい加減カーネルに手入れます。ヽ(`ー´)ノ
ちなみにこっからFTPはつなげないんでサイトは放置(;´ω`)
っていうかLはなんでもっと20年近くはやく生まれなかった?
Windowsって'81に開発がスタート。最初に発売したのが'85
窓の重ねができるようになったのが、'87
まぁなんだかんだ、NWSOSってWindows年表でいうと、'90前後だと思われ。
Win3.0が'90だしな。
>>712 L氏は確かに凄いがWindows3相当の物を作れるかは疑問
あっちは莫大な予算と大勢のプログラマでやってるんだからね。
それにL氏自身Winの代わりを作ろうとは思ってなさそうだ
>あっちは莫大な予算と大勢のプログラマでやってるんだからね。
まー俺もそう思ってたが、じゃ、Windows3.0にはあって現状のNWSOSに
ないものって何がある?と考えたとき、意外とないよ。
具体的に列挙してみ?数えるほどしかない。
Office?
なんかFDCアクセス数回すると急に応答しなくなってタイムアウトばかり出るんですがどうすればいいんでしょうか?
>Office?
結局、アプリだけがない状況
>>717 GDI(プリンタ含む)みたいな仕組みはあるの?
あとOLEもないとOfficeは厳しいな。
>>718 >GDI(プリンタ含む)みたいな仕組みはあるの?
まだないです。
NWSOSは、本当に運用しようと、まだまだ不足している部分が多いの
が現状ですが、今後徐々に補充していきたいと思っています。
誤字修正:
「本当に運用しようと、」--->「本当に運用しようとすると、」
スマソ
ある程度使えるようにと、機能の追加に勤しむより、斬新的なカーネル開発に
力を入れたほうがいいと思う。WINDOWSのような万能OSが蔓延している中、
カーネル部分で勝負したほうが、まだ利用価値はあると。。
万能的なものを全てサポートしようとすると中途半端に
なってしまう可能性大だかも。
BeOSという前例があるからねぇ〜
NWSOSでOffice製品群を揃えるビジョンとかはないの?>>Lタン
>>723 >NWSOSでOffice製品群を揃えるビジョンとかはないの?>>Lタン
最近、ワードやエクセルとデータが交換できるようなオープンソースの
Officeもありますので、移植する手も考えています。
>最近、ワードやエクセルとデータが交換できるようなオープンソースの
>Officeもありますので、移植する手も考えています。
いや、あれはお勧めしない。多分、OpenOfficeのことでしょ?
使ってみれば分かるけど、MS-Officeに比較してとんでもない起動時間が
かかる。ExcelやWordのようにサクサク動かない。
コミュニティも、改善すると前々から唱えてるけど、一向に改善される気配ないし、
根が深いっぽい。
OpenOfficeはlinuxでもWindowsでも動くけど、どっちもトロい。
一度、ご自分の目でお確かめを。
>最近、ワードやエクセルとデータが交換できるようなオープンソースの
>Officeもありますので、移植する手も考えています。
∧_∧
< `ー´>-~~~
早期にJava VMを実装してThinkFree Officeを動かしたりする手もあり。
まわりくどいことせずに
Wineを完全に動かせればいいんじゃ、、
ところで、NWSOSでもやっぱり、タスクの生成・管理法に親子関係を
使っているのですか?fork(), exec()みたいなもの。
∧_∧
<後ろ頭>-~~~ CoWは効率上げるの難しいんだよな・・・。
fork(), exec()を使わない、効率的なタスク管理方法ないですかね、、、。
実際問題、効率的とかはあまり関係なく親子関係ってのが伝統的なUNIX
っぽくって嫌なだけですけどね。。。
>>728 >NWSOSでもやっぱり、タスクの生成・管理法に親子関係を使っているのですか?
今のところタスクの親子関係はありませんが、各種保護の管理に利用出来そう
なので多方面からメリットとデメリットを考察中です。
また、今のところ、NWSOSには、fork()はなく、
いきなり新タスクを生成する仕組みを採用しています(ExecTask(),
SpawnTask()参照)。
最近、UNIXのソースなどを見るうちに、fork()のメリットが分かってきま
したので(サブスレッドのメリットと、メモリ保護のメリットを足したよう
なものとして利用出来る場合があります)、近いうちにNWSOSでも実装する
予定です。同時に追加予定の、exec()相当APIと、既存のExecTask()APIで、
API名が紛らわしくなるのが気がかりでは有りますが、今のExecTask()は
捨ててもいいかなと思っています(SpawnTask()APIが上位互換なので)。
>>730 >実際問題、効率的とかはあまり関係なく親子関係ってのが伝統的なUNIX
>っぽくって嫌なだけですけどね。。。
例えば、「伝統的なUNIXの嫌な部分」とは、waitpid()が、
自分から見て子の関係にあるタスクだけしかできないことや、「wait」しない
とゾンビが残る、みたいなことでしょうか。間違っていたらすみませ
ん(UNIX初心者なので)。
ちなみに、NWSOSでは全く親族関係の無いタスクでも、タスクハンドルだけ
はロックできるので、タスクが不意に死んだとしても安全にステータスを読む事
ができるような仕組みにしてみました。
>>726 なるほど、ThinkFree Office は、JavaVMがあれば動くんですか(基本的な
事を知らないので申し訳ないんですが)。
であれば、有志の方に JavaVM を実装(移植?)して欲しい
ところなんですが、、、。(^_^;)
それはそれとして、他にも各種フリーの(?)Officeがあるようですが、
その辺はどうなんでしょう。
>>725 なるほど、機会があるときに調べておきます。
貴重なご意見を有難うございました。
>>729 >CoWは効率上げるの難しいんだよな・・・。
恐らく、fork()する際の、CopyOnWriteの事だと思うんですが、
NWSOSにfork()を最初に実装する際には、ひとまず効率追求は後回しにする
として、簡単に単純コピーしようと思っています(内部的な改良で上げられる
種類の効率は、徐々に高めたいと思っていますので)。
>732
親子関係でのステート管理方法もそうだけど、
fork(), exec()時のオーバーヘッドが大きいからかな。
COWで少しは軽減されてるみたいだけど。
こればっかりはどうしようもないか。
でも、確かに各種保護機能だけはすぐれていると思います。
>恐らく、fork()する際の、CopyOnWriteの事だと思うんですが、
ここでいうcopyって、.bssセクションなどのコピーっていう意味かな?
NWSOSへの希望
キーボードのオートリピート速度を高速にしてほしー
>>737 >ここでいうcopyって、.bssセクションなどのコピーっていう意味かな?
えーと、ご存知かもしれませんが、
CopyOnWriteとは、fork()した時点では、ページテーブルや
ページディレクトリのコピーをするだけにしておいて、物理ページや
スワップ領域を確保せず、アプリがデータ領域などに相当するページに
書き込もうとするとページ例外を発生させて、例外ハンドラ内で
物理ページをマッピングして、実際にコピーを行うような方法のこと
を言います。
.bssセクションの場合は、fork()した時点の親プロセスにおいて、既に書き込み
があれば、.dataセクションと同様の扱いになり、書き込みが無ければ、
実際にアクセスされた時点で0-Fillされたページを割り当てる、という手が使
えると思います。
>>738 >キーボードのオートリピート速度を高速にしてほしー
最速に設定しているつもりなんですが、設定できてませんか?
(なんらかの原因でキーボードの種類によっては正しく設定できてないの
かもしれません)
>>736 fork()ならではの技法が存在するので、UNIXアプリを移植するためには、
効率は度外視したとしても、一応はfork()を用意しておいた方がいいと思って
るんです。
NWS-SHELLでは、内部コマンドをサブスレッドで実装していますが、
BASHでは、fork()を使って自分のクローンプロセスを作成して、別プロセス
でやってます。後者の方法は、内部コマンドの起動効率は悪いのですが、
内部コマンドを外部コマンドと全く同じ扱いにできるメリットがあります。
>fork()ならではの技法が存在するので、UNIXアプリを移植するためには、
>効率は度外視したとしても、
linuxの do_fork() に kprintf() 仕込んで、カーネルコンパイルしなおし
KDE起動してみたとこ、意外にもforkが呼び出される回数って少なかった。
で、再度、kprintf()外すときにlinuxカーネルをフルビルドしたんだけど
gcc内部では一度もforkを呼び出してなかった。
頻度考えると、Lタンのfork()効率後回しは正解かも。
サーバープロセスじゃないとforkはあまりしないような・・・
でも、BASHとかのシェルだと、コマンド実行するたびに、
if ((pid=fork()) > 0)
exit(0);
if (pid == 0)
exec("comand");
みたいなことするんでしょ?
fork()しっかり使ってるような。。
間違った。
if (pid == 0)
exec("comand");
if ((pid=fork()) > 0)
while (wait(&status) != pid)
/* LOOP */ ;
bashの特徴的なfork()の使い方は、内部コマンドを実行する際に、fork()
だけを使っている事です(exec()は呼ばれません。)。
ちなみに、現代的にはサブスレッドでやるような処理なんですが、
伝統的なUNIXには、スレッドがサポートされていませんでした。
>>L様
tcshはWindowsにも対応しているので
bashだけでなくtcshの方もご覧になるのはいかがでしょうか?
http://www.tcsh.org/ win32\fork.cを見ると、CreateProcess()を使ってfork()が
実装されていたりと色々と面白いですよ。
Mac OS XとかMicrosoft Interixとかでも
bashではなくてtcshが標準的です。
最近OSの勉強ばかりで、あまり進んだように見えないMonaですが
少しずつ前進しております。
Linuxってすごいですねと、しみじみと思います。
遅延書き込みとか、仮想ファイルシステムとか、ドライバインターフェースとか
でもこれって、あとから追加されたものですよね・・・
そう願いたいです。
話題になっているforkですがMonaでは、どうしようかと
ちょうど悩んでいるところでした。(細かいところはまだ不勉強ですが)
プロセスに親子関係を持たせる方向で行こうかな。
カコ(・∀・)イイ
いいなぁ(;´Д`)
>>749 > あとから追加されたものですよね・・・
Linuxのエエところは、その追加や変更に必要な膨大な作業を、
厭わずに全世界のgeeksのパワーでもってやりとげたことだわね。
今はもう各企業のオープンソース対策チームの人たちがやってる
から、感慨深くはないけど。
>>752 >せめてMonaへのリンクくらい置いておいていただけませんか
ご指摘ありがとうございます。
半ば忘れていました。申し訳ありません。
対応いたしました。
>>754 素早い対応ありがとうございます。
ただTypoが……。 < Soryy
あと、せっかく置いてあったhigepos.binが隠れて
ちょっと寂しいかな……。
要望ばかりですみませんが、
時間があるときにでもMonaのコンパイルに挑戦してみますんで。
>750
(・∀・)yossy◆FlasH.X1/sさん、すごひ。
本格的なパッケージですね。
Monaの公式サイト、ダウンロードの
"Mon実行方法"って"Mona実行方法"の間違いだよね?
開発に関係なくて申し訳ないが、直したほうがいいかと。
>>755 有用なリンクありがとうございます。助かります。
>>756 >ただTypoが……。 < Soryy
>あと、せっかく置いてあったhigepos.binが隠れて
失礼しました。
あと英文ミスも直しました・・・
>間があるときにでもMonaのコンパイルに挑戦してみますんで
ぜひチャレンジしください。
インストール方法に反映させていただきます。
>>758 これは便利ですね。henohenoさん、ありがとうございます。
>>760 あのー、度々で申し訳ないんですけど、
別の間違い方なんですが。。。< Soryr
Sorryです!!
>>762 直しました。今日はどうにかしているようです。
もう、馬鹿かとアホかと・・・
すいませんでした。m(__)m
>>763 お疲れ様でした。
ところでちょっと個人的な要望なんですが、
MonaはいきなりGUIにいかずに、
コマンドラインとしても使えるようにしてほしいです。
NWSOSとかOSASKはいきなりGUIにいくのでちょっと……。
コマンドラインを隠すにしても
Win3.1みたいにAutoexec.batで起動させる方法もありますし。
>>764 >MonaはいきなりGUIにいかずに、
>コマンドラインとしても使えるようにしてほしいです。
ご要望ありがとうございます。
当分はCUIオンリーだと思います。
GUI導入時には、上記要望を取り入れられるよう
検討します。
GUIをどれだけカーネルから分離するかも
考えなければいけないですね。
タスク管理
メモリ管理(ページング)
VGA対応
フロッピードライバ
ファイルシステム
プロセスロード(実行形式の決定)
・・・道のりは長い。
>>765 ありがとうございます。
お礼にみとこさんから問題報告の上がっていた
VirtualPC(もちろん正規ライセンス品)を寄贈させていただきます。
詳しくはメールで。
>>766さん。
>お礼にみとこさんから問題報告の上がっていた
>VirtualPC(もちろん正規ライセンス品)を寄贈させていただきます。
>詳しくはメールで
えーと、これは本当なのでしょうか。
かなりびっくりしています。osdevjでお話したことある人でしょうか。
とりあえずメール待ってます。
VirtualPCを寄贈してくださった。
匿名希望の方に深く感謝いたします。
Monaをより発展させていくことでしか
ご厚意にこたえることは出来ないのが申し訳ないですが
活用させていただきます。
bochsのことですが、bochsout.txtに書かれる内容を常時、
裏コンソールに表示させることはできるのでしょうか?
もし、設定等あったらお願いします。
ひげぽんがんばれ!
誹謗中傷掲示板のOSね…
>>769 .bochsrcのLOG設定のところをご覧ください。
#log: /dev/null
#log: bochsout.txt
>>770 ありがとうございます。
>774
何度もすいません。
Cygwin上でbochsを動かしているので、/dev/ttyなどは使えません・・・。
出力ターミナルはどこに設定すればいいのでしょうか?
>>775 Windows上でしたか動かしたことがないので、はずしているかもしれませんが
# Give the path of the log file you'd like Bochs debug and misc. verbage
# to be written to. If you really don't want it, make it /dev/null. :^(
と書いてあるので
log: /dev/null
ではないでしょうか。
>>777 おもしろですね。
ご紹介ありがとうございます。
winでgccでオブジェクトファイルを出力するとデフォルトでpe-i386に
なってしまう。しかもldでもpe-i386で実行可能プログラムが出力。。。
ELFを扱いたいんですが、gccでELF形式のオブジェクトを出力して、
ldでELF形式としてリンクして、ELF形式の実行可能プログラムを出力
させるためにはどうすればいいんですか?(コマンド等)
gcc を --target=i386--elf で make しなおす。
>781
どうもありがとうございます。
cygwin使ってるんですが、、、
外部用にgccインストするほうがよさげですね。
気づいたのですが、WINXP + CYGWIN の環境でELF形式の
プログラムを開発する場合、クロスコンパイル環境の
構築が必要なので何かとめんどくさいですね。
gccの他に、ld, gdbとか色々。。。
>>784 おぉ!いい感じw
実寸でやると、多分WinXPの箱とおなじ大きさになるはず
gcc(pe-i386)からgcc(elf32-i386)に変えたところ、
iretのところでこけてしまいます。↓
>>PANIC<< iret: return CS selector null
gcc(elf32-i386)でコンパイル、iret付近のdisassemble.
82:61 popa
5d:61 popa
5e:89 ec mov %ebp,%esp
60:5d pop %ebp
61:cf iret
62:c9 leave
63:c3 ret
gcc(pe-i386)でコンパイル、iret付近のdisassemble.
4b:61 popa
4c:89 ec mov %ebp,%esp
4e:5d pop %ebp
4f:cf iret
50:89 ec mov %ebp,%esp
52:5d pop %ebp
53:c3 ret
54:25 78 20 00 90 and $0x90002078,%eax
59:8d b4 26 00 00 00 00 lea 0x0(%esi,1),%esi
気づくことがあればお願いします。
>82:61 popa
>5d:61 popa
∧_∧
<後ろ頭>-~~~ popaが2つも入ってるけど・・・。
すいません(汗)
82:61 popa
↑はペーストミスです。
>>PANIC<< iret: return CS selector null
から復帰させたCSが不正ということなので、
iretの後の、leave(スタックフレーム破棄)が問題なのかと
思ったのですが・・・。
最終出力はバイナリー形式なのですが、
入力オブジェクト形式(gccの出力)を変えると
色々代わってくるんですかね。。。
∧_∧
<後ろ頭>-~~~ 推測では、形式を変えるとcdecl/stdcallが変わるとか・・・。
関数のprologueをdisassembleすると分かるはず。
このままなんとなく続けていくとモノリシックになる罠。
大丈夫。
NTのマイクロカーネルの方が遥かに大きい。
>>789 gcc -S でアセンブリ言語出力吐き出させてディスアセンブル結果と
比較すれば関数のプロローグが変わっているか否かはわかるんじゃない?
>>787 >mov %ebp,%esp
>pop %ebp
を
leave
にすれば動きそうな気がしますが…
関数の途中でiretするのはよろしくないんではないかと。
__attribute__((interrupt))使えませんか?
>>794 >関数の途中でiretするのはよろしくないんではないかと。
それだ。
関数の入り口と出口でpush,popのバランスが取れているところに
iret 突っ込んじゃったら、関数の入り口でpushされた%espとかを
iretがリターンアドレスと勘違いしちゃうんだろな。
>>794 ∧_∧
<後ろ頭>-~~~ leaveはmov %ebp,%esp pop %ebpと等価だと思うけど。。。
>>795 ちゃんとStackframeを潰しているもよう。
iretの部分では原因はつかめなかったのですが、
gcc {色々オプション(ライブラリ非依存のための)} -c xxx.c
gcc {色々オプション} -c yyy.c
gcc {色々オプション} -c zzz.c
ld -s(シンボル全削除) --oformat binary xxx.o yyy.o zzz.o
でバイナリ形式を出力した場合、関数のプロローグなどは別として、
入力が何形式であれ、結局バイナリ形式出力なので同じものができると
いうわけではないのでしょうか?
解決しました!
全く馬鹿馬鹿しい原因でした。。。
-O2最適化オプションが原因でした。
pe-i386では適切に最適化していたようですが、
elf32-i386では余計なことしてたのかなぁ。
>>798 最適化のバグが原因で最適化した場合だけ動かないって事たまにはあるけど...
大抵は自分で仕込んだバグだったな。
最適かやめて安心してると後で泣きを見るかもしんないよ。
>>784 箱いいですねぇ。
>>786 >> OSASK河合さんのページ
>>川合の間違いですね
すいません、これはひげぽんのミスです。
大変失礼しました。
修正させていただきます。
しかもMEG-OSの方がしわがなくてきれい
>>801 会社で見て笑いました。(
雑誌UNIX USER 2月号のBochs2.0特集記事の中の片隅で
Monaプロジェクトがちょこっと紹介されました。ヽ(´ー`)ノ
これで少しは知名度アップ??
もちろん雑誌は買いました(笑)
mona.img(41KB)からunixコマンドで
mona.img(1.44MB)を作りたいのですが
どなたか良い方法を教えていただけないでしょうか。
ddコマンドでしょうか?
現状はrawrite.exeでwriteしたあと、readして
イメージファイル(1.44MB)を作成しています。
>>805 dd でサイズを指定して、後ろを埋めちゃえばいいんじゃないかな。
>>805 cat mona.img /dev/zero|dd of=mona_fd.img bs=1k count=1440
かなあ?
>>804 Bochsの記事を執筆された方のご厚意での紹介なので
そんなのはないです。紹介されただけで感激です。
>>808 ddでサイズを指定をする場合ってosでしたっけ
やり方が悪いのかうまくいきません。
>>809 >cat mona.img /dev/zero|dd of=mona_fd.img bs=1k count=1440
出来ました。ありがとうございますm(__)m
カーネルがSTLを使ってリライトされそうな予感(w
>>812 の予感による通り(笑)
Tinoさん提供のパッチと手ほどき書により
Monaの実装にSTLが使えるようになりました。!!!!
Tinoさんありがとうございます。m(__)m
これに伴い開発環境の移行をいたしました。
gcc2.95@cygwin→gcc3.2@cygwin
STLの導入で夢が広がりました。
こんなコードが動きます↓
// string
std::string str = "---";
str += "string";
str += "@mona ";
str += "is OK";
str += "---";
_sys_printf("string: %s\n", str.data());
_sys_printf("string: str.substr(3, 11): %s\n", str.substr(3, 11).data());
// list
std::list<char*> li;
li.push_back("micoro kernel ");
li.push_back("operating system with ");
li.push_back("network suit architecture ");
li.push_back("\n");
std::list<char*>::iterator it;
_sys_printf("list : iterate->");
for (it = li.begin(); it != li.end(); it++) {
_sys_printf("%s", *it);
}
// vector
std::vector<char*> ve;
ve.push_back("1");
ve.push_back("2");
ve.push_back("3");
ve.push_back("4");
std::vector<char*>::iterator it2;
_sys_printf("vector : iterate->");
for (it2 = ve.begin(); it2 != ve.end(); it2++) {
_sys_printf("%s ", *it2);
}
// argorithm
std::reverse(ve.begin(), ve.end());
_sys_printf("\nargorithm : reverse->");
for (it2 = ve.begin(); it2 != ve.end(); it2++) {
_sys_printf("%s ", *it2);
}
std::fill(ve.begin(), ve.end(), (char*)"7");
_sys_printf("\nargorithm : fill with \"7\"->");
for (it2 = ve.begin(); it2 != ve.end(); it2++) {
_sys_printf("%s ", *it2);
}
数日たったころにバグが出そうなコードですな。。。
C++でカーネル書くこと自体が良いのか悪いのかではなく、
色々、未知な領域なので、Cで書くよりは新しいことがいっぱい
で面白そうだ。
ところで、lightconeさんのnwsosカーネルの実行形式はなんなんだろ?
elf or pe ? もしくは coff...
>>ところで、lightconeさんのnwsosカーネルの実行形式はなんなんだろ?
>>elf or pe ? もしくは coff...
カーネルのソースは、COFF形式またはOMF形式のOBJファイルを作成して
から、自作リンカ(NWSL)で、独自形式(NWSOSのネイティブアプリケーションの
実行形式と同じ)にリンクしています。
OBJの段階では、COFFでもOMFでもリンクできたと思います。
>818
そうでしたか。
というより、独自リンカで作成しているので、COFFかOMFでしたね。
今さっき、NWSLの仕様を見て気づきました。スマソ。
いや〜、part2〜part4、もうすぐpart5。
色々なものが出来上がりましたね。
これはすごいことだと思います。
さっそく、UNIX USER 2月号見てきますw
記事うpキボンヌ
FBC(fragile base calss)
[邦訳] 脆い基本クラス
・オブジェクト(すなわち構造体やクラス)のサイズ
・(publicやprotectedである)「可視の」データまでのオフセット
・vtableの存在とサイズ
・vtable中の仮想関数へのオフセット
あなたのアプリがコンパイルされ、リンクされる時、それ[ダイナミック
ロード・ライブラリ]はこれらすべての情報を記録します。 これらのうち
の何かがライブラリ中で変更された場合、コンパイルされたアプリはもは
や動かないという問題。
以上参考までに・・・
今Monaがやってる部分はカーネルの中だから
ユーザーアプリのリンクとまったく関係ないので、
FBC問題の影響はありません。
とりあえずマイクロカーネルなんだから、
カーネル内部とは関係なくその上にOSサーバが来て、
その上にユーザーランドが来るので、
そういうことが関係してくるのはユーザーランド以降ですね。
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/ 1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27 鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
>>816 >数日たったころにバグが出そうなコードですな。。。
うう。勉強が足らないようです。STLの本買おうかな。
>>817 >色々、未知な領域なので、Cで書くよりは新しいことがいっぱい
>で面白そうだ
そうですね。面白いです。
STL使えるなんてわくわくです。
>>820 >さっそく、UNIX USER 2月号見てきますw
見て、気に入ったら買ってください(笑)
>>821 >記事うpキボンヌ
さすがにそれは、まずいと思うのでむりっす。m(__)m
> >数日たったころにバグが出そうなコードですな。。。
> うう。勉強が足らないようです。STLの本買おうかな。
そういう意味じゃないと思う。
boostならlambdaの前にshared_ptrだろ
これ使ってJavaみたいにdeleteのないコードにしなきゃ
単なる悪趣味と言っても過言ではないゾ
>> うう。勉強が足らないようです。STLの本買おうかな。
>そういう意味じゃないと思う。
どういう意味でしょうか。
OS作成には使わないほうが良いというアドバイスでしょうか。
>>832 STLの書き方を問題にしてるんじゃなくて、
STLを使うこと自体を問題にしてるんだろう
それを受けて
>>817 氏が
> C++でカーネル書くこと自体が良いのか悪いのかではなく、
> 色々、未知な領域なので、Cで書くよりは新しいことがいっぱい
> で面白そうだ。
って応援してくださってるんっしょ
とりあえずSTLじゃインパクトがなかったみたいなので
次はboostをおながいします
オナニーでOS作りましたってだけじゃ注目されない
一流のエンターテイメントを目指すのだ
カーネルの実装にSTL使えることは
結構すごいと思うけど
いろんな事いうヤシ居るけど、全部真に受けてたらろくなもん出来ないぞ。
エンターテイメントは大事だけど、最低どっか一つ輝く部分があればいい。
欲張りすぎると、どっかのKがつくOSみたいになる
>>352 友人から借りた?おいおい。MXで落とせば?
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/ 1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27 鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
>256
意味ない。
1000!!!
なんで500も前にレスするですか?
荒れてきてますネ・・・
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
ひげぽんガンバレ!
応援してます!
qb
削除整理、削除要請、削除議論、批判要望
live2
ニュース速報
tmp
ニュース極東、バカニュース、ちくり裏事情、違反の潰し方、薬・違法
少年犯罪、政治思想、ゴーマニズム、ペット苦手、download
ロビー、なんでもあり、厨房、最悪、学歴、人権問題
バカが数人紛れ込んできてるな。
ほかでやれよ。
>>849 相手にするな。
飽きて出て行くのを待つしかないよ。
567が良い事言った
>>64 んじゃ、内容証明でも認識しえたってことになりません?
某○○は相手が事実を認識しえたと判った段階でレス汁w
博之が2ちゃんねる閉鎖を決めました。
ひょっとして、掲示板の動作が異常?
てすと?
>>858 コピペの内容にIP収集テストの話題が入ってるけど、
IP収集テストによる動作不良かもと思わせる意図があるんだろ。
>>855 そういえば、前にこのスレのリンクから meg-os.org 逝った時に
「不適切なリファラーです」とか何とかいわれたけど、
meg-os.org って2ちゃんとなか悪いんじゃないの?
何でそんなとこにファイルおけるの?
>>1 もぅいいじゃないか。
開き直れよ! 俺は変態だ!!って。
変態の何処が悪いんだよ。
男はな、みんな大なり小なり変態なんだよ。
そのことを女の大半が知らないだけなんだよ。
結論として言えることは、女の無知が悪いってことだよ。
>>859 リファラチェックに関しては厳しくなったり緩くなっているのでなんとも言えませぬ。
IPとおおよそのアクセス日時を晒してくればエラーログから原因を推定できますが。
2chと仲悪かったらこんなところにコテハソで書き込みませんyo(藁
他のスレにも、昔の発言に対しての、元発言と全く関連性が無いようなレスが
IP実験開始あたりから頻出しているようです。
ばれないようにテストしてるのか、それとも、バグかなんかでしょうか?
>863
実際のとこどうなの? 荒らしなの? (スレ違いスマソ)
>>861 ダイアルアップだし、時期も忘れてしまったのだけど、
そういえば、かちゅーしゃからリンクたどっから、リファラが憑いてなかったのかな。
>>864 100%荒氏でしょ。
でもこのスレに張り付いてるわけでは無さそう。
>>865 リファラがない場合はリファラ関係のエラーは出ないはず。。。
リファラエラーが出る主な原因は怪しいリファラが漏れてる時なんで。
∧_∧
<後ろ頭>-~~~ どれどれ書き込みテスト。
さぁ拳銃をてに入れて管理人を殺害しよう
>>858 すでにIP収集版に入れ替わってますね。。
>2ちゃんねる20030107a
ところでmonaをCVSでダウンロードすると
既にSTL対応版に入れ替わっていました。
イメージファイルも1.44MBで出力するように修正されています。
さすがひげぽんさん、素早いですね。
(・∀・)イイ!!
>>836 追いかけているだけで十分楽しめていますよ。
次は何が来るのでしょう?(^д^)
>ところでmonaをCVSでダウンロードすると
>既にSTL対応版に入れ替わっていました。
>イメージファイルも1.44MBで出力するように修正されています
>さすがひげぽんさん、素早いですね。
ありがとうございます。でもあまり自分のやった仕事ではないのでもっとがんばります。
ついでに、Makefileも大幅に変更・改善しました。
ただ内部告発的なカキコも減ってしまう気もするんだが・・・
静かですねえ。
>>874 >Monaでboostを試してみたけど
>例外とかRTTIとかちゃんと扱えないと無理っぽい
調査ありがとうございます。
ここにもできる人がすばらしいです。
例外がないのはきついと思っておりましたが
やはり無理でしたか。
>必要なものだけ切り出すにしても無駄が多いしで
>TLで止めといたほうがバランス的にいい
調査結果から判断するとやはり、このご意見に賛成です。
>ひげぽんたんもboostには興味はあったんだったら
>視しないでコメントした方が盛り上がると思うよ
大変失礼いたしました。
いまは、STLが使用できるようになったので満足しています。
実際にSTLがカーネル実装にどの程度使えるかいろいろ実験しようと
思っています。task構造体の格納にコレクションを使うとか・・・
真っ先に帰るのが普通の客なんでないかな??冷やかしの人に裁判沙汰のリスクは
おえないでしょ。
本職はIP位ではへこたれずに留まるだろうけど、暫らくは半端な厨房が通常板へ
なだれ込んで無差別に悪さ(差別コピペ)をする、っつー事になりそう・・・
新しいテーマをだして書き込み募集したいんですけどどうしたらいいの?
879 :
デフォルトの名無しさん:03/01/11 01:44
パート2から見て、漏れも勉強したかったんだが、未だにはじめてよむ486が
手に入らず想像オナーニばっかしてる。
アマゾンでも在庫切れだってさ。。。
>>879 漏れはインテルのマニュアルで充分間に合ってる。
印刷するのがめんどいがな。
ポリタンはギリギリのところで勝負してるっぽいとこが好きだ
まだ聞きたい事あったんだけどな
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
352 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 18:01 ID:rLfxQ17l
悲しいときー。悲しいときー。
正月に友人からエロゲーを借りて喜んで帰ってきたら、
パソコンが壊れてたー。
昨日ヨドバシカメラで部品買ってきて直しました。
誰かipを保存しない匿名掲示板を作って
削除依頼があったら意地をはらずに
ほいほい消しちゃっていいからさ
テツandトモは仕込んでません
>>884 荒氏は無視して普通にレスすればいいじゃん。
合流したみたいなので本題をどうぞ
>>829 > > >数日たったころにバグが出そうなコードですな。。。
> > うう。勉強が足らないようです。STLの本買おうかな。
> そういう意味じゃないと思う。
そういう意味だと思う。
> std::list<char*> li;
> li.push_back("micoro kernel ");
char*で扱うのは最悪。
1. std::list<const char*>または
2. std::list<std::string>とするべき。
元のだと簡単にバッファオーバーランできる。
格納された文字列を操作するんなら
2にしといた方が無難。
せっかくstd::stringが使えるんだから
char*は可能な限り避けるべき。
そうしないと数日経った頃にバグが出るかも。
> STLの本買おうかな。
Cの知識だからSTLの本には書いてないと思う。
>>891 ご指摘ありがとうございます。
>> std::list<char*> li;
>> li.push_back("micoro kernel ");
>char*で扱うのは最悪。
>1. std::list<const char*>または
>2. std::list<std::string>とするべき。
了解しました。const char*にはすべきだなあと
なんとなく気づいていたのですが放置していました。
おっしゃる通り、stringがよさそうなのでstringにいたします。
これはいい!
>892
linux詳細カーネルの「プロセスの切り替え」
みたけど、結構複雑です。
FPU, 内部レベルステート、IOビットマップやらデバック情報など・・・。
OSとして例外処理、ページング、タスク管理機構ができあがるまでは、
TSSへJUMP切り替えのほうが無難では?プロセス生成時のステートの扱いの問題もあるし。
色々出来上がった後で、修正すればいいし。
割り込み処理コードはTSSを持たないらしいので(割り込み時のプロセスに
代わっての処理だから。カーネルレベルの話なら、スタック切り替えもない)。
後々の移植性とか考えると
TSSなんか使わないでページングだけで解決した方が無難だと思う。
>>892 「良い資料」などないよ。
そこは「考える部分」であって、調べたり、知識を吸収したりする部分
ではない。
「タスクスイッチする方法」を調べるのではなく、「タスクスイッチ」とは
「なんなのか」を突き詰めて考える事をお勧めします。
「タスクスイッチ」をして、結果的に得たい動作は何なのかが分かれば、
必要な処理が自ずから分かってくると思います。
答えは、CPU内部の状態変数(それが何なのかは勉強の事)を切り替えるだけ
です。
>>892 ∧_∧
<後ろ頭>-~~~ ちょっとだけヒント出しておこう。
/* task->stackは切り替え先タスクのスタック */
*(task->stack-?) = ?; /* 汎用レジスタ値(popa用) */
...
ebp = task->stack - ?;
mov esp,ebp
popa
iret;
}
>>896 アドバイスありがとうございます。
>TSSへJUMP切り替えのほうが無難では?プロセス生成時のステートの扱いの問題もあるし。
>色々出来上がった後で、修正すればいいし。
なるほど。
現状の問題点・動機としては
・タイマー割り込みによるスケジューリングでタスクスイッチをしたい。
→backlinkの設定、NTフラグ設定、iretで実現しているが、一部タスクスイッチしない実機がある
→これは、果たして正しいタスクスイッチなのか?ありなのか?
→IDTにタスクゲートをおくという手もあるがスケジューリングしたい場合は
タスクスイッチが結局問題になる
・上記の問題点により、だったらタスクスイッチの中身の詳細を自分で把握できた方が
良いかなと考えています。
・最初はTSSへのjmp、callで実装しておき、あとから修正する場合
二度手間になってしまうかもというのもあります。
>>897 >>後々の移植性とか考えると
>>TSSなんか使わないでページングだけで解決した方が無難だと思う。
私もそう思います。
>>898 >「良い資料」などないよ。
>そこは「考える部分」であって、調べたり、知識を吸収したりする部分
>ではない。
おっしゃる事は良く分かります。
ただ、私の知識・経験不足のため、考えるための材料が不足している。
と強く感じています。
そのための材料集めも含めて、
皆さまのご意見・アドバイスを頂けたらと思います。
>>899 LightConeさん
> 「タスクスイッチする方法」を調べるのではなく、「タスクスイッチ」とは
>「なんなのか」を突き詰めて考える事をお勧めします。
以前にも同様のアドバイスを頂きましたね。
ありがとうございます。m(__)m
今現在、実現したいのは、TSSjmpで実現できるタスクスイッチと
ほぼ同様のタスクスイッチです。
> 「タスクスイッチ」をして、結果的に得たい動作は何なのかが分かれば、
>必要な処理が自ずから分かってくると思います。
>答えは、CPU内部の状態変数(それが何なのかは勉強の事)を切り替えるだけ
>です。
そうですね。概要だけは理解できていると思います。
あとは具体的な詳細部分の方法が理解できたらと思います。
>>900 超先生@OS板さん
> ∧_∧
><後ろ頭>-~~~ ちょっとだけヒント出しておこう。
ヒントありがとうございます。
考えさせていただきます。
TASK_SWITCHの話題中、申し訳ないが、、、
INTEL CPUで考慮しなければならない(整列しなくてもよいが、整列すると効率的なのも含めて)
アライメントについて教えてください。
linuxなどのソースを見ると、
gdtr, idtrのメモリ配置は align 2で奇数ワード整列しています。
tr, ldtrのほうは align 4でダブルワード整列しています。
ここで謎なのが、GDTのディスクリプタ配列がなぜか align 3...
他にも整列したほうがよいデータ構造があれば教えて欲しいです。
>>905 ページテーブルは4Kの倍数にあわせるとか
どこかで読んだような気がします。
>>905 gas(as)のalignのパラメータの解釈はシステムによって異なる
その場合align 3はアドレスの下位三ビットが0になるアドレスに整列するという意味
つまりmasmなどのalign 8と等価
905です。
>>ひげぽんさん, 907さん
ありがとうございます。
align 3(gas) = align 8(masm)
ですか!驚きました。
ということになると、
idtr, gdtrでのalign 2(gas)
ってのは下位2bitが0ってことで、align 4(masm)と等価?
奇数ワード整列(addr mod 4 = 2)に反する??
じゃなければ、そこのところはalign 2(gas) = align 2(masm)なのかな。
>>904 >あとは具体的な詳細部分の方法が理解できたらと思います。
やろうとしてることは非常に単純です。
旧・新のタスクのレジスタセットを、それぞれ、A1, A2とすると、
「A1 をどこかに保存し、A2 をどこからか復帰させる」・・・(1)
だけです。
保存場所は、考えなければ成りませんし、それが決まっても、たった一行
で書けてしまう(1)ですが、実装はそこそこ複雑になります。
この辺は、知識よりも、思考力が大きいので、アセンブラプログラムに慣れる
ことが一番早道かもしれません。
なお、これ以上のアドバイスは、ほとんどソースをコピーするようなものに
成ってしまいますので、ひげぽんさんのためにならないと思います。
現代的な保護OSでのタスクスイッチは、タスクのメモリ空間をがらっと変えて
しまいます。
ですが、カーネルのコードは、「変化する部分」に存在させるわけにも
いかないので、共通空間に配置する必要があります。
このため、メモリ空間の管理がほぼ完全に成るまではタスクスイッチは
出来ないと考えた方がいいと思います。
まず、タスク切り替え無しで十分な程度に組みあがることを目標に
したほうがいいんじゃないでしょうか。まだ早すぎると思います。
えーと、参考にならないかもしれませんが、NWSOSでは、タスク切り替えを
実装した時には、シングルタスクOSとしてかなり完成していました。
今のMonaの様な初期の段階でいきなりタスク切り替えから入っても、開発が
破綻する可能性が高いと思います。理由は上手く説明できませんが、タスク
切り替えは、他の部位との関連性が強すぎるためです。ご参考までに。
私は逆に早めにマルチプロセス/スレッドを意識したコードを書いた方が安全だと思います
シングルスレッドで進めすぎると予測しないデッドロックなどで苦労するかもしれません
タスクスイッチの実験が終わったら一時的に外してもいいわけで
今の時点では好きに進めて問題ないでしょう
>>912 >開発が破綻する可能性が高いと思います。
この手のフレーズが好きなんですね
>>913 >シングルスレッドで進めすぎると予測しないデッドロックなどで苦労するかもしれません]
それは有り得ますね。
ただし、最初からマルチスレッドで行くと言う事は、それだけ重荷を
背負った状態で開発を進めなくてはならないことでもあり、デバッグ作業
などが大変に成るかもしれませんが。
なお、後からマルチタスク対応にする開発方針でも、セマフォやロックを
追加するだけで、基本的な対応はできると思います。
ファイルシステムの高次元なロックのようなものは別途必要になりますが。
915 :
デフォルトの名無しさん:03/01/12 01:20
仕事じゃないんだから、余暇を有効に活用するためにも
デスマーチを歓迎すべしだな。
>>914 重荷になるってのもあるけど、シングルスレッドで開発を進めながらマルチスレッド化を
目指すには、あらかじめマルチスレッドの落とし穴を知ってなきゃならんからな...
一回実験的なOSを作ってみてマルチスレッド周りでだめになったら作り直すか、
OSの教科書をよく読んで勉強してからつくるか...
まぁ、一回失敗してみるのも勉強になるからいいんでない?
超先生!十年前の雑誌出されても泣くしかありません!
ヽ(`д´)ノウワワァン!!
っていうか、ひろゆきの意図に反してIPログが流出したらどうすんの?
>>916 >一回実験的なOSを作ってみてマルチスレッド周りでだめになったら作り直すか、
>OSの教科書をよく読んで勉強してからつくるか...
もう一つ、「頭の中で全て予想してから作る」、と言う方法があります。
この方法だと、教科書を読む必要も無く(書いてない場合も多いので)、
試す事も要りません。
いととよう
>>916 >あらかじめマルチスレッドの落とし穴を知ってなきゃならんからな...
マルチタスクやマルチスレッドの環境では、安全性は、純粋な数学的に
「証明」が必要で、実験的な方法で安全性を100%確認することは無理だ
と思うので、どの開発順序をとったとしても、最初から理論的にマルチ
スレッドの落とし穴については十分知っておく必要があると思いますね。
ちなみにデッドロックについては、確実に回避できる方法も良く知られて
います。
>>919 >もう一つ、「頭の中で全て予想してから作る」、と言う方法があります。
無理。っていうか、結局試行錯誤になる罠。
マルチスレッドで生じるさまざまな問題については先人たちも試行錯誤を重ねまくって現在に至ってるからな。
>>922 >無理。っていうか、結局試行錯誤になる罠。
>マルチスレッドで生じるさまざまな問題については先人たちも試行錯誤を重ねまくって現在に至ってるからな。
「全て予想する」と言うのは、何もプログラムの細部まで予想すると言う意味
ではなく、最小値と最大値をはっきりさせて、その範囲内で絶対なんらかの
解決策が存在する証明を探すような手順を私は取ってます。
具体的な解決策の詳細は、その時点ではわかりませんが、解決策の有無までは
必ず証明を行っています。
>>923 証明を探す為には問題がある事を知ってなきゃならないけど、
排他制御の必要性とか、デッドロックの問題とか、
実際に問題が起きてみないと問題自体の存在に気が付かないっしょ。
結局は試行錯誤しながら、問題を見つけて、それを解きながら作るか、
先人たちの研究の成果を教科書で勉強するかしかないんでない?
>>924 >排他制御の必要性とか、デッドロックの問題とか、
>実際に問題が起きてみないと問題自体の存在に気が付かないっしょ。
「排他制御の必要性」や「デッドロックする可能性」は、私の場合は、
何の本も読んでもいませんが、あたりまえのように気付きました。
「デッドロックを回避する一般的な方法」については、本で知りました。
思考実験の力が物凄くあれば、「実験」をする必要が無いのでは
ないでしょうか。でも、私もそこまではないので実験しなきゃならない
凡人ですが。
>>924 >先人たちの研究の成果を教科書で勉強するかしかないんでない?
個人的には、研究成果も他人のソースもほとんど見てません、、、。
>>925 >「排他制御の必要性」や「デッドロックする可能性」は、私の場合は、
>何の本も読んでもいませんが、あたりまえのように気付きました。
すごいな...
漏れなんて、DOSのTSR組んでたときから、排他制御してなくて暴走したり、
フラグ立てて排他制御したつもりで、テストとセットがアトミックじゃなくて、やっぱり暴走したり、
失敗しまくってたけどな...
LightConeさんへ
自分がどうだったか自慢するスレじゃありませんよ
どうやって攻めていくかなんて他人が決める事じゃないと思う。
まぁ先人のアドバイスは大事だと思うが。。。
コピペ職人さん帰省しないの?
>>929 全財産\400しかないオイラに一体どうしろとw
>>909 LightConeさん
>「A1 をどこかに保存し、A2 をどこからか復帰させる」・・・(1)
はい、イメージはつかめているつもりです。
>この辺は、知識よりも、思考力が大きいので、アセンブラプログラムに慣れる
>ことが一番早道かもしれません。
>なお、これ以上のアドバイスは、ほとんどソースをコピーするようなものに
>成ってしまいますので、ひげぽんさんのためにならないと思います。
ご配慮いただき、ありがとうございます。
この先は自分で考えるべきですね。
>>912 >>913 なるほど、それぞれのご意見はご参考にさせていただきます。
私としては今後のMonaの方針として
ページングを絡ませたタスクスイッチを実現する。
FDCドライバーを完成後、ファイルシステム導入。
プロセスのロード実現へ。
という道筋で考えているため、現段階でマルチプロセス、マルチスレッドを
視野に入れて開発していこうと考えています
スレッド管理は、
「カーネルレベルスレッド」より、「ユーザレベルスレッド」
のほうが個人的には好き。高速だし。ユーザの好きなようにできる。
でも、優先度逆転などの問題が起こりうるようなので、超保護モード
でしたいなら不向き。
あ、あくまでも意見ですけど、
カーネル空間とユーザ空間をリンクさせて、APIを関数呼び出しに
したら面白そう。RTOSみたいに。
安定するか、しないかはユーザの責任になるけど、
うまく使えば、WINDOWSやLINUXより高速。
C++のオブジェクト指向を駆使して信頼性を確保。
そして、カーネルはスレッド型OSとして記述。
いいとこ取りだ(゚∀゚)
>>910 > まず、タスク切り替え無しで十分な程度に組みあがることを目標に
> したほうがいいんじゃないでしょうか。まだ早すぎると思います。
L様に同意
>>932 > 現段階でマルチプロセス、マルチスレッドを
> 視野に入れて開発していこうと考えています
そこまで言うんなら止めないけど、
マルチプロセス、マルチスレッドを視野に入れるんだったら、
SMPのことも頭の片隅に入れとかないと片手落ちだ
P4-3GHz以降ハイパースレッディングが標準装備になることからも
今後SMPがごく普通のマシンにも広がる動きがあるからね
常に最新を追いかけろって言ってんじゃなくて、
「開発時には最新」でも「完成時には陳腐」になってるってこと
新しい技術を甘く見ないほうが良い
937 :
デフォルトの名無しさん:03/01/12 14:09
完成は5年後くらいか?
>>936 SMPとか使う人いるの?俺はそっちのほうが不思議。
なんでCPU1コで十分なのに2コも使うの?
>>938 ハイパースレッディングの由来を知らないみたいだね
P4はパイプラインが深すぎて常に余剰が出来るから最適化した結果
見かけ上SMPと同じものになったんだよ
2年もすればP4-3GHzなんて陳腐なマシンになるから
重い処理をするソフトではSMP対応が進むと思う
PowerMacなんてクロック数を誤魔化すためにもう全部SMPだし
# BeOSは時代に先んじ過ぎてたんだな〜と痛感
>>937 その頃にはIA-32は今の286みたいな立場に追い込まれて
メインストリームはIA-64やx86-64に移行しちゃってる予感
まだDOSが主流で386が早い8086としてしか使われていなかった頃、
Linuxがいち早くプロテクトモードを取り入れたことが
現在の繁栄の遠因にもなってることを考えてみ
5年後に完成するんだったら
初めからIA-64やx86-64を視野に入れとかないと
今のNEC98用OSみたいに破棄されたマシンの再利用にしか
使われなくなっちゃうよ(≒誰も使わない)
64bitうんぬんの後に16bitというのはワラタ
なら漏れは8bit(w
簡単な対話部分を作るのはそんなに難しいことじゃないよ。
昔のSharpの8bit機みたいなクリーンコンピュータでも
ROMからマシン語モニタくらいは立ち上がって、
そこからプログラムをロードして実行できたからね。
DOS以上にプロセス管理も糞もないが
そのくらい原始的なことなら悩むまでもなくすぐ出来るでしょ。
そうやって不満があったらちょこちょこ直してけば
DOSレベル、Minixレベルとどんどん進歩していける。
近視眼的だがフルタイムじゃないんだし現実的な方法だと思うけどね。
>>939 説明さんくすです。今さっきちょろっと見て来ましたが、私のトリ頭では
ハイパースレッディングに対応するには何をすればいいのか分かりません(汗
普及する見込みがあるとしたら、参考にする必要はありそうですね。
>>941 レガシーデバイスしか調べてないので、こういう記事は刺激になります。
そろそろ新スレを立てたほうがよいでしょうか。
それとも誰かが立ててくれたりして(笑)
おっとご意見ありがとうございます。
どんな感じが良いですかね。
949 :
デフォルトの名無しさん:03/01/12 18:05
>ページングを絡ませたタスクスイッチを実現する。
いきなりこれは結構しんどそう。
まずはWinやUNIXのプロセス内で動くマルチスレッドライブラリ
でも書いてマルチタスクの感触を掴むのが良いと思います。
新スレはMonaBBSでいいんでない?
>>950 2chの方が人が集まりやすくていいと思う。
荒氏がちょっとうざいけど。
俺も知りたいから
どーして、そーなる!
ふむふむ。
3つのしもべみたいなもんか。
スレッドタイトルはOSを作ろうpart5でつか?
漏れが立ててきます
よろぴくです。
立ちますた
ひげぽんさん2Get(w
こちらのスレッドを消費しきってから移動をお願いします>>ALL
>>yossyさん
ありがとうございます。
>>こちらのスレッドを消費しきってから移動をお願いします>>ALL
了解です。2ゲットごめんなさい。
いまもってMinix本は最強の教材だと思う今日この頃。
Bochsの上でいじって勉強しようかな。。。
サンクス
おつで〜す♪
971
以前ここでウプしたDATファイルをブックマークチェッカにかけてる香具師は誰ですか?(`皿´)
新スレは漢字なんだね
>>973 そういえばそうだね。まぁ、リンクも貼ってあるし別にいいんでない。わかるっしょ。
ウメェ(゚д゚)
1000101111 OSを作ろう5 おまいら
(^^)
4nd
フォンドボー?
>979
どうみても、20億進数だろ。
1111010101!
埋め