プログラム - みる会図書館


検索対象: UNIX MAGAZINE 1991年6月号
55件見つかりました。

1. UNIX MAGAZINE 1991年6月号

連載 /UNIX Communication Notes— 図ー NIS におけるサーバーの発見 NIS Server YPServ 3 1 , 4 broadcast) ypbind 6 user program ( NIS client ) Client 合せが必要になると、ます ypbind に対して、、 NIS サー おこない、変史されたものをマスターサーバーからスレー プサーバーに送ることでマップの一貫性を保ちます。 NIS ーはどの計算機か ? 〃と間い合わせます。 3 ) 間合せを受けた ypbind は、起動時に決定した ypserv サーバーの自動切替え機能については後述します。 に対して、、利用可能か ? 〃というメッセージを送り、 NIS クライアント ypse Ⅳから返事があればサーバーは利用できるものと NIS クライアントは、 ypserv と通信して必要な情報を 判断します。 返事がなかった場合は、起動時と同しように broadcast 取得するアプリケーション・プログラムです。実際には、 を用いて ypserv を捜し、見つかったものを使用する データベース・ファイルの検索をおこなう標準的な関数 ypserv として記録します。 gethostbyname ( ) が NIS 対応になっており、 Sun RPC 4)NIS クライアントのフログラムに、 ypserv か加力いてい を用いて ypserv に問い合わせるようになっています。し るワークステーションの IP アドレスを返します。 たがって、この関数を使うプログラムはすべて NIS クラ 5)NIS クライアントは、 ypserv への問合せに ypbind か イアントということになります。 ら得られた IP アドレスと SunRPC を使います。 前述したとおり、一般に NIS 環境では複数の NIS サー バーを用意します。 NIS クライアントは、そのうちのどれ このような機構により、使用中のサーバーに障害が起き か 1 つを選択して使います。サーバーの選択をするのは ても、別のサーバーを自動的に捜すことができるのです。 ypbind で、 NIS クライアントが NIS サーバーに問い合 わせる際には、次のような処理がおこなわれます ( 図 1 参 NIS のバージョン 照 ) 。 NIS にはいくっかのバージョンがあります。ます、開発 元の SunOS に含まれている、、純粋な〃 NIS と、それ以外の l)ypbind は、各ワークステーションで 1 度だけ起動され OS に含まれているものとに分けられます。後者は Sun か ます。通常はシステムのプート時です。 ypbind はネット ら提供されたソースをもとに移植したもので、いわばヾ移 ワーク上の ypse Ⅳに対してある broadcast( 同報通 植された〃 NIS ということになります。、、純粋な〃 NIS と 信 ) を送り、これに対して最初に返事をしたものをそのワ 、、移植された〃 NIS の機能的な相違は移植に依存しており、 ークステーションで使用する ypserv とします。 ypbind 後者が、、純粋な〃 NIS と同一の機能をもっとはかぎりませ は、その ypse Ⅳが稼動しているワークステーションの ん。したがって、 SunOS 以外の OS を用いて NIS 環境を IP アドレスを記録します。 構築する場合は、提供されている機能をマニュアルなどで 2)NIS クライアントのプログラムは NIS サーバーへの問 63 UNIX MAGAZINE 1991.6

2. UNIX MAGAZINE 1991年6月号

chown root del chmod 755 del chmod u + s del 実効ューザー id をスーパーユーザーのものにして実行 するようなプログラムを書くときは、とくに注意しなけれ はならない。そのプログラムはシステム全体にアクセスす ることが可能で、すべての制限はプログラム本体に明示的 にコーディングされていなければならない。ファイルに対 する権限のチェックは実効 id ではなく、実 id に対してお こなわなければならない。アクセス・システムコールはこ の目的のためだけに用意されている。 $ H 〇 ME /. del へのアクセス性についてもチェックが必 要である。というのは、ユーザーが自分の H 〇 ME 環境変 数を変更することを防ぐ手段はまったくないからである。 また、 $HOME/. del には、その所有者といえども書込み許 可があってはならない。そのファイルは del 以外に書き込 まれてはいけないからである。 $ H 〇 ME /. del が 1 プロックを超えて大きくなることに ついては、すこしばかり注意が必要だ。新しいプロックは、 ューサーが復元しようとしている削除されたはかりのファ イルから取られるかもしれないからである。これは、 $HOME/. del を定期的にパージするか、 del を変更して 1 プロック内で循環するようにしておけば避けられる。 リスト 3 は、 undel のリストである。このプログラムは、 削除されたファイルを実際に復元する。ファイルは別のフ ァイルシステムに復元しなければならない。さもないと、 #include く math. h> #include く stdio . h> #include く fcntl . h> リスト 3 undel プログラム #include "del . 足 #include #include #include #include #include #include #include "unixlib. h" #include " syscalls. h" く sys/stat. h> く sys/ino. h> く sys/filsys. h> く sys/param. h> く sys/types. h> #include く string > #include く stdlib. h> #include く limits. h> く errno . h> / * プログラム名 * / UNIX MAGAZINE 1991.6 int main(int argc, char *argv[J) char *b1kbufvCINDIRECT MAX + 1 ] ; / * 大域データ * / #define USAGE "usage: " PROGNAME " fi1e [outfile]\n' #define min(a,b) ( (a) く (b) ? (a) : (b)) #define "undel" UNIX ファイルの復元■ 復兀しようとしているファイル自体に上書きしてしまうか もしれないからである。 ファイルを復元するとき、復元しようとしているファイ ルが削除されてから、あるプロックが使用されたか否かを 知る方法はない。復元されたプロックの一部に、そのユー ザーがアクセスしてはならない別のファイルからのデータ を含んでいる、という可能性はおおいにある。このため、 undel は set-user-id ビットをセットしていない。 undel を実行できるのはスーバーユーザーになれるユーサーだけ なので、復元されたプロックをもとのユーザーに返す前に その内容を注意深く調べる必要がある。 del プログラムは rm の完全な代用品になる。しかし、フ ァイルはほかの方法でも削除できる。たとえば、 mv やシェ ルのリダイレクト演算子わ〃である。 del と同様の復元情 報を保存する新しい移動プログラムを書くこともできるが、 リダイレクトについては新しいシェルを書く以外、できる ことがあまりない。そこまでしたとしても、プログラムは unlink を直接呼び出してファイルを削除できる。これらす べての可能性に対応する唯一の方法は、 unlink をインタ ーセプトすることであろう。これは、オペレーティング・ システムのカーネル内部でのみなしうることである。 ・ LyIe Frost コンサルティングとソフトウェア開発の Citadel 社のオーナー UNIX multitasking(Computer Language 誌 1990 年 7 月号参照 ) UNIX REVIEW 1990 年 10 月号より 「 UNIX File Recovery 」 の筆者でもある。 / * プロックノヾッフア・べ クトル * / 115

3. UNIX MAGAZINE 1991年6月号

IJN Ⅸ流プログラ while ( (c = getchar() ) ! = EOF) putc (c , stderr) ; ミング 8 うなときは、 strings コマンドのノヾス名ー grep -i usage とすると、たいていは見ることができます。参考にしてみ てはいかがでしよう。 Usage 出力の方法 力に出力するプログラムを書くという方法があります。た ます。より進んだ解決策として、自分自身で標準ェラー出 パイプのなかを流れてしまうという困った状況だけは防げ く端末に出力することになりますが、エラーメッセージが とするものです。このようにすると標準ェラー出力ではな echo 文字列 > /dev/tty これは、 /dev/tty にリダイレクトするという方法を紹介しました。 csh の場合は標準工ラー出力には出力できませんから、 工ラー出力に対しておこなわれることになります。 レクトされます。したがって、 echo コマンドの出力は標準 文字列は、 1 〉 & 2 という部分で標準ェラー出力 ( 2 ) にリダイ とします。この echo コマンドで標準出力 ( 1 ) に出力された echo 文字列 1 > & 2 です。実際には、 の出力先をリダイレクトして標準ェラー出力に変えるだけ sh の場合には echo コマンドを用いて出力しますが、そ ておきましよう。 ては 1990 年 12 月号で説明しましたが、もう 1 度お話しし 味がありませんね。この標準ェラー出力の使用方法に関し 出力は一種のエラー出力ですから、標準出力に送っても意 する場合は、標準工ラー出力を利用してください。 Usage するための方法についてお話ししましよう 0Usage を出力 けたでしようか。次はプログラムのなかで Usage を出力 さて Usage 出力のメッセージの内容はお分かりいただ とえば次のようなプログラムを書き、 UNIX MÄGAZINE 1991.6 int C ; main() #include く stdio . h> % cat stderr. c これを stderr などという名前でコンパイルしておくので す。また、 sh プログラムを使っても実現することができ、 stderr echo 文字列ー して出力したい場合には、 といったプログラムを作成しておきます。標準ェラーに対 cat 1 > & 2 # ! /bin/sh % cat stderr 131 ンの解析をおこなうループのなかで判断できます。指定さ オプションが正しく与えられなかった場合は、オプショ が正しく与えられなかった場合です。 な引数が与えられなかった場合、もう 1 つは、オプション のケースが考えられます。 1 つは、コマンドに対して必要 を出せばよいのでしようか。これには大きく分けて 2 通り さて、プログラムのなかのどういう場面で Usage 出力 Usage 出力をおこなう場所 となります。 fprintf (stderr , 文字列 ) : います ) 。実際の使用方法は、 すにの値は stdio. h インクルードファイルで定義されて ラー出力に対して出力したいのですから、 stderr を渡しま どこに出力するのかを示す値を渡すのです。今回は標準ェ 数として stream 引数をとります。この stream 引数に 関数と同様の引数をとりますが、 printf 関数がとらない引 場合には fprintf 関数を使います。 fprintf 関数は printf 出力だけをおこないますので、標準ェラー出力に出力する 常 printf 関数を用います。 printf 関数は標準出力に対する C 言語によるプログラムで文字列を出力するときは、通 可能です。 ラムです。これを使えは標準ェラー出力に出力することが 文字を、そのまま標準ェラー出力に出力するだけのプログ などとします。このプログラムは標準入力から読み込んだ

4. UNIX MAGAZINE 1991年6月号

SC 翡 Macintosh プログラミングライプラリ TOOLBOX 100 の定石 小池邦人著 3.5 〃フロッピーティスク付き B5 判 280P 定価 4 , 800 円 Toolbox を徹底的に使いこなすための 1 00 のテクニック 隹も教えてくれなかった Toolbox の使い 方を豊富なサンフルプログラムで解説。 BitMap を PICT にするには ? ポップアッ フメニューの作り方は ? SCSI ・シリアルホ ートの使い方は ? など、すぐに使えるフロ のテクニックを満載。 THINK C 4.0 対応。 全ソースリストの入った FD 付き ! いれを・ : 第第ま物冫 ページ記述言語 POSTSCRIPT プログラム・テサイン アドビ・システムズ著松村邦仁訳アスキー出版技術部監訳 B5 変型 253P 定価 3 , 090 円 アドビ社純正マニュアル 3 部作完成 PostScript における高速なプログラミングとは / 効率のよいスタックや 辞書の使い方とは / 他のプログラムと協調するためのモジュール化の 最新 3 次元コンピュータ 技法 / 真の PostScript 対応アフリケーションと呼べるプログラムとは ・・などの疑問に、豊鬲なソースコードによって答える。 グラフィックス ページ言己述言語 アンドリュー・ s ・グラスナー著白田耕作監訳 POSTSCRIPT B5 判 304P 定価 3 , 000 円 リファレンス・マニュアル A. S. グラスナーの最新コンピュータグラフィックス CG ( コンヒュータグラフィックス ) の立 アドビ・システムズ著松村邦仁訳石田晴久監修 B5 変型 340P 定価 3.090 円 体表現や質感表現などの最新技術 ユンヒタ ヘーシ言己述画言ロ を、難しい数式やフログラムをいっさ POSTSCRIPT い使用せす、懇切に解説。豊富なカ 0 チュートリアル & クックプック ラー図版や写真により、初心者でも CG の世界を理解することができる。 アドビ・システムズ著野中浩一訳アスキー出版技術部監修 CG にたずさわる方々必備の 1 冊。 B5 変型 296P 定価 3.090 円 Macintosh Programmer's Workshop Development Environment 、み ()lur れ e 1 日一本吾片反 A4 変型 ( レターサイズ ) 700P 定価 8 , 800 円 、み 01u1 e 2 日一本吾片反 A4 変型 ( レターサイズ ) 350P 定価 6 , 800 円 Apple Computer c. 著アップルコンピュータジャパン監訳 Macintosh Programmer's Workshop 日」本第吾片反 A4 変型 ( レターサイズ ) 294P 定価 5 , 800 円 Apple Computer c. 著アップルコンピュータジャパン監訳 Shell 、アセンプラ、 Pascal 、 C をはしめとする膨大なフログラミングッールで構成され る Macintosh 純正のツール群 MPW (Macintosh Programmer's Workshop) 。 Apple Computer 社がすべてのフログラマーに贈る日本語マニュアル化完成 ! ※表示定価は消費税込みで ・ Macintosh は、米国アップルコンビュータ社の商標です。 ・ PostScript は、アドビ・システムズ社の商標です。 〒 107-24 東京都港区南青山 6 ー 11 ー 1 スリーエフ南青山株式会社アスキー書籍 / 雑誌営業部電話東京 ( 03 ) -1977 株式会社アスキー ・ブックカタログ送呈 : 住所・氏名・年齢・職業・電話番号・使用機種名を明記の上、宣伝部 MAC 係まて八ガキてお申し込みください。 資料請求 N 。 .068 、 POSTSC.RIPT リファレンス・マニュアル 二二ロ ′、ロ R を 'V S A 、ヨ、 E 日を M 紅ⅲいト h P 「い g 「け、 \Vork 、 hOl D い℃いⅡ 、ⅱ um ぐ」 、に in い物 忻ロ mm ( 、、の「 k トⅸ甲 l)evclopmcnt 日 1 ⅵ「 0 川 11 ロ社 Volume ー 日 4 : 第気 M : にⅲい物 P ) g ロ mm い・・ト从朝「 k ト h い p ( : 洋 ! ・いに↓物料

5. UNIX MAGAZINE 1991年6月号

ステータスとして扱われます。プログラムの制御が main 関数の終りまで到達すると自動的に main 関数を抜けま すが、この場合の exit ステータスは不定となってしまいま す。また、 exit 関数を引数を指定せすに呼び出した場合に も、その終了ステータスは不定となってしまいます。この ようなことがないように注意してください。 シェルの場合には exit 関数はありませんが、引数をとも なう exit コマンドがあります。この exit コマンドはシェル スクリプトの実行をそこで停止し、引数として与えられた 値をそのシェルプログラムの終了ステータスとするもので す。この値を指定しなかった場合には、最後に実行したコ マンドの終了ステータスがシェルプログラム自身の終了ス テータスとして用いられますので、注意してください。誤 った値を返さないように、プログラムのなかに明示的に書 き込んでおいたはうがいいでしよう。 C のプログラムでほかのプログラムを呼び出すことはあ まりありませんが、シェルプログラムはコマンドを呼び出 して処理をおこないます。呼び出したコマンドの終了ステ ータスが必要な場合、シェルではそれらを参照することが できます。 sh の場合は $ ? を、 csh の場合は $status を使っ てください。それぞれの変数は、直前のコマンドの終了ス テータスの値を示すようになっています。この変数の値が 0 ならば、直前のコマンドは正常終了していますし、 0 以外 の値を示していれは異常終了しているのです。最後に実行 したコマンドの終了ステータスを、本当にシェルプログラ ム自身の終了ステータスとしたいときは、この値を用いて 明示的に指定したほうがプログラムが見やすくなります。 今回は、コマンドに対する引数が正しく与えられなかっ たときに出力する Usage 出力と、コマンドの実行が正し くおこなわれたかどうかを示す exit ステータスに関して お話ししました。 Usage 出力は、コマンドの使用方法など を忘れてしまったときとても便利なので、一 h などのオプシ ョンで出力されるようにしてもいいでしよう。また exit ス テータスに関しては、シェルスクリプトだけでなく多くの コマンドがこの値を用いて実行の制御をしていますから、 これらの値を正しく設定することを忘れてはいけません。 さて次回は、ユーザーによるカスタマイズが可能なプロ グラムを作成する方法の 1 っとして、環境変数を用いたカ スタマイズに関してお話ししたいと思っています。 ( いまいすみ・たかし東京工業大学 ) UNIX MAGAZINE 1991.6 U-TERM N EO ー PC 98 田シリーズ用 EPSON- PC286 シリーズ用 ( MS ー DOS ノヾージョン 3 コ以降 ) 曰ト機能のし花 M 誕目 パソコンが UNIX WS の有能な端末に ■日本語機能 文字コードは、 JIS か MS 漢字コードの 2 種類から選 択。 JIS のモードでは、全ての文字コード拡張手順を サポート。 JIS 初期値と JIS 現在値を任意に変更でき るため、 EUC コードや DEC コードにも完全に対応。 ・グラフィック機能 テクトロニクス 4014 端末に準拠したグラフィックモ ード。カラーでの出力も可。 JIS と重複する画面消去コードを除き、 PC9801 と上 位互換を持つように拡張されている。ビジカレベル、 カーソルの形状変更、プリンクの有無などの制御コ ードを含む。これらは、ローカルに変更可。 ・通信機能 RS- 232C 拡張インタフェースポード 3 チャンネルの うち 1 チャンネルを選択使用。 75baud から、 19200baud ( クロック IOMHz 以上 ) まで 使用可、しかも、その高速処理は群を抜く。 フロー制御は XON / XOFF による制御法と信号法か らの選択。 ■ファイル転送機能 UNIX ホストと DOS ファイルの間でのテキストファ イル送受信が自在。コマンドは、 UNIX の cu と同様 の操作。 そ也多彩な機能満載、しかも低価格実現 価格 48 , 000 円 ( 消費税は別途 ) 開発及び販売 情報数理研究所 lnformation and Mathematical LaboratorY,lnc. 〒ロー東京都豊島区池袋 2 ー 437 池袋青柳ビル TEL. 03 ー 3590 ー 52 Ⅱ ( 代表 ) FAX. 03 ー 3590 ー 5353 資料請求 N 。 . OOD ・画面制御機能 135

6. UNIX MAGAZINE 1991年6月号

e $ & 0 ee 0 ce Apple の HyperCard で使用されている HyperTalk 言語に似ている。ューザーは、ボタン、ポップアップ・ メニュー、および目的のユーサー・インターフェイス項 目をマウス操作または単純なスクリプト言語で作成する ことができる。どちらの場合にも、得られたスクリプト は、編集、印刷、そのはかテキストデータとしての処理 をおこなうことができる。 大きな HyperScript アプリケーションの効率はあま りよくないが、ワークステーションはこういったものを 強く求める時期を迎えた。大きく成長する余地がある上 出来なスプレッドシートを必要としているのなら、 WingZ にはあきらかに検討の価値がある。 CAD と描画 Macintosh のための描画パッケージは多数ある。あ るものは CAD パッケージといい、あるものはテクニカ ノレ・イラストレーション・ユーティリティといっている。 しかし、こういった分類はしばしは事実よりも販売意図 にもとづいているので、だまされてはいけない。 Claris の MacDraw Ⅱおよび CIaris CAD はどち らも描画プログラムとして使用するのに適している。ど ちらも、ユーサーは円弧、円、線分、多角形、矩形、ス プラインなどを用いて 2 次元のオプジェクトを描くこと ができる。しかし、この 2 つを同しようなものとみなす のは誤りである。 CIaris CAD は特殊ツール、使用法の変更手段、その ほかさまざまな機能の追加により、 MacDraw のツール を強化している。たとえは、 ClarisCAD にはオプジェ クトの正確な寸法を制御するための多数の機能がある。 ほかのオプションで、描画基準を設定したり、オプジェ クトを柔軟な方法で複製したりすることもできる。 Claris CAD のドキュメントは明快で、構成もよい。 しかし、珍しいというはどではない。 Macintosh 用のし っかりしたパッケージには、入門用のチュートリアル、 ューサーズガイド、およびリファレンス・マニュアルが 備わっている。この 3 っカ叶分にカバーされていなけれ ば、その製品は完全とはいえない。 しかし、 Claris CAD のビデオテープは、例外的によ くできている。たしかに最初の 2 ~ 3 分は宣伝用であるが、 UNIX MAGAZINE 1991.6 その後にパッケージの機能と使用法について丁寧で分か りやすい説明が続く。 対照的だったのは Ashlar の Vellum のためのビデ オテープで、宣伝だけを目的としたものであった。 10 分 にも満たないのであまり無駄な時間を使わすにすんだ が、いすれにせよあまり役に立たなかった。 Ashlar は、 これをトレードショウやディーラーのデモ用にまわして、 新たに有用なピデオテープを作成すべきである。 しかし、パッケージのそれ以外の部分は、とてもよく 考えられている。パッケージの Drafting Assistant の 機能はとくに興味深い。これはユーサーの操作をモニタ ーして、有用なヒントとオプションを供してくれる。 たとえば、円周の線の端点までくると、 Assistant はさ まざまな視覚的なヒントを表示する。これらは、位置関係 を示す点線と、、 perpendicular" 、、 quadrant" 、、 tangent などのメッセージを含む。メッセージの 1 つが表示され ているときにマウスポタンを解放することにより、正確 な座標に端点を置くことができる。 Adobe の lllustrator 88 は優秀なテクニカル・イラス トレーション・パッケージである。ドキュメントは大量 であり、しつかりしたビデオテープもついている。この ことは重要である。というのは、 lllustrator は従来のよ うな描画パッケージではないからである。 大部分の描画パッケージは、線分、円弧などで操作を おこなう。 lllustrator も同様だが、任意のベジェ曲線の 集合によって定義されたオプジェクトを採用している。 このようにして、Ⅲ ustrator はマウスペースのインター フェイスを通して、 PostScript7 ラフィックス・モデル の大部分をユーザーが扱えるようにしているのである。 プロジェクト管理 Macintosh のアプリケーションの多くはごく特殊化 された描画プログラムであり、分野に固有の知識をある 程度必要とする。通常、ユーサーはなんらかの図やグラ フを作成し、プログラムはそのために集められたデータ を処理する。 プロジェクト管理プログラムはこのジャンルの典型で ある。ューサーは作業と依存関係を定義し、プログラム は所要時間を計算してクリティカルバスを見つける。 15

7. UNIX MAGAZINE 1991年6月号

しかししつは、 VLIW を動かすのは簡単ではありませ ん。 ALU が複数あっても、同時に演算できるデータの組が 複数なけれは仕方がないからです。 たとえは、 c=a 十 b; d=a 十 c; という 2 行は、 ALU が 2 つあっても同時には実行できま せん。なぜなら、 1 行目で代入した c を 2 行目で参照して いますから、 1 行目の計算が完全に終らないと 2 行目の c の値が分からないからです。こういう関係を、、データ依存 関係〃と呼びます。 VLIW では、コンパイラがデータ依存関係を検出し、依 存関係のないものを同時に実行できるようにコードを並べ なおす ( コード・スケジューリングと呼ぶ ) ことになってい ます。 また、 VLIW は基本的には RISC ですから、レジスタの 割付けも重要です。複数の ALU が活かせるようにデータ 依存関係のないものをレジスタに詰め合わせなけれはなら ないわけですから、コンパイラは RISC よりも頑張ってコ ード・スケジューリングしなけれはなりません。 VLIW マシンには、コード・スケジューリングが正しい つもりで突っ走ってしまうものがよくあります。そして、 人間がそんな機械のためにアセンプラで大規模なコード を書けるはすもありません。ですから、コンパイラにバグ があったらおしまいです。 とはいっても、依存関係を無視したコードがそのまま走 ったのでは間違った結果が出るだけです。したがって、ま だできていないデータを参照した場合には、ハードウェア でインターロックがかかるような VLIW マシンも比較的 古くからあるようです。 SuperScalar スカラー (ScaIar 、スケーラーと発音するのが正しいよ うです ) は、べクター (Vector) とは対をなす言葉です。っ まりは、スーパーコンピュータのようなべクターマシンに 対抗しているということなのでしよう。 lntel が i960 をつ くったときにできた言葉ですが、アメリカ人はいつもうま い言葉を考えつきますね。 120 SuperScalar は、演算ユニットを複数積む点は VLIW と同しです。また、 SuperScalar では 2 つ以上の命令をい ちどにフェッチするのが普通です。これらの特徴は VLIW とまったく同しなので、丘では SuperScalar は VLIW の一種として分類されることが多いようです。 では、 SuperScalar と VLIW はどこが違うのでしょ う ? さきほど説明したとおり、 VLIW では ALU などの 資源のスケジューリングが静的に決められ、プログラムコ ードに反映されているのが基本です。それに対して super- Scalar は、 ALU などの資源のスケジューリングがハ ウェアによって動的に決定されます。 しかし、コンパイラが十分賢ければ、ハードウェアが動 的にスケジューリングする利点はほとんどありません。 Lisp などの言語でときどきおこなわれるように、プログラ ム中でプログラムを動的に生成し、それを実行させるよう な場合にはハードウェアが頑張る価値がありますが、普通 のコンパイラ言語ではそういう機能はありませんし、実用 面でも動的にプログラムを生成する必要性はほとんどあり ません。それどころか、最近では Lisp プログラムでさえ速 くしたいときにはできるだけ静的に最適化できるように 書くほどです。 では、なんのために SuperScalar があるのでしよう それは、すはりバイナリ・コンパチビリティのためでし よう。インターロックがない VLIW の場合、ハードウェア の構成がすこし変わっただけでも旧いバイナリが動かな くなる可能性が大きいのです。たとえ XVLIW で ALU が増えたときには、旧いバイナリのままでは新しい ALU はまったく使われません ( もっとも、こういった大規模な 変更では、そもそも旧いバイナリが実行できるかどうかさ え疑問ですが : ー ) ) 。 それに対して SuperScaIar では、もともと ALU が 1 つしかない CPU 向けに書かれたプログラムでも、 ALU が増えれは・それに応して複数の ALU が動きます。ただ し、プログラムの意味を保存しようとするとデータ依存関 係を守らなければなりませんから、できあがっていないデ ータを参照した場合は内部でインターロックがかかり、動 かない ALU が出てきます。 逆にいうと、 ALU の数を知り、コード・スケジューリン グをちゃんとして最適化した場合はインターロックがか か ? UNIX MAGAZINE 1991.6

8. UNIX MAGAZINE 1991年6月号

ァイルに対しても使用できることである。矢斤は、ユーザ ーがたくさん指示を出さなければならない点である。フリ ーリストは last-in-first-out なので、指定されたファイ ルからのすべてのプロックは同しグループになる。しかし、 ューサーは目的のファイルを含んでいるフリーリストのセ グメントを指定しなければならない。復元されるファイル が最後に削除されたファイルである場合 ( とくにファイル サイズが分かっているとき ) には、比較的単純である。しか し、フリーリストのすっと前のほうのファイルを復元する には、試行錯誤を繰り返さなければならない。初期化され ていないプロックがあると、問題はさらに複雑になる。と いうのは、プログラムはもはや間接プロックを自動的に破 棄できないからである。 どちらの方式を採用しても、システムがフリーリストを 使ってフリープロックを把握している場合にはリンクプロ ックのすくなくとも一部は上書きされてしまうので、デー タがいくらか失われることは避けられない。どれほどのデ ータが失われるかは、リンクプロックがたまたまデータで あったか、間接プロックであったかによる。もし間接プロ ックであった場合、フリーリスト方式ではデータはまった / #define BADIRC #def ine BATELMC 、ゝく失われない。しかし bat 方式では、上書きされたアドレ スを介してアクセスされていたすべてのプロックが失われ る。ピットマップを使用しているシステム上では、ファイ ルを完全に復元することができる。 ロ 設 ndel ユーティリティ リスト 3 に、 bat 方式のファイル復兀ユーティリティの コードを示す。復元は、 del と undel の 2 つのプログラム によっておこなわれる。 del プログラムの操作は rm と同 しであるが、各ファイルを削除する前に復元に必要な情報 を保存する。各ューザーはこの情報を保存しておくための ファイルを、自分のホーム・ディレクトリに置く。 undel プ ログラムは del によって削除されたファイルを復元する。 ローカルヘッダ del. h 、 syscalls. h 、 unixlib. h の内容はリ ストしていない。これらはそれぞれ論理定義、システムコ および標準 UNIX ライプラリ関数宣言を含ん ーノレ旦、 でいる。 こで、ほかのシステムに移植するためのいくっかのマ クロを定義しておく。 #define BATEI. MSIZ #define BI. KELMSIZ ( 1 の ( 13 ) ( 3 ) ( 4 ) #def ine #define / * bat 直接プロック数 * / / * bat 要素数 * / / * bat 要素サイズ * / / * 間接プロック要素サイズ * / memcpy(&(addr) , (char * ) (buf) + (n) * BATZMSIZ, BATELMSIZ) ; memcpy(&(addr) , (char * ) (buf) + (n) * BI. KELMSIZ , BLK%MSIZ) ; getbataddr(addr, buf (addr) = 0 ; getbataddr(addr, buf (addr) = 0 ; 上に示した設定は lnteractive Systems 386 / ix 用であ り、フリーリストではなくてピットマップを使用する。し たがって、完全にファイルを復元できる。これらのマクロ の大部分は自明であるが、間接プロック内のプロックアド レスは bat 内のものと同サイズであるとはかぎらない。こ のため、マクロ BATELMSIZ と BLKELMSIZ を分け てある。また、 bat と間接プロックからアドレスを抽出する コードは、アドレスのサイズとバイト順序の違いによりポ ータブルではない。したがって、これらの算出はマクロ getbataddr や getblkaddr のなかに隔離されている。保 存されている正確な復元情報は、 delfil ストラクチャ内に 114 見られる。 UNIX MAGAZINE 1991.6 これは、次の一連のコマンドでできる。 れはならない。 ければならす、 set-user-id ピットがセットされていなけ しなければならない。したがって、その所有者は root でな で、実効ューザー id をスーパーユーザーのものにして実行 del は i ノードをファイルシステムから直接読み取るの . del に保存する。 にそのファイルのためのエントリをファイル $ H 〇 ME / したとしよう。このプログラムは、ファイルを削除する前 こで、 rm の代わりとなる del というプログラムを作成

9. UNIX MAGAZINE 1991年6月号

ネットワークが活きる開発環境で、チームを楽 YHP のソフトウェア開発環境は、チームフレーを応援します 、ゞ 24 、 YHP CASE プログラム

10. UNIX MAGAZINE 1991年6月号

はかの人もその計算機を利用している可能性があるの で、それを忘れてはならない。 この 2 つのモードはこれから何度も登場しますから、覚 System shutdown time has arrived えておいてください Mar 19 20 : 00 : 00 nadia shutdown: halt by て 00t ースーバーユーサーへの道 2 こからの説明は、使用している計算機のハードウェア や OS に依存する部分が大きいので、 SunOS 4.1 を例にし てみていくことにします。 さきはどの例のように shutdown コマンドを入力する ゝ と、画面は次のようになっているはすです % Mar 19 20 : 00 : 00 nadia syslog: going down 0 Ⅱ si 1 訌 15 [ 1 ] [ 1 ] done syncing file system. halted Program terminated Type b (b00t) , c (continue) , Ⅱ (new command mode) ←モニターモードのプロンプト このような状態がモニターモードと呼ばれます。このモ ードで受け付けてくれるコマンドは、プロンプトの直前の 行で表示されているように b プート位ち上げ ) するためのコマンド c LI -A や BREAK を押してプログラムを中断したと き、そのプログラムをもう 1 度続けさせるコマンドに こでいうプログラム〃とは、 UNIX ( カーネルとすべて のプロセス ) のことです。また、すべてのプログラムがも とどおりになるわけではありません ) n new command を受け付ける状態にするコマンド これら以外にもいろいろできますが、詳しくは monitor のオンライン・マニュアルを見てください 3 。 立ち上かれ IJ NIX ! さていよいよ本題です。ここでとりあげるのは、 b という コマンドです。これによって、停止している UNIX をもう 1 度立ち上げなおす一一つまり、、システムをプートする″ わけです。プートにも各種の方法がありますが、以下にそ 2 使用しているシステムによって、かなり様子が違います。 〉 b vmunix. orig 通常の方法でプートします。 のうちのいくっかを簡単に紹介します。 UNIX MAGAZINE 1991.6 参照してください。 るのは SunOS だけです。ないときには、 OS についてくる分厚いマニュアルを 3 私たちが知っているかぎりでは、 monitor のオンライン・マニュアルが存在す 普通は vmunix というファイルで立ち上げますが、この 例のようにファイルを指定することができます。ここで は *vmunix. orig" という名前になっていますが、なん ・ノヾーアイションにあ でもかまいません。また、ルート れば、その絶対パス名を指定することによってプートフ ァイルを決めることができます。これは、カーネルを作 り替えるのに失敗したときなど、バックアップ用のカー ネルで立ち上げる際に使います。 b コマンドでプートできるデバイスをすべて表示します。 〉 b sd (O , 1 , 0 ) vmunix ・ orig ハードディスク sdl の a ノヾーティションにある vmun ⅸ . orig というファイルからプートします。別のパーティシ ョンにあるファイルからプートするときに利用します。 〉 b le ( ) le というネットワーク・インターフェイスからプートし ます。ネットワークを介してプートするときに使います。 、、 ls 尸コマンドと同し働きをします。立ち上げ用のファ イルの名前を忘れてしまった場合などに便利です。 モニターモードでの b コマンドの使い方について簡単 に紹介しましたが、こでは最初に挙げた方法で通常のプ ートをしてみましよう。その方法は ? もうお分かりです そうです。迷わすキーポードの、、げを叩きましよう : ー ) すると、メッセージがすらすらと画面に出力されるはすで す。このメッセージは、 /usr/adm/messages というファ イルに格納されています。その例を挙げておきましよう。 27