No.1
- 回答日時:
(Windowsを念頭にしての解説ですが)基本的なPCの起動の流れは参考URLにあるページでも参考にしてください。
最終的には、MBRもしくはブートセクタにインストールされたブートローダ(LILO/GRUB等)によってカーネルは起動されます。
参考URL:http://homepage2.nifty.com/winfaq/howtoboot.html
No.2ベストアンサー
- 回答日時:
(以下の説明では、初心者の方にわかりやすいように、あえて単純な表現を使ったり、技術的な詳細を省略したりしていますので、ご了承ください。
)PCの電源が入ると、BIOS が GRUB や LILO などをロードし、続いて、これらのカーネルローダーが Linux カーネルをメモリにロードします。
その後、カーネルはメモリ上に存在し、Linux を終了するまでずっと動き続けます。
したがって、「誰かが動かしている」のではなく「自分で動いている」という表現のほうがわかりやすいと思います。
カーネルは確かにC言語で書かれてはいますが、普通のプログラム(アプリケーションプログラムまたはユーザプログラム)とは違います。
普通のプログラムはカーネルがメモリ上にロードして実行することになりますが、カーネルの場合はカーネルローダーがメモリ上にロードして実行するわけです。
では、動き続けているカーネルが何をしているのかというと、基本的には何かの事象が発生するのを待っているのです。
「何かの事象」とは、具体的には、ハードウエア割り込みやシステムコールなどですが、カーネルが自分自身の実行のために待っている事象と、アプリケーションプログラムにサービスを行うために待っている事象とがあります。
アプリケーションプログラムと直接関係があるのはシステムコールです。
例えば、あなたが作成したプログラム(以下、ユーザプログラム)が printf() ライブラリ関数を使ったとしましょう。printf() は、最終的には write() システムコールを呼び出します。
write() を呼び出すまではユーザプログラムの実行(ユーザプログラムが実行されている)ですが、ユーザプログラムが write() を呼び出したら、そのときがカーネルの出番です。
カーネルはユーザプログラムを中断させ、ユーザプログラムがリクエストしたwrite() システムコールの処理を(ユーザプログラムにかわって)実行します。このときはカーネルが動いているのです。
write() の実行が完了すると、カーネルは実行結果をユーザプログラムに返し、ユーザプログラムを再開します。
ユーザプログラムは write() の続き(write() の次の処理)を実行するというわけです。
まとめると、カーネルはPCの起動時にロード、実行開始され、その後はずっと動いている。カーネルは、必要なときにはいつでも実行できる状態で待機しており、何らかの事象が発生すると対応処理を実行する。ということです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- システム CPUの問題について 2 2022/07/09 12:04
- C言語・C++・C# linux C言語について ./ファイル名 入力値 入力値が表示 という風に実行と入力を同時にしたい 3 2022/10/17 16:57
- その他(プログラミング・Web制作) PythonのプログラムのDirに関する質問です 3 2022/12/04 17:01
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- 大学受験 AO、総合型選抜出願時に使用する活動実績報告書について 4 2022/06/27 01:21
- C言語・C++・C# C言語で移動平均のプログラムを作りたいのですが、数値をファイルから取ってきて計算をするプログラムはど 1 2022/09/29 01:21
- オープンソース IT用語、ソースとオブジェクト、改変と翻訳と翻案の違いなど どのようにりかいすればよいのですか 1 2022/09/09 10:02
- UNIX・Linux linux 初心者です。コマンドラインでのインストールとアップデート方法を教えてください。 3 2022/04/04 00:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
KNOPPIXが起動しない場合の対処...
-
SolarisとLinuxの違い
-
/dev/nvme0n1p2 clean と表示さ...
-
パーティション CentOS6
-
UNIXとBSDとLinuxの違いを小学...
-
パフォーマンスモニタの%Proces...
-
RedHat9とディレクトリ構成が同...
-
『カーネルとの通信中にエラー...
-
レッドハットのバージョン確認方法
-
ハードディスクへのアクセスの頻度
-
プラウザを閉じてもプロセスのi...
-
OSについて調べています
-
カーネルバッファとは何でしょうか
-
Lubuntu のインストールに失敗...
-
Linux」は有料のOSでUNIXは無料...
-
自分は、パソコンにAPEXを入れ...
-
パソコンでゲームをプレイしよ...
-
ubuntu 初期化について
-
1枚でも「1枚”組”」なのですか?
-
パッケージとRPMについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パフォーマンスモニタの%Proces...
-
最近、よくOpenWall という言葉...
-
/dev/nvme0n1p2 clean と表示さ...
-
ブルースクリーンの原因が「ntk...
-
割り込み不可能?なプロセスを...
-
魔改造版Windows 2000をインス...
-
romfsってなんですか?
-
どうしてwindowsはMacと比べ動...
-
mac OSは、何のプログラミング...
-
macでカーネルのディレクトリは...
-
カーネルアップグレード後、una...
-
『カーネルとの通信中にエラー...
-
UNIXとBSDとLinuxの違いを小学...
-
Linux 32Bitと64Bitのメモリー...
-
Dockerコンテナ(centos7.9)の...
-
エラー”Illegal seek”はどんな...
-
カーネルスタック不足について
-
カーネルバッファとは何でしょうか
-
マザーボード用ドライバ
-
rdevコマンドについて
おすすめ情報