OSを作ってみよう (534レス)
1-

139: ( ´ -`) 03/03/07 23:06 AAS
今気付いたんだけど>>133みたいにGRUBでrootコマンドを使
えばソース中にデバイス名をハードコーディングしないで済
むんですね。もっとちゃんとマニュアル読んどくべきだった。
撃つ出汁脳。
140: ( ´ -`) 03/03/08 08:18 AAS
外部リンク[gz]:www.geocities.co.jp
偽signalを実装。実装の簡単のために仕様はかなり変えています。
シグナルのマスクは出来ない。ネストは出来ない。シグナルハン
ドラの終りで明示的にsigreturnを呼ぶ必要がある、などなど。
UNIXのsignalというより某BTRON3のメッセージハンドラに近い
仕様となっています。というか、BTRON3仕様書見て作りました(w
今後徐々にPOSIX準拠にしていく予定。
141: ◆g2j80BX5do 03/03/08 11:41 AAS
030308age
142: LightCone ◆sSJBc30S5w 03/03/08 19:43 AAS
 面白いなと思ったのは、signalハンドラに下りる時に、カーネルスタックを
積み重ねずに、前のスタックフレームの内容をTask構造体内部にコピーし、
sigreturn()で、復帰しているところです。

 私だったら、カーネルスタックに積み重ねてしまいそうですが(高速そう
なので)、この方法だと、スタック容量がパンクしないかチェックしなく
てもいいですし、TSSのESP0も固定のままでいけるので簡単になりますね。

 TSS-ESP0を変更するのは色々と煩雑になりますし。
143: LightCone ◆sSJBc30S5w 03/03/08 20:14 AAS
 0000 0000 - 7fff ffff あたりは、線形アドレス = 物理アドレスの
恒等写像にしてるのですか? そして、カーネルもそこに置いている?

 もしそうなら、面白い実装だと思いました。

 ああ、でもこれだと、V8086モードは複数独立して持つ事は出来ないかも
しれませんね。
144
(1): 03/03/08 22:21 AAS
がんばれ!>>1完成したら使用します!
145
(2): ( ´ -`) 03/03/08 22:53 AAS
> 面白いなと思ったのは、signalハンドラに下りる時に、カーネルスタックを
>積み重ねずに、前のスタックフレームの内容をTask構造体内部にコピーし、
>sigreturn()で、復帰しているところです。
単純さでは良い方法じゃないかなと思っています。
でも、これではハンドラのネストがやりにくく、UNIXとの互換
性が取れませんので、今日の作業でスタックフレームをユーザ
スタックに保存するように改め、sigreturnもハンドラからのリ
ターンで自動的に呼ばれるようにしました。個人的にはシグナル
ハンドラは時代遅れだと思うので、あんまり乗り気では無かった
ですけど。
省16
146
(1): ひげぽん 03/03/09 00:34 AAS
こんばんは、ひげぽんと申します。

1さんのOS大変参考にさせていただいておりますm(__)m

それにしても1さんはすごいです。
すべてにおいて、見習うところばかりです。
OSの知識、実際のコーディング等々。。。

これからも是非がんばってください。
147
(1): わたもち 03/03/09 00:38 AAS
わたもちです。
開発スピードも速いし、どんどん実装が進んでゆく...
ソースも拝借して、勉強しています。
MacOSX並みのビジュアルなGUIの作成期待しています!
私も、早くGUI実装までいけるように頑張っていきたいと思います。
148: ( ´ -`) 03/03/09 11:08 AAS
外部リンク[gz]:www.geocities.co.jp
>>145で述べた改良とexit&waitシステムコールの実装をしま
した。これでプロセス・メモリ関係のシステムコールはだい
たいそろったかな。今日はユーザアプリ用ライブラリの整備
をする予定です。

>>146
こんにちは。
カーネルのC++記述やFDD制御などMonaからは色々と学ば
せていただいております。カーネルをC++で書くなんて
カッコ良すぎです。
省4
149: わたもち 03/03/09 22:18 AAS
失礼しました。寝ぼけていたようです。これだけのソースを書ける方なら
以前作成されていたOSもかなり作りこまれてあったのだろうなと思います。
貴方のOSは驚くほどのスピードで製作が進まれているようで、うらやましい限りです。
日々忙しいと思いますが、OS製作頑張ってください。
150: LightCone ◆sSJBc30S5w 03/03/10 01:18 AAS
>>145
>> もしそうなら、面白い実装だと思いました。
>そうでしょうか。
>どの辺がそう感じられたのでしょう?

二つ理由があります。
一つ目は、#143の最後にも書きましたが、独立したV8086モードタスクを
複数走らせるためには、0000 0000 - 0001 FFEF の部分を必ずタスク毎に
分離する必要があるから。

二つ目は、共通空間無いでもDISKと連携した仮想記憶メモリを置くためには、
「恒等写像」ではない真の意味でのページングも行う必要があるだろうから。
省3
151
(1): ( ´ -`) 03/03/10 10:15 AAS
ソースが5000行超えた。
こんな長いプログラム書いたのは初めてだな。

>一つ目は、#143の最後にも書きましたが、独立したV8086モードタスクを
>複数走らせるためには、0000 0000 - 0001 FFEF の部分を必ずタスク毎に
>分離する必要があるから。

う〜む、そうですか。
ちょっとだけ調べてみたのですが、V8086モードをまともに
やろうとするとかなり難しそうなので、BIOSドライバは当分
諦めようかと思います。

>二つ目は、共通空間無いでもDISKと連携した仮想記憶メモリを置くためには、
省9
152: LightCone ◆sSJBc30S5w 03/03/10 12:01 AAS
>>151
>共通空間が必要になった場合は、タスク固有空間を3G〜4Gにして、
>空いた2G〜3Gを共通空間に割り当てようと考えています。

ご承知のとおり、線形アドレス「空間」自体は、どう頑張っても4GBまで
なので、もしタスク固有空間を4GBにしてしまうと、共通空間用には何も
残らなくなってしまうと思うのですが、その辺、どういうことなのか良く
分からないので、詳しくご説明頂ければと思います。

PAE,PSEを用いると物理アドレスが36BITに拡張され、実メモリを64GBまで
扱えるようになりますが、相変わらず線形アドレスは32BITで4GBのままです。
つまり、CR3を固定した場合、同時に扱える物理メモリは4GBより多くは
省1
153
(1): ( ´ -`) 03/03/10 12:28 AAS
書き方が悪かったです。
2G〜3Gは線形アドレスの0x80000000〜0xbfffffff、3G〜4Gは線
形アドレスの0xc0000000〜0xffffffffを表しているつもりでした。
しかし、OSを作り始めてわかったのですが、線形アドレスの4Gと
いうのは意外と狭いものですね。64bitのCPUが当たり前になれば
OSの作り方もまた代ってくるのかもしれません。
154
(1): 名無したん@馬鹿ップル 03/03/10 13:05 AAS
メグタソは16Mだけど広い広い(;´ω`)
155
(1): LightCone ◆sSJBc30S5w 03/03/10 13:10 AAS
>>153
>2G〜3Gは線形アドレスの0x80000000〜0xbfffffff、3G〜4Gは線
>形アドレスの0xc0000000〜0xffffffffを表しているつもりでした。

なるほど。線形アドレスを、0G, 1G, 2G, 3G, (4G:BOTTOM) と表現
されていたのですね。納得しました。それを踏まえた上でもう一度
考えてみますと、

>共通空間が必要になった場合は、タスク固有空間を3G〜4Gにして、
>空いた2G〜3Gを共通空間に割り当てようと考えています。

共通空間が必要になった「場合」には、タスク固有空間を1GBに減らし、
余った1GBを共通空間にする、ということでよろしいのですよね。
省5
156
(1): LightCone ◆sSJBc30S5w 03/03/10 13:10 AAS
別に難癖をつけているわけではなく単に技術的な側面から検討したい
だけなのですが、共通空間を必要としない場合、タスク固有空間は
2GBあるのに、共通空間を必要としたら突然半分の1GBになってしまう
ということですよね。これは、アプリケーション・プログラムにとって
余り望ましいとはいえなく有りませんか。

>しかし、OSを作り始めてわかったのですが、線形アドレスの4Gと
>いうのは意外と狭いものですね。

その通りだと思います。現代的なOSでは、メモリ"空間"は、
「記憶するための領域」としてだけでなく、アクセスするための覗き窓と
しても多用されるので、不足した場合ににっちもさっちも行かなくなる
省1
157: ( ´ -`) 03/03/10 17:14 AAS
>>154
メグタン家出中?

>>155
はい。そんな感じです。

>>156
ううっ、わかりにくい書き方で度々ゴメンなさい。
「必要になった場合」というのは、開発が進んで全タスク共通空
間を必要とするような機能を実装する場合、という意味でした。
158
(1): ( ´ -`) 03/03/10 17:15 AAS
細かい最適化について考えてみました。
普通システムコールはソフトウェア割り込みを使って、あらかじめ
決められている1つか2つのゲートからカーネルモードに移行し、
レジスタなどに格納されたシステムコール番号によって個別のルー
チンへ分岐すると思います。OSASKスレでも話題になっていました
が、ジャンプテーブルを使うにしても分岐命令を使うにしても、こ
のシステムコールの種類による振り分けには絶対にオーバヘッドが
あるわけです。で、思い付きました。IA32の場合割り込み番号は
256個あり、そのうちインテル使用が32個、IRQに16個として200個
以上もあまっています。そこで、一つの割り込み番号に一つだけシ
省5
1-
あと 376 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.011s