-
-
課題1
-
異なるプロセスのメモリ空間(アドレス空間)は独立である。OS はメモリを
仮想的に多重化し、各プロセスそれぞれに別々(であるかのよう)なメモリを提供する。
各プロセスは他のプロセスを全く意識せずに
メモリを使用しており、逆に他のプロセスのメモリ空間には全くアクセスできない。
これを実際に確認してみよう。
- プログラム process.cpp を読み、実行結果を
予想しなさい。予想とその根拠を文書として記録しなさい。
(完全な予測はできない。できる範囲で予測しなさい。)
- プログラムを実際に実行し、その結果と自分の予想に違いがあれば
その理由を検討しなさい。
- 課題2
- スレッドとは何か? 理屈はともかく、実例を見てみよう。以下の
プログラムについて、
「予想→実験→結果の検討」を行いなさい。
- ex1.cpp
(←これは簡単なので深く考えなくてよい。)
- thread-1.cpp
予想に際して "man pthread_create" を参照すること。また、
コンパイルするときには、リンクオプションとして -lpthread
をつける必要がある。
- 課題3
-
以下の記述が理解できるか、自問してみなさい。解らない点があれば質問しなさい。
- スレッドの起動はサブルーチン呼出とは違う。
起動されたスレッドは親プログラム(親スレッド)と並行して実行される。
- スレッドの起動と fork, exec によるプロセスの生成は違う。
起動されたスレッドは指定された関数を実行する。fork によって
作られた子プロセスは親と同じコードを実行する。
- 課題4
-
親スレッドが子スレッドより先に終了するとどうなるか、以下のプログラムを
実行して確認しなさい。
必要に応じてオンラインマニュアルを参照すること。
- thread-2.cpp
- thread-3.cpp
-
課題5
-
スレッドは、プロセスと同じく「実行状態にあるプログラム」であり、
OS により独立な CPU 資源を与えられる。
しかし、メモリ資源は独立には与えられない点がプロセスと異なる。
pthread_create で生成されるスレッドは全て親スレッドとアドレス空間を
共有する。(必然的に子スレッド同士のアドレス空間も共通となる)
- 無限ループを実行する2つ以上のスレッドを含むプログラムを作り、
実行しなさい。その時、top で2つのスレッドの CPU 使用率を
確認しなさい。
実験に使用した無限ループプロセス(スレッド)
を後に残さず、確実に終了させること。
-
課題6 (提出課題)
-
以下のプログラムの実行結果を予測しなさい。
実際に実行して、予測と結果を比較検討しなさい。
parallel.cpp は複数回実行しなさい。
- serial.cpp
- parallel.cpp
結果の考察(なぜその様な結果になると思うか)を提出しなさい。
- 提出〆切:10月19日(火)17:00
- 提出方法:電子メールで に送る。
Subject(件名)を OS-1013 とすること。
- 配点:2点