出産前後の痔にはご注意!

Linuxカーネルは、ほとんどC言語で書かれているということですが、そのプログラムは誰が(どういった仕組み)で動かしているのでしょうか。

自分で作ったプログラムならOSの上で動くのは、なんとなくイメージできるのですが…。

どなたか、初心者にも分かる言葉で教えて頂けないでしょうか。宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

(以下の説明では、初心者の方にわかりやすいように、あえて単純な表現を使ったり、技術的な詳細を省略したりしていますので、ご了承ください。



PCの電源が入ると、BIOS が GRUB や LILO などをロードし、続いて、これらのカーネルローダーが Linux カーネルをメモリにロードします。

その後、カーネルはメモリ上に存在し、Linux を終了するまでずっと動き続けます。

したがって、「誰かが動かしている」のではなく「自分で動いている」という表現のほうがわかりやすいと思います。

カーネルは確かにC言語で書かれてはいますが、普通のプログラム(アプリケーションプログラムまたはユーザプログラム)とは違います。

普通のプログラムはカーネルがメモリ上にロードして実行することになりますが、カーネルの場合はカーネルローダーがメモリ上にロードして実行するわけです。

では、動き続けているカーネルが何をしているのかというと、基本的には何かの事象が発生するのを待っているのです。

「何かの事象」とは、具体的には、ハードウエア割り込みやシステムコールなどですが、カーネルが自分自身の実行のために待っている事象と、アプリケーションプログラムにサービスを行うために待っている事象とがあります。

アプリケーションプログラムと直接関係があるのはシステムコールです。

例えば、あなたが作成したプログラム(以下、ユーザプログラム)が printf() ライブラリ関数を使ったとしましょう。printf() は、最終的には write() システムコールを呼び出します。

write() を呼び出すまではユーザプログラムの実行(ユーザプログラムが実行されている)ですが、ユーザプログラムが write() を呼び出したら、そのときがカーネルの出番です。

カーネルはユーザプログラムを中断させ、ユーザプログラムがリクエストしたwrite() システムコールの処理を(ユーザプログラムにかわって)実行します。このときはカーネルが動いているのです。

write() の実行が完了すると、カーネルは実行結果をユーザプログラムに返し、ユーザプログラムを再開します。

ユーザプログラムは write() の続き(write() の次の処理)を実行するというわけです。

まとめると、カーネルはPCの起動時にロード、実行開始され、その後はずっと動いている。カーネルは、必要なときにはいつでも実行できる状態で待機しており、何らかの事象が発生すると対応処理を実行する。ということです。
    • good
    • 0

(Windowsを念頭にしての解説ですが)基本的なPCの起動の流れは参考URLにあるページでも参考にしてください。



最終的には、MBRもしくはブートセクタにインストールされたブートローダ(LILO/GRUB等)によってカーネルは起動されます。

参考URL:http://homepage2.nifty.com/winfaq/howtoboot.html
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング