• ベストアンサー

マルチプロセスの利点、欠点

OSの課題で、 複数のプロセスで処理を実行する利点、欠点を述べる問題なのですが、 利点は 1.並列して処理を進めると、適切な処理の切り替えによってシステム全体の処理効率が上がることがある 2.信頼性向上に繋がる  ・fail-softなシステムを容易に構築できる  ・fail-tolerantなシステムを容易に構築できる 3.複数のCPUによる多重プログラミング環境においても、ソフトウェアを再設計することなく直ちにハードウェアに見合った性能向上が期待できる だと思うのですが、 欠点が調べてもなかなかわかりません。 どなたかご存知の方教えてください。

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

  • ベストアンサー
  • yakan9
  • ベストアンサー率54% (2205/4056)
回答No.2

学校の課題は自分で考えることが原則と思うけど、どうしても分からんというのであれば、ヒントだけでも。 同じ処理を行わせないためには、同期を取る必要があります。 すなわち、入出力は、OSの方でファイルの同時アクセスは制御されていますが、ファイルアクセスが違うものは、並行処理できます。 この違いの区別をどう判定させるのかが問題になるのではないでしようか。 システム構築するシステムエンジニアであれば、必ず、同期を取ることが頭に浮かばないといけません。 Aサブシステムと、Bサブシステムは参照するファイルが異なるため並行処理できるが、 Aサブシステムと、Cサブシステムは、同じマスタ更新するので並行処理できないといった、関連図を作り規定していかないといけません。 この同期を取るといった事象を、Enqueue,Dequeueといった待ち行列理論の展開になっていくのですけど。 そのためのプログラミング手法といったことまで深く入っていくことになります。 リユーザブルルーチン(reusable routine:再使用可能)、リエントラントルーチン(reentrant routine:再入可能)で作成する必要が出てきます。 ここまで厳密に入っていくための足がかりとして出題されている気がしますけど。

その他の回答 (2)

  • mrkato
  • ベストアンサー率47% (1008/2121)
回答No.3

OS/2もWindows系扱いにされてますけど・・ マルチスレッド、マルチタスクなのは同じであっても インプットキューが単一なので急所となり。 マルチプロセスの欠点は先の方の、処理中データ同期管理が 一番ですし、OS側プロセスの生成や管理が資源を使うので、 ある程度目減りしたり、負荷変動が起きたりするでしょう。 トランザクションに徹した用途や、 リアルタイム制御で応答を最優先とされる環境には マルチプロセスの利点は、不要ではないのですか。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

しばしば「利点と欠点は表裏一体」なわけで, それぞれの「利点」をひっくり返してみると「欠点」になることがありますな. もっとも ・何と比較して「マルチプロセスの利点や欠点」を述べる問題なのかが分からん (ある意味言葉遊びではあるが「1つのプロセス内で複数のスレッドを実行する」のは「マルチプロセス」といえるのかどうか微妙) ・それ以前になぜこの質問が「Windows系OS」のカテゴリなのかが不明 (「Windows系OS」に限定する必要はないと思うので) だけど.

関連するQ&A

  • 情報処理技術者の問題で。

    多重プログラミングに関する記述として適切なものはどれか。 ア、ジョブとしては多重で処理されるが、シングルタスクで実行する イ、タスクの実行中に、入出力などを行ったために生じるCPUの空き時間を利用して別タスクを並列に実行する。 ウ、プログラムの実行中に、自分自身を呼び出して実行するプログラミング方法である。 エ、プログラムを並列に処理するので、ハードウェアとして複数のプロセッサとメモリを結合した並列処理システムが必要である。 答えはイだと思うのですが、 ア、ウ、エの文章のそれぞれどこが違うのかも理解しておきたいと思っています。 ア、ウ、エはどこが間違っているでしょうか?

  • オペレーティングシステムという分野のプロセスの問題です

    オペレーティングシステムという分野のプロセスの問題です プロセス(スレッド)は、「実行可能状態」「実行状態」「待ち状態」の 3つの遷移するが、「待ち状態」を設けることの利点と欠点を述べよ、 という問題があります 利点はわかったのですが、欠点がわかりません 「待ち状態」を設けることの欠点とは何ですか?

  • Illustratorとframemakerは、マルチコアやマルチCPUに対応している?

    Windows版のIllustratorとframemakerは、マルチコアやマルチCPUに対応しているのでしょうか。つまり、並列処理を行えるプログラミングになっているのでしょうか。 http://www.adobe.com/jp/support/kb/ts/234/ts_234613_ja-jp.html#anc_b1 の「B. ハードウェア構成の最適化」の項を見ると 「マルチプロセッサシステムの使用(中略)など(中略)によっても Illustrator のパフォーマンスは向上します。」 とありますが、並列処理を行えるとは書いてありません。 framemakerも同様です。 Illustratorとframemakerは、マルチコアやマルチCPUに対応しているのでしょうか。

  • プロセスとスレッドの違いについて(Cプログラミングの観点から)

    プロセスとスレッドの違いがしっくりきません。 <プロセス> (1)プログラムの実行単位。Windows や Linux などの汎用 OS 上のアプリケーションは一般にプロセスとして動作している。プロセスは1つ以上のスレッドと、ファイル、ヒープメモリなどのリソースで構成される (2)起動や切り替えのオーバーヘッドが大きい <スレッド> (1)同一プロセス内の複数スレッドを同一メモリ空間上で実行でき、メモリ消費量などが軽減できる。 (2)マルチスレッド処理のプログラミングにおいては、同じデータを複数のスレッドが同時に書き換えることによる不整合に注意し、排他制御を行う必要がある。 等はwiki等調べて理解しています。 何が疑問なのかと申し上げますと、具体的にプログラミングする際に (1)マルチプロセスとマルチスレッド方式では、ソースにどのような違いが出てくるか (2)マルチプロセスとマルチスレッド方式では実行時間がどれだけ変化するか がわからないのです。お仕事で並列処理等について担当されている方などおられましたら、お手数ですがご教授ください。 なお、わかりやすい書籍、webサイト等ありましたらそれも併せて教えていただけると助かります。よろしくお願いします。ちなみに、環境はWindowsXP,VisualC++ExpressEdition2005を使っていますので、UNIXよりはWindowsかつCで動くプログラム例で教えていただけると大変助かります。しかし、当方Javaも多少であれば組めますのでJavaでも構いません。 何卒、よろしくお願い致します。

  • 高レバレッジに利点はあれど欠点は無し?

    FXのシステムに、レバレッジってあるじゃん。単位は、5倍とか、10倍とか、そういう言い方をして、FXシステムに10万円の日本円を突っ込んだら、その5倍の50万円、あるいは100万円の範囲で米ドルを買えますよってことらしいです。 何処のFX会社も、複数のレバレッジ倍率を用意してますが、顧客としては高倍率にやっときゃ良くね? 「損失も高倍率になる」とか誰かが言ってるけど、そりゃ嘘でしょ。損失の倍率は円高が進むことで決まる話であり、レバレッジは無関係かと。 高いレバレッジで米ドルをたくさん買えても、円高が進むリスクを考えるのなら、小さく買えば良いだけかと。自分で自制すれば、レバレッジを高くしとけば良いよね。手数料も同じかと。 自分で自制できるなら、高レバレッジで購入額を少なくしとけばいいですよね。 高レバレッジですと、少ない自己投資でその高倍率だけのドルが買える利点はあるけど、欠点は無いよね。だって、買い過ぎて円高になると損失が増えると言えど、自分の意思で少ない額に出来るのだから。

  • windows プロセス間の連携で問題

    ウィンドウズで、dllと共有セクションを利用して複数のプロセスが協調して動作するシステムを開発しています。 あるプロセスが処理をしている間に他のプロセスが同じ処理をしたら困るので、フラグを処理中を意味する値にセットし処理が終わればフラグを戻し、という風にしているのですが、フラグをセットしている途中に他のプロセスに切り替わり、そこで他のプロセスが同じ処理をしてしまったら(確立はかなり低い)思った通りに動作しません。この問題に対して何か解決策はありますか?それともそこまで精密さを求めなくてもいいでしょうか?回答よろしくお願いします。

  • マルチスレッドプログラミングの利点について

    はじめまして。 質問があります。 現在マルチスレッドプログラミングについて学習しているのですが、 学習を進めていくうちにある疑問が思いつきました。それは、 マルチスレッドで実装した方がよい場合とシングルスレッドで実装 した方がよい場合の区別がよくわからないということです。マルチスレ ッドで実装する利点は、例えば、応答性を向上させるとか、 入出力操作が関わっているときにCPUの空き時間を利用して別スレッド で処理を行わせることによってスループットを向上させることぐらいしか思いつきません。また、CPUが1個しかない環境では、 CPUをフル活動するようなプログラムでは、下手にマルチスレッドで 実装するよりもシングルスレッドで実装したほうが排他制御しない 分だけ処理スピードは上であると思っているのですが、間違いでしょうか?マルチスレッドで実装した場合の利点は上述したこと以外にも 何かあるのでしょうか?ご教授お願いします。

    • ベストアンサー
    • Java
  • タスクやプロセス管理について

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

  • 並列処理について

    今現在Perlの並列処理について勉強しているのですが、分からない点があるのでご教授願います。 重並列が可能となるプログラムを作りたいと思い、以下のプログラムを作成しました。countには並列数(例えば3並列にしたいならば3)が入っています。これで重並列ができたと思ったのですが、よくよく考えてみると、このプログラムだと一つ目の子プロセスが終わらなければ、二つ目、三つ目の子プロセスが始まらないということに気付きました。同時に複数のプロセスを実行させるにはどのようなプログラムにすればよいでしょうか。お願いします。 while($count--){ $pid = fork; if(!defined $pid){die "fork failed";} elsif(!$pid){ &process;#子プロセス exit; } } wait; ・・・・・・#親プロセス

  • Cooperative process

    IT関係からです。 次の文の解釈を自分でしてみましたが、どうもしっくりしませんので、どなたかアドバイスください。 Cooperative processing is a system in which computers in a distributed processing network can share the use of application programs belonging to another end user. The system assigns different machines the functions they perform best in executing a transaction-based application program. For example, a microcomputer might be used to enter and validate data for the application, and a mainframe might handle file input and output. 要点は並行または並列に動作する2つ以上のプロセスに着目 したとき、1つのプロセスが他のプロセスがある事象を引き起こすので、その分待つ必要性がある。 この具体的な例として、インタ-ネットの掲示板で誰かが入力しようとするが、複数の人々が同じ作業をしているので、しばらく待たないといけないということでしょうか。会社内では例としてはどのようなものがあるのでしょうか。