カーネルについて学び始めた(4日目)
こんにちは、秀才ハッカーを目指している揚げパンです。
はじめに
カーネルについての勉強もなんとか三日坊主を逃れました。
これからも継続して続けていければなと思います。
第2部(2.1)
第2部ではプロセスについてです。
プロセスってなんぞや
カーネルの中の概念の1つで、実行中のプログラムを管理するのに用いられます。1つの実行プログラムに1つのプロセスが対応しています。
プロセスは一意のプロセスIDをもち、IDにより判別されるものであるので、同じプログラムを実行するプロセスがたくさん存在する場合には、カーネルはそれぞれ違うプロセスとして認識するらしいです。
プロセスの複数処理
UNIX V6では、複数のユーザーが同時にシステムを使用できるのである瞬間に複数のプロセスが存在することがありえます。
だけど、プログラムを実際に処理するのはCPUのため、すべてのプロセスが同時に処理されているわけではなく、1つずつしか処理できません。(処理されていないのは待機状態)
したっけどうやって複数のプロセスを処理してるの?
ではどのようにプロセスを複数同時どうやって処理してるのってなったと思います。
結論から言うと同時に処理をすることはできません。
しかし、カーネルは処理を行うプロセスを瞬時に切り替えることで見かけ上は複数のプログラムを並列処理しているようにできます。
そのようなことをTSS(タイムシェアリングシステム)というらしいです。
プロセスの実行状態
ここでは、プロセスの実行状態は大きく分けると大きく分けると実行できる状態のプロセスと他のプロセスの終了を待って処理を継続できない待機状態のプロセスにわけらるということが書いてありました。
ユーザーモードとカーネルモード
ここでは、ユーザーモードとカーネルモードとの間でモードを切り替えるとができて、それぞれのモードで仮想アドレスにマッピングされるメモリ領域が違うんだよってお話と、カーネルの機能を実装するにはシステムコールを発行しなくてはいけないよってことについて詳しく書いてありました。
詳しい内容を知りたい方は本をしっかり読んでみてください。
スワッピング
プロセス数が増えるとメモリ容量が足りなくなってくるので、休眠状態にあるプロセスや、重要性の低いプロセスをメモリからスワップ領域に避難して(スワップアウト)、スワップアウトされたプロセスが実行可能状態になったプロセスをメモリ領域に復帰する(スワップイン)が行われます。
この処理をまとめてスワッピングと言うらしいです。
最後に
プロセスについてを自分なりになかなか理解できたので良かったなと思います。
これからも継続してカーネルについての理解を深めていきたいと思います。
最近は、この本を完読した頃にはすごい人(なんかとても抽象的ですねw)になれてるかなと思うことでこの本のモチベーションとしています。
ではではこのへんで