情報学類計算機システム実験/K-3 システムプログラム

担当教官

加藤和彦 (kato@is.tsukuba.ac.jp)
新城靖 (yas@is.tsukuba.ac.jp)

注意事項

この実験は3, 4年生対象1学期開講の講義「システムプログラム」と連 動したものである.同講義で学ぶ,Unixのシステムコールを駆使したプログラ ミングを行う.既にシステムコールに関してある程度の知識を有する者は,同 講義の聴講と並行して本実験を行うことは可能であるが,そうでない者につい ては困難が伴う可能性があるので2学期での受講を推奨する.
課題1と課題2の両方を行うこと.
最後にある課題1と課題2に共通するレポート作成上の注意をよく読むこと.

最新重要情報

最新の重要連絡がここにありますので,必ず参照してください.

課題1 シェルの作成

この実験では,UNIX上で動作する簡単なシェル(コマンド・インタプリタ)を作成する.この実験の目的は,簡単なシェルの作成を通じて,プロセスの生成,入出力の切替え,パイプの動作について深く理解することを目的とする.

課題1-1 UNIX上の既存のシェルの調査

UNIXでは,さまざまなシェルが利用可能になっている.例えば, sh, csh, tcsh, bash, ksh, zsh等がある. これらのシェルが持っている機能と,それらの機能がどのようにし て実現されているかを調べなさい.特に,コマンドの実行方法, パイプラインの作成方法(パイプラインに属しているプロセスの親 子関係)について,調査しなさい.そして,何を調べたか,調査 の結果とその方法を報告しなさい.

課題1-2 シェルの基本機能の作成

次の機能を持つシェルを作成しなさい.以下に示す例は,UNIXの csh (tcsh) の文法と機能に基づいている.

(1) 単一コマンドの実行
例:% ls

(2) 標準入出力の切替え
例:% wc < data > result

(3) 複数コマンドからなるパイプラインの実行
例:% cat data1 data2 | sort +1 -2 | lpr

(4) 上記(1)〜(3)の組み合わせ
例:% cat data1 data2 | sort +1 -2 > result

(5) 終了コマンド(csh では,exit)を受け付けると終了するものとする.しかしながら,^C, ^\ といったキーボードからの割込みによって,シェル自身が終了してはならない.シェルから起動したコマンドは,これらの割込みにより終了するものとする.割込みについてマニュアルの signal 等の項目を調べよ.

課題1-3 課題1-2の機能に加えて,下記の機能からいくつかを選択して実装しなさい.

(7) 標準エラー出力の切替え
例:% make |& tee log

(8) 標準出力,標準エラー出力における追加モード
例:% cat data1 | sort >> result

(9) 複数のコマンドの順次実行
例:% date; who; pwd

(10) 子シェル(コマンド・グループ)の実行
例:% (cat data1 data2 | sort > result) >& error

(11) バックグランド実行
例:% sort data | lpr &

(12) 条件実行
例:% egrep pattern data > result && lpr result
例:% cc test.c >& err || lpr err

(13) cd, time, pushd, popd などの内部コマンドの提供
例:% cd /

(14) ジョブ制御(フォアグランド,バックグランドの切替え)

(15) その他,UNIX 上のシェルが持っている機能

(16) UNIX上のシェルがもっていないような新しい機能

課題1に関するレポート作成上の注意

作成したシェルが持っている外部仕様(機能と制限事項)について,報告書に明確に記述しなさい.当然のことながら,多くの機能があり,制限がないことが望ましい.
作成した機能を説明するために,十分な実行例を添付しなさい.複数の機能の組み合わせについても同様である.
UNIX上の既存のシェルと実験で作成した簡単なシェルを比較しなさい.特に,パイプラインの作成方法について比較しなさい.

課題2ネットワークプログラミング: mini-FTP

ネットワークプログラミングの理解を深めることを目的として,UNIXのソ ケット機能を用いて対話的にファイル転送を行うプログラムmftp (mini-ftp)を作成する.

以下の諸点に注意してプログラムを作成すること.

ネットワークプロトコルとしてTCP/IPを用いること.
TCPプロトコルのソケットに対してreadおよびwriteシステムコールを実行すると,通常のディスクファイルに対する入出力と 異なり,指定したバイト数よりも少ないバイト数しか入出力が行なわれな いことがある.これはOSカーネル内のTCPプロトコル用のバッファサイズに起因している.この点に注意をしてこれらのシステムコールを使うこと.
あらかじめサーバサイト側でサーバプログラム(mftpd)を前もって 立ち上げておく.ユーザはクライアントプログラム(mftp)を起動する際に 通信相手となるサーバサイト名を指定する. すなわち,クライアント側は 次のようなシェルコマンドでクライアントプログラムを起動する.
   % mftp server_site_name
必要に応じてmftpの起動時引数を追加してもよい.
ソケットのポート番号としては,他の実験者との衝突を避けるために,各自
    (学籍番号*10)〜(学籍番号*10+9)}
を用いるようにすること.
mftpは少なくとも次のような対話コマンドをサポートすること.
get file コマンド引数 fileで指定したファイルをクライアントサイト側にコピーする.
put file コマンド引数fileで指定したファイルをサーバサイト側にコピーする.
dir サーバサイト側のディレクトリ情報を表示する.
上記以外に例えば下記のような対話コマンドを実行できるようにしてもよい.
help 使用可能な対話コマンドとその簡単な説明を表示する.
cd dir サーバサイト側で,dirで指定したディレクトリに作業ディレクト
リを変更する.
lcd dir クライアントサイト側で,dirで指定したディレクトリに作業ディレクト リを変更する.
全体の設計としてはftpやtftpを参考にするとよい.

課題2に関するレポート作成上の注意

1MB以上のファイル転送が可能であることを示すこと.使用可能なすべての対話コマンドの実行例を示すこと.
正しくファイル転送が行われていることをしめすために,サーバ側とクライアント側でのシェルコマンド"ls -l"の実行結果を付けること.

課題1と課題2に共通するレポート作成上の注意

項 目

説  明

プログラムの仕様
プログラムの入力と,その入力に対する動作および出力を過不足なく述べること.
自分で設定した拡張や制約に関しても述べること.
アルゴリズム,方式,内部動作の説明
プログラム中で使用しているアルゴリズムや方式の採用理由とその内容を分かりやすく説明すること.
ネットワークプログラミングの場合は,クライアントプロセスとサーバプロセスの間のプロトコル(両プロセスでどういう場合にどういうメッセージやデータがやりとりされるか)を記載すること.
必要に応じて図を用いること.
プログラムの中に書き込むのではなく,独立したページに記述すること.
開発環境
プログラム開発に使用したプログラミング言語,言語処理系,オペレーティングシステム,計算機機種,ライブラリ等を記載すること.
プログラム(ソースコード)
作成したプログラムを記載すること.
実行結果
実行環境(少なくとも計算機機種名,オペレーティングシステム名)),および,実行結果を記載すること.
実行結果は,プログラムがきちんと動作していることを示すために必要かつ十分なものになるようにすること.
実行結果の入力部と出力部がはっきりとわかるように工夫すること.
実行例を考える際には,どういう例を付せば,実現すべき機能が動作していることを示せるかをよく考えること.
実行例をわかりやすくるすためには,プログラムの仕様作成の際に,どういう入出力をすると効果的かを配慮しておくとよい.
実行結果が付されていない機能に関しては実現されなかったものとみなす.
参考文献
プログラミングおよびレポート作成の際に参考にした参考文献を記載すること.
要した時間
プログラムの作成に要した時間,および,本レポートの作成に要した時間を記載すること.プログラムモジュールごとの開発時間を記載してもよい.
本実験の感想
プログラミングおよびレポート作成の際の感想を記載すること.
レポートのバインディング
レポートの左上をホッチキス等でとめること.

参照