[概要][詳細][実験トップ]

計算機システム実験:システムプログラム

担当教官

この実験では、次の課題を行う。

2学期は、9月2日4時間目(13:45-)から説明を行います。 3C113 の adonis9 の近くに集まって下さい。

課題1の締切は10月14日です。 レポートは、レポート作成上の注意を良く読み、3C113に設置されるレポート提出箱に提出しなさい。

課題2について、課題1の締切の前、10月12日3時間目(12:15-)から説明を行います。 3C113 の adonis9 の近くに集まって下さい。

課題1 シェルの作成

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

この課題1に関する補足説明を参考にしても良い.

課題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の機能に加えて,下記の機能から1つ以上を選択して実装しなさい.

(6) 標準エラー出力の切替え

例:% make |& tee log

(7) 標準出力,標準エラー出力における追加モード

例:% cat data1 | sort >> result

(8) 子シェル(コマンド・グループ)の実行

例:% (cat data1 data2 | sort > result) >& error

(9) バックグランド実行

例:% sort data | lpr &

(10) 条件実行

例:% egrep pattern data > result && lpr result
例:% cc test.c >& err || lpr err

(11) cd, time, pushd, popd などの内部コマンドの提供

例:% cd /

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

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

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

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

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

課題2A 簡易FTP

ネットワークプログラミングの理解を深めることを目的として,Unixのソケッ ト API を用いて対話的にファイル転送を行うためのサーバ・プログラム、お よび、クライアント・プログラムを作成する。サーバ・プログラムを、mftpd (mini ftp daemon)、クライアントを mftp (mini ftp) と呼ぶ。

課題2A-1 プロトコルの設計

クライアントとサーバの間でどのような形式でコマンドやデータをやり取りす るかのプロトコルを設計しなさい。少なくとも次のような機能を実現する必要 がある。 実際の ftp では、コマンドとデータを別々の TCP/IP のストリームで転送し ている。この課題で作成する mini-ftp では、その必要はない。

バイト・オーダが違うコンピュータであっても転送できるようにしなさい。デー タとして0を含むようなバイナリ・ファイルも転送できるようにしなさい。

コマンドやデータ区切りを保つには、次のような方法が考えられる。

課題2A-2 クライアントとサーバの作成

サーバ・プログラム mftpd は、次のようにして実行する。

% mftpd portno
引数として、ポート番号を取る。必要に応じて時引数を追加してもよい.

ポート番号としては,1024 以上で、他の実験者との衝突を避けるために,引 数で与えられるようにしておくとよい.ただし、サーバは終了しないので、自 分自身のプログラムと衝突させて、多数の mftpd を実行しないように注意し なさい。特定のポート番号は、一定時間利用できなくなることがあるので、2、 3個のポート番号を順に使うとよい。

サーバ・プログラム mftp は、次のようにして実行する。

% mftpd host portno
引数として、サーバが動作しているホストのホスト名とポート番号を取る。必 要に応じて引数を追加してもよい.

mftpは少なくとも次のような対話コマンドをサポートすること.

get file
コマンド引数 fileで指定したファイルをクライアントサイト側にコピーする.
put file
コマンド引数fileで指定したファイルをサーバサイト側にコピーする.
dir
サーバサイト側のディレクトリ情報を表示する.
上記以外に例えば下記のような対話コマンドを実行できるようにしてもよい.
help
使用可能な対話コマンドとその簡単な説明を表示する.
cd dir
サーバサイト側で,dirで指定したディレクトリに作業ディレクト リを変更する.
lcd dir
クライアントサイト側で,dirで指定したディレクトリに作業ディレクトリを変更する.
put, get の拡張(1)
転送を途中で一時的に中断する。中断した転送を再開する。
put, get の拡張(2)
複数ファイルを同時に転送する。一つのファイルを分割して同時に転送する。
その他の機能としては、実際の ftp コマンドや ftpd コマンドを参考にする とよい.

この課題では、ネットワークプロトコルとしてTCP/IPを用いなさい。また、通 常の Socket API 、または、それと類似のレベルの API を用いること。

TCPプロトコルのソケットに対してreadおよびwriteシステムコールを実行する と,通常のディスクファイルに対する入出力と異なり,指定したバイト数より も少ないバイト数しか入出力が行なわれないことがある.これはOSカーネル内 のTCPプロトコル用のバッファサイズに起因している.この点に注意をしてこ れらのシステムコールを使うこと.

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

課題2B 簡易ウインドウ・システム

ネットワークプログラミングの理解を深めることを目的として,クライアント・ サーバ・モデルに基づく簡単なウインドウ・システムを作成する。

四角、三角、丸、直線が書かれたウインドウ

この課題では、サーバは、既存の X Window、Java、または、その他の既存の ウインドウ・システムの機能を用いて画面を表示する。クライアント側は、 サーバに対して TCP/IP により要求を送る。

この課題では、ネットワークプロトコルとしてTCP/IPを用いなさい。また、通 常の Socket API 、または、それと類似のレベルの API を用いること。

TCPプロトコルのソケットに対してreadおよびwriteシステムコールを実行する と,通常のディスクファイルに対する入出力と異なり,指定したバイト数より も少ないバイト数しか入出力が行なわれないことがある.これはOSカーネル内 のTCPプロトコル用のバッファサイズに起因している.この点に注意をしてこ れらのシステムコールを使うこと.

課題2B-1 プロトコルの設計

クライアントとサーバの間でどのような形式でコマンドやデータをやり取りす るかのプロトコルを設計しなさい。少なくとも次のような機能を実現する必要 がある。

課題2B-2 ウインドウ・システムの基本機能

課題2B-1に示したプロトコルを用いて、ウインドウ・システムのクライアント、 および、サーバを作成しなさい。

課題2B-3 ウインドウ・システムの拡張機能

下記の機能から1つ以上を選択して実装しなさい.

レポート作成上の注意

プログラムの仕様

開発環境

実行結果

参考文献,感想

とじかた


Last updated: 2005/08/26 09:50:00
Yasushi Shinjo / <yas@is.tsukuba.ac.jp> and Shuichi Oikawa / < shui @ cs.tsukuba.ac.jp >