差分

移動先: 案内検索

カーネルの構造と機能

1,015 バイト除去, 2020年9月20日 (日) 16:30
/* カーネルを機能から見てみる */  言葉のゆらぎを修正
=== カーネル空間とユーザ空間 ===
[[オペレーティングシステムとは何か#何をさしてオペレーティングシステムと呼ぶのか|何をさしてオペレーティングシステムと呼ぶのか]]の議論でもでも少し取り上げましたが、の議論でも少し取り上げましたが、
いろいろな切口でカーネルを眺めることはできます。ここでは、最初はわかりやすいであろう「プログラムが動作する」という切口から考えてみます。
ユーザ空間は、ユーザに割り当てられる計算リソースで、実行しているプログラムが直接アクセス可能なリソースです。
一方、カーネル空間はユーザが直接アクセスできない空間です。システムコール(UNIXのカーネルAPI) を呼ぶことや、
あるいは/sys/以下のファイルのようにファイルの形でカーネルへのインタフェースを介してカーネルの機能を利用できる形にしています。ユーザからは直接カーネル空間を操作することはできません。Kernel(核)という言葉は元々は堅い殻に守られた種の意味ですが、この意味のようにユーザ側から見ると、カーネル空間は堅い殻に守られたオペレーティングシステム内部というように見えます。以下のファイルのようにファイルの形でカーネルへのインタフェースを介してカーネルの機能を利用できる形にしています。ユーザからは直接カーネル空間を操作することはできません。Kernel(核)という言葉は元々は堅い殻に守られた[https://en.wikipedia.org/wiki/Drupe ''種の意味'']ですが、この意味のようにユーザ側から見ると、カーネル空間は堅い殻に守られたオペレーティングシステム内部というように見えます。
[[File:User-kernel-mode-2.png|thumb|left|300px|write(2)実行時のタイムライン]]
システムコール
<ref>
システムコールの実装をチェックするのに便利なサイト httphttps://syscallsfilippo.kernelgrok.comio/linux-syscall-table/
</ref>はたくさんあります。どのようなシステムコールがあるのかを調べるにはオンラインマニュアルをチェックするのがいいでしょう。システムコールはセクション2
<ref>
* プロセス管理
** プロセス生成・消滅
** スケジュラスケジューラ
とはオペレーティングシステム上で動いている実行実体です。
ユーザーは意識することなくプログラムが動いている、程度の認識しか持ちませんが、プロセスは実行を行うための計算資源を管理しています。
[[プロセス管理]]とは、プロセスの生成と消滅についての処理と、そのプロセスのスケジュールを管理するスケジュラーの部分です。利用しているCPU数と比べプロセス数の方がはるかに多いわけですから、プロセスに上手に計算資源を割り振ってあげなければなりません。とは、プロセスの生成と消滅についての処理と、そのプロセスのスケジュールを管理するスケジューラの部分です。利用しているCPU数と比べプロセス数の方がはるかに多いわけですから、プロセスに上手に計算資源を割り振ってあげなければなりません。 
ここではプロセスという言葉をつかっていますが、タスクやスレッドという言葉もあります。ある処理の計算資源と処理の流れをすべて含めて呼ぶ時はタスクです。計算資源は共有し、さらにCPU資源を個別に割り当てられている複数あるいは単数の処理の流れのことをスレッドと呼びます。ですから1つのタスクで複数のスレッドを持つことができます。1つのタスクに対し、1つのスレッドだけの場合、UNIXの伝統的なプロセスと同等であり、呼び方もプロセスと呼んでかまいません。
UNIXは最初からスレッドを持っていたわけではありません。80年代に入ってから色々な組織がスレッドの実装を試みました。Brown Univ.のブラウンスレッド、サンマイクロシステムズのLWP (Lightweiht Process)、DECのCMA スレッド、CMUのCスレッドパッケージがあります。各々互換性はありません。紆余曲折あり、現在ではPOSIX仕様のスレッドであるpthreads(7)が主流になっています。
===== スケジュリングの種類 スケジューリングの種類 =====
プロセスのスケジュリングでは、Linuxの場合、 プロセスのスケジューリングでは、Linuxの場合、 システムコールsched_setscheduler(2)を使い、プロセスのスケジュリングの方法を指定することができます。を使い、プロセスのスケジューリングの方法を指定することができます。
* SCHED_FIFO: First-In-First-Out
FIFOは、そのプロセスがCPU資源を占有する方式です。CPU資源を占有といっても、一般ユーザで動作するよりもさらに、優先度よりも高い優先度で動くプロセスあると、そちらの方を優先します。ラウンドロビンは順繰りにプロセスが処理されます。デフォルトでは、プロセスの動作時間を見て、優先順位を計算し、その優先順位が高い方から処理するようになっています。このスケジュリングの処理アルゴリズムはLinux FIFOは、そのプロセスがCPU資源を占有する方式です。CPU資源を占有といっても、一般ユーザで動作するよりもさらに、優先度よりも高い優先度で動くプロセスあると、そちらの方を優先します。ラウンドロビンは順繰りにプロセスが処理されます。デフォルトでは、プロセスの動作時間を見て、優先順位を計算し、その優先順位が高い方から処理するようになっています。このスケジューリングの処理アルゴリズムはLinux 2.6 では入れ換えれており処理効率がよくなっています。
2.6.12ではあたらしくSCHED_BATCHのスケジュールが加わり、
2.6.23ではCFS( Completely Fair Scheduler )スケジューラ
</ref>
が使えるようになりました。
オペレーティングシステムの心臓部ともいえるスケジュラー部分でも進化は続いています。オペレーティングシステムの心臓部ともいえるスケジューラ部分でも進化は続いています。
==== ファイルシステム ====
----
[[目次]]へ
 
このページへのショートURL: http://uc2.h2np.net/i/1a.html