68user さん、どもです(笑い) >となります。プロセス番号714の子プロセスが、exec sleep 5しても >やはりプロセス番号は714のまま、ということだと思います。 そそ、そんなイメージでした(^^; 先のpsの時点と後のpsの時点では実行されているプログラムはちゃうけど、 プロセスとしては同じなんだという意味ですね。 >僕もそういうふうに理解しています。 安心しました(^o^;ゞ >Javaではスレッドを使うことでプロセスの中で並列実行ができますよね。 そのヘンがプロセスとスレッドとの違いかなと思っていたのです。 >というわけで、「スレッド」という言葉はどの環境を指して >使うかで結構意味に違いがあるんじゃないかと思うんですが…。 このヘンの用語は仰る通りだと思います。 で、一応UNIXでのことを伺ったつもりだったのですが、書いてませんでしたね(^^; 私にとっては、「スレッド」という言葉は少なくともコンピュータの分野では Javaで始めて聞いたような気もするんで(スレッドタイプの掲示板というのも ありますが…(^^;)、一応Javaのスレッドを想定していたのですが、 >一方「マルチスレッド版echoサーバ」というのは、ただ単に >「並列処理ができるよ」くらいの意味ですが、別にスレッドを >使っているわけではなく、forkで実現しています。 >また、FreeBSDではスレッドへの対応が進み、スレッドセーフな >OSになりつつあるようです。 ということは、一般的にはもっと広い意味がありそうですね。 >あと、「タスク」はUNIXの用語でしたっけ。多分Winの用語かな >と思うんですが、結局ここらへんはプロセスと呼ぶかタスクと >呼ぶかの違い、単純に呼称の違いではないかと思ってるんですが…。 あっ、UNIXでは「タスク」は使わないんですね。 確かに岩波の情報科学辞典なんかでも、「プロセス=タスク」としています。 ただ、「タスク」はWinの用語(その場合の意味は?)だけでなく、 もっと古くから使われているようで、その頃、「マルチタスク」と 「マルチプロセス」とは違うんだよ、というような話を 聞いたような気もしたもので…(^^; >コンカレント・コルーチンは初めて聞きました(^^; concurrent は、どうも並行という一般的な意味みたいです。 concurrent Pascalとかconcurrent CP/M なんてのを聞いたことが あったのですが、どのように並行してたのかは知りませんです。 (この並行と多重(multi)の違いもよく分からない(^^;) coroutinは、原始的な並行プロセスかな… 確か、各ルーチンごとに専用のスタックを持って、自分の処理が 一段落すると、レジスタなどの環境をスタックにpushして、 別のルーチンを呼ぶ。 別のルーチンも自分のスタックから環境をpopして処理を行い、 これが一段落すると、また環境をスタックにpushして元のルーチンや 別のルーチンを呼ぶ、ということを繰り返して並列処理を 実現するものだったと思います。 で、どれかのルーチンがCPUを独占してしまうと、 もう並行プロセスにならないってものなのです。 >execが戻ってくるのはexecに失敗したときだけで、execの実行に成功すると >絶対に戻って来ません。だから元のプロセスのイメージを保持しておく >必要はないですから、OSが掃除してくれるんじゃないでしょうか。 ありゃ…すいません、完全に誤解してました(^o^;ゞ execは戻らないんですね(MS-DOSとごっちゃにしてたかな?) 実は、シェルが一旦forkしてからexecするのも疑問だったのです。 |