OSを書くには?

このエントリーをはてなブックマークに追加
1はてな?
どうすればいいのだろうか。
あと、うまく言えないけど
OSの実体ってナニ?
2はてな?:2001/04/24(火) 21:45
例えば、Windowsの場合とか
3デフォルトの名無しさん:2001/04/24(火) 21:52
人にものを尋ねる前に、
本を読むなりなんなりしろ。
4デフォルトの名無しさん:2001/04/24(火) 22:12
>>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」も
良い。
5デフォルトの名無しさん:2001/04/24(火) 22:32
何も無いトコロから全てを作ってみればよろしい。
LSI(トランジスタでも可)でCPU組んでみな。
もしくはAT互換機で、BIOS を素っ飛ばす!
そこに何かコマンドを入れるにはどうしたらイイ?
それを実現しているのがOS。(低レベルではモニター)
ファイルシステムだWindowだ…ってのは、延長線上にある
便利システムに過ぎない。
6はてな?:2001/04/24(火) 22:35
>>3
すんません。そういう本売ってなくて…。

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

>>5
CPU組むってどういうことですか…?
7紅衛兵:2001/04/24(火) 22:45
>>1

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

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

ちょっと話が変わりますが、マイクロカーネル系 OS の入門書で、
おすすめってあります?
13はてな?:2001/04/25(水) 21:23
>>8
ちょっとお値段が高いですね
14通りすがり:2001/04/25(水) 21:34
>>1
とりあえず8ビット機種あたりのリアルタイムOSでも作ってみるのがいいでしょうね。
メモリだけは十分(といっても数Kバイト)積んでおいた方がいいと思うけど。
15デフォルトの名無しさん:2001/04/25(水) 21:37
リアルタイムOSってなんです?
16デフォルトの名無しさん:2001/04/25(水) 21:42
モニタです。
17デフォルトの名無しさん:2001/04/26(木) 00:15
18デフォルトの名無しさん:2001/04/26(木) 00:57
DOS disk オペレーティング システムから始めるべし
19デフォルトの名無しさん:2001/04/26(木) 01:01
DOSとリアルタイムモニタがOSという同じ言葉で取り扱われると
よく知らないひとは、混乱するだろな
20今更OS書いてモナ〜:2001/04/26(木) 02:05
激暇人な大学生のやる事だね。
21デフォルトの名無しさん:2001/04/26(木) 02:07
日本人が書いたオリジナルOSは、一つも無い。
22>21:2001/04/26(木) 02:14
TRONは?
23デフォルトの名無しさん:2001/04/26(木) 02:20
>>20
OSの意味わかってる?
24デフォルトの名無しさん:2001/04/26(木) 02:20
違う>22
25無党派さん:2001/04/26(木) 04:38
TRONは仕様だよ。
実体じゃないよ。
26デフォルトの名無しさん:2001/04/26(木) 04:42
実体と仮身がなんか。
27デフォルトの名無しさん:2001/04/26(木) 07:27
実装もあるじゃん。BTRONもITRONも。
>>26 実身?
28はてな?:2001/04/26(木) 18:31
頭が痛い
29デフォルトの名無しさん:2001/04/26(木) 18:51
ベーシック・インターフェース・オペレーティング・システム。
BIOS。
30デフォルトの名無しさん:2001/04/26(木) 18:53
>>29
いいネタだ。
31デフォルトの名無しさん:2001/04/26(木) 22:09
マイナーなのも入れたら、OSなんざ
世界中の人間がうじゃうじゃ作っているはずだが。

そのうえ、実装と仕様を分けて考え出したらきりがない。
32デフォルトの名無しさん:2001/04/27(金) 00:21
www.imasy.org/~kawai/

日本を代表するOSに
みんなで育てageようぜ。
33デフォルトの名無しさん:2001/04/27(金) 11:17
Human68kとかPC-Engineなんて純日本製だと思うが(藁
34デフォルトの名無しさん:2001/04/29(日) 00:35
age
35デフォルトの名無しさん:2001/04/29(日) 00:40
なんか書けよ >>34
36デフォルトの名無しさん:2001/04/29(日) 01:20
WIN系はSOSと呼ばれます
37デフォルト名無しさん:2001/04/29(日) 02:15
インターフェイスがC以外の言語で実装されているOSってどれだけあるの?
瀕死のBeOSはC++らしいけど・・・
38>37:2001/04/29(日) 02:26
MSDOSはアセンブラのソフトウェア割り込み
39デフォルトの名無しさん:2001/04/29(日) 02:38
C言語ってオブジェクト指向できないんでしょっていうかクラスがないんでしょ。
それで保守できるわけー?
40デフォルトの名無しさん:2001/04/29(日) 02:42
オブジェクト指向と保守はあまり関係無い。>39
41デフォルトの名無しさん:2001/04/29(日) 03:14
保守は同じ言語をどれだけの人が知ってるかが最重要ですね。
42デフォルトの名無しさん:2001/04/29(日) 03:57
血の巡りの悪い職場環境では、却って保守効率を落としかねないね<OO
43通りすがり:2001/04/29(日) 14:18
>>39
C言語でもオブジェクト指向はできるよ。クラスとかないから少し面倒なだけ。
stdio.hで宣言されたFILE型に関するライブラリはオブジェクト指向そのもの。
44デフォルトの名無しさん:2001/04/29(日) 14:43
>>43
UNIX だと、ファイルシステム (vnode) なんかもバリバリのオブ
ジェクト指向になってますね。最近はデバイスドライバも、そうな
りつつある。
45デフォルトの名無しさん:2001/04/29(日) 18:41
MacOSのToolBoxのインターフェースはObjectPascal用だったらしい。
確かに構造体を関数に与えるという構図を逆転させればOOPだしなあ。
46デフォルトの名無しさん:2001/04/29(日) 19:22
>>37
NeXTは、どの部分がObjectiveCで成ってるんでしたっけ?

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

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

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

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

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

んだ。

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

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

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

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

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

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

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

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

60通りすがり:2001/04/30(月) 21:01
>>56
>多態の初歩っすな。継承は出来るけどメソッド数は
>増やしちゃいけないっていうような世界。となると結構大変だ。
>いずれ行き詰まるね。

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

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

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

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

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

>例外処理

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

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

多種多様な概念が登場し得る分野では、
メソッド数増やせないと絶望じゃないかと。
63デフォルトの名無しさん:2001/04/30(月) 22:43
>OpenC++

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

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

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

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

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

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

#チバシゲルという名前見て一瞬吹き出してしまった>アニメ方面
69デフォルトの名無しさん:2001/05/02(水) 16:50
>>32
面白そうだね
PC-98やMSX版が出たらマニアに一気に普及するかも
7032:2001/05/02(水) 18:40
>>69

そうか...MSXか。
その手があったか。
71デフォルトの名無しさん:2001/05/14(月) 17:06
WindowsってCで書かれてんの?
72デフォルトの名無しさん:2001/05/14(月) 17:23
>>71
C++
73デフォルトの名無しさん:2001/05/14(月) 19:53
>>72
へぇ〜
有り難う
74名無し:2001/05/14(月) 21:01
>>72
まじで?あれはどう見てもCのインターフェイスだとおもってたけど・・
7573:2001/05/15(火) 00:05
>>74
APIはCで書かれてるらしい。
っていうかWindowsの本体ってナニ?
76デフォルトの名無しさん:2001/05/15(火) 00:28
>>75
それは >>4 に書いてある。
7773:2001/05/15(火) 01:53
>>76
WIN98の場合は?
7873:2001/05/15(火) 23:40
age
79デフォルトの名無しさん:2001/05/16(水) 00:39
>>72
嘘教えるなよ
80デフォルト名無しさん:2001/05/16(水) 00:39
NTのカーネルソース見てみたいなぁ。
Win9xはどうでもいいけど(w
81>80:2001/05/16(水) 00:40
シェアードソースになりました
82デフォルトの名無しさん:2001/05/16(水) 01:39
>>81
まじ?
83デフォルトの名無しさん:2001/05/16(水) 02:09
>>82
一瞬ネタかと思ったが、よく考えたらこれってマヂだよな。
シェアードって既に始まってるんだっけ?
8473:2001/05/17(木) 14:11
age
8573:2001/05/18(金) 20:03
あげ
86デフォルトの名無しさん