5 プロセスの概念とその基本操作

目的

この実験では、Unixの普通のプロセスと軽量プロセス(thread)を用いて、 プロセスの概念と基本的な操作である生成と終了について学ぶ。 シェル・レベルのコマンドを用いてUNIXのプロセスを観察する。 C言語により、プロセスの生成・終了を行うプログラムを作成する。

関連科目

情報204 オペレーティングシステム 必修、2単位 教科書: Operating System Concept

準備

上記教科書のプロセスに関する章を読んで、プロセスの概念をつかみなさい。 プロセスとプログラムの違いは、どこにあるのか。プロセスに関する次の キーワードの意味を調べなさない。

この実験では、普通のプロセス(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などの同じ名前のファイルが上書きされ 不都合が起きる可能性がある。

  1. 4.1 UNIXのプロセスの観察と簡単な操作
  2. 4.2 プロセスの生成
  3. 4.3 軽量プロセスの生成
  4. 4.4 相互排除
  5. 4.5 プロセス間の同期問題

報告書

それぞれの実験に付いて、作成したプログラム、その説明 (Makefile についても説明すること)、および、その実行結果を付けなさい。 この実験では、プログラムの説明では、フローチャートを付加する 必要はない。開発環境と実行環境 (計算機、オペレーティング・ システムのバージョン、コンパイラ)を載せなさい。それぞれの 実験について、プログラム作成に要した時間を書きなさい。

一般的な注意

報告書は、日本語または英語で記述すること。プログラム、 表、図、数式の羅列は、報告書とは認めない。図は必ず 本文から参照すること。数学における証明のように、 示すべき結論、用いる仮定と前提、推論の詳細について 論理的に記述しなさい。