トップページ⇒tech
86コメント29KB

OSを書くには?

■ このスレッドは過去ログ倉庫に格納されています
0001はてな?NGNG
どうすればいいのだろうか。
あと、うまく言えないけど
OSの実体ってナニ?
0002はてな?NGNG
例えば、Windowsの場合とか
0003デフォルトの名無しさんNGNG
人にものを尋ねる前に、
本を読むなりなんなりしろ。
0004デフォルトの名無しさんNGNG
>>2
Windows 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デフォルトの名無しさんNGNG
何も無いトコロから全てを作ってみればよろしい。
LSI(トランジスタでも可)でCPU組んでみな。
もしくはAT互換機で、BIOS を素っ飛ばす!
そこに何かコマンドを入れるにはどうしたらイイ?
それを実現しているのがOS。(低レベルではモニター)
ファイルシステムだWindowだ…ってのは、延長線上にある
便利システムに過ぎない。
0006はてな?NGNG
>>3
すんません。そういう本売ってなくて…。

>>4
へぇー有り難うっす

>>5
CPU組むってどういうことですか…?
0007紅衛兵NGNG
>>1

OSの定義は「資源を管理しかつ各種のサービスを提供する、計算機の基本的なソフトウエア」。
だから、フルスクラッチでOSを書くとすると、
まず、基本的な入出力の制御とそれを利用した基本的な
リソースの管理ルーチン、それと基本的なサービスルーチン、
たとえばコンソールコマンドプロセッサとかを作ることになるんだと思う。
(別に人間に対してのサービスじゃなくてもいいけど)。
まず、第一歩としてはBIOSとは何かを、資料なりを探してきて理解することから
始めればいいと思うよ。
0008紅衛兵NGNG
>>6
タネンバウム先生じゃなくて申し訳ないけど、BSD系のUNIXを例に学ぶのであればこんな良書もあるよ。
amazon.co.jpで買える。

http://www.amazon.co.jp/exec/obidos/ASIN/0201549794/249-8662650-9652347
0009はてな?NGNG
>>7
BIOSってよくわらないけど
周辺機器を制御するとかどうとかですよね?
0010デフォルトの名無しさんNGNG
unix系OSはソース公開ものが多いから参考になるよ。
勉強用ならminixあたりからはじめるのがよいのかな?
0011デフォルトの名無しさんNGNG
英語出来ない人のために。
http://www.linux.or.jp/JF/JFdocs/The-Linux-Kernel.html
0012デフォルトの名無しさんNGNG
>>8
赤悪魔本が良い本であることは激しく同意ですが、最初に読む本と
してはちょっと辛いかも。そういえば、赤悪魔本の邦訳って出ませ
んねぇ。心待ちにしてる人は、それなりに多いと思うんだけど。

ちょっと話が変わりますが、マイクロカーネル系 OS の入門書で、
おすすめってあります?
0013はてな?NGNG
>>8
ちょっとお値段が高いですね
0014通りすがりNGNG
>>1
とりあえず8ビット機種あたりのリアルタイムOSでも作ってみるのがいいでしょうね。
メモリだけは十分(といっても数Kバイト)積んでおいた方がいいと思うけど。
0015デフォルトの名無しさんNGNG
リアルタイムOSってなんです?
0016デフォルトの名無しさんNGNG
モニタです。
0017デフォルトの名無しさんNGNG
http://www.itron.gr.jp/home-j.html
0018デフォルトの名無しさんNGNG
DOS disk オペレーティング システムから始めるべし
0019デフォルトの名無しさんNGNG
DOSとリアルタイムモニタがOSという同じ言葉で取り扱われると
よく知らないひとは、混乱するだろな
0020今更OS書いてモナ〜NGNG
激暇人な大学生のやる事だね。
0021デフォルトの名無しさんNGNG
日本人が書いたオリジナルOSは、一つも無い。
0022>21NGNG
TRONは?
0023デフォルトの名無しさんNGNG
>>20
OSの意味わかってる?
0024デフォルトの名無しさんNGNG
違う>22
0025無党派さんNGNG
TRONは仕様だよ。
実体じゃないよ。
0026デフォルトの名無しさんNGNG
実体と仮身がなんか。
0027デフォルトの名無しさんNGNG
実装もあるじゃん。BTRONもITRONも。
>>26 実身?
0028はてな?NGNG
頭が痛い
0029デフォルトの名無しさんNGNG
ベーシック・インターフェース・オペレーティング・システム。
BIOS。
0030デフォルトの名無しさんNGNG
>>29
いいネタだ。
0031デフォルトの名無しさんNGNG
マイナーなのも入れたら、OSなんざ
世界中の人間がうじゃうじゃ作っているはずだが。

そのうえ、実装と仕様を分けて考え出したらきりがない。
0032デフォルトの名無しさんNGNG
www.imasy.org/~kawai/

日本を代表するOSに
みんなで育てageようぜ。
0033デフォルトの名無しさんNGNG
Human68kとかPC-Engineなんて純日本製だと思うが(藁
0034デフォルトの名無しさんNGNG
age
0035デフォルトの名無しさんNGNG
なんか書けよ >>34
0036デフォルトの名無しさんNGNG
WIN系はSOSと呼ばれます
0037デフォルト名無しさんNGNG
インターフェイスがC以外の言語で実装されているOSってどれだけあるの?
瀕死のBeOSはC++らしいけど・・・
0038>37NGNG
MSDOSはアセンブラのソフトウェア割り込み
0039デフォルトの名無しさんNGNG
C言語ってオブジェクト指向できないんでしょっていうかクラスがないんでしょ。
それで保守できるわけー?
0040デフォルトの名無しさんNGNG
オブジェクト指向と保守はあまり関係無い。>39
0041デフォルトの名無しさんNGNG
保守は同じ言語をどれだけの人が知ってるかが最重要ですね。
0042デフォルトの名無しさんNGNG
血の巡りの悪い職場環境では、却って保守効率を落としかねないね<OO
0043通りすがりNGNG
>>39
C言語でもオブジェクト指向はできるよ。クラスとかないから少し面倒なだけ。
stdio.hで宣言されたFILE型に関するライブラリはオブジェクト指向そのもの。
0044デフォルトの名無しさんNGNG
>>43
UNIX だと、ファイルシステム (vnode) なんかもバリバリのオブ
ジェクト指向になってますね。最近はデバイスドライバも、そうな
りつつある。
0045デフォルトの名無しさんNGNG
MacOSのToolBoxのインターフェースはObjectPascal用だったらしい。
確かに構造体を関数に与えるという構図を逆転させればOOPだしなあ。
0046デフォルトの名無しさんNGNG
>>37
NeXTは、どの部分がObjectiveCで成ってるんでしたっけ?

>>39
出来ないかといえば嘘になる。
ただ、OOPないより有るほうが楽だろうってのは確かだが。
というか、OSとOOPの関連性を敢えて「見ないように」している感が
あるのが、伝統的(笑)OS開発の分野であるような気がする。
特にUNIX系な。研究中のOSとかだと話は別らしい。
Winは辛うじてOO化しつつある(COMとか)けど、
実装が時折おかしいんで不安定(笑)。

>>44
UnixのFileSystemをOOPと呼ぶのは羊頭狗肉だと思う。
ioctrl(だったっけ)をムキだしのままじゃなくて
綺麗にラッピングできてはじめてOOPって呼べると思う。

まして、
>>43
そんなFileSystemにかぶさっているだけで、
多態という意味でナニも新たな貢献をしていないFILE型は、
全然OOPじゃない。

勿論、だからといって保守性が致命的か?というと、
そうとは言いきれないわけだけど。
0047デフォルトの名無しさんNGNG
>>45 下の行
まぁ半分はそうだと思います。
あと半分は、多態とか使えないと
バリバリとはいいにくいわけで。

ところで、
>>44
実情を知らないのですが、
「複数のインスタンス」には
きちんと対応できているのですか?
たとえば同じLANカード2枚つっこんだとき
どっちがどっちか?をOSが完璧に区別できないと
それは少なくともOOとは呼べないわけで。
なんか同じデバイスを複数つっこんだとき
区別は運次第だとか昔きいた記憶があるんですが、
今はそんな馬鹿げた状態は克服されたのでしょうか?
0048デフォルトの名無しさんNGNG
>>42

んだ。

俺は知らないけど、5年10年くらい前だと
同じコトが構造化について言えたそうですね。
言語同段(笑)な奴がごろごろ居たんだとか聞きました。
0049デフォルトの名無しさんNGNG
>>46
UNIX File System ではなくて vnode の話をしてるんですが、
区別ついてますか?
0050デフォルトの名無しさんNGNG
>>49
vnode ってなによ?Windowsユーザーにも判るように教えてくれ
005149NGNG
>>50
vnode は 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
>>47
オブジェクト指向のデバイスドライバインターフェースと言った
のは、具体的には newbus (FreeBSD), newconfig (NetBSD) の
こと。

PC カードや USB など、OS の実行中にデバイスが増減する世界
だと旧来のデバイスドライバのフレームワークでは立ち行かなく
なった。そこで出てきたのが newbus, newconfig。複数インス
タンスにも対応しています。

私はデバイスドライバ屋さんじゃないので、デバイス周りは、あ
まり詳しくない。ボロが出る前にやめときます(笑)
005343NGNG
>>46
FILE型に関する共通のインタフェース(関数群)を用いて、磁気ディスクであれ、
フラッシュメモリであれ、通信ポートであれ、ディスプレイであれ、キーボード
であれ、同じように処理できるのは多態だと思うのですが。
本来であれば、それらの処理は全く別物で、個々に扱うべきものを、立派に抽象化
して対象になるデバイスごとに必要な処理を選択して呼び出しているのでは。
005449NGNG
>>53
そのレベルの抽象化は <stdio.h> の FILE 構造体ではなくて、
kernel 内部で行われています。混同しちゃいけませんな。

UNIX の「ファイル」はきわめて抽象レベルが高い概念で、デバ
イス非依存の操作を実現している点には同意。
005546NGNG
>>54
>そのレベルの抽象化は <stdio.h> の FILE 構造体ではなくて、
>kernel 内部で行われています。混同しちゃいけませんな。

どのレベルで行われるかは処理系依存。
それにFILE型は構造体とも限らない。

システムコールとかが個別に用意されていれば、当然ライブラリのレベルで
行うことになる。
組み込み用途とかの場合は、つながるデバイスについて同じことを自分で行う
ことになるけど、そのときのやり方は多くの場合、FILE型の中に仮想関数テー
ブルみたいに関数ポインタの配列なんかを持たせることになる。
0056デフォルトの名無しさんNGNG
そこまで色んな場面で必要になっている
多態的な行為なのに、
なんでCでしこしこ書きつづけてるのか不思議だ。
誰か新しい丁度ヨイ言語作れ。

>>53
多態の初歩っすな。継承は出来るけどメソッド数は
増やしちゃいけないっていうような世界。となると結構大変だ。
いずれ行き詰まるね。
まぁあるデバイスの処理を他のメタデバイスへの読み書きを経由して
表現することは出来るだろうけど、それやりすぎると
実装はさておき概念レベルでの抽象度が下がるんで、
萎えること請け合い。まぁOS畑の人はアプリ層のラップライブラリで
やれとか言うんだろうけど。
005749NGNG
>>55
Agree. I was wrong.
0058デフォルトの名無しさんNGNG
>>56
4.4BSD の VFS なんかは、マクロとテンプレートを駆使して
使ってる。ある意味で素の C ではなく、オブジェクト指向風
に拡張された C 言語。

あと、後半の「メソッド数を増やしちゃいけない」から行き詰
まる云々は理由が明確でないので、補足説明を希望。
0059デフォルトの名無しさんNGNG
まあ、多態が出てくる場面なんてでかいシステムじゃいくらでもあるけど
C++みたいに統一せずに細かく実装まで制御したい、って気持ちが OS屋さん
にはまだ根強いのかも。半分ぐらいは俺の感覚だが。
OpenC++でメタレベルからいじれればきっとハッピーに。なるか?

0060通りすがりNGNG
>>56
>多態の初歩っすな。継承は出来るけどメソッド数は
>増やしちゃいけないっていうような世界。となると結構大変だ。
>いずれ行き詰まるね。

初歩的な機能を実現できれば、高度な機能を実現するのもそれほど難しくはない。
メソッド数を増やしたければ、関数ポインタのテーブルを拡張すればいいだけのこと。
言語レベルでサポートされたクラスではできない、メソッドの動的な割り付けでさえ
Cレベルでやれば可能になる。
まあ、デストラクタがないので例外処理が厳しいのは確かだけどね。
0061デフォルトの名無しさんNGNG
>関数ポインタのテーブルを拡張すればいいだけのこと。

そりゃそうだが、それをどう認識するの?
いやまぁ、(Cならなんでも)書けば書けるけど。

>言語レベルでサポートされたクラスではできない、メソッドの動的な割り付けでさえ

「言語」って、どの?
C++なら確かに不可能だろうけど、どの言語でも不可能という
わけじゃないよね。
作りゃいいんじゃないかと。そういう言語を。

#関係無いけど仕事で使わされてるどっかの独自の変な言語が
#まさにそういう機能を持っているらしい。

>例外処理

ああ。OOPとは直接関係ないけど(相性はよいけどね)、
「例外」もCじゃお手上げなんでなんとかしたい問題の一つですよね。
0062デフォルトの名無しさんNGNG
>「メソッド数を増やしちゃいけない」から行き詰
>まる云々は理由が明確でない

というか、どっかのOS研究している人の
言葉によると、ある意味でOSの研究って
70年代で終わっている(笑)んだそうだから、
メソッド数ふやせなくても、もう、
処理の種類(=Interfaceの数)を
増やす必要がない、と考えても逃げ切れる(笑)
という面が、あったりする…わけでしょうか?

多種多様な概念が登場し得る分野では、
メソッド数増やせないと絶望じゃないかと。
0063デフォルトの名無しさんNGNG
>OpenC++

それはもしかして面白い言語(or処理系)でしょうか?
0064通りすがりNGNG
>>61
Cでは例外処理にsetjmpとlongjmpを使うことになるけど、デストラクタ
チェーンに相当するものを自作しないといけないので結構厳しい。
まあ、C++とかでも、new演算子を使ったりすると同じ問題が発生するから
注意深くやればすむことだけどね。
例外処理事自体はオブジェクト指向と関係ないけど、デストラクタの有無が
その使いやすさにもろに響いてくるのは仕方ない。
0065デフォルトの名無しさんNGNG
>>64
ところでDelphi方式どう思います?
Javaと違ってガベコレ(Destructorが
いつの日か呼ばれる保証)がない一方で
C++と違ってObject変数はPointerオンリーで
Scope抜けても自動的にDestructor呼ばれたりしない。
でも破綻ないプログラムが書ける。

例外のcatch(もといdelphiではexcept/finally)部で
デストラクタ明示的に呼ぶという約束を守るか、
Compositeパターンで親を殺すという約束を守るか、
どっちかによって安全を買ってる。
そんなに悪くない。
0066通りすがりNGNG
>>65
Delphiはよく知らないけど、finallyがあるとかなり楽だね。
Cでそれと同じものを実現するのはかなり難しい。
0067デフォルトの名無しさんNGNG
>>63
http://www.csg.is.titech.ac.jp/~chiba/openc++.html

C++ に Java のリフレクション機能みたいのをつけたやつ、
らしい。処理系ですね。
0068デフォルトの名無しさんNGNG
>>67
おお!どもっす。萌えそう。

むむむ?リフレクション云々というより、これってもしかして、
C++への文法の拡張「を」自作できる仕掛けだったりしますか?
すげぇ…
#間違いだったら晒し。英語力駄目駄目な俺

>reflection conference will be held in September 2001 in Kyoto, Japan.

なんてものまで有るそうで。
行けるものなら行ってみたいなあ。

#チバシゲルという名前見て一瞬吹き出してしまった>アニメ方面
0069デフォルトの名無しさんNGNG
>>32
面白そうだね
PC-98やMSX版が出たらマニアに一気に普及するかも
007032NGNG
>>69

そうか...MSXか。
その手があったか。
0071デフォルトの名無しさんNGNG
WindowsってCで書かれてんの?
0072デフォルトの名無しさんNGNG
>>71
C++
0073デフォルトの名無しさんNGNG
>>72
へぇ〜
有り難う
0074名無しNGNG
>>72
まじで?あれはどう見てもCのインターフェイスだとおもってたけど・・
007573NGNG
>>74
APIはCで書かれてるらしい。
っていうかWindowsの本体ってナニ?
0076デフォルトの名無しさんNGNG
>>75
それは >>4 に書いてある。
007773NGNG
>>76
WIN98の場合は?
007873NGNG
age
0079デフォルトの名無しさんNGNG
>>72
嘘教えるなよ
0080デフォルト名無しさんNGNG
NTのカーネルソース見てみたいなぁ。
Win9xはどうでもいいけど(w
0081>80NGNG
シェアードソースになりました
0082デフォルトの名無しさんNGNG
>>81
まじ?
0083デフォルトの名無しさんNGNG
>>82
一瞬ネタかと思ったが、よく考えたらこれってマヂだよな。
シェアードって既に始まってるんだっけ?
008473NGNG
age
008573NGNG
あげ
0086デフォルトの名無しさんNGNG
2ちゃんOS作って
http://mentai.2ch.net/test/read.cgi?bbs=os&key=983280813
■ このスレッドは過去ログ倉庫に格納されています