連載 / Linux のフートプロセスをみる 図 3 8259A 害ムみコントローラ アドレスパス CS AO D0-D7 INTA INT 8259A レー 0 1 2 3 4 5 6 7 ( し O Vcc AO INTA 旧 7 旧 6 旧 5 旧 4 旧 3 旧 2 旧 1 旧 0 INT S P/E N CAS2 28 1 コントロールバス データバス 8259A CS AO D0-D7 INTA INT 8259A マター 0 1 2 3 4 5 6 7 CASO CAS 1 CAS2 CASO CAS 1 CAS2 14 15 旧 Q3 旧 Q5 旧 Q7 旧 QO 旧 Q8 旧 Q10 旧 Q12 旧 Q14 旧 Q9 旧 Q11 旧 Q13 旧 Q15 旧 Q4 旧 Q6 旧 QI 表 3 IRQ 番号とべクタ番号 入力ピン ISA 上の IRQ 番号 べクタ番号 テ / ヾイス PIC システムタイマー IRQO I RO キーポード IRQI IRI ード接続 スレーフ。へのカスケ I R2 COM2 I R3 IRQ3 35 COMI IR4 IRQ4 36 LPT2 IR5 IRQ5 37 FDD コントローラ IRQ6 IR6 38 IRQ7 LPTI IR7 39 リアルタイム・クロック IRQ8 I RO 40 IRQ2/9 ( 空き ) IRI 41 ( 空き ) IR2 IRQIO 42 ( 空き ) IRQI 1 IR3 43 スレープ PS/2 マウス IRQ12 IR4 44 コプロセッサ IRQ13 IR5 45 46 プライマリ IDE IRQ14 IR6 セカンダリ IDE IRQ15 I R7 47 32 33 マスター action にはサプルーチンのポインタが直接書かれるの ではなく、ここにも構造体 ( デスクリプタ ) を設定します。 そして、複数のデバイスが 1 つの IRQ 番号を共有する 場合もあるため、このデスクリプタは 1 方向のリンクト リスト (linked list) 構造を作ることができます。前述の 411 行目は、このデスクリプタの一イ列です。ただ、これは ダミーエントリなのでおもしろくありません。 time. c に 定義されているタイマー割込み ( IRQO ) のハンドラを以下 に紹介しますにのハンドラは以降にも登場します ) 。 0150 : static struct hw—interrupt—type i8259A—irq—type = { "XT—PIC" startup—8259A—irq, shutdown-8259A—irq, enab1e—8259A—irq, disab1e—8259A-irq, mask_and_ack—8259A , end—8259A—irq, NULL 0151 : 0152 : 0153 : 0154 : 0155 : 0156 : 0157 : 0158 : 0159 : } ; 89 UNIX MAGAZINE 2003.2
連載 / Linux のプートプロセスをみる 0350 : 0354 : 0356 : 0357 : 0358 : 0359 : 0377 : } out b out b outb outb outb outb —p ( 0X04 , ー p ( 0X01 , ー p ( 0X11 , ー p ( 0X02 , ー p ( 0X01 , OxA1) ; OxA1); ー p ( 0X20 + 8 , OxA1) ; OxAO) ; 0X21 ) ; 0X21 ) ; ICW3 * / ICW4 * / ICWI ICW2 * / ICW3 * / ICW4 * / 0416 : { 0422 : 0423 : 0424 : 0425 : 0426 : 0427 : 0428 : 0429 : 0433 : 0439 : 0440 : 0441 : } 0434 : 0438 : init—8259A(O) ; for ( i = 0 ; i く 224 ; irq—desc [i] irq-desc [i] irq—desc [i] . depth if (i く 16 ) . action . status IRQ-DISABLED ; 1 ; サプルーチンⅲ it ー 8259A ( ) は、マスターとスレープ PIC ( 図 3 ) を初期化し、 CPU に通知するべクタ番号を設 定します。 2002 年 7 月号で説明したように、 8259A が CPU に 通知する数値は IRQ 番号ではなくべクタ番号です。この ため、 8259A では IRQ 番号からべクタ番号に変換する必 要があり、そのための変換ルールかプログラムされていま す。表 3 に、典型的な IRQ とテパイスの対応を示します。 Linux では、 IRQO—IRQ15 を割込みべクタ 32 ~ 47 に マップします。 342 ~ 343 行目は、マスターとスレープが受け取る割込 み信号をすべてマスクします。この処理は、セットアップ・ ルーチンがおこなったものとまったく同じです。 PIC の匆月化は、 ICW (lnitialize ControI Word) と 呼ばれるレジスタに順番に値を書き込むことでおこなわれ ます。 348 ~ 354 行目はマスター側、 356 ~ 359 行目はス レープイ則の PIC を初期化しています。ここで書き込んで いるデータの意味は深く考えすに、、、 PC/AT 互換機では こんな値を書くんやなぁ " という程度に思っておいてくだ ただし、 349 行目と 357 行目はⅲ it ー 8259A ( ) の大切 なところで、 こで ICW2 に書き込んでいる値はべクタ 番号のべース値を未します。このため、 349 行目で 20H を設定することにより、 IRQ0—IRQ7 の割込みがべクタ 番号 32 ~ 39 に変換され、同様に 357 行目の 28H によ り、 IRQ8—IRQ15 の割込みがべクタ番号 40 ~ 47 に変 init-ISA-irqs() 換されるようになります。 88 0415 : void init-ISA—irqs(void) を期化し、さらに配列 irq-desc を初期化します。 init-ISA-irqs() は、 init-8259A() を呼び出して PIC irq-desc Ci] . handler = &i8259A—irq—type; } else { irq-desc [ 土 ] . handler = &no—irq—type ; 配列 irq-desc は、各 IRQ 番号に対する割込み状態や マスク、ハンドラへのポインタを管理するためのデータ構 造であり、次のように定義されています。 ・ arch/i386/kernel/irq. c より irq-desc—t irq-desc [ 224 ] ; ・ include/linux/irq. h より typedef struct { unslgned int status ; hw—irq—controller *handler ; struct irqaction *action ; unsigned int depth; spinlock-t lock; } irq—desc—t ; 構造体 irq-desc-t のそれぞれのメンバーの意味は以下 のとおりです。 status IRQ の割込み状態を表すフラグ handler PIC を制彳卸するサプルーチンのデスクリプタ 割込み発生時に呼び出すサプルーチン action depth 0 のとき割込み許可。 1 以 E のとき割込み不可 Linux は、 PC/AT 互換機で使われている 8259A 以 外にも、 CobaIt (IO-)APIC などの割込みコントロー ラもサポートしています。このため、 PIC を制御する 低レベルなサプルーチン群を構造体 ( デスクリプタ ) にま とめ、これを handler に設定しています。 433 行目の i8259A-irq-type は、次のように定義されている 8259A を表すデスクリプタです。 UNIX MAGAZINE 2003.2
連載 / Linux のプートプロセスをみる一 3 0443 : void __init init_IRQ(void) 0444 : { J mp c ommon-int e rrupt common-interrupt() はすべてのレジスタをスタック に待避し、 do-IRQ() を呼び出します。最終的にハ ウェア割込みを処理する適切なハンドラ ( デバイスドライ バ ) は、さらにいくつかのサプルーチンを経て呼び出され ます。このように、ハンドラの呼出しが間接的におこなわ れるのは、カーネルか起動するまで外部デバイスの使用す る IRQ 番号が分からないからです。 IDT のエントリに デバイスドライバのアドレスか書かれているわけではあり outb—p(Ox34, 0X43 ) ; outb—p(LATCH & Oxff , 0X40 ) ; ません。 outb(LATCH > > 8 , 0X40 ) ; 舌を戻しましよう。前述したように、 PC/AT 互換機 setup—irq(2 , &irq2) ; には PIT という時間管理用テンヾイスがあり、メトロノー ムのように一定の間隔で CPU に割込み (IRQO) を発生 if (boot—cpu—data. hard-math & & ! cpu—has—fpu) させることができます。 496 ~ 498 行目では、約 100HZ setup—irq(13, &irq13) ; 0509 : の周波数で割込みを発生させるように PIT を設定してい ます。 100HZ とは 10 ミリ秒に 1 回の割合であり、この 448 行目の init-ISA-irqs() は、 2 つの割込みコント ローラ 8259A を初期化するサプルーチンです。詳しくは 時間周期のことを Linux では tick と呼びます。 彳あします。 tick ごとに発生する割込みは、 Linux カーネルという オーケストラを演麥する孑軍者のようなものです。カーネ 457 ~ 461 行目の for ループは、べクタ番号 32 ( 20H ) ルは、この割込みを利用してプロセス・スケジューリング から 255 までのユーザー定義領域の IDT に割込みゲート や時間管理などの処理をおこないます。 を設定します。ただし、 trap-init() の 944 行目ですでに 設定されているべクタ番号 80H だけは飛ばします ( 459 ただし、 496 ~ 498 行目では PIT の設定をおこなって いるだけで、 IRQO の割込みを処理するハンドラはまだ登 行目の if 文 )。配列 interrupt の内容はソース中 ( ン、一ド コードされ、以下のように IRQn-interrupt() へのポイ 録していません。ハンドラの登録は、彳あの time-init() ンタか書かれています。 でおこないます。 501 行目では、 IRQ2 ( カスケード接続 ) 用のダミーエ インデックス関数ポインタ ントリを彳あ主の酉改」 irq-desc に当求します。 IRQ0xOO-interrupt() IRQOx01 -interrupt ( ) システムに外部 FPU がある場合は、 508 ~ 509 行目に IRQOx02 -interrupt ( ) より算術工ラー割込みの IRQ13 か設定されます。 IRQOxOf-interrupt() init-8259A() NULL init-ISA-irqs() は、最初にⅲ it ー 8259A ( ) を呼び出し ます。そこで、ますⅲ it ー 8259A ( ) からみていきましよう。 NULL 223 話はプートプロセスからすこしすれますが、それぞれの 0336 : void init-8259A(int auto-eoi) IRQn-interrupt() の内容は、次のように IRQ 番号から 0337 : { 256 を引いた値をスタックに積み上げて、共通の割込み処 理ルーチン common-interrupt() にジャンプします。 IRQn-interrupt : pushl れ一 256 0448 : init—ISA—irqs ( ) ; 0 ; 土く 224 ; i + + ) { for い int vector = 0X20 十 i; if (vector ! = 0X80 ) set—intr—gate(vector, interrupt Ci] ) ; 0457 : 0458 : 0459 : 0460 : 0461 : 0496 : 0497 : 0498 : 0501 : 0508 : 0 1 一つ 4 15 16 outb(Oxff, 0X21 ) ; / * マスター P 工 C * / outb(Oxff, OxA1); / * スレープ p 工 C * / / * ICWI * / outb—p ( 0X11 , 0X20 ) ; outb—p(Ox20 + 0 , 0X21 ) ; / * lCW2 * / 0342 : 0343 : 0348 : 0349 : 87 UNIX MAGAZINE 2003.2
連載 / 凵 nux のプートプロセスをみる 図 4 /proc/interrupts 」 # cat /proc/interrupts 547771 XT-PIC 0 XT-PIC 587564 XT-PIC 0 : 2 : 3 : 8 : 11 : 12 : 14 : CPUO 55243223 XT-PIC 207597313 XT—PIC timer keyboard cascade onnoco_cs rt c 4319224 XT—PIC Texas lnstruments PC11450 , 2556387 XT—PIC PS/2 Mouse 1503554 XT—PIC ideO Texas lnstruments PC 工 1450 ( # 2 ) , usb—uhci , cs46xx static struct irqaction irqO {timer-interrupt , SA—INTERRUPT, 0 , "timer" , NULL , NULL} ; time-init() は、システム時刻の設定と、 CPU のクロッ time -init() 別名が IRQ2 のところに表示されています。 たデスクリプタ irq2 の名前に定義されているハンドラ識 れたノ、ンドラの識別名です。たとえば、 501 行目で登録し み発生総数、 PIC デスクリプタの名前、 action に登録さ 味は、左から IRQ 番号、カーネルか起動してからの割込 言 t 算機でこのファイルを参照した例を示します。各行の意 から参照することかて、きます。図 4 に、私が使用している 配列 irq-desc の内容 ( の一黯に ) は、 /proc/interrupts 出されるハンドラの名前です。 こ刎列では、 timer-interrupt() か割込み発生時に呼び 0517 : unsigned 10 Ⅱ g get-cmos—time(void) ク周波数を言 1 算する処理をおこないます。 "timer" , NULL, NULL} ; 0637 : void time—init(void) 0638 : { 0641 : 0642 : 067 工 : 0672 : 0673 : 0690 : 0691 : 0692 : 0693 : 0694 : 0695 : 0697 : 0698 : 0715 : 0717 : } xtime . tv—sec = get—cmos—time() ; cpu-khz % 1000 ) ; processor. \Ⅱ” , cpu—khz / 1000 , printk( "Detected %lu. % 031u MHz ” 0 " (eax), (tsc—quotient) , =a't (cpu-khz) ー , ” = d ” (edx) —asm—— ( "divl % 2 " unsigned long eax=O , edx = 1000 ; if (tsc-quotient) { calibrate—tsc() ; unsigned 10 Ⅱ g tsc—quotieng = if (cpu-has-tsc) { xtime . tv_usec = setup—irq(O, &irqO) ; 0518 ・ 0536 : 0537 : 0538 : 0539 : 0540 : 0541 : 0553 : 0554 : 0555 : 0556 0558 : 90 sec = CMOS—READ(O) ; min = CMOS—READ ( 2 ) ; hour = CMOS READ ( 4 ) ; day = CMOS—READ(7) ; mo れ = CMOS—READ(8) ; year = CMOS—READ ( 9 ) ; if ( (year + = 1900 ) year + = 100 ; return mktime(year, hour , く 1970 ) mon, day , min, sec) ; 641 行目は RTC から現在時刻を取得し、システム時 刻 &f 尉寺する変数 xtime に値を設定します。 get-cmos- time() から返される値は、いわゆる、、 UNIX time" です。 536 ~ 541 行目て乎び出している CMOS-READ() の 引数は、表 1 て示した RTC のレジスタ番号を表してい ます。 変数 xtime とその型である構造体 timeval は、 kernel /timer. c と include/linux/time. h で次のように亘さ れています。 struct timeval { static struct irqaction irqO {timer—interrupt , SA—工 NTERRUPT, 0 , time_t tv_sec; UNIX MAGAZINE 2003.2
連載 / Linux のプートプロセスをみる一① 図 2 害込みケート / トラップゲート・デスクリプタの告 48 47 46 45 44 43 42 41 40 39 38 37 16 15 48 47 46 45 44 43 42 41 16 15 (a) 都ムみゲート・テスクリプタ 63 (b) トラップケー 63 オフセット ( 31 … 16 ) セグメントセレクタ ト・デスクリプタ オフセット ( 31 .. 16 ) セグメントセレクタ P P DPL DPL 0 0 1 1 1 0 0 0 0 1 オフセット ( 15...0 ) 1 1 40 39 38 37 1 0 0 0 オフセット ( 15 … 0 ) 32 res 0 res 32 0 31 0779 : 0780 : 0781 0782 : 0783 : } 0784 : 0785 : 0786 : { 0787 : 0788 unsigned int Ⅱ , void *addr) static VOid set—trap—gate( -set—gate(idt—table + Ⅱ, 15,O,addr) ; —set—gate(idt—table + Ⅱ, 15,3,addr) ; unsigned int れ , void *addr) static void set—system—gate ( 値は、デスクリプタを書き込むアドレス、図 2 の 44 ~ それぞれの関数か呼び出している -set-gate() の引数の この構文を知らない人にとっ -set-gate() のコードは、 gcc の拡張機能を使ったアセ そしてハンドラのアドレスを ては、 ンプラ言語で書かれており、 表しています。 40bit 目のイ直、 DPL のイ直、 ないので、以下に孑鬮以的なコードに書き直してみました。 と言いたくなるような文字列です。 gcc の解説が本題では 「この不思議な記号の羅列はなんや ? 」 -set—gate(gate—addr, type, dpl, addr) { 図 2 とにらめっこしながら読めば、難しい処理ではない ことカ吩かると思います。 956 行目の cpu-init() は、 arch/i386/kernel/setup. c に書かれているサプルーチンで、そのなかで以下のように LIDT 命令を実行します。この命令により、新しい IDT が CPU にロードされます。 ・ setup. c より 2903 : asm_ ("lidt idt—descr") ; ・ head. S より 0364 : idt_descr : 0365 : . word 256 * 8 ー 1 0366 : SYMBOL_NAME(idt) : 0367 : .10 Ⅱ g SYMBOL—NAME (idt—table) movl movl movw movw movl movl 86 addr , %edx $ 0X100000 , %eax # —_KERNEL-CS くく %dx , %ax $ 0X8000 + ( dpl くく 13 ) + ( type くく 8 ) , %dx %eax , (gate—addr) %edx , (gate-addr + 4) 16 init-IRQ() init-IRQ() は、割込みコントローラ 8259A をふたた び初期化処理し、外部ハードウェア割込みのハンドラを IDT に当求します。 現在の 8259A は、セットアップ・ルーチンによりすべ ての割込みかマスクされている状態になっています ( 詳し くは 2002 年 9 月号を参照してください ) 。 以下は、ファイル arch/i386/kernel/i8259. c に書か れている initARQ() のコードです。 0411 : static struct irqaction irq2 = {no—action, 0 , 0 , ” cascade" ,NULL , NULL} ; UNIX MAGAZINE 2003.2
Linux の プートプロセスをみる 白崎博生 trap-init() 、 init- 旧 0() 、 time-init() 、 mem-init() 3 つの時計 PC/AT 互換機のマザーポードには、、、時計回路 " が 組み込まれていることを知っている人は多いと思います。 PC の電源を入れた直後に特定のキーを押して BIOS の 設定をおこなうとき、画面に現在日該リか表示されているの を見たことがあったり、あるいは日該リを変更したことのあ る人もいるでしよう。 この日 1 ・回路は、 PC 本体の電源を切っても、電源プラ グを抜いても止まることなく時を刻み続けます。そして、 この日赭 1 回路のおかげで、 PC 用の OS はプート時に現在 日該リを知ることができます。 しつは、現在の PC/AT 互換機のなかには、この、、現 在日骸リ " を刻むための日以外に 2 つの日物回路が組み込 まれています。つまり、合言 1 ・で 3 つの時言朸ゞあるわけで す。それぞれの名前を、 ・リアルタイム・クロック プログラマプル・インターバルタイマー ・タイムスタンプ・カウンタ といいます。 コードの解説の続きを始める前に、これらの日お t 回路に 今月は、カーネルの初期化ルーチン start-kernel の後 半部分を説明します。 今回とりあげる 4 つのサプルーチン、 trap-init() と init-IRQ() 、 time-init() 、 mem-init() は、カーネルの 起重丿ワ。ロセス本の流れのなかでは図 1 の濃い網をかけた 部分にあたります。 82 ついて説明します。 表 1 RTC レジスタ番号列 00H 02H 04H 06H 07H 08H 09H 意味 分 時 曜日 日 月 西暦年 ( ード 2 櫛 リアルタイム・クロック UNIX MAGAZINE 2003.2 その後に NTP (Network Time Protocol) や date コマ ーネルはもちろんその間違った日該リを信します。しかし、 たとえば、 RTC か狂っていると、 Linux の起重加にカ を管理します。 す。つまり、 Linux カーネルは RTC とは独立して時刻 に RTC にアクセスしますが、そオ LJ ユ後は使わないようで Linux カーネルは、プート時には現在時刻を知るため 2000 年間題です ) 。 位 2 桁は OS が適切に補わなければなりません ( つまり RTC か刻む時刻には西暦の上位 2 桁は含まれす、上 に示します。 からデータを読み書きします。 RTC レジスタの例を表 1 内部のレジスタ番号を書き込み、続いて I/O ポート 71H RTC にアクセスするには、 I/O ポート 70H へ RTC ています。 ム情報などをイ尉寺できる CMOS-RAM 機能などを備え 割込み信号 (IRQ8) を発生するアラーム機能や、システ 日喆としての機能だけではなく、特定の周期または時刻に の同等品を使用しています。 MC146818A は、たんなる タイム・クロック ) は、 Motorola の MC146818A かそ PC/AT 互換機の RTC (Real Time Clock : リアル
MAGAZINE 三ド Contents 2003 / 2 特集 SO ね ris トラブル・シューティング・ 22 プログラミング入門 104 ・ " 草刈彰広、城谷洋司 トラブルからの回復、トラブルの解析と原因の究明 今泉貴史 木構造とさまざまな探索の手法 連載 UNIX Communication Notes ・・・・・山口英 電子図書館への道 ( 8 ) ぷいぶい v6 ・・・・・・宮川晋 旧 v6 ADSL 商用サービスの申込み方法 旧 v6 の実装・・・・・・島慶ー 拡張ヘッダの処理 新・倉敷芸術科学大学のネットワーク構築・・・・・・小林和真 GR2000-2B による旧 4 ハ Pv6 デュアルスタック ( 3 ) し inux のプートプロセスをみる・・・・・・白崎博生 trap init() 、 init IRQ() 、 time init() 、 mem init() JavaServer Pages " ・・ " 荒井美千子 繰返し処理をおこなうカスタムタグ 横着プログラミンク 高林哲 とりあげたツールのその後 1 8 9 2 5 5 4 5 5 6 8 9 5 COVER, CONTENTS DESIGN, ILLUSTRATION ・ MORIYA, KAZUO (AUDREYTHE DESIGN)
3 第信第第物第第 : 信 : 信等 3 第信第信信第信既 3 第信 : 第 : 信第第第第信第信第第第檐信第島勢第信第信第を第勢第第「 い、 IRQ の競合については PCI スロットに差す力ードの 順序や位置を変えると鮹夬するかもしれない、 IRQ 関係 のトラブルは OS を変えても本質的には角夬しない、ま た、各種の機能をオンポードにしても PCI 接続なのは変 わらないし、スロットの位置を変更できないためかえっ てトラブルを招くこともある、 IRQ の割当てについては lntel のチッフ。セットを使用したマザーポードのほうがう まく処理してくれるようである、 CD-R/RW ドライプの ファームウェアを更新したり転送モードを変えると改善 されるかもしれない、また IDE デバイスの Master と Slave は Cable Select にせす明カ勺に指定したはうがよ いこともある、といったフォローがきました。 Newsgroups: . sys. ibmpc, 」 apan handmade. comp Subject: パルク品のメモリチップが片面、両面の違い IBM の NetVista A22 を使っているのですが、標準 で 256A4B あるメモリを増設しようと思い、 PC133 CL3 256MB のバルク品を購入しました。ところが、メモリス ロットにメモリを差して PC の電源を入れても、ビープ 音か鴫って起動しませんでした。純正品のメモリも同し PC133 CL3 256A4B です力ゞ、両面にチッフ。が付いてい ました。バルク品のほうは片面だけでしたが、関係がある のでしようか、という質間記事です。 これに対して、片面だけにチップがあるということは 256Mbit チップのメモリだと思うが、 NetVista A22 の マサーポードのチップセットはそのメモリチップをサポ ートしていない i810E なので動かないのは当然である、 メモリを差しなおしたり、スロットを変えても認識しな いのであればメモリチッフ。が適合していないのだろう、誰 かに 128Mbit チップのメモリと交換してもらうしかな い、マザーポードやメモリによっては半分の 128MB の メモリとして認識される場合もある、そうなることのほう が普通だと思うので、 NetVista A22 のマザーポードの BIOS の設定を変更すると、 128MB のメモリとして認 識されるのではないか、といったフォローがきました。 Newsgroups: . sys. mac Subject: Mac と Windows でファイル Macintosh (Mac OS 9.2.2 ) と Windows イ更用マシン (Windows XP Professional) を LAN で接続してファ イル共有をおこなうには、市販の DAVE や MacSOHO のようなソフトウェアがどうしても必要なのでしようか。 TCP/IP の設定だけで見するガ去はありませんか、と いう質問記事です。 これに対して、 Mac OS 9.2.2 と Windows XP だ と OS 標準の機能だけでは難しいのではないか、 Mac に Mac OS X をインストールできれは、 Windows とのフ ァイル共有機能 (SMB) カ硬えるだろう、双方で HTTP サーバー・ソフトウェアを起動し、 Web プラウサでファ イルを入手するガ去もある、どちらかで FTP サーバー ソフトウェアを動かし、 FTP クライアント・ソフトウ ェアでファイルを交換することもできる、 Mac であれば NCSA Telnet 系のソフトウェアに FTP サーバー機能 が付いている、メール・ソフトウェアを使い、ファイルを 添付書類として送受信するガ去もある、コスト・パフォー マンスは悪いが、ネットワーク・インターフェイスをも っハードディスクを導入し、それを介してファイルを交 換するガ去もある、旧い PC に Linux をインストールし て Samba と Netatalk を動かすガ去もある、 Linux を 扱うにはスキルが必要だがハードディスクを使う方法は それほど難しくない、といったフォローがきました。 、、ファイル共有 " をマウスのドラッグ & ドロップでファ イルのコピーや移動をするものだと思うと実現は大変で すが、 web や FTP による、、ファイル転送でよいので あれば〕尺肢はいろいろとありそうです。 Newsgroups: fj.sys. mac Subject: プータブル CD iMac DV (Mac OS 9.1 ) で、外付け CD-R ドライプ と最新版にアップグレードしたライティング・ソフトウェ ア B's Recorder GoId を使っています。広起動用 CD を作ろうとしたのですが、 B's Recorder で作った プータブル CD は Apple 純正の SCSI CD-ROM ドラ イプからでないと起動できないようです。 iMac DV 内蔵 の CD-ROM ドライプからも起動可能な CD カ鮓れる、 手ごろな価格の CD ライティング・ソフトウェアはあり ませんか、という質問記事です。 これに対して、手ごろな価格かは分からないが Roxio の Toast 5 で作成できる、 Mac 用の CD ライティン グ・ソフトウェアには MacCDR や Discribe もあるが、 MacCDR は内蔵 SCSI CD-ROM ドライプからしか起 動できない、 Discribe は内蔵でも外付けでも、 SCSI と 。 : 信 : 第に信 : 工に信 : 第な : 工信信 : 信第仁信信信 : 信第日イ第 : 第第第信信第信第第信 : 3 : 3 第信信 : 工信。 146 UNIX MAGAZINE 2003.2
INTR : CPU カ瞎リ込み信号を受信するピン。 EFLAGS レジスタの IF フラグをクリアすると、 INTR 信号を受 信しても CPU は無視する。 里 : 割込み I/O ポート : CPU か外部デバイスとデータを送受信する 8bit の通信路。 I/O ポートの数は 65 , 535 個あり、そ れぞれ固有の I / O アドレスをもっている。 NMI (Non-Maskable lnterrupt) : CPU カリ込み信号 を受信するピン。 CPU は NMI 信号を無視できない。 里 : 割込み PDE (Page Directory Entry) : リニアアドレスから物 理アドレスへ変換するための情報と、メモリへのアクセ ス権を表すフラグを言殳定するデータ橢制本。 PIC (Programmable lnterrupt ControIler) : 重川乍モー ドの設定変史が可能な割込みコントローラ。 PIT (Programmable lnterval Timer) : CPU にアラー ム信号を送信する時計回路。 PIT が出力する信号の種 類は、周期的に信号を出すタイプと、指定した時間カ軽 過したときに信号を出すタイプがあり、 I/O ポートを 通してタイプとカウント値をプログラムできる。 PTE (Page Table Entry) : リニアアドレスから物理ア ドレスへ変換するための情報と、メモリへのアクセス権 を表すフラグを設定するデータ構造体。 RTC (Real Time Clock) : PC/AT 互換機のマザー ポード上に組み込まれている時計回路。 MotoroIa の MC146818A かその同等品で実装されている。たんに 時を刻むだけでなく、特定の周期や特定の日該に割込み 信号 (IRQ8) を発生するアラーム機能や、システム情 報などを一尉寺できる CMOS-RAM 機能なども備えて いる。 TLB (TransIation Lookaside Buffer) : PDE と PTE の参照を高速におこなうためのキャッシュ。 TSC (Time Stamp Counter) : Pentium 以降の IA-32 プロセッサに実装されているカウンタレジスタ。 CPU をハードウェア・リセットしたときに 0 で初期化され、 その後は CPU のクロック信号ごとに 1 っすっ増加す る。 ハンドラ (handler) : 割込みと例外が発生したとき、 CPU から呼び出されるサプルーチン。 勵里 : 割込み、 IDT 連載 / Linux のプートプロセスをみる一 3 94 ページンク (paging): リニアアドレス空間と実アドレス空 間を固定サイズに分割し、これを単位として実アドレス にマップするガ去。 べクタ (vector) : 割込みと例外の不鶤頁を識別する 0 から 255 まである。 関連 : 割込み、伊外 例外 (exception) : CPU が命令の実行中にエラーを検出 したときに発生するイベント。 関連 : 割込み 害込み (interrupt) : 外部ハードウェアから信号が送られ てきたときに発生するイベント。 関連 : 例外、 INTR 、 NMI 、 IDT ☆ 今回は、 start-kernel() から呼び出される trap-init() と init-IRQ() 、 time-init() 、 mem-init() について説明 しました。 次回はカーネルスレッドの生成について説明します。 ( しらさき・ひろお IIJ) [ 文献 ] [ 1 ] 「 IA -32 インテルアーキテクチャ・ソフトウェア・デベロッパ ーズ・マニュアル」 ( 上・中・一 - ト ) 、 2001 年 (http://www.intel ・ co ・ jp/jp/developer/design/pentium4/manuals/) UNIX MAGAZINE 2003.2
つのガル / 2003 年 2 月 1 日発行 ( 毎月 1 回 1 日発行 ) 第 18 巻第 2 号通巻 196 号昭和 63 年 9 月 5 日第三種郵便物認可 eb :. =. 300. LMAGAZINE 定価 970 円 プログラミン門 。ニ分探索と木構造を用いえ探索の比校 ・ニ分探索木と平衡木 ・トライ構造とバトリシア木 SO ねⅱ s トラカいシュ - ティング ・バターン別トラブル復旧法 ・トラブル報告、バッチの適用と削除 ・トラブル解析ツールの利用法 : 100 m 。 UNIX Communication Notes Apache への証明書の組込みと OpenSSL によるプライベート CA ぷいぶい 6 ADSL を用いた旧 v6 商用サービスの申込み方法 新・自敷芸術科学大学のネットワーク構築 静的経路の設定と望 P / R 旧 ng による動的経路制御の設定方法 し inux のプートプロセスをみる trap init() 、 init IRQ() 、 time init() 、 mem-init() - 、′インターフェイスの街角 日 ash をサーバ—のフロントエンドに使や ーワークステーションのおと SoIaris VoIume Manager によるミラーリンク