ゼロからの情報システム

  現代社会の情報インフラの仕組みをゼロから学べます.

タスク管理

情報社会に生きるアナタ.
自動車社会で自動車や高速道路や宅配便のこと知らないで生きていけますか.
情報社会では,スマホやパソコンやインターネットやウェブが,自動車や高速道路や宅配便に相当します.
このサイトは,パソコン使いのパソコン知らず,を対象に情報社会の基盤技術を説明します.

2.29 OSはCPUでの処理を仮想記憶上で模擬的に実行する

 私たちがデスクトップやエクスプローラに示されているソフトウェアのアイコンを左クリックして仕事を始めようとすると,OSはそのプログラムと関連するデータを,仮想記憶に(仮想的に)装填します.

利用者アドレス空間の2GBの仮想記憶は,ソフトウェアごとに割り当てる(2.30参照)ので,OSは,どの仮想記憶のどこに,どのプロセスのプログラムとデータを装填したか,そして,それを起動した後には,各時点にプロセスのどの部分の指示をCPUが実行中かを監視します.図14の左上半分の仮想記憶領域での話です.

図14
図14(再掲)

CPUは, RAMに実際に装填したプロセスの1つの指示を実行するたびに,対応する仮想記憶の上のプロセスのどこの指示を実行するかをなぞって行きます.

仮想記憶も仮想記憶に装填したプロセスも,実際には存在しない架空のものです.OSは,この架空の記憶装置の架空のプロセスの上で,プロセスの進行を監視します

つまり,OSの「頭の中」で模擬的に処理を進めます.図14の赤い矢印は,今注目しているソフトウェアのプログラムの,CPUがただ今処理する指示の位置を示します.

赤い矢印は仮想記憶とRAMの両方にあります.RAMの赤い矢印が,RAMに装填されているプログラムの中の,実際にCPUが処理する指示の位置を示します.

仮想記憶にある赤い矢印は,それに対応する仮想記憶のプログラムの中の位置を示します.このように両者を対応付けながら,OSは仮想記憶の上で,仮想的にプロセスを実行するのです.

つまり,OSは,実は,RAMで実際に進めている処理を,仮想記憶において模擬的に「なぞって」いるのです.

 多くのプロセスが起動していても,(仮想的に)装填されるOSは1つです.そうでなければ,多くのプロセスの実行状態を把握して,総合的に管理することができないからです.それで,システムアドレス空間はプロセスの個数とは関係なく常に1つです.

2.24 次に実行するプロセスは実行可能状態にあるものから選びます

前項では,プロセスを切り替える際に候補とするプロセスは,実行中のプロセスの中で優先度が最も高いものであることを述べました.しかし,実行中のプロセスすべてが選択の対象になるのではありません.そこで,どうやって次に実行するプロセスの候補を絞り込むのかが,T3の問題(2.21参照)です.

図13はタスクが開始されて生成されたプロセスが終了するまでにとる可能性のある状態とそれらの間の移行関係を整理したものです.


図13

 

13 プロセスの状態の推移

実行状態(=CPUが処理中)のプロセスはタイムスライスで他のプロセスに横取りされて中断されると,次に実行の順番が来るのを待ちます.つまり,図13の「実行可能状態」になります.実行可能状態とは,OSに選択された場合,続きの処理を即座に再開する準備がすでに整っている状態を指します.

プロセスは次項で説明するような事情で「待ち状態」になることがあります.この時,この原因となった事情が解消されると実行可能状態に移行します.

待ち状態にあるプロセスは,次項で説明するような理由のために,次に実行するものとして選択されて実行状態に直接移行することはありません.

つまり,待ち状態にあるプロセスは2.22で説明した,次に処理するプロセスの候補にはなりません.

したがってOSは,実行可能状態にあって,優先度が最も高いプロセスだけを処理の対象にするのです.そのようなプロセスは,開始(生成)したばかりか,CPUを横取りされて中断中(実行可能状態)か,待ち状態から解放されて実行可能状態に移行したか,のどれかです.

以上が特定の極めて少数のプロセスだけにゼロでない「CPU」値が,タスクマネージャのプロセスタブ(図11)で表示される理由です.

パソコンでは,多数のプロセスを実行中であるにもかかわらず,快適に作業ができる秘密がここにあります.

2.23 最高優先度のプロセスが次に実行される

OSは実行すべき多数のプロセスを抱えています.それらのプロセスの内,現に実行中のプロセスと交代に次に実行すべきものはどれかを決めるのが,T2の問題(2.21参照)です.

たくさんあるプロセスの中には,即時の対応が必要なもの,遅れても支障のないものというように,さまざまな緊急度のものがあります.

そこで,ウィンドウズのOSでは,各タスク,サービスに対して,処理の優先度を割り振っています.優先度32段階あります.

起動中のプロセスの中で最も優先度の高いタスクやサービスのものに対してCPUを優先的に割り当て,それらのタスクやサービスがCPUを必要としなくなったら,次の優先度のタスクやサービスにCPUを割り当てる,という方法をOSは採用しています.

優先度が最も高いタスクが複数ある場合には,割り当てたクオンタムずつそれらのタスクを順番に処理します.割り当てるクオンタムを,同じ優先度でもフォアグラウンドのタスクには多く,バックグランドのものには少なくすれば,CPUを使用する割合を変化させることができます.

優先度の高いタスク,サービスから処理する方法だと,優先度の低いプロセスはいつまでもCPUを割り当ててもらえないという状況が発生する可能性があります.そこで,長期間(例えば数分間)CPUが割り当てられないプロセスがあれば,その優先度を自動的に高めるという仕組みがOSには組み込まれています.

図11のタスクマネージャの「プロセス」タブの表示には,「CPU」欄があります.これはCPUの処理能力の何%が,そのプロセスによって消費されているかを示します.

   大部分のプロセスのCPU欄はゼロで,少数のプロセスにだけCPUが割り当てられているのが判ります.これはT3の問題への解答を示していますので,次項で説明します.

2.22 タスク切り替えの間隔は50分の1秒程度です

プリエンプティブ マルチタスクを実施するOSは,あらかじめ決めた短時間(これをタイムスライスと呼びます)が経過するごとに,タスクの切り替えが必要かどうかを判断します.タイムスライスは1015ミリ秒に相当するような短い時間です.

つまり,OSは,100分の1秒程度の時間が経過するごとにタスクを強制的に切り替えるチャンスを作ります.

OSは,タスク/プロセスを切り替えるとき,各プロセスがCPUを占有する時間の長さを,クオンタムという量を使って管理します.クオンタムquantumは「少量」を意味する英語です.

パソコンで私たちが個人的に利用しているアプリケーションの場合には,タイムスライス2つ分の大きさ(100分の1~3秒)のクォンタムを割り当てるのが普通です.

サーバと呼ばれる,人手による入出力作業のような,処理の遅れが利用者をイラつかせるアプリケーションがほとんど起動されないコンピュータの場合には,12タイムスライス程度の大きさ(10分の1~2秒)のクオンタムが割り当てられるのが普通です.

つまり,私たちのパソコンのOSでは,CPUが実行しているプロセスは,1秒間に50回位,別のプロセスに切り替えた方がよいかどうかが判定されます.もちろん,切り替えない方が良いとなれば,あらためてクオンタムの割り当てを受けて処理が継続されます.

このことから,1秒間に50回程度,タスク→OS→タスク→OS→・・・と言う具合に,切り替わっていることが判ります.OSを挟む前後のタスクは,OSの判断に応じて,同一であることも異なることもあります.

 このような短時間でタスクを切り替えるには,切り替えのスピードが問題になります.遅ければ処理時間が切り替えにばかり使われ,タスクの処理が実質的に進まない状況が発生しやすくなります.

そこで,各タスク/プロセスに対して,プログラム内の中断した位置,その時のCPUの状態(つまり,CPUが持っているデータの値)などを記憶装置に保存し,また,プロセスを維持(プロセスに対するプログラムやデータを記憶したRAMの領域を管理すること)します.

 そうすることで,次にこのタスク/プロセスを再開する時に,瞬時に中断前の状況を再現することができます.

2.21 タスク管理におけるタスク切り替えは横取り方式です

複数のプロセス(タスク)を利用者にとってストレスなく並行的に処理するために,タスク管理が解決すべき主要な問題は次の3つです.

T1)どのタイミングで実行するタスクの切り替えを行うか

T2)どのような方法で次に実行すべき1つのタスクを決定するか

T3)次に実行するタスクの候補とすべきタスクをどうやって選ぶか

本項では,T1の問題を取り上げます.

CPUは一度には1つのことしかできませんから,OSは実行するプロセスを適当な優先度や順番に従って切り替える必要があります.しかし切り替えは,前項で述べたように,各プロセスの実行の緊急度に合わせて行うことが求められます.

先方の都合に合わせる必要のある多数の仕事がある場合,あなたが極めて有能で,仕事の切り替えが瞬時にでき,細切れになってもそれをつなぎ合わせることができる.しかも,仕事の処理は極めて素早くて,連続的に1つの仕事を行う時には,非常な余裕を持って対応できる.そういう意味で十分な能力を持っているとします.

すると,一瞬ごとに,例えば,0.1秒とか0.2秒間隔で,意識を集中する仕事を次々切り替えて,いかにも,多数を同時こなしているように振る舞えるでしょう.

CPUがプロセスを処理する状況はまさに,このような十分な能力を持っている状況だと考えられます.

タスクの実行はプログラムの処理ですから,その実行を中断して,別のタスクを処理する間に,もとのタスクに必要なデータが消えてしまうということはありません.中断している間は関連するデータを一時的に記憶装置に保存しておくことが可能だからです.

つまり,CPUは極めて短時間で仕事の切り替えをしても混乱しないのです.

しかも,CPUの処理速度は,パソコンの利用者の日常的なスピードに較べれば,極めて大きいのです.このことはこれまでも何度も強調してきました.

上述の人の場合のように強制的なタスクの切り替え戦略に基づくマルチタスクを,プリエンプティブ マルチタスクと言います.

 OSがタスクを切り替えることが必要だと判定したら,強制的に別のタスクにCPUを「横取り(プリエンプション)」させるからです.
プロフィール

ヤッキー

カテゴリ別アーカイブ
タグクラウド
QRコード
QRコード
  • ライブドアブログ