• ベストアンサー

プログラム?プロセス?

今、ソフトウェア工学を勉強しています。そこで素朴な質問なんですが、 プロセスとプログラムの違いって何なんですか? まだまだ若輩者なのでよろしくお願いします。

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

  • ベストアンサー
  • gimmick
  • ベストアンサー率49% (134/270)
回答No.2

素人なので厳密さに欠ける点があると思います。注意して読んでください。 cookdoさんのいう「プロセス」は、プログラムの実行単位としてのプロセスだと思います。プログラムとプロセスの違いということなので、多分そうでしょう。 プロセスは、OSが管理するプログラムの実行単位です。一般的に1つのプログラムといった場合、1つもしくは複数のプロセスが対応します。あるプログラムを起動した場合(例えば、WindowsでのEXEファイルを実行した場合)、1つのプロセスが割り当てられます。プロセスにはメモリ等のシステムリソースが割り当てられます。また、同時に複数のプロセスが存在する場合、短時間で実行プロセスを切り替えるため、見かけ上は複数のプロセスが同時に実行されているように見えます。プロセスは別のプロセスを起動する事もあり、呼び出し側を親プロセス、呼び出された側を子プロセスと呼びます。 プロセスはOSのプログラム管理単位ですが、プログラムという言葉には管理単位としての意味合いはないと思います。また、OSが関与しないプログラム(例えばPC起動時のBIOSプログラム等)にはプロセスという概念は存在しません。 なんだかうまくまとまらなかったので、プロセスについて説明してあるページを挙げておきます。

参考URL:
http://www.atmarkit.co.jp/icd/root/78/5787378.html
cookdo
質問者

お礼

わかりやすいご回答ありがとうございます!! これでふっきれました。

その他の回答 (2)

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

No.2の方の回答はかなり当たっています。 でも、初心者の方にはわかりにくいでしょう。 例を使って説明しますので、混乱しないで感じをつかんでください。 定員5人の工作スクールがあります。先生は1人です。生徒はみんな 思い思いのものを作ります。作り方の説明書はみんなそれぞれもっています。 いろんな道具も共用でそなえつけてありますが、人数分はありません。 一人が作品を作り終わって帰ると、待っている次の生徒が部屋に入ります。 ここで、プログラムと言うのは「作り方の説明書」です。 プロセス(タスクとも言います)は、1人帰ると次の人が入れること 言い換えれば入室許可のことです。 入室が許可されると、ある広さの場所を確保します。(主記憶の確保)そして説明書や材料、必要に応じて道具をもってきて工作をします。但し、説明書を読むときには必ず先生についていてもらう必要があります。 ここで、先生とはCPUのことです。 もっと言えば、材料や作品がデータということになります。 工具を使うというのは入出力に相当します。 では、コンピュータとは? この教室(学校)全体です。 OSとは? 先生では有りません。受付をしたり、入室許可を出したり、工具の管理をしたり、 教室がうまくいっているかを見回っている人(事務員さんか校長先生)です。 本論に戻って、まず仕事をするためには、プロセスの獲得をします。次に主記憶の確保をして、その中にプログラムを読み込みます。 そしてプログラムの実行をCPUと入出力装置を使って行ないます。 いくつかのプロセスが譲り合いながら、見かけ上、同時並行的に実行されて行きます。 これをマルチプログラミング(マルチタスク)といいます。

cookdo
質問者

お礼

わかりやすい例えで助かりました!!ありがとうございます。

  • KIMV
  • ベストアンサー率15% (82/544)
回答No.1

>プロセス プログラムの流れ,ロジック(処理手順 言語を問わず)のことです。 >プログラム 実際にコーディングをした物(各言語で)

cookdo
質問者

お礼

納得です。ご回答ありがとうございました。

関連するQ&A

  • プロセスに関するプログラム

    UNIX系OSでのプロセスの動きを確認するプログラムを勉強しています。 コマンドライン引数で与えられた整数の数だけプロセスを作成するというもので、わからないことがありますので教えて頂けると幸いです。 質問の要点は 1.プロセスの番号がなぜ順番どおりに並ばないことがあるのか 2.どのような点からこのプログラムのプロセスの最大生成数を判定す  るのか という2点です。 parentIDが1のときはinitが親を引き継いでいることはわかっています。 どなたかご教授おねがいします。 下記にソースコードを載せておきます。 *** process.c *** #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char *argv[]) { int np; int i; pid_t child_id; if(argc == 2) { fprintf(stderr, "<number of processes>\n"); exit(1); } np = atoi(argv[1]); for(i = 0; i < np; i++) if(child_id = fork()) break; printf("%d: process ID=%ld parent ID =%ld child ID=%ld\n", i , (long)getpid(), (long)getppid(), (long)child_id); return 0; }

  • スレッドとプロセスの違い

    今晩は。 早速ですが、javaのプログラムを勉強中です、スレッドとプロセスどう違うのでしょうか。 本などを読んでいろいろと調べましたが良く分かりません、宜しくお願いします。

    • ベストアンサー
    • Java
  • 子プロセスの利点

    プロセスについての質問なのですが、 親プロセスでプログラムを実行するのではなく、 子プロセスを生成してその上でプログラムを実行する利点などはどのようなことがあるのか? わかる方がいらしたら質問にお答えいただけると幸いです。

  • プロセスの生成(fork)

    私はLinuxを始めたばかりのタコです。 参考書で少しずつ勉強しているのですが 「プロセスの生成にはforkを使用する」と記載されており プログラム例も載ってはいるのですが親プロセスと子プロセス一個の ケースしか記載されていません。 例にはPIDが0か0以外で親子を判断して別処理をさせると書いてありました。 例えば親プロセスと子プロセス2個以上を生成するにはどうしたらいいのでしょう?超ビギナーな質問で申し訳ありませんがタコを育てると思って どうか御教え下さい。宜しく御願いします。

  • プログラムとスクリプトの違い

    素朴な質問ですが、宜しくお願いします。 よくプログラムを作成する、スクリプトを作成するといいますが、 両者の違いはなんなのでしょうか?何か定義があったりするのでしょうか?

  • このプロセスはなんでしょうか…。

    質問なのですが、先ほどタスクマネージャーを 開いたときに「E_FAMT9DJ.exe」というプロセスが 表示されていたのですが。 このプロセスを今まで見たことがなかったのですが、 このプロセスは一体何のプロセスなのでしょうか…。 スパイウェアやウィルスの類なのでしょうか…。 どなたかご意見を聞かせて頂けないでしょうか。 よろしくお願いします;

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

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

  • 子プロセスと親プロセス

    ある本を読んでいると、以下のような問いにぶち当たり、プログラムの仕方がよくわからないのです。 自分でもいろいろ調べたのですが、わからないので質問させていただきます。 自分のプロセスIDと親のプロセスIDのプロセスIDを表示するコマンドshowpidを作り、showpidを子プロセスとして10回実行するプログラムを作りなさい。ただし、execを用いてshowpidを10回実行すること。 というものなのですが、自分のプロセスIDと親のプロセスIDの表示方法はわかったのですが、それをコマンドとして作り、子プロセスとして10回実行する方法がわからなくて困っております。。。 言語はc言語を使ってもらいたいです。以下に自分のプロセスIDと親のプロセスIDを表示するプログラムを付けときます。 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> int main(){ pid_t pid; int status; if((pid=fork())==0) printf("I am a child with pid=%d. My parent pid is %d.\n",getpid(),getppid()); else{ wait(&status); exit(EXIT_SUCCESS); }

  • 子プロセスの管理

    forkした後の子プロセス管理で、終了をsignalで管理しようと思ってるんですが、forkを2回行なえばゾンビ化を防げると書いてありました。この二つの方法に違いはあるんですか?メリット・デメリットがよくわかりません。ちなみに子プロセスからの結果や終了を待つ様なプログラムではなく、ただexec関数での別処理を行なうために子プロセスを作成するだけです。 宜しくお願いします。

  • プログラムは何から始めればいいのでしょうか?

    今、高校1年生です。中学のころからプログラムに関して興味はあったのですが なかなか時間がとれず、時間だけが過ぎてしまいました。 ですが、今回一念発起しプログラミングを勉強することにしました。 そこで、質問なのですがはじめに勉強する言語は何がいいのでしょうか? 自分の中の将来の目標としては、ゲーム会社やソフトウェア開発をしている 会社に就職したいと思っています。もし、かなわなかったにしても個人的に プログラム(ゲームなども)を組めるようになりたいと思っています。 貯金はそれなりにあるので、初期投資(コンパイラ購入など)の金額的な 制限はありません。