忍者ブログ
考えるLINKは優良なサイトを紹介しています。
[14]  [13]  [12]  [11]  [10]  [9]  [8]  [7]  [6]  [5]  [4
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

まとめ

下記既読分


カーネルの主な仕事はアプリケーションの実行を許可し、ハードウェア抽象化などの機能によってそれをサポートすることである。
アプリケーションを実行するため、カーネルはアプリケーションのコードを含むファイルをメモリにロードし(場合によってはそのための仮想空間を設定する)、プログラムのためのコールスタックを設定し、そのプログラムの所定の位置に制御を渡すことで実行を開始する。
マルチタスク可能なカーネルは、ユーザーから見て実際にそのコンピュータが同時実行できるプロセス数よりも、多数のプロセスが同時並行して実行されているかのように見せかける。
一般にシステムが同時並行して実行できるプロセス数は、そのシステムの持つCPU数に等しい。
マルチタスクシステムでは、カーネルは各プログラムにタイムスライス(そのプログラムがCPU上で実行される連続時間)を与え、プロセスからプロセスへと高速に切り換えていくので、ユーザーから見ればそれらのプロセスが同時並行して実行されているように見えるのである。
カーネルは次に実行すべきプロセスを決定し、タイムスライスの長さを決定するスケジューリングアルゴリズムを持つ。
一般にプロセスには優先度が設定される。
カーネルはそれらのプロセス間の通信手段も提供する。
これはプロセス間通信(IPC)と呼ばれ、パイプ、共有メモリ、ソフトウェア割り込みなどがある。
オペレーティングシステムは、マルチプロセッシング(SMPやNUMA)をサポートすることもある。
この場合、複数のプログラムやスレッドが複数のプロセッサ上で動作する。
そのようなシステムでカーネルを動作させる場合、「リエントラント(再入可能)」あるいは「割り込み可能」になるよう大幅な改造が必要となる。
これはつまり、何か処理をしている最中に他からも要求を受け付けるということである。
この改造ができれば、異なるプロセッサ上で動作するプログラムが同時にカーネルを呼び出しても大丈夫になる。
カーネルは複数のプロセッサからのメモリアクセスを同期させる方法も提供しなければならない。

これはメモリ管理とプロセス管理にまたがる問題である。



PR
忍者ブログ [PR]