Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
$B3d$j9~$_=hM}(B
[go: Go Back, main page]

$B3d$j9~$_=hM}(B

					2012$BG/(B02$B7n(B07$BF|(B
$B>pJs2J3XN`(B $B%*%Z%l!<%F%#%s%0%7%9%F%`(B II

                                       $BC^GHBg3X(B $B%7%9%F%`>pJs9)3X8&5f2J(B 
                                       $B%3%s%T%e!<%?%5%$%(%s%9@l96(B, $BEE;R!&>pJs9)3X7O(B
                                       $B?7>k(B $BLw(B
                                       <yas@is.tsukuba.ac.jp>

$B$3$N%Z!<%8$O!" http://www.coins.tsukuba.ac.jp/~yas/coins/os2-2011/2012-02-07
$B$"$k$$$O!" http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/

$B"#:#F|$NBg;v$JOC(B

$B"#3d$j9~$_(B

$B"!3d$j9~$_$NI,MW@-(B

$B"!3d$j9~$_$H$O(B

$B"!(Bx86$B$N3d$j9~$_%3%s%H%m!<%i(B

$B"!(BIntel 8259 PIC

8259$B!

$B?^(B? x86 $B$N(B Intel 8259

$B"!(BAPIC

Local APIC$B!

$B?^(B? x86 $B$N(B APIC

APIC $B$O!"
  • $B%W%m%;%C%5$N%T%s(B(LINT0, LINT1)
  • $BFbIt$N%?%$%^(B
  • $BFbIt$N%Q%U%)!<%^%s%9!&%b%K%?(B
  • $BFbIt$N29EY%;%s%5(B
  • $BFbIt$N(BAPIC$B%(%i!<(B
  • $BB>$N%W%m%;%C%5(B($B%W%m%;%C%54V3d$j9~$_(B)
  • $B30It$N(B I/O APIC$B!#IaDL!"(B24$B8D$N3d$j9~$_$r

    $B"!Nc30(B

    $BNc30(B(exceptions) $B$H$O!"%O!<%I%&%'%"!&%G%P%$%9$H$OL54X78$K!"(B CPU $B$NL?Na
  • 0 $B$K$h$k3d$j;;(B
  • $B%Z!<%8!&%U%)!<%k%H(B
  • $BNc30$r@8$8$k(BCPU$BL?Na$N $BB?$/$N(B CPU $B%"!<%-%F%/%A%c$G$O!"Nc30$r3d$j9~$_$HF1$8$h$&$K07$&!#(B x86 $B$G$O!"%7%9%F%`!&%3!<%k$N=hM}$b!"3d$j9~$_$HF1$8$h$&$K07$&!#(B

    $B"!3d$j9~$_%O%s%I%i(B

    $B3d$j9~$_%O%s%I%i(B(interrupt handlers)$B$H$O!"3d$j9~$_$,@8$8$?;~$K$=$l$K1~(B $BEz$9$k$?$a$K

    $BNc(B:

    • $B%-!<%\!<%IMQ(B
    • $B%?%$%^MQ(B
    • $B%O!<%I%G%#%9%/MQ(B
    Linux $B$G$O!"3d$j9~$_%O%s%I%i$O!"(BC$B8@8l$N4X?t!#IaDL$N4X?t$H$N0c$$!#(B
    • $B3d$j9~$_$K4X$9$k>pJs$,EO$5$l$k(B
    • $B!V3d$j9~$_%3%s%F%-%9%H!W$d!V%"%H%_%C%/!&%3%s%F%-%9%H!W$H$$$&!"@)Ls(B $B$,$-$D$$>uBV$G8F$P$l$k!#(B
    • $B3d$j9~$_$O!"$$$D@8$8$k$+M=B,ITG=$J$N$G!"3d$j9~$_%O%s%I%i$O!"$$$D8F(B $B$P$l$k$+M=B,ITG=!#(B

    $B"!3d$j9~$_5-=R;R%F!<%V%k(B

    $B3d$j9~$_%O%s%I%i$O!"3d$j9~$_5-=R;R%F!<%V%k(B(interrupt descriptor tables)$B$d(B $B3d$j9~$_%Y%/%?%F!<%V%k(B(interrupt vector table)$B$H8F$P$l$kI=$KEPO?$5$l$F(B $B$$$k!#(B(CPU$B$N0c$$!"F1$8(BCPU x86$B$G$b%b!<%I$N0c$$$G!"%F!<%V%k$NL>A0$,0[$J$k!#(B)

    $B3d$j9~$_HV9f!

    $B?^(B? $B3d$j9~$_5-=R;R%F!<%V%k$H3d$j9~$_%O%s%I%i(B

    • $B3d$j9~$_5-=R;R%F!<%V%k$O!"0UL#$H$7$F$O!"4X?t$X$N%]%$%s%?$NG[Ns!#(B
      typedef void (*funcp_t)(void);
      funcp_t idt[256];
      
    • CPU $B$O!"%O!<%I%&%'%"$+$i3d$j9~$_$,$J$5$l$k$H!" old_pc = pc; old_flags = flags;
    • CPU $B$O!"%O!<%I%&%'%"$,=PNO$9$k3d$j9~$_%Y%/%?$r;H$C$F!"3d$j9~$_5-=R;R(B $B%F!<%V%k$N%(%s%H%j$rA*Br$9$k!#(B
         n = $B3d$j9~$_%Y%/%?(B;
         handler = idt[n];
      
    • $BA*Br$7$?%(%s%H%j$r push old_pc; push old_flags; pc = handler; // (*handler)(); $B$?$@$7!"C1=c$J(B call $BL?Na$H$O0c$$!"%9%?%C%/>e$K%W%m%0%i%`%+%&%s%?$NB>$K!"(B $B%W%m%;%C%5$N>uBV$r<($9%U%i%0Ey$b@Q$`!#(B
    • $B3F3d$j9~$_%O%s%I%i$O!":G8e$KDL>o$N%j%?!<%sL?Na(B ret $B$G$O$J$/3d$j9~(B $B$_$+$iI|5"$9$k$?$a$NL?Na(B iret (x86) $B$r

      $B"!3d$j9~$_$NA0H>ItJ,$H8eH>ItJ,(B

      $BN)$5$;$?$$(B
      • $B3d$j9~$_%O%s%I%i$O!"$G$-$k$@$1B.$/ $B3d$j9~$_%O%s%I%i$N=hM}$O!";~$KJ#;($G;~4V$,$+$+$k=hM}$r9T$$$?$$!#Nc!'(B $B%M%C%H%o!<%/$+$i$N%Q%1%C%H$N Linux $B$G$O!"$3$l$rN>N)$9$k$?$a$K!"3d$j9~$_$N=hM}$r(B2$B$D$KJ,$1$k!#(B
        • $BA0H>(B(top half)$B!#3d$j9~$_8e!"B(:B$K $B8eH>(B(bottom half)$B!#3d$j9~$_$N8e!"ET9g$N$h$$;~4|$K$d$k!#(B $B$=$N8e$N3d$j9~$_$r5v2D$7$?>uBV$G9T$&!#(B
        $BNc(B: $B%M%C%H%o!<%/%+!<%I$K$h$k%a%C%;!<%8$N
      • $BA0H>$G!"%O!<%I%&%'%"$X$NDLCN$H!"%G!<%?$N%a%b%j$X$N%3%T! $B8eH>$G!"(BTCP/IP $B$N=hM}!#(B

      $B"!3d$j9~$_HV9f$N6&M-(B

      $B3d$j9~$_?.9f@~$,B-$j$J$$;~$K!"(B1$B$D$N3d$j9~$_HV9f$r!"J#?t$N%G%P%$%9$G6&M-(B $B$9$k$3$H$,$"$k!#(B

      $B%G%P%$%9(B5$B8D!

      $B?^(B? PIC$B$N@~$,ITB-$7$?;~$NBP1~(B

      • $B3d$j9~$_$,@8$8$?;~$K$O!"$I$N%G%P%$%9$N$b$N$+$9$0$K$OJ,$+$i$J$$!#(B
      • $B3d$j9~$_$,@8$8$k$H!"2DG=@-$,$"$kA4$F$N%G%P%$%9$N3d$j9~$_%O%s%I%i$r(B $B

        $B"#(BLinux$B$K$*$1$k3d$j9~$_%O%s%I%i$NEPO?(B

        Linux $B$G!"3d$j9~$_$NA0H>It$rEPO?$9$k$K$O!"(Brequest_irq() $B$r;H$&!#(B $BEPO?$r2r=|$9$k$K$O!"(Bfree_irq() $B$r;H$&!#(B

        $B"!(Brequest_irq()

        CPU$B%"!<%-%F%/%A%c$KFHN)$7$?7A$G3d$j9~$_%O%s%I%i$rEPO?$9$k$K$O!"(B request_irq() $B$rMQ$$$k!#(B
        include/linux/interrupt.h
        
        typedef irqreturn_t (*irq_handler_t)(int, void *);
        
        request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
                    const char *name, void *dev)
        
        • irq: $B3d$j9~$_HV9f!#(B
        • handler: $B3d$j9~$_%O%s%I%i!#(B
        • flags: $B%U%i%0!#8e=R!#(B
        • name: $BL>A0!#(B/proc/interrupts $B$d(B /proc/irq $B$K8=$l$k!#(B
        • dev: $B%G%P%$%9!#3d$j9~$_$,J#?t$N%G%P%$%9$G6&M-$5$l$k;~$K!"$I$N%G%P(B $B%$%9$+$r6hJL$9$k$?$a$K;H$o$l$k!#IaDL$O!"9=B$BN$X$N%]%$%s%?!#3d$j9~$_%O(B $B%s%I%i(B irq_handler_t handler $B$,8F$P$l$?;~$K$b!"$3$NCM$,0z?t$GEO$5$l$k!#(B free_irq() $B$G3d$j9~$_%O%s%I%i$r:o=|$9$k;~$K$O!"$3$NCM$,(B cookie $B$H$7$FF/(B $B$/!#(B
        • $B7k2L(B: $B@.8y$9$k$H(B 0$B$rJV$7!"<:GT$9$k$H(B 0 $B0J30$rJV$9!#$?$H$($P!"(B-EBUSY $B$@$H3d$j9~$_HV9f$,;H$o$l$F$$$k!#(B
        $B
        IRQF_DISABLED
        $B3d$j9~$_%O%s%I%i$N$N3d$j9~$_$O5v2D$5$l$?>uBV$GF0:n$9$k!#(B
        IRQF_SAMPLE_RANDOM
        $BMp?t@8@.4o$N$?$a$K3d$j9~$_$rMxMQ$7$F$b$h$$!#(B
        IRQF_TIMER
        $B%7%9%F%`!&%?%$%^$N$?$a$KMxMQ$9$k!#(B
        IRQF_SHARED
        $BJ#?t$N%G%P%$%9$GF1$83d$j9~$_HV9f$r6&M-$G$-$k!#(B

        $B"!(Bfree_irq()

        $B3d$j9~$_%O%s%I%i$,ITMW$K$J$C$?;~$K$O!"(Bfree_irq() $B$G void free_irq(unsigned int, void *dev)
        • irq: $B3d$j9~$_HV9f!#(B
        • dev: request_irq() $B$G;XDj$7$?%G%P%$%9!#(B

        $B"!(Birq_handler_t handler

        $B3d$j9~$_%O%s%I%i$O!" irqreturn_t irq_handler_t(int irq, void *dev)
        • irq: $B3d$j9~$_HV9f!#(B
        • dev: request_irq() $B$G;XDj$7$?%G%P%$%9!#(B
        • $B7k2L(B: $B7k2L$O!"(Birqreturn_t $B!#(B
        IRQ_NONE
        $B3d$j9~$_$O!"<+J,<+?H$N$b$N$G$O$J$+$C$?!#(B
        IRQ_HANDLED
        $B3d$j9~$_$r$-$A$s$H=hM}$7$?!#(B
        $BA43d$j9~$_%O%s%I%i$,(B IRQ_NONE $B$rJV$;$P!"$J$s$i$+$N%H%i%V%k$r0UL#$9$k!#(B $BJ#?t$N3d$j9~$_%O%s%I%i$,(B IRQ_HANDLED $B$rJV$9$3$H$O@5>o!#(B

        $B"!(B/proc/interrupts

        /proc/interrupts $B$O!"3d$j9~$_$N2s?t$rJ];}$7$F$$$k!#(B
        $ cat /proc/interrupts  [$B
                   CPU0       CPU1       
          0:    4208761      38584    IO-APIC-edge  timer
          1:          0          3    IO-APIC-edge  i8042
          7:          0          0    IO-APIC-edge  parport0
          8:          1          2    IO-APIC-edge  rtc
          9:          0          0   IO-APIC-level  acpi
         12:          3          1    IO-APIC-edge  i8042
         50:       5380      86508         PCI-MSI  ahci
         74:        346          0         PCI-MSI  HDA Intel
         98:        294      28232         PCI-MSI  eth1
        169:        130      57006   IO-APIC-level  uhci_hcd:usb3
        177:          0          0   IO-APIC-level  uhci_hcd:usb4, uhci_hcd:usb7
        217:        358     149530   IO-APIC-level  ehci_hcd:usb1, uhci_hcd:usb5
        225:          0          0   IO-APIC-level  ehci_hcd:usb2, uhci_hcd:usb6
        233:          0          0   IO-APIC-level  uhci_hcd:usb8
        NMI:          0          0 
        LOC:    4246864    4246863 
        ERR:          0
        MIS:          0
        $ []
        
        • CPU $B$,(B 2 $B8D$"$k!#(B
        • CPU $B$4$H$K3d$j9~$_$N2s?t$,0[$J$k!#(B
        • IRQ 0 $B$K%7%9%F%`!&%?%$%^(B timer $B$,8+$($k!#(B
        • IRQ 8 $B$K(B x86 CMOS RTC $B$,8+$($k!#(B

        $B"!(Bx86 CMOS Real-Time Clock rtc_interrupt()

        x86 CMOS Real-Time Clock $B$G$N3d$j9~$_%O%s%I%i$NNc!#(B
        linux-3.1.3/drivers/char/rtc.c
        
          96:	static unsigned long rtc_port;
          97:	static int rtc_irq;
        ...
         191:	static unsigned long rtc_status;        /* bitmapped status byte.       */
         192:	static unsigned long rtc_freq;          /* Current periodic IRQ rate    */
         193:	static unsigned long rtc_irq_data;      /* our output to the world      */
        ...
        
         953:	static int __init rtc_init(void)
         954:	{
        ...
        1000:	        if (request_irq(rtc_irq, rtc_interrupt, IRQF_SHARED, "rtc",
        1001:	                        (void *)&rtc_port)) {
        1002:	                rtc_has_irq = 0;
        1003:	                printk(KERN_ERR "rtc: cannot register IRQ %d\n", rtc_irq);
        1004:	                return -EIO;
        1005:	        }
        ...
        1137:	}
        
         239:	static irqreturn_t rtc_interrupt(int irq, void *dev_id)
         240:	{
        ...
         248:	        spin_lock(&rtc_lock);
         249:	        rtc_irq_data += 0x100;
         250:	        rtc_irq_data &= ~0xff;
        ...
         259:	                rtc_irq_data |= (CMOS_READ(RTC_INTR_FLAGS) & 0xF0);
        ...
        
         262:	        if (rtc_status & RTC_TIMER_ON)
         263:	                mod_timer(&rtc_irq_timer, jiffies + HZ/rtc_freq + 2*HZ/100);
         264:	
         265:	        spin_unlock(&rtc_lock);
         266:	
         267:	        /* Now do the rest of the actions */
         268:	        spin_lock(&rtc_task_lock);
         269:	        if (rtc_callback)
         270:	                rtc_callback->func(rtc_callback->private_data);
         271:	        spin_unlock(&rtc_task_lock);
         272:	        wake_up_interruptible(&rtc_wait);
         273:	
         274:	        kill_fasync(&rtc_async_queue, SIGIO, POLL_IN);
         275:	
         276:	        return IRQ_HANDLED;
         277:	}
        
        
        • x86 CMOS Real-Time Clock $B$G$O!"(B3$B spin_lock_irq() $B$H(B spin_unlock_irq() $B$O!"%+!<%M%kFb$NAj8_GS=|$N;E(B $BAH$_!#$?$H$($3$N4X?t(B rtc_open() $B<+?H$,J#?tF1;~$K rtc_irq_data $B$O!"(Bunsigned long $B$G!"$=$N2s$N3d$j9~$_$N%U%i%0$r(B CMOS_READ() $B$G%G%P%$%9$+$iFI$_=P$7$FJ]B8$9$k!#(B
        • rtc_status $B$N(B RTC_TIMER_ON $B%S%C%H$,%;%C%H$5$l$F$$$l$P!"(B mod_timer() $B$rFI$s$G!";~9o$r@_Dj$9$k!#(B($BIaDL$O$3$N5!G=$O;H$o$l$J$$!#(B)
        • $BFCJL$J(B callback $B4X?t$,EPO?$5$l$F$$$l$P!"$=$l$r8F$S=P$9!#(B

        $B"#(BLinux$B$K$*$1$k3d$j9~$_%O%s%I%i$N

        $B%O!<%I%&%'%"0MB8$N%3!<%I$+$i%O!<%I%&%'%"FHN)$N%3!<%I$r8F$S=P$9!#(B

        $B"!(Bx86 Interrupt Descriptor Table (IDT)

        x86 IDT $B$O!"%O!<%I%&%'%"!&%l%Y%k$N3d$j9~$_%O%s%I%i$N0lMwI=$rJ];}$9$k!#(B $B$=$N@hF,HVCO$O!"(BIDTR $B%l%8%9%?$KJ]B8$5$l$k!#(B
        linux-3.1.3/arch/x86/include/asm/irq_vectors.h
        arch/x86/include/asm/irq_vectors.h
         133:	#define NR_VECTORS                       256
        
        linux-3.1.3/arch/x86/kernel/traps.c
          78:	gate_desc idt_table[NR_VECTORS] __page_aligned_data = { { { { 0, 0 } } }, };
        
         824:	void __init trap_init(void)
         825:	{
        ...
         836:	        set_intr_gate(0, &divide_error);
         837:	        set_intr_gate_ist(2, &nmi, NMI_STACK);
        ...
         871:	        set_system_trap_gate(SYSCALL_VECTOR, &system_call);
        ...
        
        linux-3.1.3/arch/x86/include/asm/irq_vectors.h
          51:	# define SYSCALL_VECTOR                 0x80
        
        
        • trap_init() $B$O!"(BIDT $B$r=i4|2=$9$k!#(B
        • ITD $B$N%$%s%G%C%/%9$O!"3d$j9~$_%Y%/%?!#(B
        • $B3d$j9~$_%Y%/%?$O!"(B0 $B$+$i(B 0xff $B$^$G$"$k!#(B0 $B$+$i(B 0x1f $B$O!"(BIntel $B$K$h(B $B$j;H$$J}$,7h$a$i$l$F$$$k!#(B
        • $B3d$j9~$_%Y%/%?(B 0x80 $B$G!"(Bsystem_call() $B$H$$$&4X?t$,EPO?$5$l$F$$$k!#(B

        $B"!(Bdo_IRQ

        x86 Linux $B$G$O!"(BInterrupt Descriptor Table $B$K=>$$!"(Bdo_IRQ() $B$,8F$P$l$k!#(B $B0z?t$K$O!"(Bx86 $B$N%l%8%9%?$rI=8=$7$?9=B$BN$X$N%]%$%s%?$,EO$5$l$k!#$3$l$K(B $B$h$j!"3d$j9~$_$,H/@8$7$?;~$N%l%8%9%?$NCM$,$o$+$k!#3d$j9~$_%O%s%I%i$,M-(B $B8z$G!"3d$j9~$_HV9f$KEPO?$5$l$F$$$l$P!":G=*E*$K$O!"(Bhandle_IRQ_event()$B!!$H(B $B$$$&!"(BCPU $B$H$OFHN)$N3d$j9~$_%O%s%I%i$,8F$P$l$k!#(B

        $B"!(Bhandle_IRQ_event()

        linux-3.1.3/kernel/irq/handle.c
        
         167:	irqreturn_t handle_irq_event(struct irq_desc *desc)
         168:	{
         169:	        struct irqaction *action = desc->action;
         170:	        irqreturn_t ret;
         171:	
         172:	        desc->istate &= ~IRQS_PENDING;
         173:	        irqd_set(&desc->irq_data, IRQD_IRQ_INPROGRESS);
         174:	        raw_spin_unlock(&desc->lock);
         175:	
         176:	        ret = handle_irq_event_percpu(desc, action);
         177:	
         178:	        raw_spin_lock(&desc->lock);
         179:	        irqd_clear(&desc->irq_data, IRQD_IRQ_INPROGRESS);
         180:	        return ret;
         181:	}
        
        • $B>uBV(Bdesc->istate$B$N(B IRQS_PENDING ($BJ]N1(B)$B%S%C%H$r%/%j%"!#(B ($BJ]N1$r%/%j%"$G=hM}$7$^$7$?$H$$$&0UL#!#(B)
        • $B>uBV(Bdesc->irq_data$B$N(BIRQD_IRQ_INPROGRESS($B handle_irq_event_percpu() $B$r8F$S=P$9!#(B
        • IRQD_IRQ_INPROGRESS$B$r%/%j%"!#(B
        linux-3.1.3/kernel/irq/handle.c
         116:	irqreturn_t
         117:	handle_irq_event_percpu(struct irq_desc *desc, struct irqaction *action)
         118:	{
         119:	        irqreturn_t retval = IRQ_NONE;
         120:	        unsigned int random = 0, irq = desc->irq_data.irq;
         121:	
         122:	        do {
         123:	                irqreturn_t res;
        ...
         126:	                res = action->handler(irq, action->dev_id);
        ...
         133:	                switch (res) {
        ...
         147:	                case IRQ_HANDLED:
         148:	                        random |= action->flags;
         149:	                        break;
         150:	
         151:	                default:
         152:	                        break;
         153:	                }
         154:	
         155:	                retval |= res;
         156:	                action = action->next;
         157:	        } while (action);
        ...
         164:	        return retval;
         165:	}
        
        • struct irqaction *action $B$O!"(B action->next $B$G%j%9%H9=B$$r:n$C$F$$$k!#(B
        • $B3F9=B$BN$K4^$^$l$F$$$k(B action->handler() $B$r=g$K8F$S=P(B $B$9!#(B

        $B"#3d$j9~$_%O%s%I%i$N%W%m%0%i%_%s%0$NCm0UE@(B

        $B"!3d$j9~$_%3%s%F%-%9%H(B

        $B3d$j9~$_%O%s%I%i$,

        $B%W%m%;%9!&%3%s%F%-%9%H$G$G$-$k$3$H!#(B

        • current $B$K$h$j!"8=:_ sleep $B$G$-$k!#(B
        • $B%9%1%8%e!<%i$r8F$s$G!"B>$N%W%m%;%9$X@ZBX$($k$3$H$,$G$-$k!#(B

        $B3d$j9~$_%3%s%F%-%9%H$G$O!"$3$N$&$h$&$J$3$H$O$G$-$J$$!#(B $BB.$d$+$K=*N;$9$Y$-$G$"$k!#(Bbusy loop $B$O$G$-$k$,!"$"$^$j(B $B$d$i$J$$J}$,$h$$!#B>$N3d$j9~$_$O!"

        $B"!3d$j9~$_$N5v2D!&6X;_(B

        $B%^%/%m$r$D$+$C$FJ]B8$7$?$j2sI|$7$?$j$9$k!#(B
        
        unsigned long flags;
        
        local_irq_save(flags); /* $B3d$j9~$_6X;_(B */
        ...
        local_irq_restore(flags); /* $B3d$j9~$_5v2D(B (save $B$N;~$N>uBV$K$b$I$k(B) */
        
        
        $BC10l(BCPU$B$N(B x86 $B$G$O!"(Bcli() $B$H(B sti() $B$G3d$j9~$_$N6X;_$H5v2D$r@_Dj$9$kJ}K!(B $B$,$"$C$?!#$=$l$=$lF1L>$N(B CPU $B$NL?Na$r$N(B CPU $B$G$O5v2D$5$l$F$$$k$3$H$,$"$k$N$G!"(Bcli()/sti() $B$NJ}K!$O(B $B;H$($J$$!#(B

        $BFCDj$N3d$j9~$_HV9f$N3d$j9~$_$r6X;_$9$kJ}K!$b$"$k!#(B

        void disable_irq(unsigned ing irq);
            // $BA4(BCPU$B$N3d$j9~$_$r6X;_$9$k(B
        
        void disable_irq_nosync(unsigned ing irq);
            // $BF1>e!#$?$@$7!"3d$j9~$_%O%s%I%i$N=*N;$rBT$?$J$$!#(B
        
        void enable_irq(unsigned ing irq);
            // $B3d$j9~$_$r5v2D$9$k!#(B
        
        void synchronize_irq(unsigned ing irq);
            // $B3d$j9~$_%O%s%I%i$N=*N;$rBT$D!#(B
        

        $B"#%/%$%:(B7 $B3d$j9~$_=hM}(B

        $B!zLdBj(B(701) $B3d$j9~$_$NMxMQ(B

        $B%-!<%\!<%I!"%^%&%9!"%M%C%H%o!<%/!&%+!<%IEy$N%G%P%$%9$+$i$NF~NO$G$O3d$j(B $B9~$_$,B?$/;H$o$l$F$$$k!#3d$j9~$_$r;H$&J}K!$H3d$j9~$_$r;H$o$J$$J}K!$rBP(B $BHf$7$F!"3d$j9~$_$r;H$&J}K!$NMxE@$r@bL@$7$J$5$$!#(B

        $B!zLdBj(B(702) x86 CMOS Real-Time Clock $B$N3d$j9~$_%O%s%I%i(B

        x86 CMOS Real-Time Clock $B$N3d$j9~$_%O%s%I%i$r4X?tL>$GEz$($J$5$$!#(B $B$=$N4X?t$N0z?t$H7k2L$r!"4JC1$K@bL@$7$J$5$$!#(B

        $B!zLdBj(B(703) x86 CMOS Real-Time Clock $B$N3d$j9~$_%O%s%I%i$N8F$S=P$7(B

        $B:#F|$N;qNA$NCf$G!"(Bx86 CMOS Real-Time Clock $B$N3d$j9~$_%O%s%I%i$r8F$S=P$7(B $B$F$$$k$H;W$o$l$k4X?t$H9T?t$rEz$($J$5$$!#(B
        Last updated: 2012/02/07 18:01:58
        Yasushi Shinjo / <yas@is.tsukuba.ac.jp>