[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[OSASK 00049] Re: 簡易質問


  こんばんは、川合です。

  [OSASK 00048]の続きです。昨日はGBAのところまで書きました。

---

  僕が「30日でできる!OS自作入門」を書くのと前後して、「CPUの創
りかた」という本を読みました。この本を読む前からFPGAに強い関心を
持っていたこともあり、「CPUだってやろうと思えば作れるし、実は手
の届かないものではない」という感想を持ちました。・・・さらにいつ
だったかwebで、実際にFPGAでCPUを作った人のblogを見ました。そのペ
ージよれば、その自作CPUのベンチマーク性能は同クロックのARMを上回
っていました。もちろんFPGAなのでベンチマークに都合のよい命令を用
意すればスコアはいくらでも上げられるのですが、そのblogではそうい
う特殊な命令を使わないでも、汎用的な命令セットだけでこれだけのロ
ジックでここまで速くできた、みたいなことが書いてありました。まっ
たくすばらしいです。

  僕としては、自分の理想のCPUのためにソフトウェアを開発したいの
です。もし理想のCPUが見つかれば、開発はそのCPUのコードで行い、PC
上で動かす必要があるときはエミュレータを使ってやるでしょう。自分
がダメだと思うようなCPUのために1バイトだって書く気はしないのです
。しかし理想のCPUはまだ見つかりません。なければ作ってしまえとい
うが僕の考え方ですが、今からCPUを作り始めたらOSの完成は果てしな
く遠くなりそうです(ただでさえ僕の開発速度では果てしなく遠い感じ
なのに)。

----

  ということになれば、とりあえずは結局CPUに依存しない形でOS開発
するしかない、という結論になってしまいます。しかしCやC++で作れば
いいかというと、それだけでは解決できないような気がします。開発は
C言語でやってもいいですが、各機種向けのバイナリを生成するたびに
、Cソースから構文解析を行い、最適化をして、コードを生成したりリ
ンクしたりするというのは、どうもムダに思えます。・・・それよりも
CPU依存しない範囲での最適をし終わった後の中間コードみたいなもの
をバイナリとして持つほうが良さそうに思えます。

  となるとこれはJavaや.NETのようなものになるわけで、これらを使え
ばいいと思いました。・・・しかしJavaにはあまりいい印象がありませ
ん。僕はダンジョンマスターというゲームが好きなのですが、Javaで作
られたダンジョンマスターは、C3の533MHzのマシンでは結構もっさりと
動きます(もちろんJITコンパイラを使っているはずです)。かたやFM-
TOWNS版のダンジョンマスターは486SXの20MHzでも実にスイスイと動き
ます。この性能差は一体なんなのでしょうか。また.NETがJavaよりも圧
倒的に速いという話も聞かないので、たぶん速さはそれほどには違わな
いのでしょう。

  この遅さがCPUに依存しないことのためだといわれてしまえばそれま
でなのですが、僕はどうにも納得がいきません。だから僕も作ってみま
す。作ってみて、結局Javaと同程度の速さしか出ないのなら、そのとき
はあきらめてJavaベースにすると思います。

  僕がJavaや.NETに不満な理由は他にもあります。それはこれらのバイ
トコードアーキテクチャが、32bit演算コアを前提にしていることです
。僕の理想のCPUに必要なビット数は一体いくつなのでしょうか。それ
は32だと確信できていません。むしろ16bitくらいのほうがいいかもし
れないと思うことがあります。

  それにどうもJavaはリッチなCPUを前提にしていそうな気がしてなり
ません。もし僕がバイトコードのシステムを作るとしたら、Z80とかPIC
マイコンやAVRマイコンでも共通に使えるような、そしてもちろんx86-
64でも使えるような、そんなものにしたいと思うのです。使えるという
のはもちろん命令セットを下に合わせてプアにするという意味ではなく
、どのCPUでもそのCPU向けに書かれたバイナリよりも少し遅い程度の演
算速度が出るという意味です。

  ・・・まあこの辺の話を書き出すときりがないですし、また絵に描い
たもちだといわれると思うので、物ができるまではあまり言わないこと
にします。

  とにかく僕はこの仮想マシン用のコードで書くことによって、1つの
バイナリで、386でもARMでもx86-64でもPowerPCでも、8086でも6809で
も、それなりに性能が出せるOSを作りたいのです。アプリもこの仮想マ
シン用コードで書いているかぎり、どの機種でも動くことになります。
つまりこれはJavaOSっぽいことをやってみようという話なのです。
JavaOSは遅すぎてボツになったとうわさに聞いていますが、この新
OSASKは今のOSASKほどではないにしてもそれよりもそれほど遅くはない
速さで実現しようと思っているのです。

---

  この仮想マシン体系こそkhabaであって、各機種にkhabaの実行環境を
提供するソフトウェア群がKHBIOSなのです。これはかつて僕が言ってい
たKHBIOSの主たる目的から大いに拡大していますし、khabaの仕様も作
り直してしまいました。でもとにかく僕がkhabaベースでOSを作れば、
KHBIOSを各機種に移植するだけでOSもアプリも動作可能になります。・
・・もちろんこれはうまくいった場合の話であって、僕が力及ばずで途
中で力尽きてしまえばそれまでですが。この但し書きは以下の話にも同
様に適用されます。

  ということで、OSASK ver.5.0のディスクイメージには、超間に合わ
せ版のKHBIOSとkhabaで書かれたOSASK(を386用に変換済みのもの)が
含まれるわけです。・・・そしてこんなに大きな改造をやらかした以上
は、最初のバージョンからOSASK ver.4.9までのアプリを動かせるよう
にするための仕組みを準備する自信がないので、しばらくは互換性がな
くなるというわけです。

  またKHBIOSは普通のOSの上でも動作します。これはどういうことかと
いうと、たとえばWindows上でKHBIOSを動かし、その上で新OSASKや
新OSASKアプリを動かせるという意味です(この場合、ver.4.9以前の
OSASKアプリを実行する機能は失われます)。Linux上でもKHBIOSは動き
ます。MS-DOS上でも動きます。かつての僕の愛機FM-7でもうごきます。
いずれの場合もエミュレーションをするわけではないので、QEMU上で
OSASKを動かす現在の環境よりもきっと高速です。WinやLinuxからみる
と、KHBIOSはただのでかいアプリにしか見えません。またこれらの
KHBIOSとアプリやデータを1つの実行ファイルにすることもできます。
そうすると、新OSASK用に作ったアプリからWin用の普通のアプリ(1つ
の.EXEファイル)を作ることもできます。Linuxでも同じことができま
す。

---

  OSASKは初期の頃、エミュレータ完備を大きくうたっていました。こ
れは、それまでに作られたソフトウェアがいろいろなマシンで動かせる
という目的を達成するための機能といえます。これはとても重要なこと
です。でもそんなエミュレータを完備するのには時間がかかります。

  いっぽう、過去のソフトウェアをひとまずあきらめて、これらから作
るソフトウェアに関してのみいろいろなマシンで動かせる、という目的
であれば、それよりも少ない労力で可能なのです。だからまずはそれか
らやろうというわけです。・・・まあこんな当たり前すぎることを今さ
ら喜ぶ僕が実に情けないのですし、同じことは初期のOSASK計画に対し
て寄せられた意見の中にあったので、僕は自分の方針の間違い(?)に
ようやく気がついただけともいえます。・・・そしてそれが済んでから
じっくりと過去の遺産を救うためのエミュレータを作りたいと思います
。

  OSASK計画のページには、OSASKによってすべてのコンピュータが実力
を発揮できるようになり、それで本当の意味でマシンの優劣を競えるよ
うになるという夢がかかれています。KHBIOSによってもこの夢はある程
度はかなえられると思います。どうしてある程度なのかというと、
khabaではCPUの能力を100%出せるわけではないからです。でも70%くら
いは出せると思うんです。今のJavaみたいに10%未満とかそんなことは
ないと思うんです。

  もし僕の構想どおりのものができれば、適当にプログラムを作り、た
いていのものはGBAなどで動かして遊び、もしマシンパワーが不足すれ
ば、そのアプリはその辺の中古PCで実行させればよいのです。マッキン
トッシュの中古が手に入ればそれを使ってみてもいいし、あまりに重い
アプリを作ってしまったらx86-64マシンで動かせばいいのです。

  そのアプリをWinユーザの人にも使ってもらいたいと思えば、 KHBIOS
+新OSASK+アプリ の内容の.EXEを作って配布すればいいのです(まあそ
の分だけでかくはなっちゃいますけどね)。

---

  ということで、いろいろと書きこぼしたところもあるのですが、とに
かく僕からの今回の質問に対する回答はこれでおしまいです。


  それでは。

--
    川合 秀実(KAWAI Hidemi)
OSASK計画代表 / システム設計開発担当
E-mail:kawai !Atmark! osask.jp
Homepage http://osask.jp/

一覧(今月):     投稿順     スレッド順