OSを書くには?
■ このスレッドは過去ログ倉庫に格納されています
0001はてな?
NGNGあと、うまく言えないけど
OSの実体ってナニ?
0002はてな?
NGNG0003デフォルトの名無しさん
NGNG本を読むなりなんなりしろ。
0004デフォルトの名無しさん
NGNGWindows 2000 の場合、OS の本体となるプログラムは
\WINNT\System32\ ntoskrnl.exe
ユーザプロセスから OS へのエントリポイントは
\WINNT\System32\WINNT.DLL
このあたりの話は「アーキテクチャ徹底解説 Windows2000」
を読むと、書いてある。ただ、これ読んでも OS は書けない
し、そもそも OS に関する知識がないと理解できないと思う
けど。
OS について全くの素人なら、タネンバウム先生の「Operating
System - Design and Implementetion」がおすすめ。邦訳は
腐ってるので原書のほうね。あとは初期の UNIX をソースコー
ドを追って詳しく解説した「Lions' commentary on UNIX」も
良い。
0005デフォルトの名無しさん
NGNGLSI(トランジスタでも可)でCPU組んでみな。
もしくはAT互換機で、BIOS を素っ飛ばす!
そこに何かコマンドを入れるにはどうしたらイイ?
それを実現しているのがOS。(低レベルではモニター)
ファイルシステムだWindowだ…ってのは、延長線上にある
便利システムに過ぎない。
0007紅衛兵
NGNGOSの定義は「資源を管理しかつ各種のサービスを提供する、計算機の基本的なソフトウエア」。
だから、フルスクラッチでOSを書くとすると、
まず、基本的な入出力の制御とそれを利用した基本的な
リソースの管理ルーチン、それと基本的なサービスルーチン、
たとえばコンソールコマンドプロセッサとかを作ることになるんだと思う。
(別に人間に対してのサービスじゃなくてもいいけど)。
まず、第一歩としてはBIOSとは何かを、資料なりを探してきて理解することから
始めればいいと思うよ。
0008紅衛兵
NGNGタネンバウム先生じゃなくて申し訳ないけど、BSD系のUNIXを例に学ぶのであればこんな良書もあるよ。
amazon.co.jpで買える。
http://www.amazon.co.jp/exec/obidos/ASIN/0201549794/249-8662650-9652347
0009はてな?
NGNGBIOSってよくわらないけど
周辺機器を制御するとかどうとかですよね?
0010デフォルトの名無しさん
NGNG勉強用ならminixあたりからはじめるのがよいのかな?
0011デフォルトの名無しさん
NGNGhttp://www.linux.or.jp/JF/JFdocs/The-Linux-Kernel.html
0012デフォルトの名無しさん
NGNG赤悪魔本が良い本であることは激しく同意ですが、最初に読む本と
してはちょっと辛いかも。そういえば、赤悪魔本の邦訳って出ませ
んねぇ。心待ちにしてる人は、それなりに多いと思うんだけど。
ちょっと話が変わりますが、マイクロカーネル系 OS の入門書で、
おすすめってあります?
0013はてな?
NGNGちょっとお値段が高いですね
0014通りすがり
NGNGとりあえず8ビット機種あたりのリアルタイムOSでも作ってみるのがいいでしょうね。
メモリだけは十分(といっても数Kバイト)積んでおいた方がいいと思うけど。
0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNGよく知らないひとは、混乱するだろな
0020今更OS書いてモナ〜
NGNG0021デフォルトの名無しさん
NGNG0022>21
NGNG0023デフォルトの名無しさん
NGNGOSの意味わかってる?
0024デフォルトの名無しさん
NGNG0025無党派さん
NGNG実体じゃないよ。
0026デフォルトの名無しさん
NGNG0027デフォルトの名無しさん
NGNG>>26 実身?
0028はてな?
NGNG0029デフォルトの名無しさん
NGNGBIOS。
0030デフォルトの名無しさん
NGNGいいネタだ。
0031デフォルトの名無しさん
NGNG世界中の人間がうじゃうじゃ作っているはずだが。
そのうえ、実装と仕様を分けて考え出したらきりがない。
0032デフォルトの名無しさん
NGNG日本を代表するOSに
みんなで育てageようぜ。
0033デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNG0036デフォルトの名無しさん
NGNG0037デフォルト名無しさん
NGNG瀕死のBeOSはC++らしいけど・・・
0038>37
NGNG0039デフォルトの名無しさん
NGNGそれで保守できるわけー?
0040デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNG0042デフォルトの名無しさん
NGNG0043通りすがり
NGNGC言語でもオブジェクト指向はできるよ。クラスとかないから少し面倒なだけ。
stdio.hで宣言されたFILE型に関するライブラリはオブジェクト指向そのもの。
0044デフォルトの名無しさん
NGNGUNIX だと、ファイルシステム (vnode) なんかもバリバリのオブ
ジェクト指向になってますね。最近はデバイスドライバも、そうな
りつつある。
0045デフォルトの名無しさん
NGNG確かに構造体を関数に与えるという構図を逆転させればOOPだしなあ。
0046デフォルトの名無しさん
NGNGNeXTは、どの部分がObjectiveCで成ってるんでしたっけ?
>>39
出来ないかといえば嘘になる。
ただ、OOPないより有るほうが楽だろうってのは確かだが。
というか、OSとOOPの関連性を敢えて「見ないように」している感が
あるのが、伝統的(笑)OS開発の分野であるような気がする。
特にUNIX系な。研究中のOSとかだと話は別らしい。
Winは辛うじてOO化しつつある(COMとか)けど、
実装が時折おかしいんで不安定(笑)。
>>44
UnixのFileSystemをOOPと呼ぶのは羊頭狗肉だと思う。
ioctrl(だったっけ)をムキだしのままじゃなくて
綺麗にラッピングできてはじめてOOPって呼べると思う。
まして、
>>43
そんなFileSystemにかぶさっているだけで、
多態という意味でナニも新たな貢献をしていないFILE型は、
全然OOPじゃない。
勿論、だからといって保守性が致命的か?というと、
そうとは言いきれないわけだけど。
0047デフォルトの名無しさん
NGNGまぁ半分はそうだと思います。
あと半分は、多態とか使えないと
バリバリとはいいにくいわけで。
ところで、
>>44
実情を知らないのですが、
「複数のインスタンス」には
きちんと対応できているのですか?
たとえば同じLANカード2枚つっこんだとき
どっちがどっちか?をOSが完璧に区別できないと
それは少なくともOOとは呼べないわけで。
なんか同じデバイスを複数つっこんだとき
区別は運次第だとか昔きいた記憶があるんですが、
今はそんな馬鹿げた状態は克服されたのでしょうか?
0048デフォルトの名無しさん
NGNGんだ。
俺は知らないけど、5年10年くらい前だと
同じコトが構造化について言えたそうですね。
言語同段(笑)な奴がごろごろ居たんだとか聞きました。
0049デフォルトの名無しさん
NGNGUNIX File System ではなくて vnode の話をしてるんですが、
区別ついてますか?
0050デフォルトの名無しさん
NGNGvnode ってなによ?Windowsユーザーにも判るように教えてくれ
005149
NGNGvnode は UNIX kernel 内部でファイルに関する情報を格納するた
めに使われている構造体。
vnode のフィールドの一つに、ファイルシステム固有の操作関数へ
のポインタ (たいてい v_op という名前) があります。kernel の
上位レイヤでは、ファイルへの操作はすべて vnode への操作とし
て抽象化されていますが、vnode はそれを v_op を使って各ファイ
ルシステム固有の操作へと変換します。
これによって、kernel の上位レイヤでは、ファイルの実体が存在
するファイルシステムの種類を意識せずに、ファイル操作を行うこ
とが可能になっています。まさに多態ですよね。
詳しくは、実際のコードを読んでみると良いかと。4.4BSD系なら
/sys/sys/vnioctl.h, /sys/sys/vnode.h, /sys/kern/vfs_*,
Solaris なら uts/common/sys/vnode.h, uts/common/fs/* あ
たり。
0052デフォルトの名無しさん
NGNGオブジェクト指向のデバイスドライバインターフェースと言った
のは、具体的には newbus (FreeBSD), newconfig (NetBSD) の
こと。
PC カードや USB など、OS の実行中にデバイスが増減する世界
だと旧来のデバイスドライバのフレームワークでは立ち行かなく
なった。そこで出てきたのが newbus, newconfig。複数インス
タンスにも対応しています。
私はデバイスドライバ屋さんじゃないので、デバイス周りは、あ
まり詳しくない。ボロが出る前にやめときます(笑)
005343
NGNGFILE型に関する共通のインタフェース(関数群)を用いて、磁気ディスクであれ、
フラッシュメモリであれ、通信ポートであれ、ディスプレイであれ、キーボード
であれ、同じように処理できるのは多態だと思うのですが。
本来であれば、それらの処理は全く別物で、個々に扱うべきものを、立派に抽象化
して対象になるデバイスごとに必要な処理を選択して呼び出しているのでは。
005449
NGNGそのレベルの抽象化は <stdio.h> の FILE 構造体ではなくて、
kernel 内部で行われています。混同しちゃいけませんな。
UNIX の「ファイル」はきわめて抽象レベルが高い概念で、デバ
イス非依存の操作を実現している点には同意。
005546
NGNG>そのレベルの抽象化は <stdio.h> の FILE 構造体ではなくて、
>kernel 内部で行われています。混同しちゃいけませんな。
どのレベルで行われるかは処理系依存。
それにFILE型は構造体とも限らない。
システムコールとかが個別に用意されていれば、当然ライブラリのレベルで
行うことになる。
組み込み用途とかの場合は、つながるデバイスについて同じことを自分で行う
ことになるけど、そのときのやり方は多くの場合、FILE型の中に仮想関数テー
ブルみたいに関数ポインタの配列なんかを持たせることになる。
0056デフォルトの名無しさん
NGNG多態的な行為なのに、
なんでCでしこしこ書きつづけてるのか不思議だ。
誰か新しい丁度ヨイ言語作れ。
>>53
多態の初歩っすな。継承は出来るけどメソッド数は
増やしちゃいけないっていうような世界。となると結構大変だ。
いずれ行き詰まるね。
まぁあるデバイスの処理を他のメタデバイスへの読み書きを経由して
表現することは出来るだろうけど、それやりすぎると
実装はさておき概念レベルでの抽象度が下がるんで、
萎えること請け合い。まぁOS畑の人はアプリ層のラップライブラリで
やれとか言うんだろうけど。
0058デフォルトの名無しさん
NGNG4.4BSD の VFS なんかは、マクロとテンプレートを駆使して
使ってる。ある意味で素の C ではなく、オブジェクト指向風
に拡張された C 言語。
あと、後半の「メソッド数を増やしちゃいけない」から行き詰
まる云々は理由が明確でないので、補足説明を希望。
0059デフォルトの名無しさん
NGNGC++みたいに統一せずに細かく実装まで制御したい、って気持ちが OS屋さん
にはまだ根強いのかも。半分ぐらいは俺の感覚だが。
OpenC++でメタレベルからいじれればきっとハッピーに。なるか?
0060通りすがり
NGNG>多態の初歩っすな。継承は出来るけどメソッド数は
>増やしちゃいけないっていうような世界。となると結構大変だ。
>いずれ行き詰まるね。
初歩的な機能を実現できれば、高度な機能を実現するのもそれほど難しくはない。
メソッド数を増やしたければ、関数ポインタのテーブルを拡張すればいいだけのこと。
言語レベルでサポートされたクラスではできない、メソッドの動的な割り付けでさえ
Cレベルでやれば可能になる。
まあ、デストラクタがないので例外処理が厳しいのは確かだけどね。
0061デフォルトの名無しさん
NGNGそりゃそうだが、それをどう認識するの?
いやまぁ、(Cならなんでも)書けば書けるけど。
>言語レベルでサポートされたクラスではできない、メソッドの動的な割り付けでさえ
「言語」って、どの?
C++なら確かに不可能だろうけど、どの言語でも不可能という
わけじゃないよね。
作りゃいいんじゃないかと。そういう言語を。
#関係無いけど仕事で使わされてるどっかの独自の変な言語が
#まさにそういう機能を持っているらしい。
>例外処理
ああ。OOPとは直接関係ないけど(相性はよいけどね)、
「例外」もCじゃお手上げなんでなんとかしたい問題の一つですよね。
0062デフォルトの名無しさん
NGNG>まる云々は理由が明確でない
というか、どっかのOS研究している人の
言葉によると、ある意味でOSの研究って
70年代で終わっている(笑)んだそうだから、
メソッド数ふやせなくても、もう、
処理の種類(=Interfaceの数)を
増やす必要がない、と考えても逃げ切れる(笑)
という面が、あったりする…わけでしょうか?
多種多様な概念が登場し得る分野では、
メソッド数増やせないと絶望じゃないかと。
0063デフォルトの名無しさん
NGNGそれはもしかして面白い言語(or処理系)でしょうか?
0064通りすがり
NGNGCでは例外処理にsetjmpとlongjmpを使うことになるけど、デストラクタ
チェーンに相当するものを自作しないといけないので結構厳しい。
まあ、C++とかでも、new演算子を使ったりすると同じ問題が発生するから
注意深くやればすむことだけどね。
例外処理事自体はオブジェクト指向と関係ないけど、デストラクタの有無が
その使いやすさにもろに響いてくるのは仕方ない。
0065デフォルトの名無しさん
NGNGところでDelphi方式どう思います?
Javaと違ってガベコレ(Destructorが
いつの日か呼ばれる保証)がない一方で
C++と違ってObject変数はPointerオンリーで
Scope抜けても自動的にDestructor呼ばれたりしない。
でも破綻ないプログラムが書ける。
例外のcatch(もといdelphiではexcept/finally)部で
デストラクタ明示的に呼ぶという約束を守るか、
Compositeパターンで親を殺すという約束を守るか、
どっちかによって安全を買ってる。
そんなに悪くない。
0066通りすがり
NGNGDelphiはよく知らないけど、finallyがあるとかなり楽だね。
Cでそれと同じものを実現するのはかなり難しい。
0067デフォルトの名無しさん
NGNGhttp://www.csg.is.titech.ac.jp/~chiba/openc++.html
C++ に Java のリフレクション機能みたいのをつけたやつ、
らしい。処理系ですね。
0068デフォルトの名無しさん
NGNGおお!どもっす。萌えそう。
むむむ?リフレクション云々というより、これってもしかして、
C++への文法の拡張「を」自作できる仕掛けだったりしますか?
すげぇ…
#間違いだったら晒し。英語力駄目駄目な俺
>reflection conference will be held in September 2001 in Kyoto, Japan.
なんてものまで有るそうで。
行けるものなら行ってみたいなあ。
#チバシゲルという名前見て一瞬吹き出してしまった>アニメ方面