「カーネル」の版間の差分

削除された内容 追加された内容
m +DEFAULTSORT
タグ: 2017年版ソースエディター
m編集の要約なし
39行目:
[[マルチタスク]]可能なカーネルは、ユーザーから見て実際にそのコンピュータが同時実行できるプロセス数よりも、多数のプロセスが同時並行して実行されているかのように見せかける。一般にシステムが同時並行して実行できるプロセス数は、そのシステムの持つCPU数に等しい([[同時マルチスレッディング]]をサポートしている場合はその限りではない)。
 
[[プリエンプション|プリエンプティブ・マルチタスク]]システムでは、カーネルは各プログラムにタイムスライス(そのプログラムがCPU上で実行される連続時間)を与え、プロセスからプロセスへと高速に切り換えていくので、ユーザーから見ればそれらのプロセスが同時並行して実行されているように見えるのである。カーネルは次に実行すべきプロセスを決定し、タイムスライスの長さを決定する[[スケジューリング]]アルゴリズムを持つ。一般にプロセスには優先度が設定される。カーネルはそれらのプロセス間の通信手段も提供する。これは[[プロセス間通信]] (IPC) と呼ばれ、[[パイプ (コンピュータ)|パイプ]]、[[共有メモリ]]、[[メッセージ (コンピュータ)|メッセージ]]、[[遠隔手続き呼出し|RPC]]、[[割り込み (コンピュータ)|ソフトウェア割り込み]]などがある。
 
他に[[マルチタスク|協調型マルチタスク]]もあり、各プロセスは自らカーネルに制御を戻すまで割り込まれずに実行を続けることができる。制御をカーネルに戻すことを "yielding" と呼び、プロセス間通信の際や何らかのイベントを待つ際に行われ、そのときにカーネルが別のプロセスを動作させる。古い [[Microsoft Windows|Windows]] や [[Mac OS]] はこの方式だったが、コンピュータの性能向上に伴ってプリエンプティブ方式に切り換えた<ref>http://www.answers.com/topic/operating-system</ref>。
126行目:
 
=== プロセスの協調作動 ===
[[エドガー・ダイクストラ]]は論理的観点から、[[セマフォ|バイナリセマフォ]]における[[不可分操作|不可分]]な[[ロック (情報工学)|ロック]]とアンロック操作だけで、プロセス間の任意の協調作動を実現できることを証明した<ref name="Dijkstra65">Dijkstra, E. W. ''Cooperating Sequential Processes''. Math. Dep., Technological U., Eindhoven, Sept. 1965.</ref>。しかしそのような方式は一般に安全性や効率性が欠如しており、[[メッセージ (コンピュータ)|メッセージパッシング]]方式の方が柔軟性が高い<ref name="Hansen70">{{Harvnb|Hansen|1970|pp=238–241}}</ref>。他の方式もいくつかあり、現代のカーネルでは[[共有メモリ]]や[[遠隔手続き呼出し|RPC]]などのシステムをサポートしていることが多い。
 
=== 入出力デバイス管理 ===