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

OSをつくろうpart4

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

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

前スレッド
OSをつくろうpart3
http://pc3.2ch.net/test/read.cgi/tech/1027080631/
0263ひげぽんNGNG
>>252
みとこ さん
>>他にもいろいろとやってるので開発ペースが安定してません。
>>なるべくめぐに時間を注いでますが。。。

なるほどみとこさんは、めぐに時間を注ぎ
ひげぽんは、モナーに時間を注ぐのですね(笑)
冗談はさておき、やはりOS作成には時間がかかりますね。
一応私は5年計画ですが。。。

>LightCone さん
>PC/AT機版の元となったOSを開発を始めたのはだいぶ前です。
>そのとき数ヶ月開発し、そのまま放置していたのを、2002年に
>なってから移植し始めました(4月頃かな?)。

なるほど、NWSOSと比べてMonaは2年分くらいの差があると感じてます。
全くの私の主観ですが・・・
もっとがんばらなくては・・・
0264みとこ ◆AEqcy/sQU6 NGNG
PROJの最初から考えるともう5年以上たったかもしれない、、、
今のコードベースは一年くらいかな
0265ひげぽんNGNG
みとこ さん
>PROJの最初から考えるともう5年以上たったかもしれない、、、
>今のコードベースは一年くらいかな
ひえー、大先輩ですね。
今後ともよろしくお願いいたします。
0266257NGNG
いろいろあって#osdev-jに変えました
ひげぽんさん、LightConeさんも、お暇なら是非来てください
0267超先生@OS板 ◆leaf/RYZgY NGNG
  ∧_∧
<後ろ頭> y-~~~ 面白そうになってきたな。
私もちょいと昔のを引っ張りだしてこようかな。
0268みとこ ◆AEqcy/sQU6 NGNG
>>265
むしろ、長くても大成するとは限らない見本ということで。。。
0269デフォルトの名無しさんNGNG
>>261
煽るなよ
0270デフォルトの名無しさんNGNG
煽り騙りは2chの華ってか。
0271デフォルトの名無しさんNGNG
ちなみに私もPC/ATでのOS作りに今日から参戦することにします。
普段は組み込み機器でリアルタイムLINUXのカスタマイズを仕事にしてます。
mips系ばかりでx86は初めてですが、NWSOSを追い抜くべく頑張ります。
BIOSがかなり整備されてるっぽいところが、唯一の月明かり・・・
0272デフォルトの名無しさんNGNG
>  ∧_∧
><後ろ頭> y-~~~ 面白そうになってきたな。
おー。超先生、も参戦ですか?
0273LightCone ◆sSJBc30S5w NGNG
>>262
>その代わり、全体的に複雑で統制の取れていない設計があちこちにある。
>このために、プログラムを作るのに覚えることがたくさんあって大変だし、サブシステム毎に思想がばらばらだから同じようなことをしようとしても苦労が絶えない。

それは同感。
0274デフォルトの名無しさんNGNG
IRC寂しいすぎ
0275LightCone ◆sSJBc30S5w NGNG
 マルチスレッドが使えるカーネルと、パイプ,リダイレクト,ヒストリが
使えるシェルを正式公開しました。テキストエディタや gnu-sed も付いてます。

NWSOS Ver 0.030 :

http://homepage2.nifty.com/nowsmart/nwsos.htm

sed をパイプで起動したスクリーンショットがあります。

なお、テキストエディタは、SHIFT+ESC で出力を取り込んでエディタが
起動できます。
0276LightCone ◆sSJBc30S5w NGNG
>>275 修正
>なお、テキストエディタは、SHIFT+ESC で出力を取り込んでエディタが
>起動できます。
テキストエディタのことではなく、SHELL のことです。
SHELL が、Vz エディタのように、SHIFT+ESCで、コンソール出力を
エディタに取り込んで編集モードに入れるようになってます。
0277LightCone ◆sSJBc30S5w NGNG
ファイルバッファのサイズを動的に変更する方法が知りたいです。

他の目的で使うメモリが不足すると、ファイルバッファの内容をディスクに
フラッシュして、ファイルバッファのサイズを小さくし、メモリとして
利用できるようにしたいです。

でも、まだ漠然として上手い方法が今一よくわかりません。
一応、今のところ思いついた必要条件っぽいものは、

・ディスクにフラッシュしようとした際に、ファイルシステム自体が
 新たにメモリを要求してはいけない(?)。

・もし、マイクロカーネルでこれを行う場合、メモリを必要とするタスクは、
 一時的に停止状態にし、その間に
 「ファイルサブシステムのタスク」がディスクにフラッシュする(?)。
 (ちょっと不思議)

・仮想記憶(SWAP IN, OUT) と上手く折り合いをつけないといけない。
 そもそも、SWAP OUTしてはいけない部分も有りそうだし、、、。
0278デフォルトの名無しさんNGNG
>SHELL が、Vz エディタのように、SHIFT+ESCで、コンソール出力を
>エディタに取り込んで編集モードに入れるようになってます。
おいらの指は、この10年間、Viに慣れきったんで
ViがNWSOSに移植されれば、遊びに行くYO。
sedがパイプで使えるってことは、Viが移植される日も近い?
0279デフォルトの名無しさんNGNG
NWSOSの最新バージョンみたよ!
数ヶ月ぶりにFDにインストールして、起動してみたんだけど、開発は順調みたいだね。
テキストエディタ(かなり前からあるようだけど)も、HD上のファイルから
S-JISが問題なく読み込めたし、HDアクセス中も、FireDEMOが止まらないし。

難いえば、マウスカーソルが異様に遅いことかな?

現状、Windows2.0程度といったところ。
もっと頑張れ!
0280デフォルトの名無しさんNGNG
sedが動いててびびった。おそらくGPLのソースをほとんどそのままコンパイル
したんだろうけど。
というか、unix系ツールはほとんどコンパイルしなおせば動くんでないの?

これら基盤ツールはGPLで構わんと思うよ。
実行ファイルとして分離されてるんだし、NWSOSとGPLとは無縁でいられる。

Lightタンは、カーネル、Windowマネージャなどは、NWSOSとしてがっちり
開発し、周辺ツールはソース込みでこれら古典的なツールをGPLでがんがん
出してみてはいかが?
0281LightCone ◆sSJBc30S5w NGNG
>>280
>というか、unix系ツールはほとんどコンパイルしなおせば動くんでないの?
 理想的にはそうであって欲しいのですが、SEDの場合は、いったん、
Visual C++でコンパイルできるように修正(確認)してから、NWSOS
用にさらに微妙に修正する必要がありました。
POSIX互換(風)のライブラリを整備していけば、だんだん改善されていく
と期待してるのですが。

>周辺ツールはソース込みでこれら古典的なツールをGPLでがんがん出してみて
>はいかが?

そうしたいです(有志の人に手伝って欲しいです。)。
0282LightCone ◆sSJBc30S5w NGNG
>>279
>NWSOSの最新バージョンみたよ!
有難うございます。

>難いえば、マウスカーソルが異様に遅いことかな?
これは、単に移動速度が遅い(1カウントあたりの座標の変化が少ない)と
いうことですか? それとも、、、。
0283LightCone ◆sSJBc30S5w NGNG
>>278
>おいらの指は、この10年間、Viに慣れきったんで
>ViがNWSOSに移植されれば、遊びに行くYO。
>sedがパイプで使えるってことは、Viが移植される日も近い?

sedよりは大変かもしれませんが、多分、気合を入れれば移植できると思います。
0284LightCone ◆sSJBc30S5w NGNG
 DOS/Windows だと、rename *.doc *.txt のようにして拡張子を
変更可能なんですが、UNIX 系だとシェルスクリプトを書くしかないの
でしょうか?

UNIX では、ワイルドカードはシェルの段階で展開してしまうので、
cmd *.doc *.txt としても、doc と txt が一列に並んでしまうので、
cmd側は区別できませんよね。


(DOSだと、copy *.c *.old とかも使えたのですが。)
0285LightCone ◆sSJBc30S5w NGNG
cmd *.doc *.txt
と書いたときに、

cmd x1.doc x2.doc x3.doc dlm y1.txt y2.txt y3.txt

のように、間に dlm という「仮想ファイル名」を渡してしまい、
dlm をオープンすると、nul デバイスのように働くようにするとか。
0286LightCone ◆sSJBc30S5w NGNG
あ、*.txt はそういう風に展開できないか、、、。
0287LightCone ◆sSJBc30S5w NGNG
対案:

行頭に ! を書くとワイルドカードを展開しないことにする。

!rename *.doc *.txt

と書くと、renameコマンドは、

argv[0]=rename
argv[1]=*.doc
argv[2]=*.txt

という引数を受け取る。
0288LightCone ◆sSJBc30S5w NGNG
一般化:
「ファイル名変換支援ツール」 fncnv.exe を用意して、
x1.doc, x2.doc, x3.doc
と言うファイルがカレントディレクトリにあるとき、

!fncnv *.doc *.txt とすると、例えば、
x1.doc x1.txt x2.doc x2.txt x3.doc x3.txt
という文字列を標準出力に出すようにして、これを個別のコマンドで
利用する手も考えました。
0289デフォルトの名無しさんNGNG
LightConeタンへ

マウスカーソルがカコ(・へ・)ヨクナイ!
0290デフォルトの名無しさんNGNG
""で括るとワイルドカード展開しない。
という仕様が一般的な気がします。

sh/csh系だけの話なのかもしれませんが。
0291LightCone ◆sSJBc30S5w NGNG
>>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 ...
と展開してやることを思いついたのですが。
0292LightCone ◆sSJBc30S5w NGNG
>>289
いずれ形状を変更できるようにしますのでお待ちください。
0293デフォルトの名無しさんNGNG
MONAのスレがNWSOSスレ化している気が…
0294みとこ ◆AEqcy/sQU6 NGNG
ただいまからこのスレはめぐたんスレになりますたヽ(`ー´)ノ
0295デフォルトの名無しさんNGNG
guiよりも先にネットワーク対応した方が使用者増えるよ
もう使えるのかな?試してないんでわからないんだけど
0296デフォルトの名無しさんNGNG
めぐたんハァハァ
てか、NWSOSスレでやろうよ>LightConeたんほか
0297デフォルトの名無しさんNGNG
みとこタンのエロ画像キボン!( ●∀●)
0298名無しさんNGNG
MONAのスレじゃないと思うけど・・・。
0299デフォルトの名無しさんNGNG
Σ(●∀● )あんのか!
0300デフォルトの名無しさんNGNG
ひげぽんさん、感動しますた!
漏れはやっとVBとかCができる程度ですが、
(ヘボですが)Webデザインなら多少応援してあげられますけど。。。

これからも、がむばってください!
0301ひげぽんNGNG
>ひげぽんさん、感動しますた!
>漏れはやっとVBとかCができる程度ですが、

ありがとうございます。VBとCができるだけで既に
すごいです。VBは良く分からんです。

>(ヘボですが)Webデザインなら多少応援してあげられますけど。。。

Monaプロジェクトは、慢性的WEBデザイナー不足なので
もしお力を貸していただけるのであれば
[email protected]までメールくださいm(__)m
0302ひげぽんNGNG
NWSOSは、シェルが進化しましたね。
やはりLightConeさんはすごいですね。

Monaはタスクスイッチ実験中です。
あまりうまくいっていませんが、少しずつ前に進んでます。
0303LightCone ◆sSJBc30S5w NGNG
>>295
 ネットワークにも対応したいんですが、WEB-BROWSERも、GUIを
最低限整備しないと作れないわけでして(笑)。
 優先順位はやはりGUI>>>>ネットワークかと。
0304LightCone ◆sSJBc30S5w NGNG
 タスクスイッチと、タスクをロードして実行を開始するあたりが、
OS作りでひとつの山場っぽいですよね。
 割り込み中でメモリ空間やスタックを切り替えるのは、普段絶対に
経験しないことですし。

 あと、タスクをロードできると言うことは、
メモリ管理やファイルシステムがその程度の使い方ではバグ
フリーになった証拠でもあるわけで。逆にいえば、それらの
支援機能のバックアップがなければタスクをロードできないわけで。
0305ひげぽんNGNG
ircクライアント入れてみたが、使い方が良く分からない・・・
ってMona開発に精を出せって話ですね。
0306デフォルトの名無しさんNGNG
>>305 ひげぽんさん
LimeChatがお勧めですよ!
#osdev-j チャンネルに参加してもらえると
かなりうれしいです!!
0307LightCone ◆sSJBc30S5w NGNG
 ネットワーク技術は全くの素人なんですが、
「ネットワーク対応」とは一体どういう状態のことなんでしょう。

 COMポートやLANカードのドライバを提供することでしょうか。
 それとも、ソケットみたいなものへの対応?

 LANカードを直接制御すれば、OSの支援機能がなくてもなんとか
なるんじゃないかと素人考えしてしまうのですが。なんらかの調停が
必要なものなんでしょうか。
0308デフォルトの名無しさんNGNG
あるOSがネットワーク対応してます、と表明していたら、
TCP/IPスタックとbsd socket互換インターフェースがあり、
物理層としてethernetが使えることを期待しちゃいます。

> OSの支援機能がなくてもなんとか

パフォーマンスを考慮しないのであれば問題ないでしょう。
0309デフォルトの名無しさんNGNG
guiのブラウザなんかずっと後でいい
cuiのftpクライアント一つあるだけで相当便利になると思う
0310ひげぽんNGNG
>>306
おかげさまで、有意義な時間が過ごせました。
また顔出します。m(__)m
0311デフォルトの名無しさんNGNG
>ネットワーク技術は全くの素人なんですが、
>「ネットワーク対応」とは一体どういう状態のことなんでしょう。
そのネットワーク対応ってのは、俺が言ったものではないけど、俺的希望としては
LANなどで接続されたNWSOS起動中マシンへ実行ファイルなどを送り込み、
runできるという環境が欲しいかな。要はリモート機として機能することね。

これでぐっと、NWSOSのアプリ移植は早まると思うな。
営業妨害するつもりはないが、NWSC-Cは、現状、C++は未対応なんだし、
当分はVC++だとかgccに頼ることになるでしょ?(NWSOSの実行ファイル作るに
しても)
0312306NGNG
>>310 いえいえこちらこそ
また是非いらしてください。

0313LightCone ◆sSJBc30S5w NGNG
>>311
物理層のドライバ書くだけでも大変そうですね。
そもそも、LANカードの共通規格は無いんですよね?

でも、LANでつながずに、RS-232Cケーブルでシリアル接続
でいいなら、簡単に出来そうです。ネットワークと言うより、単なる
シリアル通信ですが(笑)。ポケコンとPCの間でもできるぐらいのもの
なので。

話はずれますが、"UNIVERSAL-DRIVER 計画"みたいなのがあるそうです
よね。しかも、あのMSも積極的っぽいらしく。
0314デフォルトの名無しさんNGNG
いや、RS-232Cじゃ転送速度に限界あるし。
linuxのLANカードドライバのソースコードでも引っ張ってきて、
NWSOS向けに移植するしかないのでは?

nwsos上にセルフ環境構築しても人は寄ってこない。
様々な便利なツールが、linuxだとかwindowsにあって、
体や指がそれに慣れきってるから。生理学的な問題ってことで。

てなわけで、nwsosがリモート操作できるという環境ができるならばおいらも賛成。
一番ご利益があるのはむしろ、L氏では?
0315314NGNG
あ、でも慣れるまでの橋渡しってことで>>リモート環境構築

NWSOSのshellはいい線、いってると思う。
バックログがキー操作一発ででき、しかもそのまんま編集が出来てしまう
という環境は、unix系のshellでは見たことない。
shellとeditの融合shell?

この手の、他にはない優位性が標準として実装されればNWSOSの自立性としての
価値が輝いてくると思う。(あーもちろん、カーネル書ける人からみたら
シェルは一アプリケーションに過ぎないことは当然承知の上でな)
0316LightCone ◆sSJBc30S5w NGNG
>>315
>shellとeditの融合shell?
Vz Editor からアイデア貰いまくりです。(^_^)


>この手の、他にはない優位性が標準として実装されればNWSOSの自立性としての
>価値が輝いてくると思う。(あーもちろん、カーネル書ける人からみたら
>シェルは一アプリケーションに過ぎないことは当然承知の上でな)

 他の もの でも、「ちょっと優位」なだけで輝いて見える場合って意外に多い
ような気もしませんか。


 ウォークマンも、「小さい」ことに意義があるのだし、
軽自動車だって走行性能は普通自動車に劣るかもしれないのに人気が有るし
(どちらも「小さい」という共通点が有るのが不思議)。
0317デフォルトの名無しさんNGNG
でかけりゃいいってもんじゃないことを肝に銘じておいてくださ〜い♪by ペリー
0318LightCone ◆sSJBc30S5w NGNG
>>314
そうですね。

 ただ、今のカーネルや SHELL でも、まだまだ至らない部分が多いので、
そちらを先に改良したいです。
 ドライバ仕様の確定とDLLへの対応の優先順位はかなり高いと思います。

 あと、コマンドをパイプやリダイレクトを使わずに起動しても、
今の shell ではコマンドの stdin に直接データを送れません。
 これ改善するには、カーネル側とshellの両方の修正が必要だと
思ってます(パイプ関係で)。
0319デフォルトの名無しさんNGNG
>バックログがキー操作一発ででき、しかもそのまんま編集が出来てしまう
>という環境は、unix系のshellでは見たことない。

M-x shell の環境が近いかな?
tab補完はできるの?
0320LightCone ◆sSJBc30S5w NGNG
>>319
>M-x shell の環境が近いかな?
恥ずかしながら、名前も聞いたこと有りいません。

>tab補完はできるの?
今のところ出来ません。
0321デフォルトの名無しさんNGNG
>>320
>>M-x shell の環境が近いかな?
>恥ずかしながら、名前も聞いたこと有りいません。
emacs ってエディターの中でシェルを使えるモードがあるんです

tab補完はほしいなぁ、ディレクトリが深くなる場合無いときついです
0322LightCone ◆sSJBc30S5w NGNG
>emacs ってエディターの中でシェルを使えるモードがあるんです
そんなモードがあるとは始めて知りました。

>tab補完はほしいなぁ、ディレクトリが深くなる場合無いときついです
私もそう思ってます、、、。

でも、実の所、そういう機能はいつでも追加できるので優先順位的には
低く思ってるんです。
0323デフォルトの名無しさんNGNG
>>320
emacsはUnix系で広く使われているテキストエディタ兼
統合環境です。vi系と人気を二分してきました。
emacs系は、Win環境ではMeadowが広く使われています。
Cygwin環境用のemacsもあります。

emacsは慣れると手放せなくなる良品ですね。
LightConeさんには特にお奨めです。だまされたと思って
試してみてください。
0324LightCone ◆sSJBc30S5w NGNG
>>323
>emacsはUnix系で広く使われているテキストエディタ兼
>統合環境です。vi系と人気を二分してきました。
 emacs と vi が人気を二分していたとは知りませんで
した。今まで、emacs,nemacs,kemacs(?)が圧倒的に人気が有るのかと。
Muleもemacs系ですか?

>emacsは慣れると手放せなくなる良品ですね。
それはよく聞いてます。LISPマクロ(?)がいいんでしょうか?

最初、カーソルキーが使えなくて面食らったことがありますが。
0325デフォルトの名無しさんNGNG
>>324
> それはよく聞いてます。LISPマクロ(?)がいいんでしょうか?
TAGSファイルとか使うと本当に便利ですが、Cのコーディングスタイルが
押しつけられるので、好き嫌いはあると思います。
でも、emacsでアセンブラは二度とやりたくないです。自分でmodeを作る能力が
なかったため、字下げがわけ分からん状態になりました。
0326ひげぽんNGNG
>Win環境ではMeadowが広く使われています

MonaのコーディングはMeadowを使ってます。
確かに便利ですね。
MakeもMeadow上から実行しているので
Meadowがないとつらいですね。
0327デフォルトの名無しさんNGNG
とりあえず、NWSOS標準Shellがunixの端末仕様に揃えれば
Vi系だとかEmacs系などの移植も進むと思われ
0328デフォルトの名無しさんNGNG
なんつうかそうなっちゃうとたんなる亜種になりさがっちゃう気がして...
0329LightCone ◆sSJBc30S5w NGNG
>>327
>とりあえず、NWSOS標準Shellがunixの端末仕様に揃えれば
>Vi系だとかEmacs系などの移植も進むと思われ

 カーソルを移動したり色を変えたりするエスケープコードみたいなものが
決まってるんでしょうか。
 昔、REMOTE LOGIN で、自宅のDOSで遠くのemacsが動いてびっくりしま
したが。

>>328
>なんつうかそうなっちゃうとたんなる亜種になりさがっちゃう気がして...
 基本的な部分を UNIX と似せておくことはプラスになると思います。
 Windowsでも POSIX(UNIXの標準仕様みたいなもの)に大まかに対応し
てますが、Winを UNIX と思う人はいないわけで。
0330デフォルトの名無しさんNGNG
MacOSXのように個性が出せればですね。

>カーソルを移動したり色を変えたりするエスケープコードみたいなものが決まってるんでしょうか。
http://vt100.net/
この辺でしょうか?ちゃんと読んではいませんが。
0331LightCone ◆sSJBc30S5w NGNG
>>330
 まず基本的なことから知りたいのですが、sh,csh,bashなどは、
「コンソールの枠」としての「kterm」中で起動し、エスケープ
シーケンスの処理は、kterm がやっている、ということなんで
しょうか。


 どうやら、kterm のエスケープシーケンスとMS-DOS のそれとは互換性が
あるようですが、あってるでしょうか。
0332LightCone ◆sSJBc30S5w NGNG
エスケープシーケンス Google検索:

http://www.google.com/search?hl=ja&inlang=ja&ie=Shift_JIS&q=xterm+ESC+%5B&lr=
0333デフォルトの名無しさんNGNG
>>329
> カーソルを移動したり色を変えたりするエスケープコードみたいなものが
> 決まってるんでしょうか。

termcap/terminfo
0334LightCone ◆sSJBc30S5w NGNG
>>333
 termcap や terminfo を変えれば、「UNIXの端末使用(xterm,kterm)」と
同じでなくても emacs等が動くかもしれない、ということでしょうか?
0335LightCone ◆sSJBc30S5w NGNG
使用--->仕様
0336デフォルトの名無しさんNGNG
>>334
プログラム中にエスケープシーケンスをハードコーディングしたりすると特定端末でしか動かなくなるから、Unix ではカーソル制御ライブラリを使うのが定石。
これによって、プログラムはカーソルの論理的な動きを記述すれば良い。
実際にエスケープシーケンスへの変換は、カーソル制御ライブラリが行う。
更に、各種の端末に対応するため端末毎に変換規則をデータベース化してある。(termcap/terminfo は、データベースの名前。)
だから、カーソル制御機能がある端末に対応した termcap/terminfo が書ければ、どんな変な端末でも emacs とか動くよ。
0337LightCone ◆sSJBc30S5w NGNG
>>336
>実際にエスケープシーケンスへの変換は、カーソル制御ライブラリが行う。
>更に、各種の端末に対応するため端末毎に変換規則をデータベース化してある。

 解説有難うございます。UNIXでのカーソル制御や文字装飾制御は、
思った以上に柔軟性が高く、

1. アプリ--->カーソル制御ライブラリ

2. カーソル制御ライブラリ--->エスケープシーケンス
(termcap/terminfoでカスタマイズ可能)

3. エスケープシーケンス--->端末(xterm, kterm)

の3段構えだったんですね。

興味深いのは、アプリやカーネルを対応しなくても、各種環境に

1. カーソル制御ライブラリの置き換え
2. termcap/terminfo の書き換え
3. 端末(kterm/xterm)の書き換え

などで対応できそうな点です。
0338デフォルトの名無しさんNGNG
大変なことになってる。
http://pc.2ch.net/test/read.cgi/os/1039075591/l50
0339デフォルトの名無しさんNGNG
>>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
やるしね。

ここらへんは文化背景になっちゃうから軽くながしておいてね。
0340デフォルトの名無しさんNGNG
>>338
ワラタ。
0341デフォルトの名無しさんNGNG
光円錐タン。。
0342デフォルトの名無しさんNGNG
LightConeマヂギレ!!!
0343名無しさんNGNG
俺は、LightCore氏が連続カキコしてても気にならないけどなあ・・。
0344名無しさんNGNG
前スレがあがっていたのでage
0345デフォルトの名無しさんNGNG
名無しで連続カキコしてるやつもいるからな。コテハンだから目立つだけだよ。
# っていうか俺は全然気にしてないけど。低脳な話してるわけじゃないんだし。
0346デフォルトの名無しさんNGNG
Emacsがどうとかシェルがどうとかはどうでもイイ話だろ?
LightConeは餓我なのか?あんま度がすぎるとム板に
NWSOSの開発スレ作ってやるぞ
0347ひげぽんNGNG
タスクスイッチに実験中(いまだ成功せず)なのですが

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が発生しているような気が
するのですが、どこでこのような状況に陥ったかが
つかめていない状況です。

どなたかアドバイスいただけないでしょうか。
よろしくお願いいたします。
0348デフォルトの名無しさんNGNG
それはアクセスビットがたっただけではないでしょうか?
原因は別だと思います。
0349LightCone ◆sSJBc30S5w NGNG
>>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版を使ってます。
0350LightCone ◆sSJBc30S5w NGNG
>>348
確かにそうですね。
0351ひげぽんNGNG
>>348
>それはアクセスビットがたっただけではないでしょうか?
>原因は別だと思います

アドバイスありがとうございます。
ということなので現在の状況を書かせていただきます。
もし何か気になる点がありましたら、ご指摘いただけたらと思います。

「はじめて読む486」のようにprocess1(),process2()という関数を
作成して実行の切り替えを試みています。

■前提条件
0x08 CS
0x10 DS
0x18 SS
0x20 TSS process1用
0x28 TSS process2用
0352ひげぽんNGNG
■やってみた事

/* グローバル変数 */
TSS tss[2];
byte stack[512];
{

/* process2用のTSSを用意 */
setTSS(tss + 1, 0x08, 0x10, process2Tester, 0x200, stack, 0x10, 0, 0);

/* GDT 0x20, 0x28にtssのアドレス等をセット */
/* gdt_はgdtr.base */
setDT(gdt_ + 4, (dword)tss , sizeof(TSS), TypeTSS);
setDT(gdt_ + 5, (dword)(tss + 1), sizeof(TSS), TypeTSS);

/* 現在のタスクはprocess1ですよ */
ltr(0x20);

/* 開始 */
process1();

}
0353ひげぽんNGNG
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.
0354ひげぽんNGNG
■やってみたこと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
と表示されます。
0355ひげぽんNGNG
LightCone さん
ありがとうございます。
一部とはいえ、NWSOSのコードを見たのは初めてです。
0356超先生@OS板 ◆leaf/RYZgY NGNG
TSS中のLDT SegmentSelectorやFS/GSレジスタが正しく埋まってないとか・・・?
0357ひげぽんNGNG
こんにちは超先生@OS板さん
いつもお世話になっております。m(__)m

>TSS中のLDT SegmentSelectorやFS/GSレジスタが正しく埋まってないとか・・・?

LDTセグメントセレクタは 0x30としています。
gs,fsは0に設定しています。

そもそもLDTってこの場合必須なのでしょうか。
だいぶ煮詰まってきました。
0358LightCone ◆sSJBc30S5w NGNG
こういう部分がOS作りで厄介な所ですよね、、、。
今後数百回はこういう作業の繰り返しになると思います。
最終的には誰にも頼れないかもしれませんが。
0359ひげぽんNGNG
>こういう部分がOS作りで厄介な所ですよね、、、。
>今後数百回はこういう作業の繰り返しになると思います。
>最終的には誰にも頼れないかもしれませんが。

本当ですね。非常に厄介です。
また実践的な資料をなかなか見つけられないのがつらいですね。

ちょっとした間違いで失敗しているのも、全く見当違いのことをしているのも
見た目上、区別がつかないです。(特に独りよがりになっていると・・・)

そこは、LightCone さんや、超先生@OS板さんのような
先人のアドバイスを頂きながら進めると良いなあと勝手に思ってたりします。
いつか、私もOSを作ろうとしている人たちにアドバイスできるほどになりたいです。
0360LightCone ◆sSJBc30S5w NGNG
 今のケースは、 
 setTSS()や、setDT()の中身が正しいか、TSSの構造体が定義通りになって
いるか等を丹念に調べることと、きちっとCPUの動作を理解するしかないです。
0361LightCone ◆sSJBc30S5w NGNG
>>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)の
間違いだと思います。

 これは明らかに間違った挙動を起こすはずです。
0362ひげぽんNGNG
LightCone さん
貴重なお時間を割いていただいて大変恐縮です。

ご指摘の部分を修正したところ、ばっちり二つのタスクが交互に動くようになりました!!!!
ひとえにLightCone さんのおかげです。
厚くお礼を申し上げます。

成功した瞬間に、背筋がぞくぞくっと来ました。
どうもありがとうございました。
■ このスレッドは過去ログ倉庫に格納されています