ハンドラの作成・実行を中心に説明を行う。 割り込みの概念はかなり古くからあるのて、 , 操作が洗練されている。とくに C 言語から行 う場合は , そう感じるて、あろう。平たくい えば , 発生手順やプログラミングの方法は , もうすて、に固定的な方法て対応て、きるのて、 ある。 Fig. 1 を参照してもらうとわかるよう に , ①から③の動きはどの割り込みも同じ て、あるが , ROM 内のコードはどのようにも 変えられる。このことがシステムのノヾージ ョンアップに貢献しているのて、ある。割り 込みの概念は一般的なものて、あり , ほとん どのコンヒ。ュータて、は , 処理の詳細につい ては多少異なっているとしても , その基本 的な方法をサポートしている。 256 個の割り 込みべクタは , MS-DOS が使用しているも のからユーザが使うことのて、きるユーザ割 り込みまて、多種多様にある。その詳細に関 しては , Fig. 2 を参照していただきたい 0 この割り込みべクタについては , 次の List1 A0000 ② 未実装 RAM MS ーロ OS プログラミンク、 . 入 P 日 ある。もちろん 16 進数て、指定することもて、 るべクタ番号は , 10 進数て、指定する必要が 示するようになっている。ただし , 指定す 示する。またべクタ番号の指定だけて、も表 ないときは , すべてのべクタアドレスを表 する。このプログラムは , 引数を何も指定し もて、きる。実際の DOS コールは , 35H て、実行 のプログラムに示す intdosx 関数て、得ること このプログラムて、はそこまて、やっ 0 ていない きるが , Fig. 1 割り込みの概要図 物理アドレス ( 16 進数 ) FFFFF ROM 引 OS 96K バイト ( VRAM 空き 768 バイト ) E8000 E7D00 AFDOO B0000 B7D00 B 8000 BFDOO C0000 C8000 E0000 グラフィック VRAM ( 青画面 ) ( VRAM 空き 768 バイト ) 32K バイト グラフィック VRAM ( 赤画面 ) ( VRAM 空き 768 バイト ) 32K バイト グラフィック VRAM ( 録画面 ) ( VRAM 空き 768 バイト ) 32K バイト ューザ用 ROM 96k バイト 未使用領域 32K バイト グラフィック VRAM ( 灰画面 ) A0000 8K バイト テキスト VRAM A2000 A3 F F8 A4000 A8000 約 8K バイト テキスト VRAM アトリヒュート ( メモリスイッチ 8 バイト ) 1 K バイト 未使用領域 32K バイト ( VRAM 空き 763 バイト ) グラフィック VRAM ( 灰画面 ) ( 裏画面 ) ( VRAM 空き 763 バイト ) グラフィック VRAM ( 録画面 ) ( 裏画面 ) ( VRAM 空き 763 バイト ) グラフィック VRAM ( 赤画面 ) ( 裏画面 ) Ⅳ RAM 空き 763 バイト ) グラフィック VRAM ( 青画面 ) ( 裏画面 ) I/O ポートのアクセスで裏表切り替え 98 固有 COMMAND.COM 非常駐部 初期設定 1 60 バイト 環境工リア 外部コマンドはここにロードされる 外部コマンド用空き領域 RAM ディスクウインドウ 128K バイト ・一一・一 - 立 80000 ユーサ領域 IM バイト 640K バイト ( 655360 バイト ) ① COMMAND. COM 常駐部 BUFFERS ティスクバッフア領域 増設内部 FCB テパイスドライバ ( プリンタ , RC -232C , グラフィックスシステム領域 日 AM ティスク , 日本語 FEP など ) 0 ~ 100K バイト以上 ティスクバッフア領域 MSDON . SYS 9. SYN (SYSNIT 部約 25K バイトを除く ) K バイト程 一般に 200 いほど多い ) のバージョンが高 以上 (MS-DOS 70 ~ 90K バイト 00000 00400 00600 1 K バイト 割り込みべクタテープル システムワークエリア ①割り込みがかけられると , 「割り込みペクタテープル」へとんでいく ③システムハンドラが終了すると , 旧 ET で戻り割り込みを発注させた次の命令へすすむ ②「割り込みべクタテープル」の中に記述されているアドレス , つまり ROM 引 os へ移動しその内容を実行する C プログラマのための MS ー DOS プログラミング入門 87
( 第 3 可ファイル操作編の 3 高橋良明 前回は , 簡易テータベースの作成ということで , SDF ファイル形式のデー タベースをアクセスしてみました。 今回は , テータベースにフィールド名と削除マークを追加して , フィール ド名の表示と削除レコードの処理を行ってみようと思います。 五ロ に挿入しました ( Fig. 1 ) 。 ( 2 ) D ・・・・・・削除レコード テータベスファレ変更点 サンプルデータて、は , 各レコードのオフ 削除マークが、 N ' ならば正常レコードとし セット 0 ( 各レコードの先頭 1 バイト ) に削除 て扱い , 、 D ' ならば削除レコードとして扱うよ マークを設定しています。 こと 今回は , 削除レコードの対応という うにしています。削除マークをキャラクタ 削除マークは , 1 バイトの文字て、識別しま て、 , データベースファイルに削除レコード て、表しているのて、 , データとともに TYPE ーク す。 か否かを識別する「削除レコード識別マ コマンドて、表示て、きるようになっています。 ( 1 ) N ・・・・・正常レコード ( 以下削除マークといいます ) 」を各レコード この例て、は , 削除マークはキャラクタて、 識別するようになっていますが , バイナリ Fig. 1 SDF ファイル体裁 コードて、マークしてもかまいません。ただ し , その場合には SDF ファイルという形式 からはすれるため , オープン時のファイル アクセスのモードは「テキスト」て、はなく「バ イナリ」て、行うようにしなくてはなりませ ん。 なお , 削除マークのレコード内オフセッ トは , データベース管理ファイル ( DB. MNG ) に設定してあるのて、 , 最終フィールドの次 の 1 バイトなどに変更することがて、きます。 オフセット 0 以外の任意の場所に変更して もかまいません。 テータベース管理ファレの変更点 今回のフィールド名表示と削除レコード 対応のため , データベース管理ファイルを 次のように変更しました ( Fig. 2 ) 。 削除マークオフセット 前述のように削除マークを設定するにあ たって , データベース管理ファイルに削除 マークのレコード内オフセットの領域を追 応用 C 言語 109 1 2 バイト CRLF バイト フィールドデータ領域 削除レコード識別マーク 、 N ' ・・・・・・正常レコード 、 D ・・・・・・・削除レコード Fig. 2 管理ファイル (DB. MNG) 管理テープル内容 0 升 s et 0 ファイル名十拡張子 ( 12 バイト ) レコード数 ( 4 バイト ) レコード長 ( 2 バイト ) フィールド数 ( 2 バイト ) フィールド長 ( 2 バイト X20 ) 削除レコード識別マークオフセット ( 2 バイト ) フィールド名 ( 20 バイト xe の 60
けファイルサーバ自体の容量が使用された 以外 , Fig. 2 の ( b ) と変わらない。ディスク レスタイプのマシンには , たんにディスク がないものや , ディスクのインタフェイス ( SCSI) からないもの ( ディスクは絶対につか ないもの ) などいろいろある。実際の例とし ては表 4 があげられる。 64 CMAGAZINE 19 2 上げたことが少して、も役立てば幸いて、ある。 店に頼るわけだが , そのとき , こて、取り になり得る。最終的にはディーラーや販売 合わせも可能て、あり , 話はいくらても複雑 クが絡んて、くると , 異メーカー相互の組み し , 無数の組み合わせがある。ネットワー さまざまな種類のポードや周辺機器が存在 ない。実際には各メーカー , 各機種ごとに 成例をあげたが , これはほんの一例にすぎ 以上いくつかのワークステーションの構 うなものがある。 る RISC 系のワークステーションには表 5 のよ 透してくることだろう。現在発売されてい 低価格化は明白だ。徐々に低価格層にも浸 定着した観がある。量産が進めば RISC 系の イエンドマシンは RISC 系 , というのはほば 格性能比て、は RISC 系が圧倒的に優位だ。ハ 系のシステムに比べるとまだ高価だが , 価 る。 RISC 系の CPU を使ったシステムは 68000 モて、は 2 倍ないしそれ以上の速度差を感じ とはて、きないが , ウインドウシステムのデ 値と RISC 系の MIPS 値を単純に比較するこ という速度を可能にする。 68000 系の MIPS のに対して , RISC 系て、は軽く IOMIPS 以上 る。 68000 系がせいぜい 6 ~ 7MIPS 止まりな 行て、きるように設計された CPU のことて、あ の命令を簡略化したかわりに 1 命令を高速実 ( 縮小命令セットコンビュータ ) を指す OCPU う力す , Reduced lnstructi on Set CO mputer る。 RISC は , すて、にご存じの方も多いと思 R ー 3000 などの RISC 系に大きく分かれてい などの 68000 系と , SUN の SPARC,MIPS の 現在 , ワークステーションは 68020 , 68030 68000 系と RISC 系 [ 表 3 ] ファイルサーバ FS ー 120 ( 3.5 インチ FD ・ ST 内蔵 ) 5MlPS ( \ 2 , 800 , 000 ) A 電 機 E S 0 N Y E N 0 S E こ 0 s W S y N 0 S 本 CPU 体主記憶 ティスク 68030 ( 25MHz ) 8M バイト 300M バイト その他 15 インチモノクロティスプレイ , キーボード・マウス , OS (4.2BSD ( ライセンス & ST ) ) \ 3 , 200 , 000 ( \ 3 , 950 , 000 ) 5.3M 旧 S システム価格 NWS ー 1860 本 CPU 体主記憶 ティスク 68030 ( 25MHz ) 16M バイト 640M バイト そカラーティスプレイ , カラーピットマップボード , キーボード・マウス の 他 ( モノクロティスプレイ , モノクロピットマップボード ) システム価格 ティスク 体主記憶 本 CPU NWS ー 1960 \ 4 , 975 , 000 ( カラー ) ( \ 4 , 300 , 000 ( モノクロ ) ) 5.3M 甲 S 68030 ( 25MHz ) 16M バイト 386M バイト x3 十 593M バイト ( MO ティスク ) そカラーティスプレイ , カラービットマップボード , キーボード・マウス の 他 ( モノクロティスプレイ , モノクロビットマップボード ) SUN ー 3 / 470 ( カラーシステム ) システム価格 本 CPU 体主記憶 付ティスク 68030 ( 25MHz ) 7MIPS 8M バイト 327M バイト 属 1 / 4 インチテーブドライプ , GX アクセラレータ 19 インチカラーティスプレイ , キーボード・マウス , システム価格 [ 表 4 ] ディスクレスシステム SunOS NWS-71 1 本 CPU 体主記憶 68020 ( 16.67MHz ) 4M バイト 2.3M 甲 S B / W ティスプレイ , キーホード・マウス付属 システム価格 NEWS-721 本 CPU 体主記憶 68020 ( 20MHz ) 4M バイト カラーピットマップボード内蔵 , キーホード・マウス付属 の他カラーティスプレイ システム価格 [ 表 5 ] R 旧 C 系システム NWS ー 3840 2 .8M 甲 S 20M 甲 S E S 0 N D E S 本 CPU 体主記憶 ティスク R3000 ( 20MHz ) 16M バイト 286M ノヾイト そのカラーティスプレイ , カラービットマップボード , キーボード・マウス システム価格 DEC station2100 ( \ 8 , 750 , 000 ) \ 9 , 775 , 000 ( \ 9 , 1 60 , 000 ) \ 9 , 1 60 , 000 ( \ 450 , 000 ) \ 450 , 000 ( \ 1 , 200 , 000 ) \ 1 , 850 , 000 ( \ 3 , 950 , 000 ) \ 4 , 975 , 000 ( \ 988 , 000 ) 本 CPU 体主記憶 10.4M 甲 S 日 2000 ( 1 2 .5MHz) 8M バイト 付 15 インチモノクロティスプレイ , キーボード・マウス , 日本語 UNIX TCP/IP, 日本語 DEC 属 Windows, SC 引インタフェイス その八一ドティスク ( 104M バイト , 332M バイト ) システム価格 SPARC station370 \ 1 , 391 , 000 ( 104M バイト ) \ 2 , 096 , 000 ( 332M バイト ) 本 CPU 体主記憶 付ティスク 16M 甲 S SPACE(25MHz) 8M バイト 327M バイト 属 1 / 4 インチテーブドライプ , GX アクセラレータ , 19 インチカラーティスプレイ , キーホード・ マウス , SunOS システム価格 ( \ 1 0 , 430 , 000 ) \ 1 0 , 430 , 000
ーション A 広張八一ドティスク MO ディスクのコスト パフォーマンスは抜群 UNIX には多くの優れたフリーソフト , PDS 類があることは有名だ。実際それらを活用 する , しないとて、はワークステーションの使 用環境は大きく左右される。フリーソフト を次々とインストールしてこそ , UNIX 本来 のよさが見えてくるのだが , それと同時に システムのディスク容量はすぐに不足する。 嬉しいことにフリーソフトにはとても便利 なカ作が多く , 困ったことに便利なソフト ほどサイズも大きい たとえば , 使いやすさや拡張性の高さて、 定評のあるエデイタ GNU-Emacs は 15M バ イト程度 , 文書清書系て、有名な TEX はフォ ントも含めると 60M バイト前後のディスク 容量が必要になる。フリーソフトは集め始 めるときりがないのて、 , テープに保存する などして , ディスクのやりくりをするわけ だが , それて、も容量不足の場合は拡張ハー [ 表 2 ] ミドルエンドマシン Fig. 1 N F S Ether ワークステ ワークステ ーション B ワークステーション A が使える団 SK NFS ワークステーション B が使える D 旧 K 300M バイト ドディスクを用いる以外に手段はない ンなどは , どのようなハードディスクて、も が発売されている。 Sun ワークステーショ パーティーからも純正より安価なユニット ニットをリリースしている。また , サード 拡張ハードディスクは各メーカが純正ユ 増設て、きるように設計されているのて、 , サ ( \ 2 , 550 , 000 ) NWS-1750 体主記憶 ティスク 68030 ( 25MHz ) 4.3M 甲 S 8M ノヾイト 286M バイト N Y E N Y N N LJ A 石 機 62 その B / W ティスプレイ , モノクロピットマップボード , キーボード・マウス システム価格 NWS ー 1850 本 CPIJ 体主記憶 ティスク 68030 ( 25MHz ) 5 . 3 M IPS 16M バイト 286M バイト の B / W ティスプレイ , モノクロピットマップボード , キーボード・マウス システム価格 本 SUN-3/80 ( モノクロシステム ) 体 CPU 3MlPS 68030 ( 20MHz ) 苻主記憶 4M バイト 属 17 インチモノクロティスプレイ , キーボード・マウス , SunOS そのディスク ( 104M バイト ) , 3.5 インチ FD ( 1 .44M バイト ) システム価格 本 SPARCstation1 体 CPU SPACE(20MHz) 12.5M 旧 S 苻主記憶 8M バイト 属 17 インチモノクロティスプレイ , キーホード・マウス , SunOS LUNA-DT55 システム価格 そのティスク ( 104M バイト ) , 3.5 インチ FD ( 1 .44M バイト ) 本 cpu 体主記憶 ティスク 68030 ( 20MHz ) 4MlPS 8M バイト 172M バイト そ 15 インチモノクロティスプレイ , モノクロビットマップボード , キーホード・マウス , レーザ プリンタ OS ( 4.2BSD ライセンス ) システム価格 CMAGAZINE 19 2 \ 2 , 950 , 000 ( \ 3 , 550 , 000 ) \ 3 , 950 , 000 ( \ 1 , 920 , 000 ) \ 1 , 600 , 000 ( \ 1 , 220 , 000 ) ( \ 1 , 785 , 000 ) \ 2 , 237 , 000 \ 2 , 845 , 000 300M バイト ードバーティーの製品が非常に豊富て、ある。 ユーサか増えてきたら (SONY NWP-539N 44 万円 ) 。 ているが , ほとんどは SONY の OEM て、ある 現在 MO ディスクは各メーカーから発売され メディア間のデータ転送などが楽になる。 台購入可能だ。 MOi•イスクが 2 台あれば , クドライプはハードディスク 1 基の予算て、 2 いくらて、も入れられる。低価格な MO ディス 能 ) て、ある。メディアを買いたせばデータは にならない。加えて , リムーバブル ( 交換可 劣るが , マルチューザ環境て、の使用て、は気 て、きる。速度的には多少ハードディスクに バイトのハードディスクと同じように使用 MOi•イスクは , 交換さえしなければ 297M れない容量 / コストパフォーマンスをもつ。 万円以下 , メディアは 3 万円程度と , 信じら トという大容量て、ありながらドライプは 50 スクは片面 297M バイト , 両面て、 594M バイ イスク ( MO ディスク ) クがある。光磁気ディ さらに , ディスクの拡張には、、光磁気デ ネットワーキング うネットワーク (LAN) は Ether-net て、 , その ンの構成例に目を移してみよう。 ワーク相互に接続されたワークステー こて、スタンドアロンからネット さて , こて、い ショ
大特集・最新 U N Ⅸ考察 T A G E か考えられる。ここでは , いくつか使用例を挙げなから実 . のシステム構成を考察してみよう。 ひとくちに UN Ⅸワークステーシンといっても , ユーザの途によってさまざまなシステム構成 シー成 UN Ⅸワークステーションの 、ドアロンの 最′」成 UN Ⅸを使用するために必要な最少構成 は , おおよそ CPU, 100M バイト程度のハー ドディスク , キーポード , ディスプレイモ ニタ程度て、ある。価格的には 150 万円以内に 収まるはずだ。具体的には表 1 のような機種 がある。とりあえずこれだけのハードウェ アをそろえると , UNIX の機能 ( ネットワー クや電子メール , ウインドウシステムなど ) をひととおり使える。 100M バイトと聞くと , パソコンユーザに は極めて大きな容量と思われがちだが , UNIX, とくに BSD 系 UNIX て、はシステムだ けて、ディスク容量はいつばいになってしま い , 容量はほとんど残らない。 UN Ⅸて、はヾ仮 [ 表 1 ] 最小構成システム ( ローエンドマシン ) 石田秋也 想記憶クをサポートしているが , この仮想 記憶のスワップ用に約 20M バイト , そして UNIX 標準の多量のフィルタやコマンドの 類 , 工デイタ , コンパイラ , デバッガなど のプログラム開発ツール , オンラインマニ ュアルや文書清書系 , さらに X-Window な どのウインドウシステムがあると残りの 80 M バイトは簡単にいつばいになる。ツール が整理されている System V 系 UNIX は BSD 系 UNIX ほどてはないが , それて、もウインド ウシステムを使う気なら 100M バイトのハー ドディスクは最低限必要て、ある。 いずれにせよ , より上位のシステムて、て、 きることは , 最少構成のシステムてもいち おうすべて対応てきる 0UNIX 用 PDS のイン ストールや , UNIX マシン相互て構成される アカデミックネットワークへの参加などは , 最小構成て、も十分可能だ。今後ローエンド I_J A 石 機 E S N DT-20 本 CPIJ 体主記憶 ティスク 68030 (20MHz) 4MlPS 4M バイト 70M バイト そ 15 インチモノクロティスプレイ , モノクロビットマップボード , キーボード・マウス , OS ( 4. 他 3BSD ライセンス ) システム価格 NWS -1450 ( \ 880 , 000 ) \ 1 , 300 , 000 ( \ 1 , 250 , 000 ) 本 CPU 体主記憶 ティスク 68030 (25MHz) 8M バイト 240M バイト 3.9M S そ B / W ディスプレイ , キーボード・マウス システム価格 \ 1 , 450 , 000 機が充実し , ますます低価格てシステムが 組めるようになるだろう。 スク容量 30 M バイ呈度の 、、ルエンドシステム UNIX を少しずつ使いこなしてくると , 100 M バイト程度て、は容量不足になる。そうい うユーザにお勧めするのがディスク容量 300 M バイト程度のミドルエンドマシンてある ( 表 2 ) 。ローエンドマシンに比べると , 主記 憶容量やキャッシュメモリ容量が増え , 処 理速度が向上する。ウインドウシステムや AI ツールなど大きなアプリケーションを走 らせる場合 , 主記憶容量によって実行速度 にかなりの差が出る。主記憶に入りきらな い大きなソフトウェアを走らせると , 仮想 記憶のスワップが大きな負荷になり , 実行 速度が落ちるのて、ある。 X-Window などを 快適に使うためには 8M バイト程度の主記憶 容量が必要てある。 ミドルエンド以上のシステムには , ディ スクのバックアップなどに使うストリーマ がついたモデルが多い。本格的なビジネス プは不可欠てある。 ュースを望むなら , 大特集最新 UN Ⅸ考察 61 する際にもストリーマは必要なことが多い ソフトをインストール ディスクのノヾックアッ
・最新 UN Ⅸ考察 大特集 転送速度は 10Mbps , 最近のワークステーシ ョンにはほとんど標準て、インタフェイスが ついている。 LAN の特長を大別すると , デ ータ転送 , CPIJ の共有 , ディスクの共有の 3 点があげられる。 ァータの転送クは , ネットワークの物理 的機能そのもの。説明するまて、もないだろ う。、℃ PU の共有〃は , ほかのマシンの CPU を , 自分のマシンの CPU と同じ感覚て、自分 のマシンから使うことて、ある。処理したい データをネットワーク経由て、ほかのマシン ロ ロ に送り , 処理した結果を再びネットワーク を経由して返してもらうわけだ。ネットワ ークの転送速度が十分速いからこそ可能な のて、ある。そして、、ディスクの共有〃は , ほかのマシンのディスクを自分のマシンの トワークを通じて入ってくる多数のリクエ らて、も同じ環境て、ログインして使えるよう ストに答えるために , 高性能てなくてはな ディスクと同じ感覚て、使うことだ。これも になる。 LAN< 結ばれたマシンはそれ全体 CPU の共有と同じく , ネットワーク経由て、 らない。ファイルサーバの例としては表 3 の がひとつのシステムとみなせるわけだ。 ようなシステムがあげられる。 ディスクのアクセスをリクエストし , ネッ 高性能ファイルサーバ トワーク経由て、結果を得る。この 3 点のなか さて , 上記の構成例て、はファイルサー と手軽な て、 , 最大のメリットはディスクの共有て、あ と小容量のディスクをもったマシンとを組 ディスクレスタイプ み合わせてシステムを構成したが , ハ ディスクのビット単価は大容量ハードディ ディスクの共有は , UNIX て、は、、分散ファ ところて、 , 多数のマシンて、ディスクを共 スクほど低下するのて、 , それぞれに小容量 イルシステムなどと呼ばれ , 現実には Sun 有しなければならないとき , どのような構 のディスクをもたせるのはコスト的には不 Microsystems が開発した NFS (Network 成がいちばん簡単て、あろうか。たとえば , 利てある。そこて , NFS をもう一歩突き詰 File System) が多く用いられている。 UNIX 、、 IG バイトのデータを 10 台て、共有 , ただし めると「マシンに固有な領域もファイルサ て、は複数のハードディスクドライプをヾマ 各マシンに固有な領域が 50M バイト〃と仮 ウント〃してひとつのファイルツリーに統 ーバにもたせる」というアイデアに到達 定し , ふたつの極端な構成例 ( Fig. 2 ) を考え する。、、ディスクレスマシンの誕生てあ 合して扱う。それと同じようにほかのマシ る。ディスクレスマシンを用いて (b) を構築 てみよう。 (a) は同じ 150M バイトのディス ンのディスクも、、マウントクしてしまおう , し直すと Fig. 3 のようになる。各マシン固有 クをもったマシンを 10 台つなぎ , 固有領域 というのが NFS て、ある。 の領域をファイルサーバにもたせた容量だ 以外の 100M バイトを各マシンて、共有する。 NFS を使ってディスクを互いに共有しあ (b) は 50M バイトのディスクをもったマシン うと , マシンの資源 ( ディスク容量やデータ Fig. 3 ディスクレスシステム を 9 台と IG バイトのディスクをもったマシン など ) を数倍に有効利用て、きる。たとえば 300 ティスクなし を 1 台つなぎ , IG バイトのディスクのみを相 M バイトのディスクをもった同じマシンが 互て、共有というやり方て、ある。 (a) て、は NFS 2 台あり , それらが LAN て、結ばれ NFS て、互 て、マウントする数がつなぐマシンの数の 2 乗 いにディスクを共有し合っているとしたら , に比例してしまうが , (b) て、はマシンの数に それは 600M バイトのディスクをもったマシ 比例するだけてある。簡単なのは明らかに ン 2 台と同じように使える ( 厳密にはマシン ( b ) て、ある。 に固有な領域が必要なのて、 600M バイトには (b) のように中央に設置された , 共有する ならない ) のて、ある (Fig. 1) 。いろいろな実 行可能ファイルを共有すればディスクの大 大容量ディスクをもつマシンはヾファイル 幅な節約がてきる。ューザのホームディレ サーパクと呼ばれる。ファイルサーバはた クトリを共有しておけばどちらのマシンか んにディスクが大容量なだけてなく , ネッ Fig .2 ファイルサーノヾ 150M バイト 50M ノヾイト ロ ロ ロ ファイルサーバ バイト ロ ロ ファイルサーバ 1.5G ノヾイト 大特集最新 UN Ⅸ考察 63
ジスタを使うのが通例て、す。フレームボイ ンタという名前は , スタック上に割り当て たローカル変数領域のことをフレームと呼 ぶことからきています ( 大型計算機の用語て、 は , フレームのことを励起レコード activation record ともいいます ) 。 関数に制御が渡った時点て、 BP レジスタに は , 呼び出し側のフレームボインタが入っ ています。そこて、 , 呼び出された関数は , ま $BP レジスタをスタックにブッシュしま す (Fig. 1 ④ )。 この時点て、のスタックポインタ ()P レジ スタ ) の値を , 呼び出された関数て、のフレー ムボインタとします。つまり , BP レジスタ に SP レジスタの値をコヒ。ーします。これ以 降 , ローカル変数とパラメータは , BP レジ スタにオフセットを加えてアクセスするこ とがて、きます。 DATA, _BSS 次にローカル変数領域をスタック上に確 保します。具体的には , スタックポインタ (SP) の値を強制的に調整してしまいます。 8086 て、は , スタックはアドレスの上位から 下位に向かって伸びるのて、 , SP の値をロー カル変数領域のバイト数だけ減らせばよい ことになります。関数 f00 は , ローカル変数 int x, y; をもっているのて、 , ローカル変数領域を 4 バ イト確保します。つまり , SP を 4 だけ減ら します ( Fig. 1 ⑤ ) 。以上て、関数のプロローグ 処理が完了し , 関数本体の実行に入ること 33 : 01 : プロローグ処理 エピローグ処理 のは table. c の computeOffset( ) て、す。 , こて、 , パラメータについて少し考察し てみましよう。関数 f00 の 2 番目のパラメー タは char 型て、すが , スタック上て、は 2 バイト を占めています。これは , スタックへのプ ッシュ , ポップはワード ( 2 バイト ) 単位て、行 われるからて、す。また , C 言語て、は , 原則と して char 型のパラメータは , int 型に変換し てから , 関数に渡すことになっています。 Cm て、も , char 型のパラメータは呼び出し側 て、 int 型に変換してからスタックに積みま コンヾイラ 可変パラメータ関数て、もパラメータを確実 り立ちます。したがって , printf のような 式はパラメータの数がいくって、あっても成 となることがわかります。また , この計算 B P 十 2n 十 2 ドレスは , 長て、渡されるのて、 , n 番目のパラメータのア Cm て、は , すべてのパラメータは 2 バイト す。 せば , パラメータ b の値にアクセスて、きま 表 1 のとおり B P 十 6 番地の 1 バイトを取り出 の内部を詳解 す。 List 2 関数 f00 のオフ、ジェクトコード イトの順て、メモリ上に格納されますのて、 , ワード型のデータは , 下位バイト , 上位バ ことになります。幸いなことに , 8086 て、は すべてのパラメータは 2 バイト長て、渡される したがって , 呼ばれる関数からみれば , にアクセスすることがて、きます ( Fi g. 2 ( a ) ) 。先ほど「 C 言語て、はなぜかパラメー タを右から左の順て、スタックに積む」と説明 しましたが , その理由はここにあります。 もしも , PascaI のように左から右の順序て、 1 : DGROUP 3 : _TEXT 4 : _TEXT DATA 7 : _DATA 9 : _BSS BSS _TEXT f00 f00 _TEXT 40 : 35 : 34 : 30 : 29 : 23 : 22 : 20 : 8 : 6 : 5 : 2 : group segment byte endS segment endS segment endS assume segment byte public proc push mov sub mov mov mov cbw mov mov mov mov imul Jmp add POP ret endp endS end word word public public public 'CODE' 'DATA' ' BSS を CS: _TEXT, DS:DGROUP, SS:DGROUP public 'CODE' sp, 4 bp, sp near f00 がて、きます。 こまて、のプロローグ処理を List2 に示します。 関数 f00 本体の実行に入る時点て、は , スタ ックは Fig. 1 ⑤のようになっています。原則 として , スタックへのブッシュ , ポップは ワード ( 2 バイト ) 単位て、行うのて、 , Fig. 1 て、 は 1 目盛が 2 バイトとしてあります。この図 から , ローカル変数 x , y とパラメータ a, b, c のオフセットを求めると表 1 のようにな ります。 Cm コンパイラの中て、 , ローカル変 数とパラメータのオフセット値を計算する ax, word ptr 4Cbp] word ptr -2[bp] , ax al, byte ptr 6 [bp] word ptr -4[bp] , ax bx, word ptr 8 Cbp] byte ptr [bx] , 97 ax, word ptr -4[bp] word ptr -2[bp] sp, 4 : r e t u r n x * y yacc による C コンバイラブログラミング 81
デバイス上て、形成されます。て、すから , ハ ードディスクはひとって、あっても , たいて いの場合 , 複数のパーティションに分けら れていますから , 複数のファイルシステム がただひとつの装置上に存在することにな ります。 これら複数のファイルシステムから , 仮 想的なひとつのファイルシステムを構成す るためにマウントを行います。マウントを 行うためには mount コマンドを使います。 mount /dev/hd 1 /b in のように実行すれば , ソ bin 〃にデバイスフ ァイル */dev/hdl" に対応するファイルシ ステムのルートが重なるようになって ( Fig. 5 参照 ) , "/dev/hdl" のファイルが / bin に続 くパスによりアクセス可能となります。 また , 同じ mount コマンドてファイルシス テムのマウントの状態を知ることがて、きま す。 このようにして , ユーザにはファイルシ ステムがひとっしか見えず , ファイルが実 際にどのデバイスにおかれているかを意識 しなくてすむのてす。 UNIX のファイルシステムのもうひとつの 特長は , あらゆるものがファイルて、あると いうことてす。このことが , UNIX のファイ ルシステムにすっきりして使いやすい構造 をもたせているのて、す。先ほども「デバイス Fig. 4 UN Ⅸのファイルシステム Fig. 5 ファイルシステムのマウント /usr /bin ( mount されたデバイスのファイル ) usr 5 book 6 9 48 CMAGAZINE 19 2 2 vmunlX 4 bin 7 8 ファイル」という言葉を使いましたが , デバ イスて、さえファイルと同様にアクセスてき るのて、す。 一般にディレクトリと呼ばれるも のも , UNIX のファイルシステムて、はディレ クトリファイルと呼び ( たんにディレクトリ というのがふつう ) , ひとつのファイルとし て扱われます。先ほども述べましたが , MS ー DOS て、はディレクトリとファイルは完全に 区別されています。 このことを端的に示すのが , ディレクト リのオープンの処理て、す。 MS-DOS て、は , ディレクトリをオープンしようとすると , 工ラーが発生します。しかし , UNIX て、は , ディレクトリをオープンすることがて、き , その内容を読むことさえて、きます。たとえ ば , MS-DOS て、は , TYPE TYPE USR(USR はサプディレクトリ ) としてもエラーメッセージが表示されるだ けて、すが , UNIX て、は , MS-DOS の TYPE コマンドに対応する cat コマンドを用いて , cat cat usr(usr はサプデイレクトリ ) とすると , その内容が画面上に表示されま す ( 実際には , 表示不可能なコントロールキ ャラクタなどが含まれていますから , 画面 は乱れます ) 。 さて , このディレクトリに書き込まれて いる内容は何て、しようか ? こには , MS -DOS と同じく , そのディレクトリに含まれ るファイルのエントリが書き込まれていま すが , MS-DOS とはその内容が異なりま す。次に このディレクトリエントリにつ いて説明します (MS-DOS とは異なり , UNIX においては , ルートディレクトリの、、 と、、 . 〃のエントリも存在します。て、すか ら , MS-DOS のところて、説明したような cd コマンドに対してエラーは起こりません ) 。 のティレクトリ 、トリの構造 UNIX システムは , 大きくふたつに分けら れます。ひとつは System V て、 , もうひとつ は 4.3BSD て、す。ディレクトリエントリは , このふたつのシステムて、はそれぞれ多少異 なります。 System V て、は , ひとつのエントリに対し 16 バイト固定長用意されており , 以下のよ うな構成になっています ( Fig. 6 参照 ) 。 ・ i 番号 ( i ノードの番号 ) 2 バイトの長さてす。これに関しては , 後て、詳しく説明します。 ・ファイル名 残りの 14 バイトて、す。したがって最大 14 文字まて、のファイル名しかつけられ ません。 4.3BSD て、は , ひとつのエントリはほとん ど任意長て、 , 以下のような構成になってい ます ( Fig. 7 参照 ) 。 ・ i 番号 2 バイト長て、す。後て、述べます。 ・エントリの大きさ これも 2 バイトて、す。工ントリが固定 長て、ないため , 用意されています。 ・ファイル名の長さ これも 2 バイトて、す。 BSD て、はファイル 名に対して , 最大 255 文字まて許してい ます ( 14 文字て、は少ないとの考えから ) 。
大特集・最新 UN Ⅸ考察 ・ファイル名 8 バイト分用意されており , 最大て、 8 文 字の長さしかつけられません。 ・拡張子 ・ファイル属性 そのファイルがどのようなものて、ある か ( ディレクトリて、あるか , ファイルて、 あるか , なにか特別なファイルなのか ) を示します。 ・予約領域 ・最終変更時刻と最終変更日付 それぞれ 2 バイトずっ用意されており , 最新のファイルの更新情報て、す。 ・クラスタ番号 ファイルやディレクトリの , ディスク 上の物理的な位置を示しています。 ・ファイルの大きさ ディレクトリに対しては , 0 となって 3 バイト長て、す。 ます。 ファイルはすべてこの位置に収められてい 決まった位置に存在します。ルートにある さだけ用意されていて , ディスク上のある ルートに対するディレクトリは , ある長 います。 ディスク上て、の物理的な位置が求められ , こにあるファイルも , 上記と同じ方法て、 , ィレクトリエントリが書き込まれています。 まれるファイルとかサプディレクトリのデ イスクの箇所には , そのディレクトリに含 リて、ある場合 , クラスタ番号が指し示すデ 工ントリに対するファイルがディレクト 身が読めるというわけて、す。 まれている情報を取り出せばファイルの中 置がわかり , ディスクのその位置に書き込 報によって実際のディスク上の物理的な位 あるエントリに対するファイルは , その情 開始位置のクラスタ番号が書かれています。 ディレクトリエントリには , ファイルの 層構造の実現 MS-DOS での ファイルの中身が読み出せるのて、す。サプ ディレクトリに関しても同様て、す。 ディレクトリの移動もこのエントリを用 いて行われます。また , ( 親ディレク トリ ) と、、〃 ( そのディレクトリ自身 ) に対 するエントリも , ルートディレクトリを除 〃とすると、、 いて必ず存在して , 、、 cd のエントリを読んて、 , ディレクトリの移動 が行われます ( 、、 .. クのエントリが存在しな . 〃に移 いルートディレクトリにおいて , 動しようとするとエラーが起こります。し かし , 、、 cd . 〃に対しては , MS ー DOS て、は、、 のエントリを読まずに行っているため , ほ かのディレクトリと同様 , ルートディレク トリにおいてもエラーは起こらず正常に動 作します ) 。 このように , ディレクトリエントリに書 かれているファイルの開始クラスタ番号が , ファイルあるいはサプディレクトリへのポ インタとしてファイルシステムの階層構造 を形成しているのてす。 しかし , ここて、ひとつ問題があります。 ファイルがひとつのクラスタに収まりきら ないほどの大きさて、あったらどうなるて、し ようか ( IM バイトのフロッヒ。ーディスクの 場合 , 1 クラスタの大きさは 1024 バイトて、 ファイルの大きさが 1 クラスタの大きさを 超えた場合 , そのファイルはクラスタの大 きさごとに分割されることになります。 のとき , 分割されたファイルはディスク上 て、連続したクラスタにおかれるとはかぎり ません。これを保証するためには , ファイ ルの消去の操作ごとに物理的なファイルの 移動が必要となって , 非常に時間がかかっ てしまいます。 MS-DOS て、は , この間題を解決するため に , FAT(FiIe Allocation Table) と呼ばれ るものを用意しています。 FAT はその名の とおりファイルの位置を示した表て、す。 FAT 領域は , ディスク上のある決まった位置に おかれます。この FAT を用いてどのように 分割されたファイルの順番を管理している のて、しようか。 ファイルの中身を読もうとするとき , ま ずディレクトリエントリに書かれている開 始クラスタ番号の位置から読み込まれます。 この位置には分割されたファイルの先頭の ものが書き込まれています。そして , この 開始クラスタ番号に対する FAT の位置に 次に読み込むべきクラスタ ( 分割されたファ イルの次のもの ) の番号が書き込まれていま す。 以下 , 同様に , 次々と分割されたファイ ルの位置が求められます。すなわち , n 番の クラスタの次は FAT の n 番の内容を見ればわ かるのて、す。 FAT をたどっていき , ある特別な値 ( 12 ビ ットの FAT なら 16 進数て、 FFF ) にぶつかった ときが , そのファイルの終わりになります。 短いファイルなら , 開始クラスタ番号に対 する FAT の位置にはこの値が入っているこ とになります。このように , FAT は分割さ れたファイルからファイルへのポインタの 役割をしていて , チェーン ( 鎖 ) を形成して いるのて、す ( Fig. 3 参照 ) 。 イルシステム Ⅸの 大特集最新 UN Ⅸ考察 47 て , ひとつのデバイスファイルに対応した ひとつのパーティション ( 区分 ) て、あるとか 気ディスクて、あるとか , ハードディスクの のファイルシステムとは , たとえば , 光磁 クセスされますが , ここて、述べている複数 ファイル ( スペシャルファイル ) を通してア UNIX て、は , すべてのデバイスはデバイス のて、す。 数のファイルシステムから構成されている 想的なファイルシステムて、あって , 実は複 ひとっということになりますが , これは仮 側から見た場合 , ファイルシステムはただ つしか存在しません。したがって , ューザ はなく , ルートディレクトリは , ただひと ごとにルートディレクトリが存在するのて、 参照 ) 。しかし , MS-DOS のようにドライプ ステムはツリー構造となっています (Fig. 4 UNIX も MS-DOS と同様に , ファイルシ
MS-DOS プロクラミング 入門 第 5 回割り込みの概念と プロ フミング C プロクラマのための 秋津彰文 割り込み ( インタラブト ) は , MS - DOS でプログラミ ングする上で , もっとも重要な要素のひとつである。 ただし , アセンプラレベルの知識か要求され , C だけ で開発することか困難であった。しかし , 最近は C の処 理系か割り込み関係の関数をサポートするようになり , 以前よりは簡単にプログラムか組めるようになった。 チンの実行が終了すると , 当然割り込みを いるのは , 戻りの型だけて、ある。これは , かけた行の次に戻る。このとき , ハンドラ 8086 という CPU 自身が固有にもっている機 は IRET 命令て、戻る。この工 RET 命令は通常 能なのて、 , 無条件に従わねばならない C 言語からは , 処理することがて、きない。し 割り込みは C て、書くところのサプルーチン 8086 ファミリーて、は , アドレスの OH から たがって , 割り込みハンドラを C 言語て、書く に動きが似ているところがあるため同じも 400H まて、の 1024 バイトについて , OH のほ ときは , ひとくふうがいる。よく行われる のと誤解されやすいが , 決してそうて、はな うから連続した 4 バイトをひとっとしたメモ のは , 割り込みハンドラをアセンプラて、書 い。割り込みの基本機能は , 割り込みの発 リに番号を割り振り , 計 256 個の割り込みを き , 割り込みを行わせるプログラムのほう 生タイミングが予想て、きない点て、あろう。 固定的に割り当てている。この番号を割り込 を C 言語て、書くというスタイルて、ある。 もし割り込みが発生したら , その割り込み み番号と呼んており , プログラムの中て、割 ところが , 最近の C 言語て、は , 直接 C のソ がどのような作業を行うかはハンドラによ り込みをかけるときにはこの番号て、指定す ースプログラムから処理て、きるように inter って異なるが , アプリケーションからみる る。また , 0H から 400H まて、を一般に割り 「 upt 修飾子がサポートされている。この inter と , 予期て、きない事柄を割り込み作業に割 込みべクタテープルまたはインターラブト rupt 修飾子は TurboC と QuickC のバージョ り当てておけば , そのぶんの開発が楽にな べクタテープルと呼んて、いる。 ン 2.0 て、はサポートされているが , MS-C は る。いつ起こるかわからないことに神経を 割り込み番号が割り振られている 4 バイト TurboC ほど完全にはサポートされていな とがらせる必要はない。発生したときに対 のそれぞれには , 実際に処理を行うルーチ い。 TurboC には interrupt 修飾子のほかに 処て、きていればよいのて、ある。これが割り ンがあるメモリのセグメントとオフセット も割り込みに関するライプラリがそろって 込みの使い方のひとって、ある。事実 , フロ が格納されている。この 4 バイトのことを割 いるのて、 , アセンプラを使わすに TurboC だ ッヒ。ーが入っていないドライプに DIR のコマ り込みべクタアドレスと呼んて、いる。 けて、開発することがて、きる。 ンドを実行させると , 「中止く A 〉 , もう一度 実際に割り込みがかかると , べクタアド 割り込みのメリットは , システムの機能 く R 〉 , 無視く I> ? 」のメッセージが表示され レスて、指定されたアドレス , または故意に 向上にかなりの効果をもたらすことて、ある。 る。このメッセージは , 割り込み処理によ 書き換えたアドレスに命令が移動し , そこ つまり , 割り込み先のアドレス ( べクタアド って出力されているのて、ある。フロッピー に位置しているサプルーチンを実行する。 レス ) を自由に変えられることによる効果て、 にデータを読みにいくとき , フロッピーが このルーチンは一般に割り込みハンドラと ある。しかも , そのアドレス先のハンドラ 挿入されていなければ , 割り込みが発生す も呼ばれており , ューザが作成したルーチ はどのようにもつくることがて、きる。いい るようになっているのて、ある。 ンはユーザハンドラと呼ばれている。ルー かえれば , 割り込み操作て、唯一固定されて 今回は , べクタアドレスの変更とユーザ ・割り込みの基本と概要 86 CMAGAZINE 19 2