• ベストアンサー

unixはC言語で書かれている?不思議?

unix、linuxはC言語で書かれている、と聞いたのですが、不思議なことがあります。 そもそもC言語を書くためにはviとか必要ですしコンパイルするにもccとかgccとか必要ですよね? viとかccとかを使うには、また、unixが必要な気がします。どうやってunixを作ることができたのでしょうか? ニワトリと卵みたいですごく不思議なのですが・・ linuxのところで http://virus.okwave.jp/kotaeru.php3?q=2246024 のような質問をしているうちに不思議に思ってきました。

質問者が選んだベストアンサー

  • ベストアンサー
  • jikankou
  • ベストアンサー率38% (42/108)
回答No.3

最初に搭載するプロセッサに合ったアセンブラやそれよりも低級言語でC言語のコンパイラをまず書きます。それからOSを構築していったものと考えられます。私も10年ぐらい前にUnixを使った頃あなたと同じような疑問を持ちましたが、良く分かっている人間からそういう答えをもらいました。確かこのようなことをいったのを聞いたことがあります。 また、現在の例を考えてもらえばわかるのですが、例えばあるコード(ゲーム機など)のソフトなどを開発するためにはWindows上で開発しますよね?  Source code -> Target machine code    compile  ある機械にあったコンパイラを作りそれでシステムを構築するわけです。つまり違うOSでターゲットとなるマシンにあったコンパイラを書き OSやそのAPIを書きアプリケーションを書いていく感じです。どちらも似たような答えですが、いずれかのうちの一つでしょう。他のOSでコンパイラを書き構築したかマシン語をベースにそのマシーンで開発していったかのいずれかと思います。

white-tiger
質問者

お礼

ありがとうございました。 2つめは私も最初思ったのですが、これだと、究極的にはニワトリと卵の問題が解決しないので、どうかなと思ったのです。 1つめはなるほどと思います。

その他の回答 (4)

  • rancers5
  • ベストアンサー率6% (3/43)
回答No.5

この世にはOSが無いマシンが存在します。OSと同等のコードを自分で組み上げるのです。 といっても、実行コードは別環境で作り上げるのですが。 何もないので機械語で組み、ROMに焼いたりして実行させます。 ツールの類はその後に作ったりするんですよ。 ちなみにC言語はB言語で作られたシステムで開発されました。 まあコンピュータの歴史を調べた方が早い気もしますが。

white-tiger
質問者

お礼

#2さんと同じように考えればよいのですね。 ありがとうございました。

white-tiger
質問者

補足

機械語で組まれている、とすれば、 「unixがC言語で書かれている」 というのはどういうことなのでしょうか?

noname#38757
noname#38757
回答No.4

別に不思議でもなんでもないでしょ PS2のゲームとかの開発、まさかPS2でやっていると思っていないでしょうね(^_^; それと一緒です。 開発環境は別の環境です。 それにviってどういう物か御存知? 単なるテキストエディタですよ。 それぐらいならば、Linuxにもありますよ。 コンパイラもそうです。 Unix自体も別のシステム上で構築されただけです。

参考URL:
http://ja.wikipedia.org/wiki/UNIX
white-tiger
質問者

お礼

#2,#5さんによると、 別環境で開発された、という訳ではないようです。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

Cコンパイラーをアセンブラー(又は機械語)で書いたと考えれば判りやすいでしょう。 そのCコンパイラーを使ってUNIXを書くのです。 実際には程度の低いコンパイラーを先に作ってこれを使ってCコンパイラーを作り そのCコンパイラーを使ってUNIXを書く方法もあります。 後者の方法はコンパイラー・コンパイラーと呼ばれる技術分野です。 文字通りコンパイラーを作るためのコンパイラーです。 余談ですが吊り橋にロープを渡す場合、まず細いワイヤーをヘリで渡し 段々太いワイヤーに取り替えて最後にロープを渡すのに似ています。

white-tiger
質問者

お礼

分かりやすい説明をありがとうございます余す。 ということは、C言語だけではなく、やはりCより低級な言語も必要だったと言うことですね。

  • linus1974
  • ベストアンサー率19% (71/370)
回答No.1

最初は他のプラットフォームで書いていた んだと思います。UNIX以前にもOSは ありましたから。

white-tiger
質問者

お礼

例えば、linuxの場合の他のプラットホームというのはなんだったのでしょうか?ライナスさんが使っていたのは。。 1台のパソコンだけで全部は作れなかったと言うことでしょうか。(仮想マシンは別にして)

関連するQ&A

  • LinuxとC言語

    Linux初心者です。LinuxとC言語についていくつか質問 させていただきます。 1.どんなリナックスにもgccは入っているのでしょうか? 2.Linuxには色んな種類のものがありますが、 全てのLinuxでコンパイルや動作は可能でしょうか? 宜しくお願いします。

  • C言語で作ったらWindowsでもMacでもLinuxでも動くんですか?

    Linuxでgccを使ってC言語を勉強してます。 Linuxのgccでコンパイルして作ったプログラムはWindowsでもMacでも動くんでしょうか? 逆にWindowsで作ったのはとか、Macで作ったのは他のOSで動くんだろうかと疑問で・・・。 教えてください!!

  • ccとgcc

    ccとgcc とある業務の必要スキルに C言語(cc , makefile含む) とあるのですが、 ccというのはどこまでできればいいのでしょう? UNIXだとたいていgccとの事ですが、 gccでコマンドを付けつつコンパイルできる程度でいいのでしょうか? 管理なのであまり技術的なことはいらないと思うのですが、 こんなのつかうよ、というお話が頂ければ幸いです。

  • C言語のmakefileについて

    C言語のmakefileについて質問です。 例えば下記makefileでは、“CC”というマクロを“gcc”という文字列で再定義しています。 しかし中には(1)『CC = gcc』という定義なしでいきなり(2)『$(CC) -o hello $(objs)』 でコンパイルしているmakefileを見るのですが、その場合(2)は何でコンパイルされているのでしょうか。($(CC)の中身はCC??GCC?ACC??) ※下記ターゲット名等はサンプルです。 ------------------ # Makefile objs = hello.o edajima.o CC = gcc hello: $(objs) $(CC) -o hello $(objs) .PHONY: clean clean: $(RM) hello $(objs)

  • unix-c と linux-c の違いは?

    以前unix-cの仕事をしていましたが今度linux-cの仕事をすることに なりました。 以前:unix(solaris)C言語 今回:linux(redhat)C言語 この2つの大きいな違い等がありましたらおしえてください。

  • c言語について、質問します。

    c言語について、質問します。 環境設定を行いましたが、 コンパイルが何度、やってもできません。 c:?source>gcc -o sample sample.c と入力すると、 gcc:installation problem, cannot exec cc1':No such file or directory とでます。 成功したら、このような文字はでないとかいてあるのですが、どうすればよろしいですか?

  • LinuxにてC言語を作成が、変換が出来ません。

    LinuxにてC言語を作成が、変換が出来ません。 gccにてコンパイルを行っていますが、半角カナから全角カナの変換が上手く出来ません。 StrConvみたいな関数があれば教えて下さい。 宜しくお願いします。

  • c言語のコンパイルについて教えてください。

    Unixとwindows98を使用しています。 #include<stdio.h> #include<math.h>    (以下 省略)  と、c言語のプログラムをして、コンパイルを、gcc ファイル名.c  と するのでしょうか。 cl ファイル名 -lm   とするのでしょうか。  どうすれば良いか、教えてください。 説明が下手で申し訳ございません。 お答えを待ってます。  

  • Cygwinのエディタについて

    Cygwinのエディタのviで、c言語のプログラムを作成し、gccでコンパイルすると、a.exeというファイルができます。私は今まで、Linuxのviでc言語のプログラムを実行するときは、a.outを使っていました。 Cygwinのviでもa.outを使うにはどう設定すればよいのでしょうか?

  • Linuxで、標準Cライブラリが読み込まれず、C言語プログラミングができません・・・

    僕の問題はタイトルの通りで、標準Cライブラリが読み込まれていないようで、C言語プログラミングができません。 ubuntuのオフィシャルから日本語ローカライズドDesktopCDをダウンロードして、空のHDDにインストールしました。 ですが、gnome-terminalからccコマンドでプログラムをコンパイルしても、標準Cライブラリにあるはずの<stdio.h>が認識されず、続くprinft関数も読んでくれません。 これはどうしてでしょうか?LinuxはデフォルトでCやらJAVAやらのプログラミングの環境が整っているものだと思っていたので、戸惑っています。何か、セットアップが必要なのでしょうか。 ちなみに、gccでも、標準ライブラリは読み込まれませんでした。