Linux 版 新登場 ! MAT SYSTÄ/IS N S-PLUS ーー 003 一三創造あふれる ・因子分祈 リ上成分分新 。第回婦分新 樹形モテ、ノレ , ズ元寿 3 し S - PLUS は高度なテータ解析機能と豊 富なグラフィックス機能の両方を備えた 本格的なテータ解析システムです。 対話型の素早い明快な処理で利用者の 創造性を大幅に支援し、オフジェクト指 向に基づく卓越したテータハンドリング 能力により、テータの可視化・再加工・ 再解析というフィードバックループを納得 理工学、医薬学、社会科学、金融工学から教なの分野まで、 いくまで何度も繰り返すことができます。 全国の名 - 企業・研究機・大学での豊富な実績を誇ります 特定分野ソリューションのためのアドオンモシュール 主な特長 ・・・話題のウェープレット解析のための 500 以上の機能 ・ S + WAVELETS ・・ ・ニ千以上の高度で最新の解析機能。 ( 基本演算、行列演算、 ・・実験計画法のための数多くの関数とグラフィックス ・環境・資源エ学などで話題の本格的空間統計モジュール ・ S + SpatialStats ・ 探索的データ解析、多変量解析、回帰分析、分散分析、線 ・・金融工学などで話題の GARCH モデルのために ・ S + GARCH ・・ 形モデル、時系列解析、シミュレーション、信号処理、検定、 ・・最適化問題を解決する数値計画法モジュール ・ S + NUOPT ・・ OR その他 ) ・・「 c Ⅵ e Ⅳ G 旧のデータに統計解析 ( 期 hd0 Ⅳ s 版のみ ) ・数十種類のカスタマイズ自在なグラフィックス機能。 ・オブジェクト指向の S 言語での本格的なプログラミング機 能により、個別の解析システムや G 団を簡単に構築できま す。 Windows 版では OLE や ODBC も利用できます。 ・常設のトレーニングコースその他の強力なサポートでソ リューションを側面支援します。数理科学を専門とする スタッフが、個別のコンサルティングにもお応えします。 行なれ 5 ド n を S + SPATIALSTATS Windows Ⅳ / ndo Ⅳ S98 、 2000 、 NT S + WAVELETS 主要 LJNIX Sun 、 HP 、旧 M Ⅸ ) 、 DECalpha (UNIX) 、 SGI 、 Linux(lntel) ※ S-PLUS は MathSoft, ⅲ c. が開発しライセンスしています ※会社名および商品名は各社の商標または登録商標です ( 詳しい製品情報は S-PLUS ホーム 'X—Yhttp://www.msi.co ・ jp/splus/ を御参照ください。 ) S - PLUS 無料紹介セミナー定期実施中 当社新宿セミナールームにて一人一台のパソコンを用いて S - PLUS を ご説明さしあげています。お気軽にお申し込み下さい。 対応機種、 OS S-PLUS および ArcView のお問合せ先 株式会社数王里冫ーフ、アノ . 、 s-PLus グループ 〒 160 新宿区新宿 2-4-3 フォーシースンビル 10F TEL. 03-3358-6681 FAX. 03-3358-1727 e-mail: splus-info@msi. CO. jP (URL)http://www.msi. CO. jp/splus/ お問合せ : 平日 10 : 00-17 : 00 (FAX 、 e - ma ⅱは 24 時間随時 )
し inux のブートプロセス 図 7 スタックと SS:ESP の系 0 スタック PUSH EAX を実行 みます。そのはかに、読み込んだデータをそのまま別の アドレスに書き込む ( 転送する ) こともあります。 DS (Data Segment) は、 CPU か第売み書きするデー タか存在するセグメントを指定します。通常、 CPU は マシン語命令によって指定されたオフセット値と DS から求められるリニアアドレスからデータを読み込んだ り、書き込んだりします。 ただし、 CPU がデータを読み書きできるのは DS レ ジスタカ甘旨すセグメントだけではなく、そのほかの CS から GS までのレジスタか指すセグメントにもアクセ スできます。たとえば、 8086 にはデータのプロックを 中幻逶する命令が用意されていて、その命令は DS セグメ ントから ES セグメントにデータをコピーします。この ように、 DS レジスタカ甘嗣ー以外のセグメントにアクセ スすることもありますが、基本的には DS レジスタを使 用します。 脳糸刪包を駆使すれば DS レジスタを利用せすにプログ ラムを書くことも可能ですが、なんらかの意図 ( 悪意 ? ) をもってわざと読みにくくしたり、攻撃を検知されに くくするために特定のパターンを避けるといった目的が ないかぎり、そのようなプログラムを書くことはありま せん。 SS レジスタ SS (Stack Segment) は、 SP レジスタ ( プロテクト モードの場合は ESP) と合わせてスタックの貭アド レスを指します。ー殳に、 lntel 系の CPU はレジスタ の数が少ないので、あまり多くのデータを憶えさせてお くことかできません。そのため、複雑な処理をおこなう 36 ときはレジスタが足りなくなります。そこで、一印勺に 使用しないデータをスタックに置いておいたりします。 こオび人外に、サプルーチンに引数を渡すときに使うこと もあり、 lntel 系 CPU 用の C コンパイラは、関数呼 出しの引数をスタックにオ翻タするようなマシン語命令を 出力します ( 具イ勺な使用例は次回以降に紹介します ) 。 スタックにレジスタの内容を、、積む " には PUSH 命 令を使用します。このとき CPU は、 (E)SP レジス タの値を減算し、レジスタを SS:(E)SP にコピーし ます ( 図 7 ) 。反対に、 POP 命令はリニアアドレス SS:(E)SP の内容をレジスタにコピーし、 (E)SP レジ スタの値を加算します。以 E の (E)SP レジスタを加咸 算する値は、 PUSH/POP するレジスタの大きさに依 存します ( 2 バイトか 4 バイト ) 。 80386 以降の CPU には、 ES と FS 、 GS という 3 つ のレジスタも用意されています。 ES (Extra Segment) レジスタは、前述したようにデータのプロック転送に使用 します。残る 2 つの FS と GS は何を略したものかよく 分かりませんが ( ガソリンスタンドでないことだけは確実 です ) 、 DS と ES レジスタだけでは足りないときに使え る、おまけ的なレジスタのようです。つまり、とくに用途 カ鴃まっているわけではありません。 Linux のプートプロ グラムでも、、、ちょっとした目的 " で使われています。 リアルモードのセグメント 80386 以降のリアルモードは 8086 の一ヒ位互換モードで す。よって、基本的にリアルモードの重川乍は 8086 と同じ ですし、 8086 の制約も過去の遺産として引きすってきて UNIX MAGAZINE 2002.5
サトの 圧倒的なサ - バ - パフォー マンスを手にスれる web やデータベースの演算処理の速度は CPU やメモリ以外に、スト レージ性能にも依存します。 OS やアプリケーションの起動はもちろ ん、システム運用中のデータアクセス / 処理に関連するモジュールの ロード時に発生するストレージへのアクセスを高速化することにより、 サーバーパフォーマンスは大幅に向上します。 アクセスタイム Osec の 驚異的なレスポンス CPU クロックが 1GHz 、命令の実行サイクルが 1 nsec の時代、いかに 高速化したハードディスクとはいえ平均アクセスタイムは 4msec と低 速です。この 4msec 中に CPU は何と 4 百万回の命令実行が可能な のですが、その大半は待ち時間となります。 NSS では、 SCS ロマンド 発行とともにデータを即転送開始するためアクセスタイムは常に 0 と なり CPU を遊ばせることがありません。 大容量 RAM をストレージとして使う メインメモリの一部を日 AM ディスク化し、そこへデータを配置して高速 な演算スピードを実現可能ですが、容量の制限やコストの面でみても 実用というわけにはいきません。それなら、 RAM を外部テパイスとして 扱いシリコンストレージとして独立させれば、システムメモリとの干渉も なくシンカレに OS 環境を構築可能です。 ランダムアクセスで 1 3 00 旧、 驚異的なパフォーマンスの ニューテックシリコンストレージ 謝ルリア第スク Newtech SiIIicon Storage 単位 (IOPS) 2000 6000 8000 10000 12000 14000 ランダム REA ロ性能比較 ( 512Byte block) OM 印修理 1 年 無オンサイト 製品 3 年保証 NEWTECH 32MB 64MB 128MB 256MB 512MB 1024MB フルサイズ アクセス領域 プロックサイズで、どんなランダム成分があっても、常にフラットな℃性能を発揮します。 シーケンシャルデータとはいえ、規模の大きなランダムアクセスとなります。 NSS ならどんな MPEG4 などで圧縮された動画でも、 200 本のビテオストリームを配信するとなると、いかに ・プロードバンドインターネットの動画配信用ストレージとして 半かかっていた処理が、 25 分で済んでしまったという事例もあります。 評価そして導入をいただきました。例えばデータベースを使った解析で、それまで 2 時間 ミュレータのテータディスク、 DDNA 解析におけるデータディスクなど、さまざまな分野で クションがあり、特に時間帯でアクセスが集中する Web サーバー、 LSI 設計におけるシ 数万人規模の E メールサーバーの送信待ちテンボラリーディスク、一日に数万トランザ ・高トランザクションシステムへの導入 チャンネルを複数利用して NSS を増設すると、より高速な入出力性能が得られます。 です。 ( なお、ポリューム連結には LVM などのポリュームマネージャを要します。 ) また SCSI チェーン接続も可能であるため、システム要求に合わせて 8GB ・ 3U 単位での増設か河能 19 インチの日 A ラックマウントに対応し最大 8GB と大容量を持ちます。 SCSI のディジー ・ 3U のラックマウントで最大 8GB モデルまでを用意 ホットスワップ可能で、交換後は自動的にバックアップが開始されます。 W 「 ite 時はバックアップに 5 分程かかります。 ) また、ハードディスクは障害が発生しても き込みアクセスが少なければ 10 秒以下でバックアップ可能です。 ( 8GB フルに連続での ウンしてから 10 秒以上置いて下さい。更新データ容量によっても違いますが、普段の書 NSS が再起動の際に読み込まれます。このため NSS の電源を切る時は OS をシャットダ 自動的にデータをハードディスクへバックアップします。このバックアップされたデータは、 Newtech Silicon Storage(NSS) は、ホストコンビュータからのアクセスが無い時間に、 ・データバックアップ用の SCS レ、一ドディスクを内蔵 装置はキャッシュサイズを超えたアクセス領域に対してはパフォーマンスの低下が起こります。 ※グラフの通りアクセス領域サイズによるパフォーマンスの変化がほとんどありません。 RAID 3U ラックマウント 16GB NSS16G3U/LWN1 8GB NSS8G3U/LWN1 4GB NSS4G3U/LWN1 標準価格¥ 4 , 650 , 000 標準価格 Y3,200,OOO 標準価格¥ 2 , 350 , OOO 0 24GB モデル準備中 0
( 0 ・・一 oprn ・ nt Kit fO ′ ( ap ′ー′ 0 使います。この関数を 1 回呼び出すと、傾きセンサーをは しめ 13 個のセンサー情報をすべて同時に取得できます。 プログラムでは、センサー情報のなかで、傾きセンサーの 出力だけに注目する BNISensorSIant6() 関数を新たに 作成しています。 BNISensorSlant6() では、 BNIGet- SensorInfo() 以、タ ) センサー関数 BNISensKnock() を 用いて叩かれたことを判別したり、プログラムの終了フラ グのセット ( 肉球センサーを調べる ) をしています。 main() では、この BNISensorSIant6() 窈区り値と関 数へのポインタ酉リを使い、状況に応してリアクションを とる関数を呼び出しています。センサーから読み込新青報 を増やして配列を大きくしたり、配列自体を複数作成すれ は、いろいろな応用か考えられるでしよう。 リスト 1 七転ひ八起きのカプリロ (updown ・ c) このプログラムでは、倒れた状態から起き上がらせるた めに、既存のモーションデータを呼び出しています。利用 するモーションデータを決めるとき、プログラミングキッ トのムービーファイルがたいへん役に立ちました。さきほ ども書いたように、 C 開発環境の API で用意されている モーションデータと、プログラミングキットのモーショ ンデータは同しもので、ムービーファイルのファイル名 ( 173. avi ) の番号の部分 ( 173 ) が、そのままモーション データの番号になります。ムービーを順に見ていけば、起 き上がる徂こ使えるモーションと、そのに必喫な時 間を求めることかできます。 #include く bnlapi . h> char eyebuf [ 3 ] ; int fp—void(void) { return(O) ; int fp-gaeshi (void) { / * BN—I AP I ヘッダファイル * / モーションアイ用パッファ * / / * 何もしない * / / * 仰向けから復帰 * / BNITraceOut ( 2 , "fp-gaeshi") ; BNIDoMotion(173) ; retu てⅡ ( 3000 ) ; / * がえし * / / * 顔立ちから復帰 * / int fp—taoreoki2 (void) { BNITraceOut ( 2 , "fp—taoreoki2" ) ; BNIDoMotio Ⅱ ( 199 ) ; return(5200) ; int fp—taoreoki (void) { / * 倒れ起き 2 * / / * お尻立ちから復帰 * / 'fp—taoreoki") ; BNITraceOut ( 2 , BNIDoMoti0 Ⅱ ( 190 ) ; return(3000) ; int fp—okiagari (void) { / * 倒れ起き * / / * 右横から復帰 * / "fp—okiagari") ; BNITraceOut ( 2 , BNIDoMotio Ⅱ ( 183 ) ; return(3000) ; / * 起き上がり 1 * / / * 左横から復帰 * / int fp—aomukenobi (void) { "fp—aomukenobi" ) ; BNITraceOut(2, BNIDoMotion(213) ; BNIWaitMi11iSec(2000) ; UNIX MAGAZINE 2002.5 / * 仰向けで伸び * / 133
し inux のプートプロセス 図 12 プロテクトモードのセグメント FFFFFFFF セグメント セグメント セグメント デスクリプタ テーブ丿レ セグメントのサイズは デスクリプタ・テーブ ルに書かれている ( 最大 4GB ) セグメント SS → DS → CS → 0 メモリ空間 入するものではなく、メモリ上に作成します。デスクリプ クトモードでは 32bit のオフセットが表現できます。し タを作成する場所はどこでもかまいません。その代わり、 たがって、もはやセグメントは不要になった、 ・・と思 必要なセグメントデスクリプタを並べて作成し、その開始 いきや形を変えて生き残っています。 アドレスと数を CPU に通知する特別な命令を実行しま 図 3 に示したように、セグメント・レジスタの大きさは、 す。これをセグメントデスクリプタ・テーカレ (segment リアルモードでもプロテクトモードでも変わらすに 16bit descriptor table) と呼びます。 のままです。リアルモードでセグメント・レジスタを 4bit 左にシフトしていたことを考えると、プロテクトモードで プロテクトモードのセグメントは、 1 つのセグメントに はもっとたくさん左にシフトするのだろうとつい考えてし 対して 1 つのデスクリプタを用意します。同時に使用で まうかもしれませんが、残念ながら答はハズレです。 きるセグメントの数はセグメント・レジスタの数によって 制限されますが、セグメントの不頁の数は可変です。リア プロテクトモードの CPU は、セグメントデスクリプタ ルモードのセグメントは、べースアドレスを表す属性しか (segment descriptor) と呼はれる特別なデータを必要と もっていないため、その数は 65 , 536 (FFFFH) 個に固定 します。セグメントデスクリプタとは、セグメントのべー されています。一方、プロテクトモードのセグメントは上 スアドレス、サイズやタイプ、アクセスの権限設定などさ 己のような属性をもてるので、必要な属陸をもつセグメン まざまな属性を言当した 8 バイトのデータ構造体てす。 トを必要な数だけ作れます。 のデータ構造体は、 CPU カワ。ロテクトモードで動作する リアルモードとプロテクトモードの違いは、セグメン ために必要なものですが、最初から CPU のなかにあるわ ト・レジスタの使い方にもあります。プロテクトモードの けではなく、自重加勺に生成されることもありません。セグ セグメント・レジスタは、セグメントデスクリプタのテー メントデスクリプタは、 CPU をリアルモードからプロテ プルから 1 つのデスクリプタを指すインデックス値を格 クトモードに移行させる前に、ユーサーが作成しなけれは・ 納します。この値をセレクタ値 (selector value) と呼び ならないのです。セグメントデスクリプタのデータ構造に ついては、あとで詳しく説明します。 ます。 こまでに説明した関係を図 12 に示します。新しい言 図 3 には、セグメントデスクリプタというレジスタは描 葉がたくさん出てきたので、頭が昆乱してきたかもしれま かれていませんよーモグメントデスクリプタはレジスタに代 = 二ロ 39 UNIX MAGAZINE 2002.5
ー 0 ワークステーションのおと 図 1 通信遠度を測ってみた データサイズ = 500 k パイト 受信時問 : 14.784 秒 平均速度 ( パイト / 秒 ) ニ 34 k パイト / 秒 平均速度 ( ビット / 秒 ) = 271 k bps れている情報て接続を開始しますか ? 」というメッセージ が表示されます。ここで [ はい ] を押すと担也局を探し始 め、サービス区域内であれはすぐにサービスを利用できる ようになります。 いる無線 LAN カードを入れてから起動すれば、同様に サーピスが使えます。このとき、対応している無泉 LAN カードがないと、陏効なアダブタがありません。 MIS を 使用するにはアタブタを有効にしてから設定を行ってくだ さい」というメッセージか表示されます。 データサイズ = 250 k パイト / x 2 続 総受信時問 = 13.751 秒 使ってみる 総平均速度 ( パイト / 秒〉 = 36 k パイト / 秒 総平均速度 ( ビット / 秒 ) : 291 k bps 受信データ量 : 441 k パイトく推定値 ) にあるプラッセルズというべルギービールの専門店 4 でし 受信時問 : 13.171 秒 千均速度くパイト / 秒 ) = 34 k パイト / 秒 ( 推定値 ) た。そもそもは、この店でビールを飲んでいるときの店長 平均速度 ( ビット / 秒 ) = 268 k bps く推定値 ) との会言劼ゞ発端でした。 店長 : 坂下さん、 MIS の無線 LAN って知ってる ? ss : よく知ってますよ。知り合いが会社にいますし。 店長 : へえ、そうなの。しつは、今度、 MIS の基地局を 置くんだ。 ss : はんまに ? 店長 : 3 月の半ばくらいからかなあ。 ss : しや、ビールを飲みがてら、無泉インターネットを体 験しに来ますよ。 その次にこの店に行ったときにはドライバはすでにセッ トアップしていたので、無線 LAN カードを入れて MIS マネージャーを起動けるだけでした。当り前ですが、普通 にインターネットに接続できます。 そうなると気になるのは通信速度です。接続速度を測 るサイト 5 で、 1 人で使っている状態で測ったところ、約 290Kbps という結果でした ( 図 1 ) 。店長に訊くと、いい ときで 400 ~ 500Kbps くらいだそうです。大量のデータ をやりとりするのでなければ、十分な速度だと思います。 裏側は ? インターネットに接続できることが分かると、今度は設 備か気になります。この店では、基地局はカウンターの奧 データ受信速度定値 計測問始 . 02. t03 / % 17 : 4331.8 度変に ↑速度 終了 同時デタ受信速度定値 受信問始 : ℃ 2 / / % 1144 : 49645 [ 2 読同時有効部】 速度変化 ( 全体 : 推定値 ) ↑速度 ム 0 終了 終了 開始 ↑速度 接新 終了 にある透明な冷歳ケースの上に置いてあります ( 写真 2 ) 。 アンテナなどの機暑頁は小さく、それほど邪魔にはなら ないようです ( 写真 3 ) 。上にある白っほ。い板がアンテナ、 その下が ADSL モデム、一番下が泉 LAN の基地局で す。インターネットとは 1.5Mbps の ADSL を利用して 接続されているようです。 それでは、どのような経路になっているのでしようか。 、、モバイル IP " という信みを使っているので、通常とは 違う仕掛けがあるのかもしれません。そこで、 MIS のサ ービスに接続した状態で、 www.ascii.co.jp まで trace- route を実行してみました ( 図 2 ) 。 糸響各からみると、、足回り " は a-Web ( 大塚商会が運営 する ISP) を使っているようです。 次に、 So-net に接続している PC から MIS に接続し 4 http://www.brussels ・ co ・ jp/ 5 http://member.nifty.ne ・ jp/oso/speedtest/ 144 UNIX MAGAZINE 2002.5
し inux のプートプロセス 図 13 セグメント・セレクタの形式 lndex 表 1 セグメントのタイプ 引 RPL 番号 0 1 2 3 4 5 6 7 せん。しかし、これくらいて音を上げてはいけません。ま だまだ序のロ、三段目、プロテクトモードのセグメント・ ワールドはさらに複雑になります。 図 13 にセグメント・セレクタの構成を示します。下位 2bit の RPL はメモリイ矍機能が参照するデータで、これ については次回に詳しく説明します。 テープルのインデックス値は上位 13bit でオ旨定し、こ れを 8 倍するとテープルのバイトオフセット位置カ球め られます ( デスクリプタの大きさが 8 バイトだからです ) 。 しかし、実際はセグメント・レジスタの下位 3bit をマス クするだけで、オフセット位置カ球められるようになって います。 図 13 のすべてのビットが 0 のセグメント・セレクタに は、、、セグメント・レジスタを無効にする " という特別な 意味があります。たとえは、 0 を代入した ES レジスタ を使ってメモリにアクセスしようとすると、 CPU はプロ グラムの実行を停止して割込みを発生します。このため、 デスクリプタ・テープルの 1 番目の要素 ( セレクタ値 0 ) には、空のエントリを用意しておきます。図 12 に示した テープルの一番下が、さりげなく空いているのはこのため です。 図 14 にセグメントデスクリプタの構成を示します。見 ただけで頭カくなってきそうですが、 Linux はすべての フィールドを使っているわけではありません。ここで重要 なのは、べースとタイプ、そして DPL です。各フィール セグメントのサイズを表します。 リミット ( 19...0 ) セグメントのべースアドレスを表します。 ・べース ( 31...0 ) ドの意味は以下のとおりです。 40 スしようとすると、その命令は実行されす、領域違反が プログラムがリミットを超えた領域のアドレスにアクセ すことかできます。 0 から IMB まで、 1 の場合は 4GB までのサイズを表 サイズの単位は G フラグの内容に依存し、 0 の場合は 意味 読出し専用データセグメント 読み書き可能データセグメント 読出し専用スタック・セグメント 読み書き可能スタック・セグメント 実行専用コードセグメント 実行と言蒄し可能コードセグメント 実行専用コンフォーミングコード・セグメント セグメント 実行と読出し可能コンフォーミングコード・ あったことが OS に通知されます。 ・ G フラグ リミットの単位を表します。 0 ならはバイト、 1 ならば ページ (4KB) です。 ・ D フラグ セグメントのタイプを表します。番号とタイプの対応を ・タイプ セグメントデスクリプタでは 1 を設定します。 ・ S フラグ します犲雀レベルについては次回に説明します ) 。 グメントへのアクセスに必要な CPU ク讚在レベルを表 このフィールドはデスクリプタ牛讚雀レベルと呼はれ、セ ・ DPL (Descriptor PriviIege LeveI) します。 ワップアウトされることはないので、つねに 1 に設疋 ときは 0 になります。 Linux ではセグメント全体がス セグメントがメモリ上に存するときは 1 、存在しない ・ P フラグ 0 です。 OS 用のフラグですが、 Linux では使いません。つねに ・ AVL 予斉みピット。つねに 0 です。 ・ res す。 16bit になります。 Linux では、つねに 1 に設定しま できます。 D フラグが 1 のときは 32bit 、 0 のときは ロテクトモードでは 16bit と 32bit を〕尺することが るデータのサイズはかならす 16bit でした。一方、フ リアルモードでは、アドレスのサイズや CPU か処理す ・ A フラグ 表 1 に示します。 UNIX MAGAZINE 2002.5
Linux のプートプロセス セグメント導入の こで、どうして 8086 がセグメントという不議な機構を 採用したのかを考えてみましよう ( 以下の話は当時の状況から 孑伹則したもので、正があるわけではありません ) 。 単純に考えれば、メモリ空間を 32bit て扱うようにすれば よさそうなものです。そうすると、レジスタなども 32bit に しなければなりません。しかし、これには無理がありました。 Z80 や 8080 などの 8bitCPU のように ( おもなレジスタは 8bit でしたが、メモリ空間は 16bit でした ) 、メモリを指定す る部分だけを 32bit にすることも考えられましたが、これはか なり不便でした。 C 言語のホインタを考えてみましよう。ポ インタはアドレスなので、 32bit 幅になります。これを扱うに は 2 つのレジスタか尼要になり、プログラミングか面倒になり ます。 考えられる理由の 1 つは互換性です。当時、 lntel は 8bit の CPU として大成功を収めた 8080 / 8085 を販売しており、 これらに対応したソフトウェアもたくさんありました。これ と互換性のない CPU を作ると、ほかのメーカーとふたたび 争わなくてはなりません。そこで、 8080 / 8085 とあまり変わ らない構成にしたのではないかと思います。互換性といって も同レヾイナリかま行できるわけではなく、アセンプリ言語の ソースをそれなりに書き換える必要がありましたが、ある程度 は機間に変換することができました。これが、一足飛びに内 部が 32bit 構成になっていたら、書換えはかなり難しかった でしよう。 もう 1 っ考えられる理由は、製造技術止の制約です。レジ スタを 32bit 構及にするには、より多くのトランジスタを集積 する必要があります。しかし、当時の lntel はべンチャー企業 であり、大規模な LSI を置するには力不足だったのではな レジスタ値 : オフセット値 UNIX MAGAZINE 2002.5 イ巒内されます。 CPU が次に読み込むマシン語命令のオフセット位置が 実行中のプログラムの位置を指す実行ポインタを表し、 て、 IP レジスタ ( プロテクトモードの場合は EIP ) は、 指すセグメント内に存在しなければなりません。そし す。そのため、プログラムコードは、 CS レジスタが か夫行するプログラムコードを読み込むために使われま CS (Code Segment) は、その名が示すとおり、 CPU CS レジスタ ます。 のうちの CS と DS 、 SS レジスタは用途か決められてい 図 3 には 6 つのセグメント・レジスタがありますが、そ たとえは、 、 2345H : 100H " のように言当します。 いでしようか。 とはいえ、 16bit 及のままでは間題がありました。それは メモリ空間です。メモリを 16bit で指定すると 64KB までし か扱えないことになり、これでは 8bit の CPU となんら変わ りがありません。そこで、 16bit 構友のまま、より多くのメモ リ空間をなんとか扱えるようにしたのがセグメントだったとい うわけです。つまり、アドレスク旨定に 2 つの 16bit レジス タを使うようにしたのです。そうすれば、ふだんは 16bit を 偂醍にし、 64KB より多くのメモリを扱うときだけセグメント について考慮すればいいことになります。 当時は 8bit の CPU が全盛でしたから、 1 つのモジュール または 1 つのデータ構造なら 64KB に収まると予想していた のでしよう。しかし、 8086 シリーズの大ヒットにより、この 予想はみごとに外れてしまいました。つまり、プログラマーた ちはもっと大きなプログラムを書くようになり、そしてより大 きなデータ構造を扱うようになったのです。 ついでに、なぜメモリ空間を IMB にしたかも想像してみま しよう。 IMB ですから 20bit 、すなわち CPU の外に出すア ドレスパスも 20 本必要になります。これより多くのアドレス 空間、たとえば 24bit にすると、これに加えてさらに 4 本の 糸勦ゞ必要となり、 CPU のパッケージが大きくなってしまいま す。現在も青はそれはど変わっていませんが、大きな CPU パッケージを作るのは技勺に容易ではありません ( 8086 で は、アドレス線とデータ線を重ねてピン数を減らしていること からも想像できます ) 。また、ソケットも必名勺に大きくなり、 基板の酉当泉も複雑になります。これらを考えあわせて 20bit に したのではないでしようか。 さきほどの表記を使うと、 CPU は CS:(E)IP カ甘嗣ーリ ニアアドレスからマシン語命令を読み込みます。次に その命令長を (E)IP に加算してポインタを進め、命令 を実行します。 分岐 ( ジャンカ命令など、セグメント内のアドレス に実行位置を、、飛ばす " 命令を実行するときは、 (E)IP レジスタに移動先のオフセット値が代入されます。 方、セグメントの外にあるプログラムを実行する場合 は、 CS レジスタと (E)IP レジスタの両方か史新され ます。 DS レジスタ すべてのプログラムは、データを加工することで目的の 処理をおこないます。 CPU はメモリからデータを読み 込み、足したり、引いたり、掛けたり、割ったり、回 したり、こねくりまわして、その結果をメモリに書き込 35
し inux のプートプロセス 5. ー信己の 2 ~ 4 を繰り返す。 オペレーティング・システム (OS) からみれば、 CPU も 1 つのハードウェアです。したがって、プートプロセ スでは CPU を制御するためのデータ構造をいくつか作 成します。以下では、これらのデータ構造について説明し ます。 PC UNIX のプートプロセスをみていくと、、、なんで、 こんなことせなあかんねやろ ? " などと理解に苦しむコー ドがたくさん登場します。これらのコードが存する大き な理由の 1 つは、過去の遺産を引きすっていることにあり ます。つまり、、、互換性ク尉寺 " を寒見するために、 CPU や周辺機器のいたるところにトリッキーな仕掛けが作られ ているのです。去辭斤の PC でも大昔の MS-DOS か動く のはそのおかげですが、反対に話を難しくしている元凶で もあります。 なかでも大きなトリックの 1 つは、 8086 互換竟を提 供するリアルモードです。 Linux のプートプロセスの前半 は、リアルモードで動く 16bit プログラムです。しかし、 Linux カーネル自体はプロテクトモードで動く 32bit プ ログラムです。そのため、プートプログラムは、、、おイ料去 にのっとって " 必要なデータ構造を作り、 CPU をプロテ クトモードに切り替えます。 こまでの説明を読んで、頭のなかか疑問符て哩まって いる人がいるかもしれません。簡単にいうと、 「 Pentium のなかには 2 不頁の CPU か載っていて、 れを切り替えて使います。もちろん、両方の CPU につい て勉強しなければいけません」 という意味になります。そこで、以下ではこれらのデー タ構造を、、それぞれのモード " ごとに説明することにしま す。 3 つのモード 80386 以降の CPU では、図 1 に示す 3 つの動作モー ドを切り替えて使用することかできます。各モードについ て簡単に説明します。 リアルモード (real mode) 実モード、あるいは実アドレスモード 1 とも呼ばれます。 1 lntel での式な名称は、実アドレスモード (real-address mode) の 30 ようてす。 図 1 図 2 3 つの乍モード リアルモード FFFFFFFF アドレス空間の大きさい FFFFF 0 IMB リアルモード プロテクトモード 仮想 8086 モード プロテクトモード 4GB リアルモードは、おもに MS-DOS などの 8086 用に 書かれたプログラムを実行させるためのもので、完全な上 位互換性を提供しています。ただし、リアルモードでは 8086 以降に追加された機能も利用できるため、リアルモ ード用に書かれたプログラムが 8086 では動かない可能性 もあります。 80386 以降の CPU は、電源の投入後やリセット後は リアルモードで重川します。また、リアルモードの CPU が直接アクセスできるメモリ空間は、 20bit で表現できる 00000H から FFFFFH までの IMB です ( 図 2 ) 。これ は、 8086 のアドレスパス ( 彳あが 20 本しかないためで す。 80286 以降の CPU では、特別な操作をすると、さら に上位のハイメモリと呼ばれるエリア (IOFFEFH まで ) もアクセスできるようになりますが、それに対応したプロ グラムが必要になります。 Linux のプートプログラムも最初はリアルモードで動 き、途中で CPU をプロテクトモードに切り替えます。そ して、それ以降はリアルモードに戻ることはありません。 UNIX MAGAZINE 2002.5
工信帑信第信霊信信第信等島霊信第信第信第信信等槲霊第霊第に信を信第信第信勢工 3 第第に信信第信第第信等。 これに対して、コピー先のノ、一ドディスクをコピー元 のマシンにつなぎ、 dd コマンドでまるごとコピーする、 昔のマシンはこれでうまくいったが、 PC UNIX で大容 量ハードディスクの場合はうまくコピーできないことが ある、そのためコピーしたハードディスクからプートす ると fsck でいろいろひっかかる、それはディスクのジオ メトリが違っているのではないか、 dd を使わないとした ら dump と restore コマンドを使うのが一ヨ麺勺である、 dump/restore ならディスクのジオメトリが違っていて もコピーできる、ほかに GNU の Parted を使うという カ 1 去がある、 GNU cp で cp —dpR のようにして Linux (Slackware や Red Hat) を恒度もコピーした経験があ る、といったフォローがきました。 Newsgroups ・ os. bsd. freebsd Subject. 大量のアカウントとデータを移す良い方法はあ りませんか ? 大学の研究室の WWW サーバーマシンが旧くなった ので、新しいマシンを用意して FreeBSD 4.4 をインス トールしました。旧いマシンに作ってあった大量のアカ ウントと /home 以下のデータを新しいマシンに移したい のですが、 tar だとファイルのパーミッションか変更さ れてしまうのであまり使いたくありません。何かよいガ去 はないでしようか、という質間記事です。 これに対して、 rsync を使えばよい、 tar の -p オプシ ミッション情報か 1 司ーに保たれる、それ ョンを使えばパ ではハードリンクに対応できないのではないか、そんなこ とはない、何か別のものと勘違いしているのではないか、 ードリンクに対応できないのは tar ではなく cp であ る、 tar で対応できないものとしては chflags(2) の属匪 がある、データコピーの基本は dump と restore ではな いか、それは大袈裟ではないか、自分のファイルはよい が、 /home のように他人のデータが含まれている場合は dump/restore でないと責任がもてない、アカウントに 関しては /etc/master. passwd をコピーし、 pwd-mkdb コマンドを実行すればよい、といったフォローがきまし ーー 0 Newsgroups: fj.sys. sun Subject: ディレクトリ作成について X86 版の SoIaris 8 を / と /usr 、 /var および swap というパーティション構成でインストールしました。 /home は / パーティションに含まれていますが、この下 にディレクトリを作ることができません。どうすれは・解 決するのでしようか。また、マシンの用途を限定しない 場合、一ヨ殳に必要最低限のパーティションを作るとした らどんな構成にすればいいのでしようか、という質間記 事です。 これに対して、 /home にディレクトリを作れないのは automount か動いているからではないか、ホーム・ディ レクトリは /export/home にするのがよい、推奨のパー ティション構成について答があるなら聞きたい、、、一般 的 " というのカ攤しそうだ、それぞれにポリシーがあるは ずだからこオ功ゞよいという構成はない、 1 つだけいえると したら /var は大きめにしておくとよい、 Solaris の場合 は OS のパッチを当てると / var の下にバックアップを作 るのですぐに / var か謚れる、いろいろ考えた結果、ディ スク 1 台の場合は / と swap だけにして、ディスクが 2 台ならそれに / usr を追加している、といったフォローが きました。 Newsgroups: . os. bsd. freebsd Subject: インストール CD 乍成 旧いパソコンに FreeBSD をインストールしようとし ています。必要なファイルをネットワークから入手して CD-R に焼き、インストールしてプートできるようにし ました。その後、 XFree86 もインストールしようと CD- R に追記したところ、 CD ー R をマウントしても、存し ているはすのファイルが /stand/sysinstall からはみつ からないといわれます。 CD-R の作成ガ去がよくないよ うな気がするのですが、どうしたらよいのでしようか、と いう質間記事です。 これに対して、同様の経験をしたが、 CD-R の書込み ソフトとして B's Recorder を使ったため、焼いた CD- R が FreeBSD 上では大文字 / 小文字の区別がつかない のが原因だった、 XFree86 や packages を含む CD は FreeBSD 上で mkisofs を使って CD イメージを作成し、 Windows でそれを焼けはよい、作成した CD イメージ を B's Recorder て焼くにはどうしたらよいのか、人に 作ってもらったら 4. イ LinstaII. iso というファイルしかな い CD-R ができてしまった、 B's Recorder のウイン ドウの下の部分にイメージファイルをドラッグ & ドロッ プすれはよい、 mkisofs で作成した CD イメージはその 、第信第け : 信第信 : 既信 ? 第に信第第島 3 第信第に信第信第信 : : 第日第物第第第第 W 第信第信信第信等第信 : 第信第信第第第信第新 " 156 UNIX MAGAZINE 2002.5