プロセスとスレッド、アドレス空間 10/13

課題1

異なるプロセスのメモリ空間(アドレス空間)は独立である。OS はメモリを 仮想的に多重化し、各プロセスそれぞれに別々(であるかのよう)なメモリを提供する。 各プロセスは他のプロセスを全く意識せずに メモリを使用しており、逆に他のプロセスのメモリ空間には全くアクセスできない。 これを実際に確認してみよう。

  1. プログラム process.cpp を読み、実行結果を 予想しなさい。予想とその根拠を文書として記録しなさい。 (完全な予測はできない。できる範囲で予測しなさい。)

  2. プログラムを実際に実行し、その結果と自分の予想に違いがあれば その理由を検討しなさい。

課題2

スレッドとは何か? 理屈はともかく、実例を見てみよう。以下の プログラムについて、 「予想→実験→結果の検討」を行いなさい。

  1. ex1.cpp (←これは簡単なので深く考えなくてよい。)
  2. thread-1.cpp
    予想に際して "man pthread_create" を参照すること。また、 コンパイルするときには、リンクオプションとして -lpthread をつける必要がある。

課題3

以下の記述が理解できるか、自問してみなさい。解らない点があれば質問しなさい。

課題4

親スレッドが子スレッドより先に終了するとどうなるか、以下のプログラムを 実行して確認しなさい。 必要に応じてオンラインマニュアルを参照すること。

  1. thread-2.cpp
  2. thread-3.cpp

課題5

スレッドは、プロセスと同じく「実行状態にあるプログラム」であり、 OS により独立な CPU 資源を与えられる。 しかし、メモリ資源は独立には与えられない点がプロセスと異なる。 pthread_create で生成されるスレッドは全て親スレッドとアドレス空間を 共有する。(必然的に子スレッド同士のアドレス空間も共通となる)

  1. 無限ループを実行する2つ以上のスレッドを含むプログラムを作り、 実行しなさい。その時、top で2つのスレッドの CPU 使用率を 確認しなさい。 実験に使用した無限ループプロセス(スレッド) を後に残さず、確実に終了させること。

課題6 (提出課題)

以下のプログラムの実行結果を予測しなさい。 実際に実行して、予測と結果を比較検討しなさい。 parallel.cpp は複数回実行しなさい。

  1. serial.cpp
  2. parallel.cpp

結果の考察(なぜその様な結果になると思うか)を提出しなさい。