Category 2_4. カーネル 〜プロセス管理 (スケジューラ)〜

「管理の意味だって?

それはコンピュータ用語の意味をあやふやに説明する時に多用される

非常に都合のいい言葉だよ」

〜 クプ・ド・ンドブヴァ 〜

ああぁぁっ!クッソォ!

あれもこれも言われたってわからねえよっ!あのクソ店長めっ!

なんすかなんすか、ヒゲ先輩・・・いきなり。

また仕事でいろいろ言われたんすか?

穏やかじゃないですね・・・。

 

いそがしいってぇのに!あれもこれも沢山仕事押し付けやがって!

俺の体は一個しかねえんだよっ!そんなにいっぺんに処理できっか!

ははぁ、職場でコキ使われてるんすねぇ・・・。

はやく転職したほうがいいんじゃないっすか?

あ、面接におちっぱなしなんでしたっけ・・・。

それは難儀でしたねぇ。

でもヒゲ先輩だって頭いいんだからもっと沢山仕事回せるんじゃないですか?

 

お、おう・・・照れるじゃねえか、おやじ。

ま、まあな・・・普段だったら大した仕事じゃないんだけど、あの店長いつもタイミングが悪いんだよっ!

どれからやっていいか分からなくなるってぇの!

先輩も苦労してるんすねぇ。

仕事依頼するほうがしっかりと管理してくれないと、それをこなす側からするとたまったもんじゃないですね。

パフォーマンスをフルに発揮するには、そういう管理能力がモノを言いますからね。

 

俺はパソコンじゃないんだってぇの!
いっそのこと、体を電脳化しちゃえばいいんじゃないっすか?
おや、パソコンのCPUだって一つずつしか処理できないですよ?

仕事を効率よく割り振るプロセス管理

そんな事ないだろ、パソコンは沢山の事を一度にやるじゃねぇか。

そうっすよ、オイラだってこの間音楽を聴きながらインターネットやってたっすよ?
いいところに気がつきましたね。いい機会なので今日は「プロセス管理」についてお話をしましょうか。

 

プロセス管理?前回言ってたカーネルの基本機能って奴か。

プロセス管理っていうのが、そのパソコンが沢山仕事をするっていう奴と関係あるんすか?

大いにありますよ。まさに先程ヒゲ先輩が言ってた店長に仕事を任されるっていうのがいわゆる、「プロセス管理」という奴です。

言えばヒゲ先輩はCPUに当たりますかね。

 

ほほぉ・・・俺がCPUか。

で、店長がカーネルのプロセス管理・・・。

プロセス管理っていうのは、CPUに仕事を与えるって事なんすかね。

簡単に言うとそういう事になりますね。

プロセス管理では主に、

 ・CPUにプロセス割り当てる「スケジューラ

 ・プロセスライフサイクルのステータスを管理する「プロセス構造体

 ・資源を有効活用する「スレッド

があります。


プロセスとは

スケジューラとプロセス構造体だな・・・よし。

で、それらは具体的にどんな事をやってるんだ?

どちらも難しそうっすね。

まず「プロセス」とは何かをお話しましょう。

プロセスとは直訳すると「処理」や「工程」といった意味になりますが、カーネルの場合前者の処理という意味がしっくり来るかと思います。

つまりユーザからお願いされた「メール」や「ワープロ」といった処理そのもの一つ一つをプロセスだと思ってください。

 

あぁ、それそれ。音楽を再生するのも、インターネットを見るのも、それぞれプロセスって事だろ?

つまり、スケジューラっていうのは、それら一つ一つのプロセスをCPUにお願いするって事っすよね。

説明が省けて助かります、その通りです。

ですが、それだけなら馬鹿でも出来ます。

頭のいいプロセス管理と頭の悪いプロセス管理というのがやはり有るわけで、ただ単にCPUにお願いするだけじゃないんです。


マルチタスク

あれか、さっき言ってた店長の事だろ?頭の悪いプロセス管理ってぇのは。

店長にそうと腹を立ててるみたいっすね・・・。

まぁ話を聞く限りでは・・・そうなるかと思いますが。

お二人がいってたように、現在のパソコンは複数のプロセスを同時に扱う事が出来ます。

これを「マルチタスク」といいます。

 

プロセスなのに、タスク・・・?マルチプロセスじゃなくて、タスク?

理不尽っすね・・・。

タスクとはユーザ側からみたプロセスの事だと思ってください。

マルチプロセス」という似た言葉もありますが、全く別物です。

プロセスというのはCPUレベルで扱う処理単位を指します。

 

なんだユーザ側からみたとか・・・さっぱりわからん。

CPUレベルで扱うとか・・・日本語で話してほしいっす。

CPUは沢山の処理を並列して行うように思えますが、実際は一つのプロセスしか扱えないのです。

CPUの構造で勉強したでしょ?

 

確かに・・・演算装置が一度に計算するのは一つの命令だけだったな。

でも、音楽を聴きながらインターネットとか出来てましたよ?

実は、CPUは沢山あるプロセスを高速に切り替えているので、ユーザ側からみると同時に動いているように見えているだけなんです。

CPUにとっては、切り替えている意識は無く、カーネルから命令された処理をただこなしているだけなんですがね。

[pic_cat2_4_1 マルチタスク]


マルチプロセス

確かに・・・CPUレベルでみるとプロセスを一個ずつしかやってないからマルチプロセスじゃあないな・・・。

でもユーザから見ると複数の処理(タスク)を同時に行っているから「マルチタスク」なんすね。なーる。

複数のCPUを備えているコンピュータ(これをマルチプロセッサと言う)であれば「マルチプロセス」が可能になります。

例えば、二つのCPUがあった場合は、二つのプロセスを同時進行する事が出来ますよね。

[pic_cat_2_4_2 マルチプロセス]

 

別々のプロセスを異なるCPUに割り当てれば効率がぐーんとあがるな。

ぐーんとあがるっすね!理論上2倍あがるってやつっすね!?

そうなればいいのですがね・・・現実はそんな甘くないんです。

というのも、マルチプロセスを実装するのはそう簡単なお話でない上に効果も限られた環境でしかあまり期待できないんですよ。


マルチプロセスの排他制御

言っていることがよくわからないが・・・なんでだ?

一人より二人!常識っすよ!?

それら二つのプロセスが、お互いに「依存関係(ディペンデンシ)」を持っていたら?

またはそれらプロセスが、二つとも同じファイルに対して書き込みをする必要があったら?

 

なるほど・・・プロセスAが終わらないとプロセスBが始められないっていう状態は確かに役に立たないな・・・。

でも、同じファイルに対して書き込みをするって言うのは・・・?何がまずいんすか?

例えば、二人で同じノートを使って文字を書くという事ですよ。

同時に書き込みが行われると整合性が保てなくなり、「データ破損」につながるんです。

 

うーむ、難しい問題だな。

オイラが書き込んだそばから、他の人がオイラの書いた内容を更新とかしたら、オイラ怒っちゃうっすね!

なので、そうならないようにカーネルは「排他制御」をファイルなどのリソースにかけるんです。

プロセスが書き込んでいるファイルに対して排他制御をかける事で、「他のプロセスに触らせない」のです。

 

排他制御・・・他を排除するって事か。

となると、結局は書き込んでいるプロセスが終了しないと他のプロセスを処理できないって事なんすねぇ。

そうなりますね。

実際は一つのプロセスだけがリソースを占有しない様に、時間や命令単位(ページ単位)で切り替えて「並列性」を高めていますね。

こうしたところは「マルチタスク」と似たような性質を持っています。


スケジューラ

似たような性質?並列性を高めるって奴がか?

マルチタスク・・・一つのCPUで複数のプロセスを高速に切り替えてあたかも沢山のタスクをこなしているように見せかける、いわば分身の術みたいな奴っすね。

マルチタスクはもともとCPUに対して「ある一定時間(クォンタム)」と「優先順位(プライオリティ)」等に応じて切り替え並列性を高めています。

切り替えるタイミングで、CPUレジスタ内のデータである「コンテキスト」を退避させ、他のプロセスのレジスタ内容を呼び出して再開させます。

[pic_cat2_4_3 プロセスの切り替え]

 

なるほど、CPU内のデータを丸ごと他のプロセスのデータと置き換えているのか。

それならプロセスが途中でも問題ないっすね!

そういや、優先順位っていうのが気になったんすけど・・・。

カーネルによってはプロセスには優先順位(プライオリティ)がついてます。

当然プライオリティが高ければ高いだけ、そのプロセスがCPUに割り当てられる頻度や時間が多くなるでしょう。

ヒゲ先輩が言ってたように、店長がプライオリティをはっきりしてくれれば処理する順序もわかって多少は仕事がやりやすくなるんじゃないでしょうか?

 

おやじの言うとおりだよっ!あの店長よ!取り敢えずやっといてとしかいわねぇから、本当に参るよ・・・。

で、やり終わったら遅かったね、とかあれ頼んだっけ?とか・・・本当に簡便してくれよ。

なぐっちゃえ☆

実際スケジューリングに求められるのは沢山あるので、そう簡単にはいかないと思いますがね・・・。

[table_cat2_4_1 スケジューリング要件]

 

おおぉぉっ!そうだよ!これだよっ!

今度店長に言ってやろうかな。

「テメェには、優先順位の管理がなってねぇ、つまり公平性がねぇ」ってな!

すげぇっす!先輩知的にみえるっす!!

まぁ、こうしたスケジューリングを行う機能をプロセス管理の中では特に「スケジューラ」といいます。

CPUにプロセスを割り当てる(スケジュールをする)から、スケジューラです、簡単ですね。

具体的にどうやっているのかは、プログラミングを勉強しないと分からないので割愛します。


スケジューリングアルゴリズム

ん・・・でもよ、なんか矛盾してねぇか?

何がっすか?
ヒゲ先輩の疑問はいつも的を得ているので答え概があってうれしいですね、なんでしょう。

 

この、レスポンスタイムってぇのはいわゆる、プロセスをCPUに割り当てたときの反応速度って事だろ?

短ければ短いほど沢山のプロセスをCPUに割り当てることにストレスがたまらないから確かに良いよな。

でもよ、プロセスを沢山割り当てるとCPUのターンアラウンドタイムってぇのが長くなっちまうんじゃないのかい?現実的に考えてよ。、

うん・・・?つまり、沢山のプロセスを動かしたときに一つ一つのプロセス完了に時間がかかっちゃうってことっすかね?

確かにそうっすよねぇ。

まぁ、そうでしょうね。CPUは一つしかないので。

 

プロセスを切り替える時間(レジスタ内のデータ交換)をするのにも時間がかかるってぇんだから、いっそのこと一つ一つの仕事を全力でこなしていったほうが速いんじゃないのかい?

あれ・・・なんか話がまた戻った気がするっすね。

シングルタスク」の考え方ですよね。

場合によってはその考え方も間違いじゃないのですが、ここはやはりユーザ側の立場になって考えてみてください。

情報量の多い現在において求められるのは、

 1.ユーザビリティの向上

 2.サービスの並列性

 3.プロセスの依存関係

この3つに限るんですよ。

 

それは分かるんだけどよ、それにしてもさっきの要件は矛盾してるんじゃないのか?ってことだよ。

沢山の仕事を振りたい!けど、一つ一つの仕事の完了も速めたい!

あぁ・・・ヒゲ先輩の言いたいことは分かったっす。

つまり自分が、店長に沢山の仕事を振られた上に、全ての仕事をすばやくこなせって言われたくないってことっすよね。

まぁ、そうですね・・・。

なので今では、そうした要件を極力応えるために「スケジューリングアルゴリズム」がいくつもあるんですよ。

今までお話してきた、時分割(クォンタム)でのスケジューリングや優先度に応じてスケジューリングするもの。

また実行の順番を忠実にこなして行くスケジューリングなど・・・。

[pic_cat2_4_4 スケジューリングアルゴリズム]

 

アルゴリズム・・・考え方か。

いろんな考え方で要件をクリアしようとしているんだな。

スケジューラってすっごい大変なんすね。

店長が大変なのもよくわかるっす・・・。

マネージャたるもの、定常業務時での管理は様々な視点から最適な手法を取り、メンバーの状態、力量、業務の規模、難易度から公平性を意識して割り当て、そのライフサイクルの一切を責任をもって臨むべし!(キリッ


割り込み要求

定常だけなら別にいいんだけどさ・・・。

ほら、よくあるじゃん。急遽入る仕事とか。

この間だってよ、突然本部からの監査が入るからってよ、店舗の掃除をやらされたぜ。

ヒゲ先輩って、なんだかいいように扱われているんすね・・・かわいそうっす。

まぁ、そういう時もあるでしょうね。

OSにだってそういう時ありますよね。

 

そういうのもスケジューラってぇのが活躍するんだろ?

なんだか神様に見えてくるっすね。

いや、実はちょっと違うんですよ。

急に入る仕事をOSでは「割り込み要求(IRQ)」というんですね。

スケジューリングされていないプロセスを急ぎで処理しないといけないとか。

 

割り込み・・・ひっきょーだなっ!

スケジューリングされているプロセス達を差し置いて割り込むんすかっ!?

そうですよ、堂々と割り込むんです。

割り込み要求の例としては、

 1.ネットワーク上のデータ送受信

 2.キーボード入力

 3.マウス入力

等があります。

 

あぁ・・・そりゃそうだよな。

マウス動かしてもそれがスケジューリングされてから動いてたら、カーソルがカクカクしてしょうがねぇな。

スケジューラを無視してCPUに割り当てられちゃうんす?

そうですね、無視して割り込んじゃいます。

割り込み要求にも2種類あるんですが、そこらへんの詳しいお話はまた別の機会にしましょう。

 

うむ・・・プロセス管理についてちょっと興味が沸いてきたな。

なんか、だんだんと自分がお利口さんに思えてきたっす。全然覚えきれてないっすけど・・・。

ある日突然、「ぱぁぁ」っと分かる日が来ますよ。

では、本日のお会計は8650円になります。

 

高くついたぜ・・・またな、おやじ!

せんぱーい、2軒目いきましょー!「ぱぁぁ」っと飲みなおしっす飲みなおしー・・・
飲みなおしって・・・聞こえているんですが・・・。

 

今日のポイント

 ・マルチプロセスは複数のCPUでプロセスを並行に扱う

 ・マルチタスクは単体のCPUで複数のプロセスを高速で切り替え一つずつ処理をする 

 ・複数のプロセスは、カーネルのスケジューラによって管理、制御されている

 ・スケジューラはカーネルによってスケジューリングアルゴリズムが異なる

前回へ TOPへ 次回へ

Copyright since 2010 IT Category Project All rights reserved.
inserted by FC2 system