• ベストアンサー

osのタスク管理

OSのタスク管理で1実行可能状態、2実行状態、3待機状態があって、待機状態というのはCPUの処理を終えて入出力装置の処理を待っている状態なのですか? タスクが生成されると[実行可能状態]にドンドン溜まるのでしょうか?そして優先的に[実行状態]に送られるのでしょうか? あと[実行可能状態]と[待機状態]は1次キャッシュで待機している状態なのでしょうかそれともメモリで待機している状態なのでしょうか? タスクの状態偏移について詳しく教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

No.1さんの参考URL詳しくて、ためになりますが、かなり難しいですね。 まず、Windows系OSと言っても世代によって全然違うと言うことを理解してください。 タスクとプロセスは同じ意味です。 もうひとつ、スレッドと言う言葉が出てきます。 マルチスレッドの場合、スケジューリングはスレッドを単位として行われます。 ここでは、マルチプロセッサーのことは考えないことにします。 情報処理技術者試験のレベルではプロセス(タスク)の状態遷移は 質問者の言われるように3つとされています。 Windows2000の場合、これが5つに細分化されていますが大きく分けると やはり3つですね。 > 1実行可能状態、2実行状態、3待機状態があって、 > 待機状態というのはCPUの処理を終えて入出力装置の処理を待っている状態 > なのですか? いいえ。入出力命令を実行したあと、入出力機器からの入出力完了割り込みを 待っている状態です。 他に、他のスレッドとの同期を取るために待っている状態も有ります。 > タスクが生成されると[実行可能状態]にドンドン溜まるのでしょうか? > そして優先的に[実行状態]に送られるのでしょうか? スレッドと読み替えればその通りです。 ノンプリエンティブ方式とプリエンティブ方式で違います。 ノンプリエンプティブ方式なら実行可能状態で待ちます。 プリエンプティブ方式では実行中のスレッドと新しいスレッドの優先度を比較して 新しいスレッドが優先度が同じか高い場合、再スケジューリングが行われます。 つまり、実行中のスレッドが入れ替わる事があるわけです。 > [実行可能状態]と[待機状態]は1次キャッシュで待機している状態なのでしょうか > それともメモリで待機している状態なのでしょうか? 実行可能状態はメモリーで待機です。 待機状態も基本的にはメモリーで待機ですが、仮想記憶ですので、 HDDに追い出されることもあります。 No.1さんの参考URLの最後の図で「遷移」と書いてあるのがそれです。 「遷移」状態にある時に実行順が来ると、HDDから再度メモリーにロードされ、 それが完了すると実行可能状態になります。 状況によってはすぐ実行状態になることは上で述べたとおりです。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

>待機状態というのはCPUの処理を終えて入出力装置の処理を待っている状態なのですか? 概ねそうです。待っているのは入出力装置の処理とは限らずタイマーの場合もあります。 >タスクが生成されると[実行可能状態]にドンドン溜まるのでしょうか? 生成された直後はCPU処理なのでそうなります。 >そして優先的に[実行状態]に送られるのでしょうか? 生成された直後だから優先とは限りません。タスクごとに設定された優先度に従って実行状態になります。 >あと[実行可能状態]と[待機状態]は1次キャッシュで待機している状態なのでしょうかそれともメモリで待機している状態なのでしょうか? タスクの状態やプログラムの場所などは、タスク管理テーブルという表でメモリ上で管理されています。この表の一項目で「状態」がありそれが1,2,3のどれかになっているわけです。「メモリで待機」というのは間違った捉え方です。実行中のタスクもメモリ上にあります。全てのタスクはメモリ上にあります。実行中のタスクのプログラムのうちのちょうどたった今実行されている近辺のみがCPU上とかキャッシュ上にあるわけで、実行中のタスクでもちょうどこの瞬間の実行に関係ない部分はメモリ上にあります。

  • Maldroll
  • ベストアンサー率67% (42/62)
回答No.1

@ITの特集ページに参考になりそうな記事がありました。 特に、後半のスレッドスケジューリングと、スレッド状態遷移の記述の部分は、 ある程度参考になるのではないでしょうか。 参考URLの部分だけでなく、この記事全体を読むと、 結構勉強になるなあ、と個人的には思いました。 ご参考までに。

参考URL:
http://www.atmarkit.co.jp/fwin2k/special/win9xorwin2k/win2kprocess_4.html

関連するQ&A

  • タスク管理

    以下の問題の答えとその解き方を詳しく教えてください。    2つのタスクA,Bを同時に実行した場合、2つのタスクが処理を終了するまでにかかる時間は    何ミリ秒か。    なお、タスクAの優先度の方が高いものとする。    タスクA: CPU(10ミリ秒)→I/O(50ミリ秒)→CPU(60ミリ秒)    タスクB: CPU(40ミリ秒)→I/O(50ミリ秒)→CPU(30ミリ秒) よろしくお願いします。

  • OSの入出力管理

    OSの入出力制御とCPUの制御装置の入出力装置制御との違いがわかりません。同じことしてるの?それとも違うんですか?教えてください

  • OS管理領域外のメモリが使えなくて困ってます。

    以下の仕様のBTOパソコンを購入して、 OS管理領域外のメモリをGavotte RAMDiskを使用して利用したいと 思い、設定したのですが、状況を見ると、 なんとなくOS管理領域内のメモリを割り当ててしまっているように 思えます。どうしたらOS管理領域外のメモリを設定できるように なるのでしょうか。OS管理領域外のメモリを利用できるようにするための 設定を教えていただけないでしょうか。 ■パソコン、OSの仕様 ・CPU:Intel Core i7 920 @2.67Hz ・メモリ:6GB(2GB×3) ・OS:Windows Vista Home Premium Service Pack 1 32bit     ver. 6.0.6001 ・マザーボード:Gigabyte EX58-UD3R ・グラボ:NVIDIA GeForce 9800GT ※上記環境にてGavotte RAMDiskで1GBや2GBを RAM diskとして割り当てを実行すると、 Vistaのデスクトップ上に表示させたCPUメータ内の RAMのメータが大きいほうに触れて、使用率(?)が80~90% 程度まであがってしまいます。 これを見て、OS管理領域内のメモリを割り当ててしまっている と感じました。 割り当てなし→16MB割り当て→2.0GB割り当てとすると、 タスクマネージャのパフォーマンス内の 物理メモリのキャッシュ済み 2673MB→2647MB→613MBと減ります。 BIOSの設定が必要、とネット上では説明がありますが、 本PCのマザーボードで具体的にどうすれば設定を 変えられるかもわかりません。 自分のパソコン知識以上のハイスペックPCを購入したと 思っています。しかし、せっかくなので出来るだけスペックなりの 使い方をしたいと思っています。よろしくお願いいたします。

  • OSとCPUとメモリの関係についての質問です。

    OSとCPUとメモリの関係についての質問です。 OSがCPU上で実行されるときの流れですが ① OSのある処理がメモリにロードされる ② CPUがメモリにアクセスして,OSの処理を実行する ③ CPUで実行した処理がメモリ上に返される ④ 出力される おおまかな流れはこれで合っていますでしょうか?

  • タスクやプロセス管理について

    このカテゴリでよいか迷ったのですが質問させていただきます。 私は今までの仕事で、某セキュリティ会社の防犯監視システム開発、某携帯電話開発(UI)に携わってきました。 そこではリアルタイムOSマルチタスク環境でのプログラム開発だったのですが、マルチタスクといっても当然タスク毎に"実行可能状態"、"待ち状態"、"実行中状態"等(その他いろいろ)、各種状態を持ち、タスクプライオリティに従いOSがタスクのスケジューリングを行い順次タスクが切り替わって制御されているという感じだったのですが(何が言いたいかというと優先順位の違う複数のタスクが並列で動くことはないですよね?と言いたいのですが)、 今回LinuxOS(MontaVista)でのプログラム開発を行ってみて違いに戸惑いを感じました。(マルチ)プロセスとは何ぞや?から始まり、さらにそのプロセス内で作成されるスレッド、そのプロセス・スレッドは他のプロセス・スレッドと並列で動く等等。(正確にはあたかも同時に動作しているかのように見えるってことですよね?) 前半の"タスク"と後半の"プロセス"とはこのように別物なのですよね? 今までの経験では並列動作という概念が無かったもので、どうもしっくりこなく意見をあおぐ為投稿させていただきました。 かなり漠然としたことで恐縮なのですが、今まで述べたことでなにか勘違いしているんじゃないかとか間違えていることとかありますか? 長文となり申し訳ありません。

  • ソフトウェア開発技術者~タスク管理について

    OSのタスク管理について、ある問題集で不明な点が…。以下その問題です。 「プロセスを、実行状態、実行可能状態、待ち状態、休止状態の4つの状態で管理するプリエンプション方式のOS上で、A、B、Cの3つのプロセスがロードされている。各プロセスの現在の状態は、Aが待ち状態、Bが実行状態、Cが実行可能状態である。プロセスAの待ちを解消する事象が発生すると、それぞれのプロセスの状態はどのようになるか。ここで、プロセスの優先順位は、A>B>Cの順に高いものとする」 正解はA:実行状態、B:実行可能状態、C:実行可能状態、となっています。ただ、以前他の文献で「待ち状態から直接、実行状態に移ることはなく、必ず実行可能状態を経由して実行状態になる」といった主旨の説明を読んだ記憶があります。すると、Aが待ち状態から実行状態に移るのは正しくないということになりますが、これはどのように解釈すればいいのでしょう?

  • サービスルーチンの実行の流れ

    (c)ある処理を実行中に割込が発生してから、対応するサービスルーチンを実行し、元の処理に復帰するまでの一般的な処理の流れを説明せよ。 (1)プログラムの実行 (2)割り込み要求 (3)状態の退避 プロセッサは入出力装置の応答を待たずに実行中のプログラムをいったん停止して、他のプログラムを実行する。 (4)割り込み処理 元のプログラムに入出力動作が指定されると、OSに処理を依頼する。OSは入出力動作を起動し、他のプログラムに制御を渡す。 (5)状態の復元 入出力装置からの動作完了割り込みがあったとき状態を復元 (6)プログラムの再開 OSは入出力処理を実行後、元のプログラムの実行を再開する。 と6段階のフローにして考えてみました。合っていますでしょうか?

  • タスクスケジューラに登録したタスクの実行優先度を上げたい

    Excel-VBAで作成したデータ処理プログラムを, タスクスケジューラにて定時実行させてるのですが, 処理が遅くて苦慮しています。(OS:Win2000Server) 単独実行だと5分(CPU使用率max100%)で完了するものが, タスクスケジューラからの実行だと30分(CPU使用率10%以下)もかかります。 タスクスケジューラへ登録したタスクの優先度を上げる術はないものでしょうか。

  • [コンピュータアーキテクチャ]割り込みについて

    (1)割り込みの優先順位はどのような方法で決定されているか説明しなさい。 (2)入出力割込みの必要性について、プロセッサと入出力装置における時間経過にしたがって具体的に説明しなさい。 コンピュータアーキテクチャについて、以上の2つの設問が分かりませんでした。助言をお願いします。 (1)の設問では、インターネットで調べたのですが、割り込みなどのプロセスやタスクはディスパッチ処理などによって割り当てられている、ということが分かりました。 調べると、例えばディスパッチ処理では、「ディスパッチの優先順位はタスク毎に決められており,作られた時刻に関わらず優先順位の高いタスクから順にディスパッチされていく」ということまでは分かったのですが、その優先順位はどうやって決められているのか?ということが分からず困っています。 そして(2)の設問では、調べただけでは分かりませんでした。「入出力装置における時間経過」の意味が分からず、どう具体的に説明していいのかも分からない状況です。 以上の2点についてご回答お願いします。 質問に補足しなければいけない点などがあればコメントしてください。

  • タスクマネジャーが壊れた?

    WindowsXPなんですけど、タスクマネジャー立ち上げると、CPUの状態とか色々出てきますよね。 それがある日突然、タスクの終了/切り替え/新しいタスクの三項目しかなくなってしまって、スッキリさっぱり他の一切の項目がなくなってしまったのです。 状態を見たいときや(メモリとか)、タスクマネジャーを閉じたいときなど、できなくなってしまって困っています。 どうしてこんな設定に変わってしまったのか??? 元に戻すにはどうしたら良いのでしょうか。