カーネル
[Wikipedia|▼Menu]

カーネルの機能

カーネルの仕事はコンピュータのリソースを管理し、他のプログラムがそれらのリソースを使って動作できるようにすることである[1]。典型的なリソースとしては以下のものがある。

CPU(プロセッサ)。コンピュータの中心となる部分で、プログラムの実行を分担する。カーネルは、多数のプログラムの中からプロセッサ(群)を割り当てるべきものを選択する。基本的にプロセッサは一度に1つのプロセスしか実行できない(複数実行できる場合、カーネルは複数のプロセッサとして認識する)。

メモリ。メモリにはプログラムとデータの両方が格納される[4][注釈 2]。一般にプログラムを実行するには、プログラムとデータの両方がメモリ上になければならない。複数のプログラムがメモリへのアクセスを要求すると、実際に搭載している以上のメモリが必要とされる場合がある。カーネルは各プロセスにメモリを割り当て、全体としてメモリが不足した場合の対処を決定する。

コンピュータには何らかの入出力デバイスがある(キーボードHDDUSBなど)。カーネルはアプリケーションから入出力要求を受け付け、適切なデバイス(あるいはデバイスの一部、たとえばファイルウィンドウなど)に対して入出力を実行し、デバイスを使用するための便利な方法を提供する(一般に、アプリケーションがデバイスの実装の詳細を知らなくてもすむように抽象化する)[注釈 3]

リソース管理に必要な重要な観点は、実行領域(アドレス空間)の定義とその領域内のリソースへのアクセスを調停する保護機構である[1]

また、カーネルは一般にプロセス同士の同期と通信の手段も提供しており、プロセス間通信 (IPC) と呼ぶ。

カーネルは自前でそれらの機能を実装していることもあるし、何らかのプロセスに委任していることもあるが、後者の場合はプロセス間で機能へのアクセスを可能にするIPCを提供する必要がある。

最後に、カーネルはそれら機能群へのアクセスを要求する手段をプログラムに提供しなければならない。
プロセス管理詳細は「プロセス管理」を参照

カーネルの主な仕事はアプリケーションの実行を許可し、ハードウェア抽象化などの機能によってそれをサポートすることである。

プロセスは、アプリケーションがアクセスできるメモリの範囲を定義する[5]。カーネルのプロセス管理は、ハードウェアの持つメモリ保護機構を考慮しなければならない[6]

カーネルはアプリケーションを実行するためアドレス空間を設定し、アプリケーションのコードを含むファイルをメモリにロードし、プログラムのためのコールスタックを設定し、そのプログラムの所定の位置に制御をわたすことで実行を開始する[7]

マルチタスク可能なカーネルは、ユーザーから見て実際にそのコンピュータが同時実行できるプロセス数よりも、多数のプロセスが同時並行して実行されているかのようにみせかける。一般にシステムが同時並行して実行できるプロセス数は、そのシステムの持つCPU数に等しい(同時マルチスレッディングをサポートしている場合はそのかぎりではない)。

プリエンプティブ・マルチタスクシステムでは、カーネルは各プログラムにタイムスライス(そのプログラムがCPU上で実行される連続時間)を与え、プロセスからプロセスへと高速に切り換えていくので、ユーザーから見ればそれらのプロセスが同時並行して実行されているように見えるのである。カーネルは次に実行すべきプロセスを決定し、タイムスライスの長さを決定するスケジューリングアルゴリズムを持つ。一般にプロセスには優先度が設定される。カーネルはそれらのプロセス間の通信手段も提供する。これはプロセス間通信 (IPC) と呼ばれ、パイプ共有メモリメッセージRPCソフトウェア割り込みなどがある。

ほかに協調型マルチタスクもあり、各プロセスは自らカーネルに制御を戻すまで割り込まれずに実行を続けることができる。制御をカーネルに戻すことを "yielding" と呼び、プロセス間通信の際や何らかのイベントを待つ際に行われ、そのときにカーネルが別のプロセスを動作させる。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:119 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef