5 プロセスの概念とその基本操作
目的
この実験では、Unixの普通のプロセスと軽量プロセス(thread)を用いて、
プロセスの概念と基本的な操作である生成と終了について学ぶ。
シェル・レベルのコマンドを用いてUNIXのプロセスを観察する。
C言語により、プロセスの生成・終了を行うプログラムを作成する。
関連科目
情報204 オペレーティングシステム 必修、2単位
教科書: Operating System Concept
準備
上記教科書のプロセスに関する章を読んで、プロセスの概念をつかみなさい。
プロセスとプログラムの違いは、どこにあるのか。プロセスに関する次の
キーワードの意味を調べなさない。
- プロセスの状態と状態遷移
- FCFS(FIFO)スケジューリング
- プロセスの切替(コンテキスト切り替え)
- 軽いプロセス(以下では軽量プロセス)
この実験では、普通のプロセス(regular process)と軽量プロセス
(lightweight process)という2種類のプロセスを用いる。両者の
間に基本的な考え方は共通している。たとえば、状態遷移、
スケジューリング、プロセスの切り替え(コンテキストの切り替え)
などの考え方や仕組みは、両者で共通である。両者の違いを以下に
まとめる。
| プロセス | 軽量プロセス |
単位 | プログラム | 手続き(関数) |
保護 | あり | なし |
操作 | 重たい | 軽い |
軽量プロセスは、普通のプロセスの中に作られる小型のプロセスである。
普通のプロセスを生成する場合、実行形式が格納されたファイルを指定する。
一方、軽量プロセスを生成する場合、手続き(C言語の関数)を指定する。
普通のプロセスでは、保護の機能が働き、1つのプロセスが暴走しても
システム全体が停止することはない。一方軽量プロセスでは、一つの
軽量プロセスでエラーが発生し実行が続けられなくなると、プロセス全体が
以上終了させられる。軽量プロセスの操作(プロセス生成、プロセス間の
同期・通信、コンテキスト切り替え)は、普通のプロセスと比較して、10
倍から100倍程高速に行われる。
実験
この実験で用いるプログラムは、/usr/open/classes/slab/info1/5-process
にある。次のように、各自、自分のホーム・ディレクトリの下にこの実験
用のディレクトリを作りなさない。そして、上のディレクトリにあるファイルを
コピーしなさない。
% mkdir ~/実験用ディレクトリ
% cd ~/実験用ディレクトリ
% cp -r /usr/open/classes/slab/info1/5-process/* .
ここで、「実験用ディレクトリ」には、各自都合の良い名前を付けなさい。
他の実験と混ざらないよう、実験テーマごとにディレクトリを作りなさい。
そうしなければ、Makefileなどの同じ名前のファイルが上書きされ
不都合が起きる可能性がある。
- 4.1 UNIXのプロセスの観察と簡単な操作
- 4.2 プロセスの生成
- 4.3 軽量プロセスの生成
- 4.4 相互排除
- 4.5 プロセス間の同期問題
報告書
それぞれの実験に付いて、作成したプログラム、その説明 (Makefile
についても説明すること)、および、その実行結果を付けなさい。
この実験では、プログラムの説明では、フローチャートを付加する
必要はない。開発環境と実行環境 (計算機、オペレーティング・
システムのバージョン、コンパイラ)を載せなさい。それぞれの
実験について、プログラム作成に要した時間を書きなさい。
一般的な注意
報告書は、日本語または英語で記述すること。プログラム、
表、図、数式の羅列は、報告書とは認めない。図は必ず
本文から参照すること。数学における証明のように、
示すべき結論、用いる仮定と前提、推論の詳細について
論理的に記述しなさい。