リスト 3 select を使った入力タ歩里 / * 使用するディスクリプタの設定 ( 標準入力 ) * / / * 使用するディスクリプタの設定 ( UDP ) * / if Ⅱ if if if if FD_SET(fiIeno(stdin) , &ifd) ; FD_SET(socUdpCtr1 , &ifd) ; (useTcp) { FD_SET(socTcpCtr1, &ifd) ; / * 使用するティスクリプタの設定 ( TCP ) * / select(fd—max + 1 , &ifd, NULL, NULL, NULL) ; / * 入力待ち * / (FD_ISSET(fi1eno(stdin) , &ifd) ) { / * 工ラー処理 * / (n くの { / * 標準入力の処理 / * TCP 入力の処理 (useTcp & & FD—ISSET(socTcpCtr1, &ifd) ) { / * UDP 入力の処理 (FD_ISSET(socUdpCtr1, &ifd) ) { ットデーモンの場合は、 UDP 用のソケットと TCP 用の ソケットを指定して select を呼び出せばよいことになる。 ローカル制御機能 プログラムのサプセットをロポットデーモン内に統合する ーモン内からこの機能力駛えるとなにかと便利なので、 sv センサーからデータを取得することができる。ロボットデ このプログラムでは、個々のサーボにコマンドを与えたり、 するために作った、 sv という実験プログラムを紹介した。 2005 年 10 月号で、ロポットのサーボ類の基本動作を確認 た、ちょっとした実験用のコマンドもあると便利だろう。 グラムの終了や状態の表示 / 変更といった処理である。ま 標準入力から何を与えるかだが、まず隸いっくのが、プロ ( リスト 3 ) 。 に加え、標準入力も select で処理するようにしたのである コマンドを与えられれば便利だろうと思い、 TCP と UDP 準入力も使える。デーモン・プログラムで、標準入力から などを使って各種の表示をしているが、その気になれは標 にフォアグラウンドで動いている。現在、標準工ラー出力 名前だが、現状ではデーモンとして動作しておらす、普通 ロボット側のプログラムは、、ロポットデーモン " という が、せつかくなので標準入力も受理するようにした。 同じポート番号の TCP と UDP を受理することだった を使い、複数の入力ストリームを処理する。当初の目的は、 ロボットデーモン・プログラムでは、入力待ちに select 148 ことにした。 こでふと、、、標準入力から受け取る sv 用のコマンド と、ネットワークから受け取るロボット制御用のコマンド を別々に扱う必要はあるのだろうか ? " と思った。 TCP や UDP で送られてくるロボット制御プロトコルは、動作を 示すコマンドと必要なパラメータを 1 行の文字列で表して いる。 sv プログラムのコマンドも同じような形式だ。そ れなら、コマンド名が重複していなければ、どちらも同じ ように処理してもかまわないのではなかろうか。そうすれ ば、 Windows 側の制御プログラムからネットワーク経由 でコマンドを送らなくても、 telnet ( あるいはシリアルポー ト ) で接続したシェルセッション上で、標準入力を介して口 ポットデーモン・プログラムに直接指示を与えることがで 入力ルーチンの手直し 0 ば考えるほど便利そうなので、この方針で進めることにし 標準入力とネットワーク入力を同等に扱うのは、考えれ きる。 UNIX MAGAZINE 2006 . 3 実際にプログラムを動かしてみると、たて続けに設疋コ し、それを処理するかたちにした。 るのではなく、曰車の受信データのなかから 1 行ずつ抽出 信ルーチンは、読み込んだ受信データを 1 行として想定す 中までしカ受信できない ) 可能性がある。そこで TCP 受 よっては、複数の行を一括して受信する ( あるいは行の途 るので、行の扱いを考えなければならない。タイミングに 位でおこなわれるが、 TCP を使う際にはストリームとな UDP の通信では、データのやりとりはデータグラム単
図 2 実験用のホスト ホスト A ( 192.168.10.100 ) リソースレコードの 追加や削除 nsupdate rndC DNS サーバー ( 192.168.1.1 ) example.com ソーンを管理 かのクライアントからの問合せに対し、変更後の情報を返 ・ DNS サーバーの停止時にゾーンファイルを更新する。 のような目的で使われます。 ジャーナル・ファイルはバイナリ形式のファイルで、次 ・ゾーンファイルを定期的に最新の状態に更新する。 保存する。 ・ゾーン情報の変更の記録を、、ジャーナル・ファイル " に DNS サーバーは、以下の処理もおこないます。 すことができます。 48 を体験しましよう。 ます、もっとも簡単な手川頁で Dynamic Update の動作 ・ rndc (DNS サーバーの動作を制御する ) ・ nsupdate ( ゾーン情報を変更する ) ・ dig ( リソースレコードの問合せをおこなう ) し、 Dynamic Update の動作を確かめていきます。 ンストールしてください。以下では次のプログラムを使用 ーバー・プログラム ) 以外のソフトウェアをひととおりイ ホスト A には、 BIND9 に含まれる named (DNS サ り、 example.com/zone の内容は図 3 のとおりです。 DNS サーバーは、、 example.com ゾーン " を管理してお ・ホスト A ( 192.168.10.100 ) ・ DNS サーバー ( 192.168.1.1 ) ( 図 2 ) 。 こでは、実験用に下記の 2 台のホストを用意します まず、簡単な設定と操作方法を紹介します。 Dynamic Update の操作 場合、次の起動時にゾーン情報を最新の状態にする。 ・ゾーンファイルを更新せずに DNS サーバーを停止した 1. DNS サーバーの named. conf に言定を追加する。 2. DNS サーバーを起動する。 3. dig プログラムでリソースレコードを問い合わせる。 4 ・ nsupdat ・ e プログラムでリソースレコードを削除する。 5. dig プログラムでリソースレコードの変更を確認する。 Dynamic Update の言又疋 Dynamic Update を利用するには、 DNS サーバー側 でゾーンごとに許可の設定をおこなう必要があります。方 法は何通りかありますが、 こでは簡単に、、特定のホスト からのリクエストをすべて許可 " という設疋にしてみます。 DNS サーバーの設疋ファイル、、 /etc/named. conf" の zone ステートメントに次の言定を追加してください。 allow-update {host ; ん os な UNIX MAGAZ 工 NE 2006 . 3 行して DNS サーバーを起動してください。メッセージを 設疋が終って準備ができたら、 named プログラムを実 DNS サーバーの起動 鍵などを用いた安全な設定にしてください。 更できます。セキュリティに注意が必要な環境では、暗号 の設定では許可したホストからなら誰でもゾーン情報カ畯 DNS サーバーの設疋はこれで完了です。もちろん、 からの Dynamic Update を受け付けます。 は、 IP アドレスが 192.168.10.100 のホスト ( ホスト A) が Dynamic Update にかかわる設疋です。この設疋で allow—update { 192 . 168.10.100 ; } ; そして、 zone ステートメント内の、 ・ example.com ゾーンに関する設疋 (zone) ・ rndc プログラムのアクセスに関する設疋 (controls) ・ rndc プログラムの認証に関する言定 (key) 全体的な設定 ( 叩 tions) 内はステートメント名 ) 。 このファイルには、以下の情報が書かれています ( 括弧 ルートサーバーなどのゾーン情報も言当してください。 際のファイルには、必要に応じて逆引きやローカルホスト、 図 4 は、 named. conf ファイルの設疋例です。なお、実 アドレスを書きます。 host には、 Dynamic Update を許可するホストの IP
ユ新エ朝工い工いユ第」コ」工い J い工しい工い J い J いしい」工い」工い J しいい」い J 、コ J 、工いユい J' い工イユ〕工い工い J い J い」コ」 J い」 j' い、工い」 J 、工朝工い工 0 いいユ、 1. home. ne. jp 〉 作者 . 白井隆さん MS ー DOS 用のファイルおよびディレクトリ管理ツール FD の UNIX 用クローンツールである FDcIone を最新版 の 2.08 にするパッチファイルです。今回のバージョンで は、いくつかの内部変数の追加、糸旧囚みコマンド savetty の追加、細込みコマンド set 用のいくつかのオプションの 追加、 ATTRDIR コマンドの追加、 ATTR-FILE のフ ァイル属性の扱いの変更、ディレクトリ書込み時の不具合 の修正がおこなわれています。 ・今月の *. sources. * ダイシェスト Newsgroups: alt. sourceS Sub, 」 ect: sshmonitor version 0.5 Message-lD. く pan.2005.12.23.13.28.33.677592@ despammed.com 〉 イ乍者 . NigeI Horne さん SSH ポートへの接続のログを監視し、不適切なものが あれは遮断するモニター・プログラムです。現時点で不適 切と判断されるのは、存在しないユーザー名でのログイン と間違ったパスワード入力で、それらを 5 回以上実行した ホストの名前または IP アドレスを /etc/hosts. deny に追 加します。やっていることは比較的単純ですが、毎回手作 業でログをチェックしてホストを遮断することを考えると、 役に立つプログラムといえるのではないでしようか。 このプログラムは perl で書かれており、 OS の起動時に バックグラウンドで動かすことを想定しているそうです。 Newsgroups: gnu. emacs. SOL.lræS Subject. memo. el ー quick access tO your memos (with completion Message-lD. く ma ⅱ man. 12977 ユ 130457129.20277. gnu-emacs-sources@gnu.org 〉 イ乍者・ Sebastian Tennant さん GNU Emacs 上で素早くメモファイルを開いて、情報を 書き込めるようにする EmacsLisp プログラムです。メモ を書き込むファイルはホーム・ディレクトリの下の mem 。 ディレクトリに置かれ、必要に応じて新規作成したり、既 存のメモファイルを開くことができます。後者の場合はフ ァイルの末尾にカーソルが移動した状態で開き、すぐに追 加の書込みができるようになるそうです。 このプログラムが提供している機能は単純なものです が、いつでもすぐにメモを書き込めるのは意外と便利なの かもしれませんね。 Newsgroups: gnu. emacs. sources Subject: t-mouse. el Message-lD. く ma ⅱ man. 20423.1135549681.20277. gnu-emacs-sources@gnu org〉 作者 : Alessandro Rubini さん、 lan T Zimmermann さ ん、 Nick Roberts さん Linux のコンソールで GNU Emacs を使用する際に マウス操作ができるようにする Emacs Lisp プログラム を、 Emacs 22 で動くように修正したものです。 Emacs はもともとキー入力の組合せのみで操作するものでしたが、 最近のバージョンは X11 環境であればマウスで操作でき るので、マウスがないと使えない人もいるかもしれません。 UNIX や Linux のコンソール上で Emacs を使うときに このプログラムがあると、 X11 環境と同様にマウスでの操 作ができます。なお、このプログラムは L ⅲ ux のコンソー ル用マウスサーバー・ソフトウェア gpm か動いている環 境を前提にしているため、それ以外の環境では使えないそ うです。 Newsgroups: gnu. emacs. sources Subject: Planner 3.40 released Message-lD: く 873bjnmsnO.fsf@tuxtanker.mwolson. org 〉 作者 : 」 ohn WiegIey さん、 Michael 0 on さん、他 日常的な作業や仕事の案件などの状況、進行スケジュ ール、確認すべき事柄、メモやアイデアなどを管理する Emacs Lisp プログラムです。このほかにも生産的な作業 を麪爰する多くの機能を提供するそうです。 基本的な使い方は、最初になんらかのプランやアイデア を謎し、実現にいたるまでの過程を何段階かに分けます。 そして、段階ごとに目標を設定し、その実現に必要な作業 項目を洗い出して優先度を決め、スケジュールを管理する というものです。もちろん、必要に応じてほかの使い方も できるでしよう。 上記のような作業をおこなう場合は複数のツールを組み 合わせて使うことも考えられますが、このツールならすべ ての作業を一貫性をもっておこなえるというわけです。 工い J い J い工い新エい工い J 、工い」い工い工い工い工い工い工い工い j い工い工い工いユを、工い J い」い工い工 4 工、工い工新エい」い工い工い J い」い第工い工い一、 UNIX MAGAZINE 2006.3 131
図 2 新たな本系 プログラム コックピット Windows 側 UDP: 操縦データ、 センサーなど TCP: モード設定など ロポットの NetBSD ロポットデーモン プログラム 手動制御など テ、 / ヾッグ、 標準入力 : マンドを送るといった状況では、複数のコマンド行をまと めて受信することがある。 入力できない・・ UNIX MAGAZINE 2006.3 うことだ ) 。 していこうと考えている ( つまり、当面は何もしないとい こなっていない ) 。これらの不備に関しては、おいおい対処 分だ ( コネクションの切断などについて、適切に処理をお 中で TCP コネクションを切断した場合の対処なども不十 ができないという構造になってしまった。また、処理の途 ログラムからの接続を待っている状態では、コマンド入力 グラムは、プログラムを起動したあと、 Windows 側のプ このような事情により、現在のロボットデーモン・プロ る入力待ちに進む ) 。 がないので、 Windows 側の当た態に関係なく、 select によ いのだ (UDP のみの場合は、接続を確立するという手順 接続したあとでないと、標準入力の受付けはおこなわれな の確立後である。つまり、 Windows 側のプログラムから グラムの実行がこのループに進むのは TCP コネクション ープが始まってからである。 TCP を使用する場合、プロ select によって標準入力を受け付けるのは、入力処理ル ドを受理できないケースがあるのだ。 た。しかし、 1 つ見落しがあった。標準入力からのコマン QUIT コマンドでプログラムを終了させられるようになっ SLEEP コマンドを入力してロボットの動作を止めたり、 受理できるようにしたことで、たとえは驃準入力を使って select を使用し、 TCP 、 UDP 、標準入力を並行して 連載 / ロボットのある暮らし 歩けないのは道具のせい ? 149 とスティックのひねり ( 飛行機の場合はラダーとして使用 ー殳に飛行機用のジョイスティックは、前後左右の 2 軸 機用ジョイスティックを使うことにした。 イッチ類を操作できるものとして、 Thrustmaster の飛行 左手で握っても比較的違和感が少なく、なるべく多くのス げた。この問題はいまだに解決していないのだが、今回は、 左右の手で使える PC 用ジョイスティックがないことを挙 以前に、 PlayStation 用コントローラを使う理由として、 ある。より自由度の高い制御系としたかったのだ。 ほかに、コントローラを変更したもう 1 つの正当な理由が とにした。、、歩けないのは道具が悪いから " という理由の ントローラを、 PC 用のジョイスティックに取り替えるこ それまで使ってきた PlayStation 用の 2 スティック・コ うまく歩けないのは腕ではなく道具のせいと決めつけ、 ジョイスティックの変更 はずがないという糸喆侖にいたったわけだ。 からなのかは分からないが、このた態ではまともに歩ける る。もともとの仕様なのか、使い込んでくたびれた機器だ ニュートラルに戻したときで、得られる数値が違うのであ とえば前側からニュートラルに戻したときと、後ろ側から クの動かし方によって、得られる値カ畯わってしまう。た ということができない。また内部にガタがあり、スティッ 度が悪い。レバーをすこし動かして、関節を彳少に動かす まず、 PlayStation 用コントローラは、スティックの感 の欠如だと思う。しかし、道具が悪いような気もするのだ。 たしかに、うまく歩けない最大の理由は、練習不足や能力 がニュータイプではないことを認めるのは難しいものだ ) 。 の原因のせいにする人は多いが、私も例外ではない ( 自分 努力不足が主因であっても、それを素直に認めず、何か別 物事がうまくいかないとき、たとえ自分の能力の欠如や というのが、実際に操作してみての感想である。 したところで、とても歩けるようになるとは思えない・ 単に達成できるわけはない。とはいうものの、、、いくら練習 かかるのだから、ジョイスティックを使った歩行カそう簡 く歩けない。赤ん坊だって歩けるようになるまで何カ月も を始めたと書いた。しかし、多少練習してみたものの、うま 前回、プログラムの最低限の機能力働作し、歩行の練習
連載 天文学と UN Ⅸ 7 台坂博 天の川零号機で簡単 M プログラム 最近の携帯電話に付いているカメラの性能はかなりのも ので、実用上はこれで十分という場合が多いのではないで しようか。解像度も SXGA と同等ですし、そのままメー ルで中幻医できるのでたいへん便利です。私も、原稿などに 入れる写真の撮影に携帯電話のカメラを使うことがありま す。ところが、大きな落し穴がありました。 つい最近のことですが、ある月の携帯電話の明細を見た らびつくり、バケット通信代金が 16 000 円を超えていま した。これまでは、高くてもせいぜい数百円程度だったの で、いくらなんでも 16 000 円は間違いだろうと、思わすお 客様サービスセンターに電話してしまいました。調べても らったところ、携帯電話のカメラで撮った写真をそのまま メールで大量に送っていたのカ源因だと分かりました。金 額からデータ量を見積もってみると、 判金は 1 バケット ( 128 バイト ) あたり 0.27 円 ・ 16 000 円は 59 , 259 バケットぶん ( すなわち、 7 , 585 , 185 バイト =8MB) ・カメラで撮った SXGA の画像データが 1 枚あたり数百 KB とすると、数十枚ぶん相当 たしかに、その月はこれくらいの写真を転送したような 。解像度がもっと低ければ、こんな金額にはなら 気が・ なかったはすです。後海先に立たずですが、こんなことな ら、バケット定額制などを利用すべきでした。写真などを 携帯電話のメールで送るときは、データのサイズに十分注 意しましよう。 天の川零号機で MPI プログラム 前回は、 MPI 通信プログラムを使って天の川零号機の通 UNIX MAGAZ 工 NE 2006 . 3 信性能を測ってみました。今回は、簡単な MPI プログラ ムを作成し、零号にヒで試してみます。 たんなるサンプルではおもしろくないので、私の所属し ている天文学データ解析言算センターでおこなっている大 規模シミュレーションのための並列プログラミングの講習 会の題材から、拡散方程式を数値的に解くプログラムを利 用します。拡散方程式とは、たとえば、棒の一端を熱源に つけた場合、棒の温度変化を杢する方程式です。 まずは ICPU で動作するプログラムを作成し、 MPI を 用いてそれを並列化するという順序で紹介していきます。 拡散方程式 について簡単に解説します。 最初に、拡散方程式と使用する蒴 t 算解法、問題設疋 拡散方程式を数値的に解く 間座標をム、 2 とすると、拡散方程式は、 ろでみかける偏微分方程式です。物理量を広時間を t 、空 拡散方程式は、熱伝導の問題をはじめ、いろいろなとこ Da と書けます。 D ェ 2 Dy2 a22 。は、たとえば棒の温度変化の場合、ある時間における棒 の温度を表します。すなわち、は時間および空間座標の 関数です。次元を考えると、本来は右辺に係数 ( 拡散係数 ) がくるはすですが、こでは無次元化した式を考えます。 この方程式は、問題設定によっては厳密解を求めること もできます。 71
ICPU の場合と比較して計算に時間がかかるのは当然で すね。 ☆ プログラムの並列化は、 MPI を使うと比較的簡単にでき ます。並列化する際のポイントは、 リスト 1 サンプル・プログラム (onedim. c) * onedim . C * numericaly S01ve one dim. Of diffusion equation #include く math . h> #include く stdio . h> 連載 / 天文学と UNIX ・いかに通信をさせないか 列化プログラムに挑戦してください。 に尽きます。これカ攤しいところですが、皆さんもぜひ並 ( だいさか・ひろし国立天文台 ) #define #define #define #define NGRIDREAL 1024 NGRID (NGRIDREAL + 2) TEND 0 .001 KOEF_DT 0 .00390625 / * for NGRIDREAL=1024 * / double a ロ ) int init—sin(int ngridreal , int i ; double x, dx; 1 . O/ngridrea1; dx for(i=l ; i く =ngridreal; 土 + + ) { 2 .0*M_PI*dx*(i aCi] sin(x); return 0 ; int output (int ngridreal , double a ロ ) int i ; double dx ; FILE *fp; fp=fopen("out . dat" 1 . O/ngridrea1 ; dx fprintf (fp, "#%d\n" ngridreal) ; for(i=l ; i く =ngridreal; i + + ) fprintf (fp, "%d %f %f\n" fclose(fp) ; return 0 ; UN 工 X MAGAZINE 2006.3 double tend, t , dt , dx, dtdx2inv; int integrate (int ngridreal , double a ロ ) 77
写真 1 2 台のジョイスティックとペダル 左右両用のジョイスティック 先日、 PC 用ゲームの店で、スティック部がほば左右対称なス ティックをみつけた。しかし、スティックだらけの作業環境にこ れ以 . ヒスティックを持ち込むこともできず、導入を医っている。 現在の環境でうまく歩けなければ、またもや道具のせいにして導 入するかもしれない。 する ) に加え、独立した 1 軸のスライダー ( 工ンジンのス ロットルとして使用 ) をもつ。つまり、プログラムからみ た場合は、 1 台で 4 軸のジョイスティックとして扱われる。 Thrustmaster のジョイスティックは、さらにスティック 先端にハットスイッチが 1 っと 4 個の独立したスイッチ、 ジョイスティックの本体側に数個のスイッチがある。 私はこのスティックを 2 台使うことにした。同じもの を並べても芸がないし、 2 台を識別するのカⅷ倒になるた め ( プログラムは、右手用と左手用を識別しなければなら ない ) 、同じシリーズの Fox 2 pro と Afterburner Ⅱを 選んだ ( 写真 1 上 ) 。どちらもスティック部分の構成は同じ ームで使うべダルには、自動車用と飛行機用がある。一般 だが、べース部分が異なっている。 Fox 2 pro は、べー 的な自動車用は、アクセルとプレーキの独立した 2 個のペ ス部にコンパクトなスライダーと 3 個のボタンカイ寸いてい ダルをもつ。飛行機用は、ラダー制御のみの 1 自由度のペ る。 Afterburner Ⅱは、ちょっと気合の入ったスロット ダルと、加えて個々のペダルを別々に操作できる 3 自由度 ルレバーを備え、このスロットルレバーに 4 個のボタンが のものがある。 こではもちろん、 3 自由度の飛行機用を 付いている。いまのところ、どちらのスティックもスロッ 使っている。 CH Pro pedals という製品だ ( 写真 1 下 ) 。 トル部を使う予定はないが、将来、制御体系を変えたり拡 ジョイスティックの言リ 張するときには使うことになるだろう。 この 2 台は、見た目はかなり異なるが、もっている制御 PC にジョイスティックを接続する場合、ゲームボート 要素はほとんど同じである。違いは、ボタンの総数 (Fox 2 では接続できる数などに制限があったが、 USB 接続なら多 Pro が 7 個、 Afterburner Ⅱが 8 個 ) と、 Afterburner 数のコントローラをつなぐことができる。この点は便利な Ⅱにはスロットルレバーにスティックのひねりと同じ機能 のだが、プログラムの作成時にはちょっと頭を使わなけれ をもつレバーがある ( どちらを使うかは、スイッチで切り ばならない。現在作っているプログラムのように、似たよ 替える ) 点くらいだ。 うな構成のコントローラを同時に複数使う場合、それぞれ を適切に識別する必要がある。 これら 2 台のスティックは、スプリングによりニュート 以前に紹介したが、 Windows の DirectInput 機能でジ ラルに戻る形式である。本当は、モーターを組み込んだフ ョイスティックを使う場合、初期化処理の際に、接続され ォースフィードバック・タイプカ駄しかったのだが、あい ているデバイスの列挙 ( コールバック関数の呼出し ) がお にく品切れだった。 こなわれる。以前のプログラムではコントローラは 1 台し ペダルの導入 か使わなかったので、コールバック関数は最初に示された コントローラを変えることにより、 Windows 側のプロ デバイスについて、それを管理するためのデータを取得す グラムも変更しなければならない。ついでに、以前から考 るだけだった。しかし、今度は 3 台のコントローラを使う えていたペダルも組み込むことにした。 PC に接続してゲ ので、それぞれを適切に識別しなければならない。複数の 150 UNIX MAGAZINE 2006 . 3
SC 翡 ネットワーク・ テクノロジー 好評発売中 ! 前回紹介した関数 MPI-Send や MPI-Recv を使って プログラムを書くこともできます。これらはペアで使う必 要があります。たとえば、 CPUO と CPUI とのあいだ で通信する場合、 CPUO で MPI-Send を呼び出すとする と、 CPUI ではさきに MPI-Recv を呼ばなければなりま せん。さもないと通信が成立せず、デッドロック状態に陥 ってしまうからです。 CPU (MPI では rank) によって 振舞いを変えるには、 C 言語であれは次のように書く必要 があります。 if ( myrank & 0X1 ) { / * myrank が奇数なら実行 * / MPI_Send() ; MP 工 _Recv() ; else{ / * myr k が偶数なら実行 * / MPI_Recv() ; MPI_Send() ; ネットワーク - アクノロソー インターーネットを支える技術・様ロ陽一 8 ・・播ロ陽ー著 ・ A5 判、 448 ペーシ ・ ISBN 4-7561-4092-0 ・ 3 , 675 円 ( 税込み ) ネットワーク技術者必 ATM 、、′ T などーこついて、その 技術の“心”が分かる本 ネットワーク技術者必携 ! この例では、最初に奇数の rank が送信し、偶数の rank が受信するとします。そして、その後に逆のことをおこな 技術には、かならず核心となる部分があります。これ を理解しているかが、その技術を使いこなせるかどう います。 かの分かれ目といえるでしよう。 このようにプログラムを書いてもいいのですが、通信と 本書では、現在のインターネットを支えるさまざまな 送信の面倒を同時にみてくれる関数 MPI-Sendrecv を使 技術について、開発の背景から、原理、応用まで、 うと、より簡潔に謎できます ( この関数の詳細は、前回に 数多くの図版を用いて詳細に解説します。 挙げた参考文献を参照してください ) 。 この関数を用いて MPI 化したプログラムが、末尾のリ 目次から スト 2 です。 1 章 Ethernet 2 章リピータ、プリッジ、スイッチ このプログラムについても、簡単に解説しておきましょ 3 章ス / ヾニングッリー う。まず、 ma ⅲ関数のなかで MPI の、、おまじない " をし 4 章 VLAN ます。自分の rank を取得したあと、両隣の領域の rank 5 章経路制御の基礎 6 章経路検索アルゴリズム ( 変数名 left 、 right) を定します。基本的には myrank 7 章 ATM に対して土 1 したものですが、周期境界条件を考慮してい 8 章 UNI シグナリング ます。 9 章 LANE と MPOA 初期条件も、自分が受け持っ領域のデータのみを作成し 1 0 章アドレス変換ーー NAT と旧 masquerade 1 1 章 ADSL ます。関数 integrate-mpi のなかでは、グリッド点の計 参考文献 / 索引 / 英和用語対照表 算を始める前に MPI-Sendrecv を 2 回呼び出し、計算 に必要なデータを用意しています。それぞれの関数 MPI- 株式会社アスキー Sendrecv を呼び出した際に奐されるデータについては、 図 6 を参照してください。 このプログラムでは、実行時に一 np オプションの引数で CPU の数を指定できるようにしています。ただし、実際 〒 ] 02 ー 8584 東京都千代田区九段北ト 1 3-5 日本地所第一ビル 電話 (03) 6888 ー 5500 ( 営業局 ) 75 UNIX MAGAZINE 2006.3
連載 / 天文学と UNIX 図 4 プログラムの結果と厳懈の上肆交 0.4 図 3 1 次元の拡散 1- 8 ( 0 4- つ」 0 0•J 4 ・ ( 0 8 ィー 0 analytic numerical rough -1 0•J 一 4 8 0.2 0 0 ー 0.2 ー 0.4 1 0.8 0.6 0.4 0.2 0 基本的に、 main 関数のなかでグリッド点のデータが入 言算の正当性が検証できます。あくまでも見た目にすぎま る配列 a を定義し、初期条件を作成する関数や数イ t 算を せんが、計算結果と厳密解はそこそこ一致しているので、計 おこなう関数を呼び出すようにしています。用意する要素 算はそう大きくは間違っていないようです。厳密な結果を 数は、実際に必要なグリッド数 (NGRIDREAL と de- 求めるのであれば、各グリッドで厳密解と数値解の差をと fine 文で定義 ) に、その両隣のぶんを足した数 (NGRID- るなどして、定量的に検証する必要があります。 REAL 十 2 と NGRID で定義 ) です。 このようなシミュレーションは、物理やプログラムに関 グリッドのデータは、配列インデックス I—NGRID- するちょっとした知識があれば、簡単におこなえます。と REAL のなかに入ります。 0 番目と NGRIDREAL 十 1 はいっても、あらかじめきちんと考えないと、観察したい 番目には、周期境界条件から、 NGRIDREAL 番目と 0 現象が再現されなかったり、計算に時間がかかりすぎて実 番目のデータを入れます。こういった、、のりしろ " のよう 際上は引算不能ということにもなるので、注意が必要です。 な領域を用意し、すべてのグリッドの計算を 1 つの引式 このあたりをよく考慮しなければならない点が、シミュレ でおこなうことにします ( そうしない場合は、両端とそれ ーションの難しいところではありますが・ 以外とで計算式を分ける必要があります ) 。 上記の問題にしても、本当はグリッド数や時間の刻み幅 このプログラムを適当なファイル名 ( 今回の例では、 について十分に検詞する必要があります。 onedim. c とします ) で保存し、 たとえば、時間の刻みを考えてみましよう。観察したい % gcc onedim. C ー 0 onedim ¯lm 現象の時間が決まっているのなら、刻みを長くしたほうが として実行ファイル onedim を作ります。 計算に必要なステッフ。数が少なくなります。その結果、計 コンパイルができたら、プログラムを実行してみましょ 算の所要時間も短くなります。ところが、時間の刻みをあ う。図 4 は、時間 t ー 0.02 まで計算した結果を表した まりに長くすると、現象が正しく再現されなくなる可能性 ものです。この引算では、グリッド数を 1024 としていま があります。プログラムの中では、この時間刻の大きさは、 す。実際にかかった計算時間は、 amanogawa0 で 73 秒 変数 KOEFF-DT でコントロールします。 KOEFF-DT カ賠になると、時間刻も倍、すなわち、必要なステップは半 でした。 分になります。先の結果は、 KOEFF-DT= 0.00390625 図 4 の実線は、式 1 から計算した厳密解です。これは、 としていますが、図 4 には、 KOEFF-DT= 0.125 という 式 1 に t = 0.02 を代入して得たものです。今回の場合の 時間刻みをかなり粗くした結果も示してあります (rough ように厳密解があるときは、厳密解と比較することで数値 1 0.8 0.6 0.4 0.2 0 73 UN 工 X MAGAZINE 2006 . 3
連載 ネットワーク・ミニ実験室 荒井美千子 日Nロ9 の Dynamic Update 今月は、 BIND9 の Dynamic Update についてお話し します。 Dynamic Update は、 DNS サーバーの設疋ファイル を書き換えて再読込みをおこなわなくても、ゾーン情報が 動的に変更できる機能です。前回も説明しましたが、この ような機能を Dynamic DNS または DDNS と呼びます。 Dynamic DNS では最新のゾーン情報はつねにメモリ 上で管理され、ネットワーク経由で動的に変更できます。 そのため、これまでのようにゾーンファイルを手作業で編 集することはできません。 nsupdate プログラムで設疋し たり、 rndc プログラムで安全に DNS サーバーを停止し てからゾーンファイルを編集するなど、特別な手川頁が必要 です。 Dynamic DNS を使うと、固定 IP アドレスをもたな いホストでも、ドメイン名を付けることができます。 たとえば Web サーバーを公開する際、インターネッ ト上での固定の IP アドレスが割り当てられていなかった り、 IP アドレスが DHCP (Dynamic Host Configu- ration protocol) で動的に変化する場合を考えてみまし よう。 Dynamic DNS がない従来の DNS サーバーでは、 ドメイン名に対応する IP アドレスを登録するのカ攤しく、 http : / / 192.168.1.100 / のように、 IP アドレスで Web サ ーバーにアクセスするのが一ヨ殳的です。 一方、 Dynamic DNS でドメイン名と IP アドレスの 情報を DNS サーバーに動的に登録すれば、 IP アドレス か変わる環境でも、 http://www.north.example.com/ などのドメイン名で web サーバーにアクセスできます。 それでは、 Dynamic Update の機能や使い方を紹介し ていきましよう。 UNIX MAGAZ 工 NE 2006 . 3 図 1 Dynamic Update の仕組み ① Dynamic Update を許可③メモリ上で管理している ゾーン情報を更新 DNS サーバー の追加や削除 クライアント②リソースレコード nsupdate プログラム ④変更をファイル に記録 ジャーナル・ファイル ( バイナリファイル ) ⑤定期的に更新 ゾーンファイル SOA NS Dynamic Update の仕組み 図 1 は、 Dynamic Update の仕組みを簡単に表したも のです。 DNS サーバーは、デフォルトでは Dynamic Update を受け付けません。これは、権限のないユーザーが勝手に ゾーン情報を変更できたりすると、セキュリティ上の問題 があるからです。そのため、デフォルトの設定では Dy- namic Update を禁止する状態になっています。 Dynamic Update を利用するには、 DNS サーバー側 で事前に設定する必要があります。 BIND9 には、 Dynamic Update を管理するための nsupdate プログラムカイ寸属しています。 nsupdate で は、リソースレコードの追加や削除など、ゾーン情報の変 更リクエストを DNS サーバーに送ることができます。リ クエストを受け取った DNS サーバーは、メモリ上で管理 しているゾーン情報を即座に変更します。この時点で、ほ 47