Sophie

Sophie

distrib > Mandriva > 9.2 > i586 > by-pkgid > a804ef007a99f7d26cf24253c2994680 > files > 1128

howto-html-ja-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>Linux Parallel Processing HOWTO: SMP Linux</TITLE>
 <LINK HREF="Parallel-Processing-HOWTO-3.html" REL=next>
 <LINK HREF="Parallel-Processing-HOWTO-1.html" REL=previous>
 <LINK HREF="Parallel-Processing-HOWTO.html#toc2" REL=contents>
</HEAD>
<BODY>
<A HREF="Parallel-Processing-HOWTO-3.html">$B<!$N%Z!<%8(B</A>
<A HREF="Parallel-Processing-HOWTO-1.html">$BA0$N%Z!<%8(B</A>
<A HREF="Parallel-Processing-HOWTO.html#toc2">$BL\<!$X(B</A>
<HR>
<H2><A NAME="s2">2. SMP Linux</A></H2>

<P>
<P>$B$3$N%I%-%e%a%s%H$G$O!"(B
<A HREF="http://www.linux.org.uk/SMP/title.html">SMP Linux</A> 
$B%7%9%F%`$rJBNs=hM}$K;H$&J}K!$K$D$$$F!"MWE@$r$+$$$D$^$s$G8+$F$$$-$^$9!#(B
SMP Linux $B$N:G?7$N>pJs$O!"(BSMP Linux $B%W%m%8%'%/%H$N%a!<%j%s%0%j%9%H(B
$B$GF@$i$l$^$9!#(Bmajordomo@vger.rutgers.edu $B$K(B <CODE>subscribe linux-smp</CODE> 
$B$H=q$$$FEE;R%a!<%k$rAw$k$H;22C$G$-$^$9!#(B
<P>SMP Linux $B$OK\Ev$KF0:n$9$k$N$G$7$g$&$+!)(B 1996 $BG/(B 6 $B7n$K?7IJ$N(B($B<B$O%N!<(B
$B%V%i%s%I(B ;-)100MHz $B6nF0$N(B Pentium $B$r(B 2 $B8DEk:\$7$?%7%9%F%`$r9XF~$7$^$7$?!#(B
$B%Q!<%D$+$iAH$_>e$2$?%7%9%F%`$G!"%W%m%;%C%5$H(B Asus $B$N%^%6!<%\!<%I!"(B256 K 
$B$N%-%c%C%7%e!"(B32 MB $B$N(B RAM$B!"(B1.6 GB $B$N%G%#%9%/!"(B6 $BG\B.$N(B CD-ROM$B!"%S%G%*(B
$B%+!<%I$K(B Stealth 64$B!"(B15 $B%$%s%A$N(B Acer $B$N%b%K%?!<$,$D$$$F!"9g7W(B 1,800 
$B%I%k$G$7$?!#%W%m%;%C%5$,(B 1 $B$D$N%7%9%F%`$HHf$Y$F?t(B 100 $B%I%k9b$/$J$j$^$7$?!#(B
SMP Linux $B$rF0$+$9$N$OFq$7$$$3$H$G$O$J$/!"C1FH%W%m%;%C%5MQ$N!VIaDL$K$D$$$F(B
$B$/$k!W(BLinux $B$r%$%s%9%H!<%k$7$F!"(Bmakefile $B$K$"$k(B <CODE>SMP=1</CODE> $B$H$$$&9T(B
$B$N%3%a%s%H$r30$7$F!"%+!<%M%k$r:F%3%s%Q%$%k$7(B(<CODE>SMP</CODE> $B$r(B <CODE>1</CODE> 
$B$K@_Dj$H$O!"$A$g$C$HHiFy$G$9$M(B ;-)$B!"(B<CODE>lilo</CODE> $B$K?7$7$$%+!<%M%k$r@_Dj(B
$B$9$l$P$$$$$@$1$G$9!#$3$N%7%9%F%`$N%Q%U%)!<%^%s%9$O?=$7J,$J$/!"0BDj@-$b(B
$B==J,$G$9!#$=$l0JMh%a%$%s$N%o!<%/%9%F!<%7%g%s$H$7$F3hLv$7$F$$$^$9!#$D$^$j(B
SMP Linux $B$O<B:]$KF0$$$F$$$k$N$G$9!#(B
<P>$B<!$K$o$+$i$J$$$N$O!"$O$?$7$F(B SMP Linux $B$G$I$NDxEY$N%l%Y%k$N9b$5(B
$B$G6&M-%a%b%j$r;H$C$?JBNs%W%m%0%i%`$r%3!<%G%#%s%0$7$F<B9T$G$-$k$+$H(B
$B$$$&$3$H$G$7$g$&!#(B
1996 $BG/A0H>$G$O!"$^$@==J,$H$O$$$($^$;$s$G$7$?!#$7$+$7>u67$OJQ$o$j$^$7$?!#(B
$BNc$($P!"8=:_$G$O6K$a$F40@.EY$,9b$$(B POSIX $B%9%l%C%I%i%$%V%i%j$,$"$j$^$9!#(B
<P>$BK\Mh$N6&M-%a%b%jJ}<0$HHf$Y$F%Q%U%)!<%^%s%9$ONt$j$^$9$,!"(BSMP Linux 
$B%7%9%F%`$G$O!"$b$H$b$H%=%1%C%HDL?.$r;H$C$?%o!<%/%9%F!<%7%g%s>e$GF0$/(B
$B%/%i%9%?MQ$K3+H/$7$?JBNs=hM}MQ$N%=%U%H%&%'%"$N$[$H$s$I$rMxMQ$G$-$^$9!#(B
$B%=%1%C%H(B($B%;%/%7%g%s(B 3.3 $B$r;2>H$N$3$H(B)$B$O!"C1FH$N(B SMP Linux $B>e$GF0:n$7!"(B
$B%/%i%9%?$r%M%C%H%o!<%/>e$GAH$s$@J#?t$N(B SMP $B%^%7%s$G$bF0:n$7$^$9!#(B
$B$7$+$7!"%=%1%C%H$O(B SMP $B$K$H$C$F$OI,MW$J$$%*!<%P!<%X%C%I$,$+$J$jB?$/(B
$B$"$j$^$9!#%*!<%P!<%X%C%I$N$+$J$j$NItJ,$O%+!<%M%k$d3d$j9~$_@)8f$K$"$j(B
$B$^$9!#$3$l$,LdBj$r$5$i$K0-2=$5$;$F$$$^$9!#$H$$$&$N$b!"DL>o(B SMP Linux 
$B$O!"%+!<%M%kFb$GF1;~$KF0:n$G$-$k%W%m%;%C%5$O(B 1 $B$D$@$1$G!"3d$j9~$_(B
$B%3%s%H%m!<%i$H$7$F@_Dj$G$-$k%W%m%;%C%5$b$?$C$?(B 1 $B$D$@$1$J$N$G$9!#(B
$B$D$^$j%V!<%H$7$?%W%m%;%C%5$7$+3d$j9~$_$r$+$1$i$l$^$;$s!#(B
$B$=$l$K$b$+$+$o$i$:!"I8=`E*$J(B SMP $B$NDL?.5!4o$O!"BgItJ,$N%/%i%9%?$rAH$s$@(B
$B%M%C%H%o!<%/$h$j$bM%$l$F$$$^$9!#%/%i%9%?MQ$K@_7W$5$l$?%=%U%H%&%'%"$,!"(B
$B%/%i%9%?>e$GF0$/$h$j$b(B SMP $B>e$NJ}$,$&$^$/F0:n$9$k$3$H$,B?$$$h$&$G$9!#(B
<P>$B!ZLuCp!'(BLinux $B$N%+!<%M%k$,(B 2.4 $B$K$J$j(B SMP $BBP1~$,2~NI$5$l$^$7$?!#(B
2.2 $B7ONs0JA0$G$O!"%7%9%F%`%3!<%k$,8F$S=P$5$l$k$H$=$l$,F0$$$F$$$k%W%m%;%C%5(B
$B$,%+!<%M%k$rN%$9$^$G%+!<%M%kA4BN$K%m%C%/$r$+$1$F$$$^$7$?!#(B
$B$D$^$jB>$N%W%m%;%C%5$,%+!<%M%k$rMxMQ$7$h$&$H$7$F$b(B($B%7%9%F%`%3!<%k$rH/9T(B
$B$7$F$b(B)$B!"%+!<%M%k$N%m%C%/$,$O$:$l$k$^$G(B($B8=:_F0$$$F$$$k%7%9%F%`%3!<%k$N(B
$B=hM}$,=*$o$k$^$G(B)$B=hM}BT$A$K$J$C$F$$$^$7$?!#(B2.4 $B7ONs$G$O%+!<%M%kA4BN$G$O$J$/!"(B
$B%+!<%M%kFbIt$G%W%m%;%C%54V$G6&M-$7$F$$$k;q8;C10L$G$N%m%C%/$,2DG=$K$J$j$^$7$?!#(B
$B$?$@$7$9$Y$F$,;q8;C10L$G$N%m%C%/$KJQ99$5$l$?$o$1$G$O$J$/!"0MA3$H$7$F%+!<%M%k(B
$B$r%m%C%/$9$kItJ,$b$"$j$^$9!#(B
$B3d$j9~$_$K$D$$$F$b!"$=$l$>$l$N%W%m%;%C%5$+$i$+$1$k$3$H$,2DG=$K$J$j$^$7$?![(B
<P>$B$3$N%;%/%7%g%s$N;D$j$NItJ,$G$O!"(BSMP $B$N%O!<%I%&%'%"$K$D$$$FO@$8!"(BLinux $B$G(B
$BJBNs%W%m%0%i%`$N%W%m%;%9$,%a%b%j$r6&M-$79g$&4pK\E*$J$7$/$_$r8+$F9T$/$3$H(B
$B$K$7$^$9!#%"%H%_%C%/$J=hM}$dJQ?t$NJ]B8!";q8;$N%m%C%/!"%-%c%C%7%e!&%i%$%s(B
$B$K$D$$$F(B $B>/$70U8+$r=R$Y$F!":G8e$KB>$N6&M-%a%b%jJBNs=hM}$K$D$$$F$N;qNA$r(B
$B$$$/$D$+>R2p$7$?$$$H;W$$$^$9!#(B
<P>
<H2><A NAME="ss2.1">2.1 SMP $B$N%O!<%I%&%'%"(B</A>
</H2>

<P>
<P>SMP $B%7%9%F%`$O$b$&2?G/$bF0$-B3$1$F$$$^$9$,!"$D$$:G6a$^$G4pK\E*$J5!G=$N(B
$B<BAu$,$=$l$>$l$N%^%7%s$G0[$J$k798~$K$"$C$?$?$a!"%*%Z%l!<%F%#%s%0%7%9%F%`(B
$B$N%5%]!<%H$O0\?"@-$,$"$k$H$O8@$($^$;$s$G$7$?!#(B
$B$3$N>u67$,JQ$o$k$-$C$+$1$K$J$C$?$N$,!"(B<B>MPS</B> $B$H8F$P$l$k(B Intel $B$N(B 
Multiprocessor Specification $B$G$9!#(BMPS 1.4 $B$N;EMM$O!"(BPDF $B%U%!%$%k$G(B
<A HREF="http://www.intel.com/design/pro/datashts/242016.htm">http://www.intel.com/design/pro/datashts/242016.htm</A> $B$+$iMxMQ(B
$B$G$-$^$9!#$^$?(B MPS 1.1 $B$K$D$$$F$N35MW$,(B 
<A HREF="http://support.intel.com/oem_developer/ial/support/9300.HTM">http://support.intel.com/oem_developer/ial/support/9300.HTM</A>
$B!ZLuCp!'%j%s%/@Z$l![$K$"$j$^$9!#$?$@!"(Bintel $B$N(B WWW $B%5%$%H$O$h$/9=@.$rJQ$($k(B
$B$N$GCm0U$7$F$/$@$5$$!#(B
$B%W%m%;%C%5$r:GBg(B 4 $B$D$^$GEk:\$9$k(B MPS $B8_49$N%7%9%F%`$O!"?tB?$/$N(B
<A HREF="http://www.uruk.org/~erich/mps-hw.html">$B%Y%s%@!<(B</A>$B$,9=C[$7$F(B
$B$$$^$9!#$7$+$7(B MPS $B$OM}O@>e$b$C$HB??t$N%W%m%;%C%5$r%5%]!<%H$7$F$$$^$9!#(B
<P>$BHs(B MPS $B$G(B $BHs(B IA-32 $B$J%7%9%F%`$G(B SMP Linux $B$,%5%]!<%H$7$F$$$k$b$N$O!"(B
Sun4m $B$r:\$;$?%^%k%A%W%m%;%C%5$N(B SPARC $B%^%7%s$G$9!#(BSMP Linux $B$O(B Intel 
$B$N(B MPS $B%P!<%8%g%s(B 1.1 $B$b$7$/$O(B 1.4 $B8_49$N%^%7%s$r%5%]!<%H$7$F$*$j!"(B16 
$B8D$^$G$N(B 486DX$B!"(BPentium$B!"(BPentium MMX$B!"(BPentium Pro$B!"(BPentium II $B$r%5%]!<%H(B
$B$7$F$$$^$9!#(B
$B%5%]!<%H$7$F$$$J$$(B IA-32 $B%W%m%;%C%5$K$O!"(BIntel $B$N(B 386 $B$H(B Intel $B$N(B 486SX/SLC 
$B$G$9(B(SMP $B$N$7$/$_$HIbF0>.?tE@1i;;AuCV$r$D$J$0%$%s%?%U%'!<%9$,$"$j$^$;$s(B)$B!#(B
AMD $B$H(B Cyrix $B%W%m%;%C%5(B(SMP $B$r%5%]!<%H$9$k%A%C%W$,0[$J$k$N$G!"$3$N(B
$B%I%-%e%a%s%H$r=q$$$F$$$k;~E@$G$OMxMQ$G$-$^$;$s(B)$B$,>e$2$i$l$^$9!#(B
<P>$B!ZLuCp!'@h$K=R$Y$?(B 
<A HREF="http://aggregate.org/KLAT2/">KLAT2</A> $B$O!"(BAMD $B$N(B Athlon $B$rEk:\$7$F$$$F!"(BSWAR $B$H$7$F(B intel $B$N(B MMX 
$B$K2C$($F!"(BAMD $B$N%^%k%A%a%G%#%"3HD%L?Na$G$"$k(B 3DNow! $B$bMxMQ$7$F$$$^$9![(B
<P>$BBg@Z$J$N$O!"(BMPS $B8_49$N%7%9%F%`$N%Q%U%)!<%^%s%9$,Bg$-$/$P$i$D$/$3$H$r(B
$BCN$C$F$*$/$3$H$G$9!#3'$5$s$NM=A[DL$j!"%W%m%;%C%5$NB.EY$O%Q%U%)!<%^%s%9(B
$B$N:9$K1F6A$rM?$($kMW0x$N(B 1 $B$D$G$9!#%/%m%C%/B.EY$,B.$1$l$PB.$$$[$I!"$h$j(B
$B9bB.$J%7%9%F%`$K$J$k798~$K$"$j$^$9$7!"(BPentium Pro $B$O(B Pentium $B$h$j$b9bB.(B
$B$G$9!#$7$+$7(B MPS $B<+BN$O6&M-%a%b%j$N<BAu$,$I$N$h$&$G$"$k$+$K$D$$$F;EMM(B
$B$r7h$a$F$$$k$o$1$G$O$J$/!"$?$@%=%U%H%&%'%"$NE@$+$i$I$N$h$&$K<BAu$,5!G=(B
$B$9$Y$-$J$N$+$r7h$a$F$$$k$K2a$.$^$;$s!#$D$^$j%Q%U%)!<%^%s%9$H$O!"6&M-%a%b%j(B
$B$N<BAu$,$I$N$h$&$K(B SMP Linux $B$d%f!<%6$N%W%m%0%i%`$NFC@-$HAj8_$KO"78$7$F(B
$B$$$k$+$N7k2L$G$b$"$j$^$9!#(B
<P>$B$^$:(B MPS $B$K=`5r$7$?%7%9%F%`$=$l$>$l$G8+$J$1$l$P$$$1$J$$$N$O!"$I$N$h$&$K(B
$B%7%9%F%`$,J*M}E*$J6&M-%a%b%j$K%"%/%;%9$G$-$k$N$+$H$$$&$3$H$G$9!#(B
<P>
<H3>$B$=$l$>$l$N%W%m%;%C%5$OFH<+$N(B L2 $B%-%c%C%7%e$r;}$C$F$$$k$+!)(B</H3>

<P>
<P>MPS Pentium $B$N0lIt$d$9$Y$F$N(B MPS Pentium Pro$B!"(BPentium II $B%7%9%F%`$O!"(B
$BFHN)$7$?(B L2 $B%-%c%C%7%e$r;}$C$F$$$^$9(B(Pentium Pro $B$d(B Pentium II $B$O%b(B
$B%8%e!<%k$KAH$_9~$^$l$F$$$^$9(B)$B!#FHN)$7$?(B L2 $B%-%c%C%7%e$O0lHLE*$K(B
$B%3%s%T%e!<%?$N%Q%U%)!<%^%s%9$r:GBg8B$K0z$-=P$9$H8+$J$5$l$F$$$^$9$,!"(BLinux 
$B$G$O$=$l$[$IC1=c$G$O$"$j$^$;$s!#J#;($K$7$F$$$kBh(B 1 $B$N860x$O!"8=>u$N(B SMP 
Linux $B$N%9%1%8%e!<%i$,%W%m%;%9$=$l$>$l$rF1$8%W%m%;%C%5$K3d$jEv$FB3$1(B
$B$J$$$h$&$K$7$F$$$kE@$K$"$j$^$9!#$3$l$O(B<B>$B%W%m%;%C%5!&%"%U%#%K%F%#(B</B>
$B$H8F$P$l$F$$$k9M$(J}$G$9!#(B
$B$3$l$O$9$0$K$G$bJQ99$5$l$k$+$b$7$l$^$;$s!#:G6a!V%W%m%;%C%5!&%P%$%s%G%#(B
$B%s%0!W$H$$$&%?%$%H%k$G!"(BSMP Linux $B$N3+H/%3%_%e%K%F%#$G$3$N9M$(J}$,(B
$B2?EY$+5DO@$5$l$^$7$?!#%W%m%;%C%5!&%"%U%#%K%F%#$,$J$$$H!"FHN)$7$?(B 
L2 $B%-%c%C%7%e$,B8:_$7$?>l9gL5;k$G$-$J$$%*!<%P!<%X%C%I$,H/@8$7$F$7$^(B
$B$$$^$9!#$=$l$O!"$"$k%W%m%;%9$,:G8e$K<B9T$7$F$$$?%W%m%;%C%5$G$O$J$/!"(B
$BJL$N%W%m%;%C%5$G%?%$%`%9%i%$%9$r3d$jEv$F$i$l$?>l9g$KH/@8$7$^$9!#(B
<P>$B!ZLuCp!'%+!<%M%k(B2.2$B7ONs$G$O!"FCDj$N(B CPU $B$KFCDj$N%W%m%;%9$r3d$j(B
$BEv$F$k$3$H$OI8=`$G$O$G$-$^$;$s$,!"%Q%C%A$H$7$F(B PSET - Processor Sets 
for the Linux kernel(
<A HREF="http://isunix.it.ilstu.edu/~thockin/pset/">http://isunix.it.ilstu.edu/~thockin/pset/</A>) 
$B$,MQ0U$5$l$F$$$^$9!#(B
2.4 $B7ONs$G$O!"%W%m%;%9$rF1$8%W%m%;%C%5$K$J$k$Y$/=hM}$5$;$k$h$&$K(B
$B%9%1%8%e!<%j%s%0J}K!$,JQ99$5$l$F$$$^$9!#$^$?%W%m%;%C%5!&%P%$%s%G%#%s%0(B
$B$O!"3d$j9~$_$K$D$$$F$O<BAu$5$l$F$*$j!"%W%m%;%9$K$D$$$F$O8!F$Cf$G$9![(B
<P>$BHf3SE*0B2A$J%7%9%F%`$NB?$/$O!"(B1 $B$D$N(B L2 $B%-%c%C%7%e$r(B 2 $B$D$N(B Pentium 
$B%W%m%;%C%5$G6&M-$7$F$$$^$9!#:$$C$?$3$H$K%-%c%C%7%e$N6%9g$,H/@8$7$F!"J#?t(B
$B$NFHN)$7$?=g<!=hM}$r$9$k%W%m%0%i%`$KBP$7$F?<9o$J%Q%U%)!<%^%s%9$NDc2<$r0z$-(B
$B5/$3$7$^$9!#5U$KNI$$E@$O!"JBNs%W%m%0%i%`$NB?$/$,<B:]$K6&M-$7$?%-%c%C%7%e(B
$B$N287C$r<u$1$k2DG=@-$,$"$k$3$H$G$9!#$H$$$&$N$O!"N>J}$N%W%m%;%C%5$,(B
$B6&M-%a%b%j$NF1$8%i%$%s$K%"%/%;%9$7$h$&$H$9$k>l9g!"%-%c%C%7%e$K%G!<%?$r(B
$B%U%'%C%A$7$J$1$l$P$J$i$J$$$N$O(B 1 $B$D$N%W%m%;%C%5$@$1$G!"%P%9$N6%9g$,Hr$1$i$l(B
$B$^$9!#%W%m%;%C%5!&%"%U%#%K%F%#$,$J$1$l$P!"6&M-$N(B L2 $B%-%c%C%7%e$N%G!<%?(B
$BIT@09g$r$h$jDc$/2!$($k$3$H$b$G$-$^$9!#$D$^$jJBNs=hM}$K$H$C$F!"M=A[$7$F$$$?(B
$B$[$I!"6&M-$N(B L2 $B%-%c%C%7%e$K7gE@$,$"$k$H$OCGDj$G$-$^$;$s!#(B
<P>$B;dC#$,=jM-$7$F$$$k(B 2 $B$D$N(B Pentium $B$rEk:\$7$?(B 256 K $B$N%-%c%C%7%e$r;}$D(B
$B%7%9%F%`$r;HMQ$7$?7P83$+$i$9$k$H!"%Q%U%)!<%^%s%9$KHs>o$K$P$i$D$-$,$"$j!"(B
$B$=$N860x$O%+!<%M%k$,Ii$&=hM}$N%l%Y%k$K0MB8$7$F$$$^$9!#:G0-$GLs(B 1.2 $BG\(B
$B$NB.EY8~>e$K$7$+$J$j$^$;$s!#$7$+$7(B 2.1 $BG\$^$G9bB.2=$,$G$-$?$3$H$+$i!"(B
$B7W;;Cf?4$N(B SPMD $B%9%?%$%k$N%3!<%I$O$^$5$K!V%U%'%C%A$N6&M-!W8z2L$,$G$F(B
$B$$$k$3$H$K$J$j$^$9!#(B
<P>
<H3>$B%P%9$N9=@.!)(B</H3>

<P>
<P>$B:G6a$NBgItJ,$N%7%9%F%`$G$O!"%W%m%;%C%5$K(B 1 $B$D0J>e$N(B PCI $B%P%9$,@\B3$7$F(B
$B$$$F!"$=$N(B PCI $B%P%9$K(B 1 $B$D0J>e$N(B ISA $B$d(B EISA $B%P%9$,!V%V%j%C%8!W$7$F$$$^$9!#(B
$B$3$l$i$N%V%j%C%8$,CY1d$r0z$-5/$3$7!"$5$i$K(B EISA $B$H(B ISA $B$O(B PCI $B$KHf$Y$FBS0h(B
$B$b69$/$J$j$^$9(B(ISA $B$,:G$bCY$$(B)$B!#$=$N$?$a%G%#%9%/%I%i%$%V$d%S%G%*%+!<%IB>$N(B
$B9b$$%Q%U%)!<%^%s%9$rI,MW$H$9$k%G%P%$%9$O!"IaDL(B PCI $B%P%9%$%s%?%U%'!<%97PM3(B
$B$G@\B3$9$Y$-$G$9!#(B
<P>MPS $B%7%9%F%`$G$O!"(BPCI $B%P%9$,(B 1 $B$D$7$+$J$/$F$b7W;;$,B?$/$r@j$a$kJBNs%W%m(B
$B%0%i%`$r9bB.$K<B9T$G$-$^$9!#$7$+$7F~=PNO=hM}$O!"%W%m%;%C%5$,(B 1 $B$D$N$b$N(B
$B$h$jNI$$$H$O8@$($^$;$s!D62$i$/%W%m%;%C%5$K$h$k%P%9$N6%9g$G<c43(B
$B%Q%U%)!<%^%s%9$,Mn$A$F$7$^$$$^$9!#$D$^$jF~=PNO$NB.EY8~>e$KCmL\$9$k$H$9$l(B
$B$P!"J#?t$NFHN)$7$?(B PCI $B%P%9$HF~=PNO%3%s%H%m!<%i$,$"$k(B MPS $B%7%9%F%`$r<j$K(B
$BF~$l$kJ}$,NI$$$H$$$&$3$H$K$J$j$^$9(B($BNc$($PJ#?t$N(B SCSI $B@\B3(B)$B!#$3$3$GCm0U(B
$B$7$J$1$l$P$$$1$J$$$N$O!"(BSMP Linux $B$,$"$J$?$,=jM-$9$kItIJ$r%5%]!<%H$7$F(B
$B$$$k$+!"$H$$$&$3$H$G$9!#$^$?:G?7$N(B SMP Linux $B$,4pK\E*$K%+!<%M%k>e$G$O(B
$B>o$K(B 1 $B$D$N%W%m%;%C%5$7$+F0$$$F$$$J$$$H$$$&$3$H$bK:$l$J$$$G$/$@$5$$!#(B
$B$=$&$$$&Lu$G!"F~=PNO%3%s%H%m!<%i$K$OF~=PNO=hM}$=$l$>$l$KI,MW$H$J$k%+!<%M%k(B
$B$N=hM};~4V$,:G>.$N$b$N$rA*$V$h$&$K?4$,$1$F$/$@$5$$!#K\Ev$K9b@-G=$rL\;X$9(B
$B$J$i$P!"%7%9%F%`%3!<%k$r;H$o$J$$$G!"%f!<%6!&%W%m%;%9$+$iD>@\(B raw $B%G%P%$%9(B
$B$r;H$C$FF~=PNO$9$k$3$H$r9MN8$7$F$b$$$$$N$G$O$J$$$G$7$g$&$+!#$3$l$O;W$C$?(B
$B$[$IFq$7$$$3$H$G$O$"$j$^$;$s$7!"%;%-%e%j%F%#%l%Y%k$r2<$2$k$3$H$K$b$J$j(B
$B$^$;$s(B($B%;%/%7%g%s(B 3.3 $B$G4pK\E*$J$d$jJ}$r@bL@$7$^$9(B)$B!#(B
<P>$B%P%9$NB.$5$H%W%m%;%C%5$N%/%m%C%/$NB.$5$N4X78$,$3$3?tG/$G$$$S$D$K$J$C$F(B
$B$$$k$3$H$r$<$RCN$C$F$*$$$F$/$@$5$$!#(B
$B8=>u$G$O%7%9%F%`$NBgItJ,$OF10l$N(B PCI $B$N%/%m%C%/B.EY$r;HMQ$7$F$$$^$9$,!"(B
$B9bB.$J%W%m%;%C%5$N%/%m%C%/$HDcB.$J%P%9$N%/%m%C%/$NAH9g$;$O!"$^$l$J%1!<%9(B
$B$H$O8@$($^$;$s!#(BPentium 133 $B$O(B Pentium 150 $B$h$jB.$$%P%9$r(B
$B:NMQ$7$F$*$j!"MM!9$J%Y%s%A%^!<%/$G0l8+IT;W5D$J7k2L$r=P$7$F$$$k$N$,NI$$Nc(B
$B$G$9!#$3$l$i$N1F6A$O(B SMP $B%7%9%F%`$G$O$5$i$KBg$-$/$J$j$^$9!#$h$jB.$$%P%9!&(B
$B%/%m%C%/$,$h$j=EMW$J$N$G$9!#(B
<P>$B!ZLuCp!'(BPentium 133 $B$O(B 66 MHz $B$N(B 2 $BG\B.!"(BPentium 150 $B$O(B 60 MHz $B$N(B 
2.5 $BG\B.$G6nF0$7$^$9![(B
<P>
<H3>$B%a%b%j$N%$%s%?%j!<%V$H(B DRAM $B$N5;=Q!)(B</H3>

<P>
<P>$BK\Mh!"%a%b%j$r%$%s%?%j!<%V$9$k$3$H$O(B MPS $B$H$O2?$N4X78$b$"$j$^$;$s$,!"(B
MPS $B%7%9%F%`$G$O$h$/?($l$i$l$kOC$G$9!#$H$$$&$N$b!"$3$l$i$N%7%9%F%`$O(B
$B1}!9$K$7$F%a%b%j$NBS0hI}$r$h$jI,MW$H$9$k$+$i$G$9!#IaDL$O!"(B2 way $B$b$7$/$O(B 
4 way $B$r%$%s%?%j!<%V$7$F(B RAM $B$r9=@.$7$^$9!#$=$N$?$a%V%m%C%/!&%"%/%;%9$O!"(B
1 $B$D$N%P%s%/$@$1$G$O$J$/!"J#?t$N%P%s%/$r;HMQ$7$^$9!#(B
$B$3$l$K$h$C$F!"$h$j9-$$BS0hI}$G%a%b%j$K%"%/%;%9$G$-!"$H$j$o$1%-%c%C%7%e(B
$B$N%m!<%I$d%9%H%"$K8z2L$,$"$j$^$9!#(B
<P>$B!ZLuCp!'%$%s%?%j!<%V$H$O!"%a%b%j>e$N%G!<%?FI$_=q$-$N9bB.2=$r(B
$B$O$+$k$?$a$NJ}K!$N(B 1 $B$D$G!"Ek:\$5$l$F$$$k%a%b%j$r%0%k!<%WJ,$1$7$^$9!#(B
$B$3$N%0%k!<%W$r%P%s%/$H8F$S!"$3$N%P%s%/C10L$KJBNs$K%"%/%;%9$9$kJ}<0$r(B
$B$H$j$^$9!#(B 2 way $B$O(B 2 $B%P%s%/!"(B4 way $B$O(B 4 $B%P%s%/$K%a%b%j$r%0%k!<%W$K(B
$BJ,$1$FJBNs$K%"%/%;%9$7$^$9![(B
<P>$B$7$+$7$3$N8z2L$K$D$$$F$O!">u67$,>/!9:.FY$H$7$F$-$^$7$?!#$=$NM}M3$O!"(B
EDO DRAM $B$HB>$NMM!9$J%a%b%j4XO"5;=Q$,F1$8$h$&$J<oN`$NA`:n$K2~NI(B
$B$r2C$($F$-$F$$$k$?$a$G$9!#(BDRAM $B5;=Q$K$D$$$F$H$F$b$h$/$^$H$a$i$l$?(B
$B;qNA$,!"(B
<A HREF="http://www.pcguide.com/ref/ram/tech.htm">http://www.pcguide.com/ref/ram/tech.htm</A> $B$G8+$i$l$^$9!#(B 
<P>$B$=$l$G$O!"(B2 way $B$G%$%s%?%j!<%V$7$F$$$k(B EDO DRAM $B$H%$%s%?%j!<%V$7$F(B
$B$$$J$$(B SDRAM $B$G$O$I$A$i$,%Q%U%)!<%^%s%9$,M%$l$F$$$k$G$7$g$&$+!)(B $B$3$N(B
$B<ALd$O$H$F$b$$$$<ALd$J$N$G$9$,!"4JC1$K$OEz$($i$($^$;$s!#$H$$$&$N$b!"(B
$B%$%s%?%j!<%V$9$k$N$b!"L%NO$"$k(B DRAM $B5;=Q$b!"$H$F$b9b2A$K$J$j$,$A$@$+$i(B
$B$G$9!#F1$8$*6b$r$+$1$FIaDL$N%a%b%j$r9XF~$9$l$P!"$h$jB?$/$N%a%b%j$r(B
$B3NJ]$G$-$k$N$OL@$i$+$G$9!#0lHVCY$$(B DRAM $B$G$b!"%G%#%9%/%Y!<%9$N2>A[(B
$B%a%b%j$h$jHf$Y$b$N$K$J$i$J$$$[$I9bB.$G$9!D!#(B
<P>$B!ZLuCp!'(BSDRAM $B$H(B EDO RAM $B$NBg$-$J0c$$$O!"(BSDRAM $B$O(B PC $B$N%Y!<%9(B
$B%/%m%C%/$HF14|$7$FF0:n$9$k$N$KBP$7$F!"(BEDO RAM $B$O%Y!<%9%/%m%C%/$H$OHs(B
$BF14|$KF0:n$9$kE@$K$"$j$^$9!#$7$+$7(B SDRAM $B$b$O$8$a$N%"%I%l%9$K$"$k%G!<%?(B
$B$K%"%/%;%9$9$k;~$K$O(B EDO DRAM $B$HF1MM$KCY1d(B(RAS$B!"(BCAS$B$N(B)$B$,H/@8$7$^$9!#<!(B
$B@$Be%a%b%j$H8@$o$l$k(B RDRAM $B$b$h$j9-$$%a%b%jBS0hI}$,<B8=$G$-$^$9$,!"(BDRAM 
$B$r;HMQ$9$k$3$H$K$O$+$o$j$J$/!"$d$O$jCY1d$,H/@8$7$F$7$^$$$^$9!#(B
$B$D$^$j!"8=:_$^$G$N%a%b%j$N9bB.2=$O%P!<%9%H%b!<%I$N9bB.2=$,Cf?4$G$"$C$F!"(B
DRAM $B<+BN$,Jz$($F$$$kCY1d$NLdBj$r:,K\E*$K8+D>$7$F$$$k$o$1$G$O$"$j$^$;$s![(B
<P>
<H2><A NAME="ss2.2">2.2 $B6&M-%a%b%j$r;H$C$?%W%m%0%i%_%s%0$r$O$8$a$k$K$"$?$C$F(B</A>
</H2>

<P>
<P>$B$=$m$=$mJBNs=hM}$r(B SMP $B$GF0$+$9$3$H$,!"$$$+$KAG@2$i$7$$$+$rM}2r$G$-$?$H(B
$B;W$$$^$9$,!D!#$I$3$+$i$O$8$a$?$i$$$$$G$7$g$&$+!)(B $B$^$:$O6&M-%a%b%jDL?.$,(B
$B<B:]$K$I$N$h$&$KF0$/$N$+!">/$7$P$+$jJY6/$7$F$_$^$7$g$&!#(B
<P>$B$"$k%W%m%;%C%5$,CM$r%a%b%j$K%9%H%"$7$F!"$"$k%W%m%;%C%5$,$=$l$r%m!<%I(B
$B$9$k!=$3$&8@$&$HC1=c$J$3$H$K;W$o$l$k$+$b$7$l$^$;$s$,!";DG0$J$,$i$=$l$[$I(B
$BC1=c$G$O$"$j$^$;$s!#Nc$($P!"%W%m%;%9$H%W%m%;%C%5$N4X78$O$-$C$A$j7h$C$F(B
$B$$$k$o$1$G$O$"$j$^$;$s!#$7$+$7!"%W%m%;%C%5$N8D?t0J>e$K%W%m%;%9$,F0$$$F(B
$B$$$J$$$J$i!"%W%m%;%9$H%W%m%;%C%5$H$$$&8@MU$rF~$l49$($F$7$^$C$F$b!"(B
$B$*$*$6$C$Q$K8@$C$FF1$8$3$H$G$9!#$3$N%;%/%7%g%s$N;D$j$NItJ,$G$O!"Bg$-$J(B
$BLdBj$K$J$k$H;W$o$l$k%-!<%]%$%s%H$r354Q$7$F!"%]%$%s%H$r30$7$?$^$^$K$J$i(B
$B$J$$$h$&$K$7$?$$$H;W$$$^$9!#2?$r6&M-$9$Y$-$+$r7h$a$k$N$K;H$o$l$k%b%G%k$r(B 
2 $B$D$H!"%"%H%_%C%/$JA`:n!"JQ?t$NJ]B8$N$7$+$?!"%O!<%I%&%'%"$N%m%C%/A`:n!"(B
$B%-%c%C%7%e!&%i%$%s$N8z2L!"(BLinux $B$K$*$1$k%W%m%;%9$N%9%1%8%e!<%j%s%0$r(B
$B07$$$^$9!#(B
<P>
<H3>$B$9$Y$F$r6&M-$9$k$N$+!"0lIt$r6&M-$9$k$N$+(B</H3>

<P>
<P>$B6&M-%a%b%j$r;H$&%W%m%0%i%_%s%0$K$O!":,K\E*$K0[$J$k(B 2 $B$D$N%b%G%k$,$"$j(B
$B$^$9!#$=$l$O(B<B>$B$9$Y$F$r6&M-$9$k(B</B>$B>l9g$H(B<B>$B0lIt$r6&M-$9$k(B</B>$B>l9g(B
$B$G$9!#$3$N(B 2 $B$D$N%b%G%k$H$b!"%W%m%;%C%5$,6&M-%a%b%j$+$i$b$7$/$O6&M-(B
$B%a%b%j$X%m!<%I$d%9%H%"$r$7$F$d$j$H$j$G$-$^$9!#0c$&$H$3$m$O!"$9$Y$F$r(B
$B6&M-$9$k>l9g$,%G!<%?9=B$$9$Y$F$r6&M-%a%b%j$KCV$/$N$KBP$7$F!"0lIt$r6&M-(B
$B$9$k>l9g$O!"%f!<%6$,$O$C$-$j$H$I$N%G!<%?9=B$$,6&M-%a%b%j$r;HMQ$9$k2DG=@-(B
$B$,$"$j!"$I$N%G!<%?9=B$$,C10l%W%m%;%C%5$N(B<B>$B%m!<%+%k$J(B</B>$B%a%b%j$r;HMQ(B
$B$9$k$+$r<($9I,MW$,$"$j$^$9!#(B
<P>$B$I$A$i$N6&M-%a%b%j%b%G%k$r;H$&$Y$-$G$7$g$&$+!)(B $B$?$$$F$$$N>l9g$O9%$_$N(B
$BLdBj$H8@$C$F$b$$$$$H;W$$$^$9!#$9$Y$F$r6&M-$9$k%b%G%k$r9%$`?M!9$,B?$$$N(B
$B$O!"%G!<%?9=B$$N$I$l$,@k8@$5$l$?$=$N;~$K6&M-$5$l$k$Y$-$+!"$H$$$&$3$H$r(B
$B6hJL$9$kI,MW$,$^$C$?$/$J$$$+$i$G$9!#$?$@6%9g$7$=$&$J%"%/%;%9$K%m%C%/$r(B
$B$+$1$F!"6&M-$7$F$$$k$b$N$,(B 1 $B$D$N%W%m%;%9(B($B%W%m%;%C%5(B)$B$+$i$7$+0l;~$K(B
$B%"%/%;%9$7$J$$$h$&$K$7$^$9!#7+$jJV$7$^$9$,!"$3$l$b>e5-$N$h$&$KC1=c$J$o$1(B
$B$G$O$"$j$^$;$s!#$=$3$G!"Hf3SE*0BA4$G$"$k6&M-$9$k$b$N$r0lIt$K$H$I$a$kJ}K!(B
$B$rA*$V?M!9$,B??t$$$k$N$G$9!#(B
<P>
<H3>$B$9$Y$F$r6&M-$9$k(B</H3>

<P>
<P>$B$9$Y$F$r6&M-$9$kMxE@$O!"4{$K$"$k=g<!<B9T%W%m%0%i%`$,$?$d$9$/<j$KF~$k$3$H!"(B
$B$=$7$F$=$N%W%m%0%i%`$r$9$Y$F$r6&M-$9$k$3$H$rA0Ds$K$7$?JBNs%W%m%0%i%`$K!"(B
$B$=$l$[$I<j4V$r$+$1$:=$@5$7$F$$$1$kE@$K$"$j$^$9!#$I$N%G!<%?$,B>$N%W%m%;%C%5(B
$B$K$h$C$F%"%/%;%9$5$l$k$+$r:G=i$+$i2r7h$9$kI,MW$O$"$j$^$;$s!#(B
<P>$B4JC1$K8@$&$H!"$9$Y$F$r6&M-$9$k>e$GBg$-$JLdBj$H$J$k$N$O!"$"$k%W%m%;%C%5$,(B
$B=hM}$7$?$3$H$9$Y$F$,B>$N%W%m%;%C%5$K1F6A$rM?$($F$7$^$&$+$b$7$l$J$$E@(B
$B$K$"$j$^$9!#$3$NLdBj$,82Cx$K$J$k%1!<%9$O(B 2 $B$D$"$j$^$9!#(B
<P>
<UL>
<LI>$B%i%$%V%i%j$NB?$/$O!"%G!<%?9=B$$,6&M-$5$l$k$3$H$rA0Ds$K$7$F$$$J$$!#(B
$BNc$($P!"(BUNIX $B$N47=,$H$7$F4X?t$NB?$/$O(B <CODE>errno</CODE> $B$H8F$P$l$kJQ?t(B
$B$G%(%i!<!&%3!<%I$rJV$9!#$9$Y$F$r6&M-$7$F$$$k(B 2 $B$D$N%W%m%;%9$,!"MM!9(B
$B$J%7%9%F%`%3!<%k$rH/9T$7$?>l9g!"F1$8(B <CODE>errno</CODE> $B$r6&M-$7$F$7$^$$!"(B
$B$*8_$$$K43>D$7$"$C$F$7$^$&$+$b$7$l$J$$!#8=:_$G$O$3$N(B <CODE>errno</CODE> 
$B$NLdBj$r=$@5$7$?%P!<%8%g%s$N%i%$%V%i%j$,$"$k$,!"F1$8$h$&$JLdBj$O0MA3(B
$B$H$7$FBgItJ,$N%i%$%V%i%j$K;D$C$F$$$k!#Nc$($P!"FCJL$J=hCV$r$7$J$$$H(B
$BJ#?t$N$9$Y$F$r6&M-$9$k%W%m%;%9$+$i(B X $B%i%$%V%i%j$r8F$s$G$bF0:n$7$J$$(B
$B$N$,>o$G$"$k(B
</LI>
<LI>$BDL>o:G0-$N%1!<%9$H$J$kF0:n$O!"%W%m%0%i%`$,%]%$%s%?$dG[Ns$NM=Ls$r(B
$B4V0c$C$F$7$^$$!"$=$N$*$+$7$J%3!<%I$r4^$s$@%W%m%;%9$,;`$s$G$7$^$&$3$H(B
$B$G$"$k!#$=$&$9$k$H!"$*$=$i$/(B <CODE>core</CODE> $B%U%!%$%k$,$G$-$F!"2?$,(B
$B5/$3$C$?$+$N<j3]$+$j$,F@$i$l$k!#$9$Y$F$r6&M-$9$kJBNs=hM}$N>l9g$O!"(B
$BIT@5$J%"%/%;%9$K$h$C$F!"(B<EM>$B$*$+$7$J%W%m%;%90J30$N%W%m%;%9(B</EM>$B$,;`$s$G(B
$B$7$^$&$+$b$7$l$:!"%(%i!<$rFCDj$7$?$j!"=$@5$7$?$j$9$k$3$H$,$[$H$s$I(B
$BIT2DG=$K$J$k(B</LI>
</UL>
<P>$B>e5-$NN`$NLdBj$O!"0lIt$r6&M-$9$kJ}K!$r$H$C$?>l9g$K$O$[$H$s$I5/$3$j(B
$B$^$;$s!#$=$l$O!"$O$C$-$j$H;XDj$7$?%G!<%?9=B$$@$1$r6&M-$9$k$?$a$G$9!#(B
$B$^$?!"$9$Y$F$r6&M-$9$kJ}K!$,F0:n$9$k$N$O!"%W%m%;%C%5$9$Y$F$,A4$/F1$8(B
$B%a%b%j!&%$%a!<%8$r<B9T$7$F$$$k>l9g$@$1$G$9!#$3$l$O$[$H$s$I5?$&M>CO$,(B
$B$J$$$3$H$G$9!#$9$Y$F$r6&M-$7$FJ#?t$N0[$J$k%3!<%I!&%$%a!<%8$r07$&$3$H(B
$B$O$G$-$^$;$s(B($B$D$^$j!"(BSPMD $B$OMxMQ$G$-$^$9$,!"(BMIMD $B$O$G$-$^$;$s(B)$B!#(B
<P>$B$9$Y$F$r6&M-$9$k>l9g$K%W%m%0%i%`$,%5%]!<%H$9$kE57?E*$J%?%$%W$,!"(B<B>$B%9%l%C%I!&%i%$%V%i%j(B</B>$B$G$9!#(B
<A HREF="http://liinwww.ira.uka.de/bibliography/Os/threads.html">Threads</A> $B$O!"K\Mh!V7ZNL(B(light-weight)$B!W$J%W%m%;%9$H$7$F!"DL>o(B
$B$N(B UNIX $B>e$N%W%m%;%9$H$O0c$C$?%9%1%8%e!<%k$GF0:n$7$F$$$^$7$?!#$3$3$G(B
$B$H$F$bBg@Z$J$N$O!"(B1 $B$D$N%a%b%j!&%^%C%W$r6&M-$7$F%"%/%;%9$9$kE@$K$"$j$^$9!#(B
POSIX 
<A HREF="http://www.gnu.ai.mit.edu/software/pth/">Pthreads</A> 
$B$N%Q%C%1!<%8$O!"0\?"$KBP$7$F$?$$$X$s$JO+NO$rCm$$$G$-$^$7$?!#(B
$B$3$3$GHs>o$K5?Ld$J$N$O!"0\?"$5$l$?$b$N$,K\Ev$K(B SMP Linux $B>e$N%W%m%0%i%`(B
$B$N%9%l%C%I$H$7$FJBNs$KF0:n$9$k$N$+!"$H$$$&$3$H$G$9(B($BM}A[E*$K$O!"$"$k(B
$B%W%m%;%C%5$G$=$l$>$l$N%9%l%C%I$,F0:n$9$k(B)$B!#(BPOSIX API $B$O!"$=$3$^$G$r(B
$B5a$a$F$$$^$;$s$7!"(B
<A HREF="http://www.aa.net/~mtp/PCthreads.html">http://www.aa.net/~mtp/PCthreads.html</A>
$B!ZLuCp!'%j%s%/@Z$l![$N$h$&$J%P!<%8%g%s$O!"%9%l%C%I$rJBNs$K<B9T$9$k$3$H$r(B
$B$^$C$?$/9MN8$7$F$$$^$;$s!#%W%m%0%i%`$+$i<B9T$5$l$k%9%l%C%I$O$9$Y$F!"(BLinux 
$B$N(B 1 $B$D$N%W%m%;%9Fb$GF0$-B3$1$^$9!#(B
<P>SMP Linux $B$NJBNs=hM}$r:G=i$K%5%]!<%H$7$?%9%l%C%I!&%i%$%V%i%j$O!"4{$K(B
$B2a5n$N$b$N$K$J$j$D$D$"$k(B bb_threads $B%i%$%V%i%j$G!"(B
<A HREF="ftp://caliban.physics.utoronto.ca/pub/linux/">ftp://caliban.physics.utoronto.ca/pub/linux/</A> $B$K$"$j$^$9!#$3$l$O(B
$B$H$F$b>.5,LO$J%i%$%V%i%j$G(B Linux $B$N(B <CODE>clone()</CODE> $B%7%9%F%`%3!<%k$r(B
$B;H$$!"?7$?$K;R%W%m%;%9$rN)$A>e$2$?>e$GFH<+$N%9%1%8%e!<%k$GF0$-$^$9!#(B
$B$3$3$G$O(B Linux $B$N%W%m%;%9$9$Y$F$O(B 1 $B$D$N%"%I%l%96u4V$r6&M-$7$^$9!#(B
SMP Linux $B%^%7%s$G$O!"$3$l$i$N!V%9%l%C%I!W$rJ#?tJB9T$KF0:n$9$k$3$H$,(B
$B$G$-$^$9!#M}M3$O3F!9$N!V%9%l%C%I!W$,(B Linux $B$N%W%m%;%9$KB>$J$i$J$$$+$i(B
$B$G$9!#$3$l$H0z$-49$($K!"B>$N%*%Z%l!<%F%#%s%0!&%7%9%F%`$,Ds6!$7$F$$$k(B
$B$$$/$D$+$N%9%l%C%I!&%i%$%V%i%j$N$h$&$J!V7ZNL$J!W%9%1%8%e!<%k@)8f$O(B
$B$G$-$^$;$s!#$3$N%i%$%V%i%j$O!"(BC $B$G%i%C%Q!<$7$?%"%;%s%V%j!&%3!<%I$,>/$7(B
$B4^$^$l$F$$$F!"%a%b%j>e$K$=$l$>$l$N%9%l%C%I$N%9%?%C%/NN0h$r3NJ]$7!"(B
$B%"%H%_%C%/$J%"%/%;%95!G=$r%m%C%/$NG[Ns(B($B%_%e!<%F%C%/!"(Bmutex)$B$G<B8=$7$^$9!#(B
$B%I%-%e%a%s%H$O!"(B<CODE>README</CODE> $B$HC;$$%5%s%W%k!&%W%m%0%i%`$,$"$j$^$9!#(B
<P>$B:G6a$K$J$C$F!"(B<CODE>clone()</CODE> $B$r;H$C$?(B POSIX $B%9%l%C%I$,3+H/$5$l$F$$(B
$B$^$9!#$3$N%i%$%V%i%j$O(B 
<A HREF="http://pauillac.inria.fr/~xleroy/linuxthreads/">LinuxThreads</A> 
$B$G!"(BSMP Linux $B$G;HMQ$9$k$3$H$rA0Ds$K$7$F$9$Y$F$r6&M-$9$k$3$H$r<gL\E*$K(B
$B$7$?%i%$%V%i%j$G$9!#(BPOSIX $B%9%l%C%I$O%I%-%e%a%s%H$,@0Hw$5$l$F$*$j!"(B
<A HREF="http://pauillac.inria.fr/~xleroy/linuxthreads/README">LinuxThreads README</A> $B$d(B 
<A HREF="http://pauillac.inria.fr/~xleroy/linuxthreads/faq.html">LinuxThreads FAQ</A> $B$O$H$F$bNI$$;qNA$G$9!#8=>u$G$N<g$JLdBj$O!"(BPOSIX 
$B%9%l%C%I$OFbMF$,Hs>o$KG;$$$N$?$a$K!"$-$A$s$H$=$NFbMF$rM}2r$9$kI,MW$,$"$k(B
$B$3$H!"(BLinuxThreads $B$O3+H/ESCf$G$"$k$3$H$G$9!#$^$?!"(BPOSIX $B%9%l%C%I5,3J$O!"(B
$BI8=`2=:n6HCf$H$$$&LdBj$b$"$j!"8E$/$J$C$?5,3J$N=i4|%P!<%8%g%s$G:n@.$7$J$$(B
$B$h$&$K>/!9Cm0U$,I,MW$G$9!#(B
<P>$B!ZLuCp!'(BPOSIX $B%9%l%C%I$O(B IEEE 1003.1 $B$H$7$FI8=`2=$5$l$F$$$^$9!#(B
$B3F<o%9%l%C%I%i%$%V%i%j$K$D$$$F$O(B 
<A HREF="http://www.gnu.org/software/pth/related.html">Multithreading Libraries</A>$B!"%^%k%A%9%l%C%I$N%W%m%0%i%_%s%0$K$D$$$F$O(B
<A HREF="http://docs.sun.com/ab2/coll.141.7/MTP/@Ab2TocView?Ab2Lang=ja&amp;Ab2Enc=shift_jis">$B%^%k%A%9%l%C%I$N%W%m%0%i%_%s%0(B</A>$B$,Lr$KN)$A$^$9![(B
<P>
<H3>$B0lIt$r6&M-$9$k(B</H3>

<P>
<P>$B<B:]$N$H$3$m0lIt$r6&M-$9$k$H$$$&$3$H$O!"!V6&M-$9$kI,MW$,$"$k$b$N$@$1$r(B
$B6&M-$9$k!W$H$$$&$3$H$G$9!#$3$N%"%W%m!<%A$O!"0lHLE*$K$O(B MIMD(SPMD $B$G$O$J$$(B)
$B$K9gCW$7$F$$$F!"$=$l$>$l$N%W%m%;%C%5$N%a%b%j!&%^%C%W>e$GF1$80LCV$K$"$k6&M-(B
$B$9$k%*%V%8%'%/%H$r07$&E@$KCm0U$,I,MW$H$J$j$^$9!#$b$C$HBg@Z$J$N$O!"0lIt$r6&M-(B
$B$9$k$3$H$G%Q%U%)!<%^%s%9$NM=B,$H2~A1$d%3!<%I$N%G%P%C%/Ey$,4JC1$K$J$k$3$H$G$9!#(B
$B$?$@LdBj$K$J$k$N$O!"(B
<UL>
<LI>$B2?$,K\Ev$K6&M-$9$Y$-$J$N$+$rA0$b$C$FCN$k$3$H$,Fq$7$$(B
</LI>
<LI>$B<B:]!"6&M-%a%b%j>e$K3d$jIU$1$i$l$?%*%V%8%'%/%H$O07$$$E$i$/!"FC$K(B
$B%9%?%C%/>e$K$"$k%*%V%8%'%/%H$O$J$*$5$i$G$"$k!#Nc$($P!"6&M-$5$l$k(B
$B%*%V%8%'%/%H$O!"$=$l$>$lFHN)$7$?%a%b%j%;%0%a%s%H>e$K$-$A$s$HG[CV$9$k(B
$BI,MW$,$"$k$+$b$7$l$J$$$7!"$=$l$>$l$N%a%b%j%;%0%a%s%H$KG[CV$9$k:n6H$d(B
$B$=$l$>$l$N;2>H>pJs$NCf$K$5$i$KM>J,$K4V@\E*$J%]%$%s%?$r3JG<$9$kI,MW$,(B
$B$"$k$+$b$7$l$J$$(B</LI>
</UL>
<P>$B8=>u$G$O!"(BLinux $B$N%W%m%;%9%0%k!<%W$rFHN)$7$?%a%b%j6u4V$KCV$/$N$KHs>o$K(B
$B;w$+$h$C$?<jK!$,(B 2 $B$D$"$j$^$9!#6&M-$9$k$b$N$9$Y$F$O!"$=$N%a%b%j6u4V>e$G(B
$B$O$[$s$N$o$:$+$J%;%0%a%s%H$r;HMQ$9$k$@$1$G$9!#(BLinux $B%7%9%F%`$r@_Dj$9$k(B
$B;~$K!V(BSystem V IPC$B!W$r$&$C$+$j30$7$F$7$^$o$J$1$l$P!"(B Linux $B$O!V(BSystem V 
Shared Memory($B6&M-%a%b%j(B)$B!W$H$$$&$H$F$b0\?"@-$,9b$$$7$/$_$rMxMQ$G$-$k(B
$B$h$&$K$J$j$^$9!#B>$NA*Br$H$7$F%a%b%j$N%^%C%T%s%05!G=$bMxMQ$G$-!"$3$l$O(B
$B$$$m$$$m$J(B UNIX $B%7%9%F%`4V$G$=$l$>$l<BAu$5$l$F$$$^$9!#$=$l$,(B <CODE>mmap()</CODE> 
$B%7%9%F%`%3!<%k$G$9!#%^%K%e%"%k$=$NB>$G$3$l$i$N%7%9%F%`%3!<%k$r3X=,$9$k(B
$B$3$H$r$*4+$a$7$^$9!#4JC1$J35N,$O%;%/%7%g%s$N(B 2.5 $B$H(B 2.6 $B$G?($l$^$9$N$G!"(B
$BJY6/$9$k$-$C$+$1$H$7$FMxMQ$7$F$/$@$5$$!#(B
<P>
<H3>$B%"%H%_%C%/$J=hM}$H=hM}$N=g=x(B</H3>

<P>
<P>$B>e5-$I$A$i$N%b%G%k$r;H$&$K$7$F$b!"7k2L$O$=$l$[$I0c$$$^$;$s!#MW$OJBNs(B
$B%W%m%0%i%`$NCf$+$i!"$9$Y$F$N%W%m%;%C%5$,%"%/%;%9$G$-$kFI$_=q$-2DG=$J(B
$B%a%b%j$N0lIt$X$N%]%$%s%?$rF@$k$o$1$G$9!#$3$l$,0UL#$9$k$H$3$m$O!"6&M-(B
$B%a%b%j>e$N%*%V%8%'%/%H$r%"%/%;%9$9$kJBNs%W%m%0%i%`$,!"$=$N%*%V%8%'%/%H(B
$B$,%m!<%+%k$J%a%b%j$K$"$k$+$N$4$H$/07$($k!"$H$$$&$3$H$J$N$G$7$g$&$+!)(B 
$B$=$&$H$b8@$($k$N$G$9$,!"$A$g$C$H0c$$$^$9!D(B
<P><B>$B%"%H%_%C%/$J=hM}(B</B>$B$H$$$&$N$O!"$"$kBP>]$KBP$9$kA`:n$rItJ,$KJ,$1(B
$B$?$j!"3d$j9~$_$,F~$C$?$j$9$k$3$H$J$/!"O"B3$7$F=hM}$r$9$k9M$(J}$G$9!#(B
$B;DG0$J$,$i6&M-%a%b%j$N%"%/%;%9$G$O!"6&M-%a%b%j>e$K$"$k%G!<%?$KBP$9$k(B
$B$9$Y$F$NA`:n$,%"%H%_%C%/$K9T$o$l$k$o$1$G$O$"$j$^$;$s!#2?$+<j$rBG$?$J$$(B
$B8B$j!"C1=c$J%m!<%I$d%9%H%"A`:n$N$h$&$J%P%9>e$G$N=hM}$,(B 1 $B2s$G:Q$`A`:n(B
($B$D$^$j!"(B8$B!"(B16$B!"(B32 $B%S%C%H$K%"%i%$%s$5$l$?A`:n!#%"%i%$%s$5$l$F$$$J$+$C$?$j!"(B
64 $B%S%C%H$NA`:n$O0[$J$k(B)$B$@$1$,!"%"%H%_%C%/$J=hM}$K$J$j$^$9!#(B
$B$5$i$KET9g$,0-$$$3$H$K!"(BGCC $B$N$h$&$J!V8-$$!W%3%s%Q%$%i$G$O:GE,2=$,F/$$(B
$B$F$7$^$$!"$"$k%W%m%;%C%5$N=hM}$,40N;$7$?$3$H$rB>$N%W%m%;%C%5$,8!CN$9$k(B
$B$N$KI,MW$H$J$k%a%b%j>e$NA`:n$r<h$j=|$$$F$7$^$$$,$A$G$9!#(B
$B9,$$$J$3$H$K$O!"$3$l$i$NLdBj(B 2 $B$D$H$b2~A1$9$k$3$H$,$G$-$^$9!#5$$K$J$k(B
$B%"%/%;%9$N8zN($H%-%c%C%7%e!&%i%$%s$NBg$-$5$N4X78$r$=$N$^$^$K$7$FCV$/$N$G$9!#(B
<P>$B$7$+$7$3$l$i$NLdBjE@$rO@$8$kA0$K!"$=$l$>$l$N%W%m%;%C%5$,%a%b%j$r;2>H(B
$B$9$k;~$K$O!"A0Ds$H$7$F%3!<%G%#%s%0$7$?=gHV$G;2>H$9$k$H$$$&$3$H$r$O$C$-$j(B
$B$7$F$*$/$3$H$OL5BL$G$O$"$j$^$;$s!#(BPentium $B$,$=$&$G$9$,!">-Mh$N(B Intel $B$N(B
$B%W%m%;%C%5$,$=$&$G$"$k$H$O8B$i$J$$!"$H$$$&$3$H$bK:$l$J$$$G$/$@$5$$!#(B
$B$=$N$h$&$J$o$1$G!"5$$K;_$a$F$*$$$FM_$7$$$3$H$,$"$j$^$9!#$=$l$O>-Mh$N(B
$B%W%m%;%C%5$,!"J]N1$7$F$$$k%a%b%j$X$N%"%/%;%9$r40N;$5$;$kL?Na$rDL$8$F(B
$B6&M-%a%b%j$K%"%/%;%9$9$kI,MW$,=P$F$/$k$+$b$7$l$J$$!"$H$$$&$3$H$G$9!#(B
$B$D$^$j!"%a%b%j$X$N%"%/%;%9$K=gHV$rIU$1$k5!G=$rDs6!$9$k$o$1$G$9!#(B<CODE>CPUID</CODE> $BL?Na$O!"$=$NL?Na$K$h$C$F@8$8$k0-1F6A$KBP$7$F$NM=KI=hCV$G$"$k$3$H$O(B
$BL@$i$+$G$9!#(B
<P>
<H3>$BJQ?t$NJ]B8$N$7$+$?(B</H3>

<P>
<P>$B%l%8%9%?$K$"$k6&M-%a%b%j$N%P%C%U%!$5$l$F$$$k%*%V%8%'%/%H$NCM$r(B GCC $B$,(B
$B:GE,2=$7$J$$$h$&$K$9$k$K$O!"6&M-%a%b%j>e$N$9$Y$F$N<BBN$r(B <CODE>volatile</CODE> $B$H$$$&B0@-$r$D$1$F@k8@$9$kI,MW$,$"$j$^$9!#$3$&@k8@$9$k$H!"6&M-(B
$B$9$k%*%V%8%'%/%H$KBP$9$k(B 1 $B%o!<%I$@$1$N%"%/%;%9$r$H$b$J$&FI$_=q$-$O!"(B
$B%"%H%_%C%/$K9T$o$l$^$9!#Nc$($P!"(B<EM>p</EM> $B$,@0?t$X$N%]%$%s%?$G%]%$%s%?(B
$B$H@0?tN>J}$,6&M-%a%b%j$K$"$k$H$9$k$H!"(BANSI C $B$G$N@k8@$O<!$N$h$&$K$J$j$^$9!#(B
<P>
<HR>
<PRE>
volatile int * volatile p;
</PRE>
<HR>
<P>$B$3$N%3!<%I$G$O!":G=i$N(B <CODE>volatile</CODE> $B$O(B <CODE>int</CODE> $B$r;2>H$7!"$=$N(B 
<CODE>int</CODE> $B$O(B <CODE>p</CODE> $B$r;X$7$F$$$^$9!#<!$N(B <CODE>volatile</CODE> $B$O!"(B
$B%]%$%s%?$=$N$b$N$r;2>H$7$F$$$^$9!#$d$d$C$3$7$$$N$G$9$,!"$3$N$A$g$C$H(B
$B$7$?;XDj$G!"(BGCC $B$,$"$A$3$A$G6/NO$K:GE,2=$9$k$3$H$,2DG=$K$J$j$^$9!#>/$J$/(B
$B$H$bM}6~>e$G$O!"(BGCC $B$KBP$7$F(B <CODE>-traditional</CODE> $B%*%W%7%g%s$r$D$1$k(B
$B$3$H$G!":GE,2=$r$$$/$V$s5>@7$K$7$F@5$7$$%3!<%I$r4V0c$$$J$/@8@.$G$-$k(B
$B$H;W$$$^$9!#$H$$$&$N$O!"(BANSI $B$,Dj$a$i$l$kA0$N(B K&amp;R $B$N(B C $B$O!"$=$b$=$b(B 
<CODE>register</CODE> $B$H0U?^E*$K;XDj$r$7$J$$8B$j!"$9$Y$F$NJQ?t$r(B volatile 
$B07$$$K$7$F$$$^$7$?!#(BGCC $B$G%3%s%Q%$%k$9$k>l9g$K(B <CODE>cc -O6 <EM>...</EM></CODE> $B$H$$$&MM$K$7$F$$$k$J$i!"K\Ev$KI,MW$JItJ,$K$O$O$C$-$j$H(B volatile 
$B$H;XDj$7$?$/$J$k$K0c$$$"$j$^$;$s!#(B
<P>$B%W%m%;%C%5$N$9$Y$F$N%l%8%9%?$,99?7$5$l$?$3$H$rCN$i$;$kLrL\$G$"$k%"%;%s%V%j(B
$B8@8l$N%m%C%/$r;H$&$H!"(BGCC $B$,E,@Z$K$9$Y$F$NJQ?t$r%U%i%C%7%e$7$F!"(B
<CODE>volatile</CODE> $B$H@k8@$7$?$3$H$K4XO"$7$?%3!<%I$,!VHs8zN(!W$K%3%s%Q%$%k(B
$B$5$l$k$3$H$rKI$0!"$H$$$&1=$,$"$j$^$9!#$3$NN"5;$O!"(BGCC $B$N%P!<%8%g%s(B 2.7.0 
$B$r;H$C$F(B static $B$G3NJ]$7$?30ItJQ?t$KBP$7$F8z2L$rH/4x$7$^$9!D$,$3$l$O(B ANSI 
C $BI8=`$K1h$C$?5!G=$G$O(B<EM>$B$"$j$^$;$s(B</EM>$B$7!"$J$*$^$:$$$3$H$KFI$_9~$_$@$1(B
$B$r9T$&B>$N%W%m%;%C%5$O!"%l%8%9%?$K$:$C$HCM$r%P%C%U%!$7$F$7$^$$$^$9!#$D$^$j!"(B
$B6&M-%a%b%j>e$NCM$,JQ99$5$l$F$$$k$3$H$r(B<EM>$BA4$/(B</EM>$BCN$j$h$&$,$"$j$^$;$s!#(B
$B$^$H$a$k$H!"K>$_$NF0:n$r9T$&$K$O(B <CODE>volatile</CODE> $B$r;H$C$FJQ?t$K%"%/%;%9(B
$B$9$k$7$+@5$7$/F0:n$9$k$3$H$,(B<EM>$BJ]>Z$5$l$J$$(B</EM>$B!"$H$$$&$3$H$G$9!#(B
<P>$BDL>o$NJQ?t$KBP$7$F(B <CODE>volatile</CODE> $BB0@-$r;XDj$7$F%?%$%W%-%c%9%H$r$9$k(B
$B$3$H$G!"(Bvolatile $B$J%"%/%;%9$,9T$($k$H$$$&$3$H$rM}2r$7$F$*$$$F$/$@$5$$!#(B
$BNc$($P!"DL>o$N(B <CODE>int i;</CODE> $B$O(B <CODE>*((volatile int *) &amp;i)</CODE> 
$B$H$9$k$3$H$G!"(Bvolatile $B$K;2>H$G$-$k$h$&$K$J$j$^$9!#$D$^$j!"=EMW$JItJ,$K(B
$BBP$7$F$@$1!V%*!<%P!<%X%C%I!W$r$H$b$J$&(B volatile $B$JA`:n$r0U?^$7$F8F$S(B
$B=P$9$3$H$,$G$-$^$9!#(B
<P>
<H3>$B%m%C%/(B</H3>

<P>
<P><CODE>++i;</CODE> $B$,!"6&M-%a%b%j$K$"$kJQ?t(B <CODE>i</CODE> $B$K>o$K(B 1 $B$r2C$($k(B
$B$H;W$C$F$$$k$J$i!"!V$J$s$@!"$3$l$O!W$H$$$&;vBV$K$J$j$^$9!#C10l$JL?Na(B
$B$r<B9T$9$k$h$&$K%3!<%G%#%s%0$5$l$F$$$F$b!"%m!<%I$d%9%H%"$O7k2LE*$KFHN)(B
$B$7$F%a%b%j$KBP$9$kL?Na$rH/9T$7!"B>$N%W%m%;%C%5$O(B <CODE>i</CODE> $B$KBP$9$k(B
$B$3$N(B 2 $B$D$NL?Na$N4V$K%"%/%;%9$G$-$F$7$^$$$^$9!#Nc$($P!"(B2 $B$D$N%W%m%;%9$,(B
$BN><T$+$i(B <CODE>++i;</CODE> $B$r<B9T$9$k$H!"(B<CODE>i</CODE> $B$O(B 2 $BA}$($k$N$G$O$J$/!"(B
1 $BA}$($k$3$H$K$J$k$+$b$7$l$^$;$s!#(BIntel $B$K$h$k(B Pentium $B$N!V(BArchitecture 
and Programming Manual$B!W$K$h$k$H!"(B<CODE>LOCK</CODE> $B$H$$$&C18l$,F,$K$D$$$F(B
$B$$$k$H!"$=$N8e$K$/$kL?Na$,2?$G$"$C$F$b!"%a%b%j>e$N%G!<%?$X$N%"%/%;%9$K(B
$B4XO"$9$kA`:n$O%"%H%_%C%/$G$"$k$3$H$,J]>Z$5$l$F$$$^$9!#(B
<P>
<HR>
<PRE>
BTS, BTR, BTC                     mem, reg/imm
XCHG                              reg, mem
XCHG                              mem, reg
ADD, OR, ADC, SBB, AND, SUB, XOR  mem, reg/imm
NOT, NEG, INC, DEC                mem
CMPXCHG, XADD
</PRE>
<HR>
<P>$B$7$+$7$3$l$i$NL?Na$rA4LLE*$K:NMQ$9$k$3$H$O!"NI$$;W$$IU$-$H$O$$$($J$$(B
$B$G$7$g$&!#Nc$($P!"(B<CODE>XADD</CODE> $B$O(B 386 $B%W%m%;%C%5$G$O;HMQ$G$-$^$;$s(B
$B$N$G!"0\?"$NLL$GLdBj$,@8$8$F$7$^$&$G$7$g$&!#(B
<P><CODE>XCHG</CODE> $BL?Na$O!"(B<CODE>LOCK</CODE> $B$H$$$&C18l$,F,$K$D$$$F$$$J$/$F$b(B
<EM>$B>o$K(B</EM>$B%m%C%/$r$+$1$^$9$7!"$3$NJ}K!$OL@$i$+$K%"%H%_%C%/$JA`:n$H(B
$B$7$F!"$h$j9b5i$J%"%H%_%C%/$N$7$/$_$G$"$k%;%^%U%)$d%-%e!<$N6&M-$h$j$b(B
$BM%$l$F$$$^$9!#$b$A$m$s(B C $B$G%3!<%G%#%s%0$7$?$b$N$r(B GCC $B$K$+$1$F$b!"$3$N(B
$BL?Na$O@8@.$G$-$^$;$s!D$=$N$+$o$j$K!">/$7$P$+$j%$%s%i%$%s$G%"%;%s%V%j!&(B
$B%3!<%I$N5-=R$,I,MW$K$J$j$^$9!#(B1 $B%o!<%I$N(B volatile $B$J%*%V%8%'%/%H$G$"$k(B 
<EM>obj</EM> $B$H$d$O$j(B 1 $B%o!<%I$N%l%8%9%?CM$G$"$k(B <EM>reg</EM> $B$rDj5A(B
$B$9$k$H!"(BGCC $B$N%$%s%i%$%s$G$N%"%;%s%V%j!&%3!<%I$O2<5-$N$h$&$K$J$j$^$9!#(B
<P>
<HR>
<PRE>
__asm__ __volatile__ ("xchgl %1,%0"
                      :"=r" (reg), "=m" (obj)
                      :"r" (reg), "m" (obj));
</PRE>
<HR>
<P>GCC $B$N%$%s%i%$%s$N%"%;%s%V%j!&%3!<%I$G!"%S%C%HA`:n$r;H$C$F%m%C%/$r(B
$B$+$1$kNc$O!"(B
<A HREF="ftp://caliban.physics.utoronto.ca/pub/linux/">bb_threads library</A> $B$K$"$j$^$9!#(B
<P>$B$7$+$7!"$*$\$($F$*$$$FM_$7$$$3$H$,$"$j$^$9!#$=$l$O%a%b%jA`:n$r%"%H%_%C%/(B
$B$K9T$&$H!"$=$l$J$j$K%3%9%H$,$+$+$k$H$$$&$3$H$G$9!#%m%C%/$r$+$1$kA`:n$O(B
$B$+$J$jBg$-$J%*!<%P!<%X%C%I$,$+$+$j!"DL>o$N;2>H$,%m!<%+%k$J%-%c%C%7%e$r(B
$BMxMQ$9$k$N$KHf$Y!"B>$N%W%m%;%C%5$+$i$N%a%b%j;2>H$OCY1d$,@8$8$F$7$^$&$3$H(B
$B$K$J$k$G$7$g$&!#:GE,$J%Q%U%)!<%^%s%9$rF@$k$K$O!"$G$-$k$@$1%m%C%/A`:n$r(B
$B;HMQ$7$J$$$3$H$G$9!#$^$?!"$3$l$i(B IA32 $B$G$N%"%H%_%C%/$JL?Na$O!"EvA3$G$9$,(B
$BB>$N%7%9%F%`$K$O0\?"$G$-$^$;$s!#(B
<P>$B$3$NB>$K$b2r7hJ}K!$O$$$m$$$m$"$j$^$9!#DL>o$NL?Na$KBP$7$F!"F14|$r$$$m$$$m(B
$B$H$H$k$?$a$N<BAu$,$$$/$D$bMQ0U$5$l$F$$$^$9!#$=$NCf$K$O(B <B>$BAj8_GSB>(B
(mutual exclusion$B!#N,>N(B mutex))</B>$B$,$"$j!">/$J$/$H$b(B 1 $B$D$N%W%m%;%C%5(B
$B$,$$$D$G$b6&M-$7$F$$$k%*%V%8%'%/%H$r99?7$G$-$k$3$H$rJ]>Z$7$F$$$^$9!#(B
$B$?$$$F$$$N(B OS $B$N%F%-%9%H$G$O!"$3$l$i$N%F%/%K%C%/$NFb$N$$$/$D$+$rO@$8$F(B
$B$$$^$9!#(BAbraham Silberschatz $B;a(B $B$H(B Peter B. Galvin $B;a$N6&Cx$G$"$k!"(B
<EM>Operating System Concepts</EM>$B!"(BISBN 0-201-50480-4 $B$NBh(B 4 $BHG$GHs>o$K(B
$BM%$l$?5DO@$,$J$5$l$F$$$^$9!#(B
<P>
<H3>$B%-%c%C%7%e!&%i%$%s$NBg$-$5(B</H3>

<P>$B%"%H%_%C%/$JA`:n$K4X$7$FI,?\$G!"(BSMP $B$N%Q%U%)!<%^%s%9$K7`E*$J1F6A$r(B
$B$"$?$($k$3$H$,$b$&(B 1 $B$D$"$j$^$9!#$=$l$O%-%c%C%7%e!&%i%$%s$NBg$-$5$G$9!#(B
MPS $B5,3J$G$O%-%c%C%7%e$,;H$o$l$F$$$F$b$$$J$/$F$b!"F14|$9$k$?$a$N;2>H$,(B
$BI,MW$H$5$l$F$$$^$9!#$7$+$7(B 1 $B$D$N%W%m%;%C%5$,%a%b%j$N$"$k%i%$%s$K=q$-(B
$B9~$_$r9T$&$H!"0JA0=q$-9~$^$l$?%i%$%s>e$K$"$k%-%c%C%7%e$7$F$"$k$b$N$O!"(B
$B$9$Y$F$rL58z$K$9$k$+99?7$9$kI,MW$,$"$j$^$9!#(B2 $B$D0J>e$N%W%m%;%C%5$I$l$b$,(B
$B%G!<%?$rF1$8%i%$%s$N0c$&ItJ,$K=q$/$H$9$k$H!"%-%c%C%7%e$d%P%9$KB?NL$N$d$j(B
$B<h$j$,H/@8$7$F$7$^$&$+$b$7$l$^$;$s!#$3$l$O;v<B>e%-%c%C%7%e!&%i%$%s$+$i(B
$B<uEO$7$,5/$3$k$3$H$r0UL#$7$F$$$^$9!#$3$NLdBj$O!"(B<B>$B566&M-(B(false sharing)</B> $B$H8@$o$l$F$$$^$9!#2r7h$9$k$N$O$$$?$C$FC1=c$G!"(B<EM>$BJBNs$K%"%/%;%9$9$k(B
$B>l9g$O!"$=$l$>$l$N%W%m%;%9$KBP$7$F!"%G!<%?$r$G$-$k$@$10[$J$k%-%c%C%7%e!&(B
$B%i%$%s$+$i<h$C$F$/$k$h$&$K%G!<%?$r9=@.$9$k$3$H$G$9(B</EM>$B!#(B
<P>$B566&M-$O!"(BCPU $B$,6&DL$7$F;HMQ$9$k(B L2 $B%-%c%C%7%e$r;}$C$F$$$k%7%9%F%`$K$O(B
$B4X78$J$$LdBj$H;W$o$l$k$+$b$7$l$^$;$s$,!"FHN)$7$FB8:_$9$k(B L1 $B%-%c%C%7%e(B
$B$rK:$l$F$O$$$1$^$;$s!#%-%c%C%7%e$N9=@.$dFHN)$7$?%l%Y%k$N?t$ON><T$H$b(B
$BJQF0$9$k$b$N$G!"(BPentium $B$N(B L1 $B$N%-%c%C%7%e!&%i%$%s$NBg$-$5$O(B 32 $B%P%$%H$G(B
$B30It%-%c%C%7%e!&%i%$%s$NE57?E*$JBg$-$5$O(B 256 $B%P%$%HDxEY$G$9!#2>$K(B 2 $B$D$N(B
$BMWAG$N%"%I%l%9(B($BJ*M}!"2>A[$I$A$i$G$b(B)$B$,(B <EM>a</EM> $B$H(B <EM>b</EM> $B$H$7$F!"(B
$B%W%m%;%C%5Kh$N:GBg$N%-%c%C%7%e!&%i%$%s$NBg$-$5$,(B <EM>c</EM> $B$H$7$F$=$l$,(B 
2 $B$NN_>h$NBg$-$5$H$7$^$9!#87L)$K8@$&$H!"$b$7(B <CODE>((int) <EM>a</EM>) &amp; ~(<EM>c</EM> - 1)</CODE> $B$,(B <CODE>((int) <EM>b</EM>) &amp; ~(<EM>c</EM> - 1)</CODE> $B$HEy$7$1$l$P!"$I$A$i$bF1$8%-%c%C%7%e!&%i%$%s$r;2>H$9$k$3$H$K$J$j$^(B
$B$9!#6&M-$9$k%*%V%8%'%/%H$,JBNs$K;2>H$5$l$k>l9g!">/$J$/$H$b(B <EM>c</EM> 
$B%P%$%HN%$l$?0LCV$K$"$k$J$i$P!"0[$J$k%-%c%C%7%e!&%i%$%s$KCV$+$l$k$Y$-$@!"(B
$B$H$$$&$N$,86B'$G$9!#(B
<P>
<H3>Linux $B$N%9%1%8%e!<%i$NLdBjE@(B</H3>

<P>
<P>$BJBNs=hM}$G6&M-%a%b%j$r;HMQ$9$k:]$K$O!"$"$i$f$kItJ,$G(B OS $B$N%*!<%P!<(B
$B%X%C%I$rHr$1$J$1$l$P$$$1$^$;$s$,!"(BOS $B$N%*!<%P!<%X%C%I$ODL?.$=$l<+BN(B
$B0J30$N$H$3$m$+$iH/@8$9$k2DG=@-$,$"$j$^$9!#4{$K$3$l$^$G$K=R$Y$F$-$^$7$?(B
$B$,!"%W%m%;%9$N?t$O%^%7%s$KIU$1$F$"$k%W%m%;%C%5?t0J2<$K$9$k$h$&$K(B
$B9=@.$9$Y$-$G$9!#$G$b$I$&$d$C$FF0$+$9%W%m%;%9?t$r@53N$K7h$a$i$l$k$N$G(B
$B$7$g$&$+!)(B
<P>$B:G9b$N%Q%U%)!<%^%s%9$rF@$k$K$O!"(B<EM>$BJBNs%W%m%0%i%`$GF0$+$9%W%m%;%9(B
$B?t$O!"$=$N%W%m%0%i%`$G5/F0$9$k%W%m%;%9$,F1;~$K0[$J$k%W%m%;%C%5$G(B
$BF0$+$;$k$H;W$o$l$k?t$HF1$8$K$9$Y$-$G$9(B</EM>$B!#Nc$($P!"(B4 $B$D$N%W%m%;%C%5(B
$B$r;}$D(B SMP $B%7%9%F%`$G$O!"DL>o(B 1 $B$D$N%W%m%;%C%5$O2?$+JL$NL\E*(B($BNc$($P(B 
WWW $B%5!<%P(B)$B$K;H$o$l$F$$$k$H$9$k$H!"(B3 $B$D$N%W%m%;%C%5$@$1$GJBNs%W%m%0(B
$B%i%`$rF0$+$9$3$H$K$J$k$O$:$G$9!#(B
$B$*$*$^$+$K$I$N$/$i$$$N%W%m%;%9$,%7%9%F%`$G%"%/%F%#%V$J$N$+$O!"(B
<CODE>uptime</CODE> $B%3%^%s%I$G8+$i$l$k!V(Bload average($BJ?6QIi2Y(B)$B!W$r8+$l$P(B
$B$o$+$j$^$9!#(B
<P>$B$3$l$H$O$^$?JL$NJ}K!$,$"$j!"JBNs%W%m%0%i%`$G;H$C$F$$$k%W%m%;%9$N<B9T(B
$BM%@h=g0L$r0z$->e$2$k$3$H$,2DG=$G$9!#Nc$($P!"(B<CODE>renice</CODE> $B%3%^%s%I$d(B 
<CODE>nice()</CODE> $B%7%9%F%`%3!<%k$G$9!#M%@hEY$r>e$2$k$K$O!"FC8"$,I,MW$K(B
$B$J$j$^$9!#$3$N%"%$%G%#%"$OC1=c$G!"B>$N%W%m%;%9$r%W%m%;%C%5$+$iDI$$=P(B
$B$7$F!"<+J,$N%W%m%;%9$r$9$Y$F$N%W%m%;%C%5$GF1;~$KF0$+$7$F$7$^$*$&$H(B
$B$$$&9M$($G$9!#$3$N9M$($r%W%m%H%?%$%WHG$N(B SMP Linux $B$r;HMQ$7$F$b$&(B
$B>/$7$-$A$s$H<B8=$7$?$b$N$,(B 
<A HREF="http://www.rtlinux.org/">http://www.rtlinux.org/</A> 
$B$G!"%j%"%k%?%$%`$J%9%1%8%e!<%j%s%0$rDs6!$7$F$$$^$9!#(B
<P>SMP $B%7%9%F%`$rJBNs=hM}%^%7%s$r$?$@0l?M$G07$&%f!<%6$G$J$$$J$i!"(B2 $B$D0J>e(B
$B$NJBNs%W%m%0%i%`$rF1;~$K<B9T$7$h$&$H$9$k$H!"%W%m%0%i%`4V$G>WFM$,5/$3$k(B
$B62$l$,$"$j$^$9!#IaDL$3$l$r2r7h$9$kJ}K!$O!"(B<B>$B%.%c%s%0%9%1%8%e!<%j%s%0(B
(gang scheduling)</B>$B$r$H$j$^$9!#$9$J$o$A!"%9%1%8%e!<%j%s%0$NM%@hEY$r(B
$BA`:n$7$F!"$$$D$G$b$?$@(B 1 $B$D$NJBNs%W%m%0%i%`$K4X$9$k%W%m%;%9$@$1$,F0$$$F(B
$B$$$k$h$&$K$7$^$9!#$7$+$7;W$$=P$7$F$_$F$/$@$5$$!#JB9T=hM}$r9T$($P9T$&$[$I(B
$B7k2L$rF@$i$l$K$/$/$J$j!"%9%1%8%e!<%i$K%*!<%P!<%X%C%I$,2C$o$j$^$9!#$D$^$j(B
$BNc$($P!"(B4 $B$D$N%W%m%;%C%5$r;}$D%^%7%s$,!"6/@)%9%1%8%e!<%k$r;H$C$F(B 2 $B$D$N(B
$B%W%m%0%i%`$r$=$l$>$l(B 4 $B$D$N%W%m%;%9$GF0$+$9$h$j$b!"(B2 $B$D$N%W%m%0%i%`$r(B
$B$=$l$>$l(B 2 $B$D$N%W%m%;%9$GF0$+$9J}$,8zN(NI$$$N$O3N$+$G$9!#(B
<P>$B$5$i$K$b$&(B 1 $B$D$3$NLdBj$r$d$d$3$7$/$7$F$$$k;v$,$"$j$^$9!#$"$k%^%7%s$G(B
$B%W%m%0%i%`$r3+H/$7$F$$$F!"$=$N%^%7%s$O=*F|$H$F$bK;$7$/F0$$$F$$$k$,!"(B
$BLk4V$OJBNs=hM}$K4]!9;H$($k$H$7$^$9!#%W%m%;%9$9$Y$F$rN)$A>e$2$F@5$7$/F0$/(B
$B$h$&$K%3!<%I$r=q$$$F!"$=$l$r%F%9%H$7$J$1$l$P$$$1$^$;$s$,!"Ck4V$N%F%9%H$O(B
$BCY$$$3$H$r;W$$CN$i$5$l$k$H;W$$$^$9!#<B$N$H$3$m(B<EM>$B$H$F$b(B</EM>$BCY$/$J$j(B
$B$^$9!#$b$78=:_F0$$$F$$$J$$(B($BB>$N%W%m%;%C%5>e$N(B)$BB>$N%W%m%;%9$,JQ99$7$?6&M-(B
$B%a%b%j>e$NCM$r(B<B>$B%S%8!<%&%(%$%H(B</B>$B$7$F$$$k%W%m%;%9$,$"$k$J$i$P!#F1MM(B
$B$NLdBj$O!"%W%m%;%C%5$,(B 1 $B$D$7$+$J$$%7%9%F%`$G%3!<%I$r3+H/$7$?$j%F%9%H$7(B
$B$?$j$9$k;~$K$b5/$3$j$^$9!#(B
<P>$B2r7hJ}K!$O!"%3!<%I$K8F$S=P$7$rAH$_9~$`$3$H$G$9!#$I$s$J>l9g$G$b!"B>$N(B
$B%W%m%;%9$+$i$NF0$-$r%k!<%W$r;H$C$FBT$D$h$&$K$7$^$9!#$=$&$9$k$H(B Linux 
$B$O!"B>$N%W%m%;%9$,F0$/5!2q$rM?$($k$3$H$,$G$-$^$9!#;d$O(B C $B$N%^%/%m$r(B
$B;H$C$F(B <CODE>IDLE_ME</CODE> $B$N$h$&$K8F$S=P$7$F$$$^$9!#%F%9%H$GF0$+$9(B
$B;~$K$O!"(B<CODE>cc -DIDLE_ME=usleep(1); ...</CODE> $B$H%3%s%Q%$%k$7!"(B
$B!V@=IJ!W$H$7$FF0$+$9>l9g$K$O(B <CODE>cc -DIDLE_ME={} ...</CODE> $B$H(B
$B%3%s%Q%$%k$7$F$$$^$9!#(B<CODE>usleep(1)</CODE> $B$r8F$S=P$9$H!"(B1 $B%_%jIC4V%9%j!<%W(B
$B$9$k$h$&$K$J$j!"(BLinux $B$N%9%1%8%e!<%i$,$=$N%W%m%;%C%5>e$GJL$N%W%m%;%9$r(B
$BA*$Y$k$h$&$K$J$j$^$9!#%W%m%;%9$,;HMQ2DG=$J%W%m%;%C%5$N(B 2 $BG\0J>e$N?t$K(B
$B$J$k$H!"%3!<%I$NCf$G(B <CODE>usleep(1)</CODE> $B$r;H$&$H!";H$o$J$$>l9g$N(B 10 $BG\(B
$BB.$/$J$k$3$H$bDA$7$/$"$j$^$;$s!#(B
<P>
<H2><A NAME="ss2.3">2.3 bb_threads</A>
</H2>

<P>
<P>bb_threads ($B!V(BBare Bones$B!W(B($BI,MW:GDc8B$N(B) threads)$B%i%$%V%i%j$O!"(B
<A HREF="ftp://caliban.physics.utoronto.ca/pub/linux/">ftp://caliban.physics.utoronto.ca/pub/linux/</A> $B$K$"$kHs>o$K(B
$B4JAG$J%i%$%V%i%j$G$9!#(BLinux $B$N(B <CODE>clone()</CODE> $B%7%9%F%`%3!<%k$r;H$C$F(B
$B<BAu$5$l$F$$$^$9!#(B<CODE>gzip tar</CODE> $B%U%!%$%k$G$?$C$?(B 7 KB $B$G$9!*(B $B$3$N(B
$B%i%$%V%i%j$O!"(B2.4 $B$GO@$8$?(B LinuxThreads $B%i%$%V%i%j$,@$$K=P$?$3$H$G(B
$B2a5n$N$b$N$K$J$C$F$7$^$$$^$7$?$,!"(Bbb_threads $B$O$^$@$^$@Lr$KN)$A(B
$B$^$9!#>.$5$/!"%7%s%W%k$G!"$H$j$"$($::G=i$K(B Linux $B$N%9%l%C%I$r;HMQ$9$k(B
$B$K$O==J,$G$9!#$3$N%=!<%9!&%3!<%I$rFI$s$G$b!"(BLinuxThreads $B$N%=!<%9$rD/$a$?(B
$B;~$N$h$&$K0R0546$r46$8$k$3$H$O$J$$$N$O3N$+$G$9!#$^$H$a$F$_$k$H!"(B
bb_threads $B%i%$%V%i%j$O:G=i$K;n$7$F$_$k$N$K$ONI$$%i%$%V%i%j$G$9$,!"(B
$B@5D>$J$H$3$mBg$-$J%W%m%8%'%/%H$N%3!<%G%#%s%0$G;HMQ$9$k$N$K$OE,$7$F$$$^$;$s!#(B
<P>bb_threads $B%i%$%V%i%j$r;H$C$?4pK\E*$J%W%m%0%i%`$N9=C[J}K!$O!"(B
$B2<5-$NDL$j$G$9!#(B
<P>
<OL>
<LI>$B%W%m%0%i%`$O!"(B1 $B$D$N%W%m%;%9$H$7$F%9%?!<%H$5$;$k$3$H(B
</LI>
<LI>$B$=$l$>$l$N%9%l%C%I$GI,MW$K$J$k%9%?%C%/6u4V$N:GBgCM$r8+@Q$k$3$H!#(B
$BBg$-$/8+@Q$C$F$b32$O$J$$(B($B2>A[5-21$,$=$&$G$"$k$h$&$K(B ;-)$B!#(B
$B$7$+$7K:$l$J$$$GM_$7$$$3$H$O!"%9%?%C%/(B<EM>$B$9$Y$F(B</EM>$B$OC1FH$N2>A[%"%I%l%9(B
$B6u4V$KM3Mh$7$F$$$k$?$a!"Bg$-$$$3$H$O$$$$$3$H$@!"$H$$$&$o$1$K$O$$$+$J$$$3$H(B
$B$G$"$k!#(B64 K $B$,$*;n$7$NBg$-$5$G$"$k!#(B
<CODE>bb_threads_stacksize(<EM>b</EM>)</CODE> $B$H$9$k$H!"(B
<EM>b</EM> $B%P%$%H$K@_Dj$G$-$k(B
</LI>
<LI>$B<!$N%9%F%C%W$O!"I,MW$H$J$k$9$Y$F$N%m%C%/$r=i4|2=$9$k$3$H$G$"$k!#(B
$B%m%C%/$N$7$/$_$O$3$N%i%$%V%i%j$KAH$_9~$^$l$F$$$F!"(B0 $B$+$i(B 
<CODE>MAX_MUTEXES</CODE> $B$^$G$NHV9f$,@_Dj$G$-!"(B<EM>i</EM> $B$H$$$&(B
$B%m%C%/$r=i4|2=$9$k$K$O!"(B<CODE>bb_threads_mutexcreate
(<EM>i</EM>)</CODE> $B$H@_Dj$9$k(B
</LI>
<LI>$B?7$7$$%9%l%C%I$r5/$3$9$K$O!"%i%$%V%i%j$N%k!<%A%s$r8F$S=P$7$F2?$N(B
$B4X?t$r%9%l%C%I$H$7$F<B9T$7!"$=$N4X?t$KEO$5$l$k0z?t$O2?$+$r;XDj$9$k!#(B
$B?7$7$$%9%l%C%I$r3+;O$9$k$K$O!"(B<CODE>void</CODE> $B$rJV$jCM$H$9$k4X?t$G$"$k(B 
<EM>f</EM> $B$rC1FH$N(B <EM>arg</EM> $B$r0z?t$H$7$F;}$DI,MW$,$"$j!"(B
<CODE>bb_threads_newthread(<EM>f</EM>, &amp;arg)</CODE> 
$B$H$$$&46$8$G;XDj$9$k$3$H$K$J$k!#$3$3$G(B <EM>f</EM> $B$O(B <CODE>void <EM>f</EM>(void *arg, size_t dummy)</CODE> $B$H$$$&$h$&$K@k8@$7$F(B
$B$*$/$Y$-$G$"$k!#0z?t$,(B 1 $B$D0J>e$K$J$k>l9g$O!"0z?t$NCM$G=i4|2=$7$F$"$k(B
$B9=B$BN$X$N%]%$%s%?$r;XDj$7$F$9$k(B
</LI>
<LI>$BJBNs%3!<%I$r<B9T$9$k!#<B9T$KEv$C$F$O!"(B
<CODE>bb_threads_lock(<EM>n</EM>)</CODE> $B$H(B 
<CODE>bb_threads_unlock(<EM>n</EM>)</CODE> $B$r?5=E$K;HMQ$9$k(B
$B$3$H!#(B<EM>n</EM> $B$O@0?t$G!"$I$N%m%C%/$r;HMQ$9$k$+$r;XDj$9$k!#$3$N(B
$B%i%$%V%i%j$G$N%m%C%/$r$+$1$k$3$H$H%m%C%/$r2r=|$9$kA`:n$O!"%"%H%_%C%/(B
$B$K%P%9$r%m%C%/$9$kL?Na$r;H$C$F!"$"$j$U$l$?%9%T%s!&%m%C%/$G<B8=$7$F$$$k!#(B
$B$3$NJ}K!$G$OI,MW0J>e$K%a%b%j;2>H$NmUmT$,@8$8!"%W%m%;%9$r8xJ?$K<B9T$9$k(B
$B$3$H$,J]>Z$G$-$J$$(B

bb_threads $B$K$D$$$F$$$k%G%b!&%W%m%0%i%`$O@5$7$/%m%C%/$r07$($:!"(B
<CODE>printf()</CODE> $B$,(B <CODE>fnn</CODE> $B$d(B <CODE>main</CODE>$B$J$I$N4X?tFb$GF1;~(B
$B$K<B9T$5$l$F$7$^$&!#$=$N$h$&$J$o$1$G$3$N%G%b$O>o$KF0$/$H$O8B$i$J$$!#(B
$B%G%b$rHsFq$9$k$D$b$j$O$J$$$,!"%m%C%/$K$O(B<EM>$B:Y?4$NCm0U(B</EM>$B$,I,MW$G(B
$B$"$k$3$H$r6/D4$7$F$*$-$?$$!#$^$?!"(BLinuxThreads $B$r;H$($P$o$:$+$G$O$"$k$,(B
$B;H$$$d$9$/$J$k$3$H$bIU$12C$($?$$(B
</LI>
<LI>$B$"$k%9%l%C%I$,(B<CODE>$BJV$jCM(B</CODE>$B$rLa$9;~E@$G!"$=$N%W%m%;%9$,<B:]$K(B
$BGK4~$5$l$k!D$7$+$7!"%m!<%+%k$J%9%?%C%/!&%a%b%j$O<+F0E*$K2rJ|$5$l$J$$!#(B
$B@53N$K8@$&$H(B Linux $B$O%a%b%j$N2rJ|$r%5%]!<%H$7$F$*$i$:!"$=$N%a%b%j6u4V$O(B 
<CODE>malloc()</CODE> $B$N%a%b%j$N6u$-%j%9%H$K<+F0E*$KLa$5$l$J$$!#$D$^$j!"?F(B
$B%W%m%;%9$O(B <CODE>bb_threads_cleanup(wait(NULL))</CODE> $B$r(B
$B8F$S=P$7$F!";`$s$G$7$^$C$?;R%W%m%;%9$N%9%Z!<%9$r:FMxMQ$N$?$a$K:F@k8@$7(B
$B$J$1$l$P$$$1$J$$(B</LI>
</OL>
<P>
<P>$B2<5-$N(B C $B%W%m%0%i%`$O%;%/%7%g%s(B 1.3 $B$GO@$8$?%"%k%4%j%:%`$r85$K!"(B2 $B$D$N(B 
bb_threads $B$r;H$C$F1_<~N($N6a;wCM$r5a$a$F$$$^$9!#(B
<P>
<HR>
<PRE>
#include &lt;stdio.h>
#include &lt;stdlib.h>
#include &lt;unistd.h>
#include &lt;sys/types.h>
#include &lt;sys/wait.h>
#include "bb_threads.h"

volatile double pi = 0.0;
volatile int intervals;
volatile int pids[2];      /* Unix PIDs of threads */

void
do_pi(void *data, size_t len)
{
  register double width, localsum;
  register int i;
  register int iproc = (getpid() != pids[0]);

  /* set width */
  width = 1.0 / intervals;

  /* do the local computations */
  localsum = 0;
  for (i=iproc; i&lt;intervals; i+=2) {
    register double x = (i + 0.5) * width;
    localsum += 4.0 / (1.0 + x * x);
  }
  localsum *= width;

  /* get permission, update pi, and unlock */
  bb_threads_lock(0);
  pi += localsum;
  bb_threads_unlock(0);
}

int
main(int argc, char **argv)
{
  /* get the number of intervals */
  intervals = atoi(argv[1]);

  /* set stack size and create lock... */
  bb_threads_stacksize(65536);
  bb_threads_mutexcreate(0);

  /* make two threads... */
  pids[0] = bb_threads_newthread(do_pi, NULL);
  pids[1] = bb_threads_newthread(do_pi, NULL);

  /* cleanup after two threads (really a barrier sync) */
  bb_threads_cleanup(wait(NULL));
  bb_threads_cleanup(wait(NULL));

  /* print the result */
  printf("Estimation of pi is %f\n", pi);

  /* check-out */
  exit(0);
}
</PRE>
<HR>
<P>
<H2><A NAME="ss2.4">2.4 LinuxThreads</A>
</H2>

<P>
<P>LinuxThreads(
<A HREF="http://pauillac.inria.fr/~xleroy/linuxthreads/">http://pauillac.inria.fr/~xleroy/linuxthreads/</A>) $B$O!"(BPOSIX 1003.1c 
$B$N%9%l%C%II8=`5,3J$K4p$E$$$F!V$9$Y$F$r6&M-$9$k!W$3$H$r?=$7J,$J$/$7$C$+$j(B
$B$H<BAu$7$F$$$^$9!#B>$N(B POSIX $B=`5r$N%9%l%C%I$N0\?"$H0c$$!"(BLinuxThreads $B$O(B
$B%+!<%M%k$N%9%l%C%I5!G=(B(<CODE>clone()</CODE>)$B$r;H$C$F$*$j!"$3$l$O(B 
bb_threads $B$HF1MM$J<jK!$r$H$C$F$$$^$9!#(BPOSIX $B8_49$@$H%9%l%C%I$r(B
$B;H$C$?%"%W%j%1!<%7%g%s$rB>$N%7%9%F%`$X0\?"$9$k$3$H$,B>%9%l%C%I$HHf$Y$F(B
$B$+$J$jMF0W$K$J$j!"%A%e!<%H%j%"%kN`$b$$$m$$$mMxMQ$G$-$^$9!#$D$^$j!"(BLinux 
$B$GBg5,LO$K%9%l%C%I2=$5$l$?%W%m%0%i%`$r3+H/$9$k$J$i!"4V0c$$$J$/$3$N(B
$B%Q%C%1!<%8$,E,@Z$G$9!#(B
<P>LinuxThreads $B%i%$%V%i%j$r;H$C$?4pK\E*$J%W%m%0%i%`$N9=C[$N$7$+$?$O!"(B
$B2<5-$NDL$j$G$9!#(B
<P>
<OL>
<LI>$B%W%m%0%i%`$O!"(B1 $B$D$N%W%m%;%9$H$7$F%9%?!<%H$5$;$k$3$H(B
</LI>
<LI>$B<!$N%9%F%C%W$O!"I,MW$H$J$k$"$i$f$k%m%C%/$r=i4|2=$9$k$3$H$G$"$k!#(B
bb_threads $B$N%m%C%/$,HV9f$r;XDj$9$k$N$H$O0[$J$j!"(B
<CODE>pthread_mutex_t lock</CODE> $B$H$$$&JQ?t$r@k8@$9$k$N$,(B
POSIX $BN.$G$"$k!#(B<CODE>pthread_mutex_init(&amp;lock,val)</CODE> 
$B$r;H$C$F!"I,MW$J$=$l$>$l$N%9%l%C%I$r=i4|2=$9$k(B
</LI>
<LI>bb_threads $B$HF1MM$K!"?7$7$$%9%l%C%I$r5/$3$9$K$O%i%$%V%i%j$N(B
$B%k!<%A%s$r8F$S=P$7!"2?$N4X?t$r%9%l%C%I$H$7$F<B9T$7!"$=$N4X?t$KEO$5$l$k(B
$B0z?t$O2?$+$r;XDj$9$k!#$7$+$7!"(BPOSIX $B$G$O%f!<%6$,(B 
<CODE>pthread_t</CODE> $B$H$$$&JQ?t$r@k8@$7$F%9%l%C%I$r6hJL$9$k!#(B
$B%9%l%C%I$r5/$3$9$K$O!"(B<CODE>pthread_t thread</CODE> $B$G(B <CODE>f()</CODE> 
$B$rF0$+$9$K$O!"(B<CODE>pthread_create(&amp;thread,NULL,f,&amp;arg)</CODE>
$B$r8F$S=P$9(B
</LI>
<LI>$BJBNs%3!<%I$rF0$+$9$K$O!"(B
<CODE>pthread_mutex_lock(&amp;lock)</CODE> $B$H(B
<CODE>pthread_mutex_unlock(&amp;lock)</CODE> $BE,@Z$J$H$3$m$G(B
$B?5=E$K;HMQ$9$k$3$H(B
</LI>
<LI><CODE>pthread_join(thread,&amp;retval)</CODE> $B$r;H$C$F!"%9%l%C%I(B
$B$N8e;OKv$r$9$k$3$H(B</LI>
<LI>C $B$N%3!<%I$r%3%s%Q%$%k$9$k;~$K$O!"(B<CODE>-D_REENTRANT</CODE> 
$B$r;H$&$3$H(B</LI>
</OL>
<P>$B<!$K$"$2$k$N$O!"1_<~N($N7W;;$r(B LinuxThreads $B$r;H$C$FJBNs$K9T$&Nc$G$9!#(B
$B%;%/%7%g%s(B 1.3 $B$G;H$C$?%"%k%4%j%:%`$,;HMQ$5$l$F$$$F!"(Bbb_threads 
$B$HF1MM$K(B 2 $B$D$N%9%l%C%I$rJBNs$K<B9T$7$^$9!#(B
<P>
<HR>
<PRE>
#include &lt;stdio.h>
#include &lt;stdlib.h>
#include "pthread.h"

volatile double pi = 0.0;  /* Approximation to pi (shared) */
pthread_mutex_t pi_lock;   /* Lock for above */
volatile double intervals; /* How many intervals? */

void *
process(void *arg)
{
register double width, localsum;
register int i;
register int iproc = (*((char *) arg) - '0');

/* Set width */
width = 1.0 / intervals;

/* Do the local computations */
localsum = 0;
for (i=iproc; i&lt;intervals; i+=2) {
register double x = (i + 0.5) * width;
localsum += 4.0 / (1.0 + x * x);
}
localsum *= width;

/* Lock pi for update, update it, and unlock */
pthread_mutex_lock(&amp;pi_lock);
pi += localsum;
pthread_mutex_unlock(&amp;pi_lock);

return(NULL);
}

int
main(int argc, char **argv)
{
pthread_t thread0, thread1;
void * retval;

/* Get the number of intervals */
intervals = atoi(argv[1]);

/* Initialize the lock on pi */
pthread_mutex_init(&amp;pi_lock, NULL);

/* Make the two threads */
if (pthread_create(&amp;thread0, NULL, process, "0") ||
  pthread_create(&amp;thread1, NULL, process, "1")) {
fprintf(stderr, "%s: cannot make thread\n", argv[0]);
exit(1);
}

/* Join (collapse) the two threads */
if (pthread_join(thread0, &amp;retval) ||
  pthread_join(thread1, &amp;retval)) {
fprintf(stderr, "%s: thread join failed\n", argv[0]);
exit(1);
}

/* Print the result */
printf("Estimation of pi is %f\n", pi);

/* Check-out */
exit(0);
}
</PRE>
<HR>
<P>
<H2><A NAME="ss2.5">2.5 System V $B$N6&M-%a%b%j(B</A>
</H2>

<P>
<P>System V $B$N(B IPC($B%W%m%;%94VDL?.(B(Inter-Process Communication))$B$O!"(B
$B%7%9%F%`%3!<%k$r?tB?$/Ds6!$7$F$^$9!#%a%C%;!<%8!&%-%e!<$d%;%^%U%)!"(B
$B6&M-%a%b%j$H$$$C$?$7$/$_$G$9!#$b$A$m$sK\Mh$3$N$7$/$_$O!"J#?t$N(B
$B%W%m%;%9$r%W%m%;%C%5$,(B 1 $B$D$N%7%9%F%`$GF0$+$9$3$H$rL\E*$H$7$F$$$^$7$?!#(B
$B$7$+$7!"(BSMP Linux $B$GJ#?t$N%W%m%;%94V$G$NDL?.$K$b;H$($k$O$:$G$9!#$?$H$((B
$B$I$s$J%W%m%;%C%5$G$"$C$F$b!#(B
<P>$B$3$l$i$N%7%9%F%`%3!<%k$N;H$$J}$N@bL@$KF~$kA0$K!"(BSystem V $B$N(B IPC $B$K4^$^$l$F(B
$B$$$k%;%^%U%)$d%a%C%;!<%8DL?.$N$h$&$J%7%9%F%`%3!<%k$r;HMQ$9$Y$-$G$O$J$$$3$H(B
$B$rM}2r$7$F$*$$$F$/$@$5$$!#$I$&$7$F$G$7$g$&$+!)(B SMP Linux $B$G$O$3$l$i$N5!G=$O(B
$B35$7$F=hM}$,CY$/!"=g<!<B9T$5$l$k$+$i$G$9!#@bL@$O$3$l$G==J,$G$9$M!#(B
<P>$B6&M-%a%b%j$N%;%0%a%s%H$K0lMM$K%"%/%;%9$9$k$?$a$K!"%W%m%;%9$N%0%k!<%W$r:n@.(B
$B$9$k4pK\E*$J<jB3$-$O<!$NDL$j$G$9!#(B
<P>
<OL>
<LI>$B%W%m%0%i%`$O!"(B1 $B$D$N%W%m%;%9$H$7$F%9%?!<%H$5$;$k$3$H(B
</LI>
<LI>$BIaDL!"$=$l$>$l$NJBNs=hM}$N%W%m%0%i%`$r<+J,$N6&M-%a%b%j$N%;%0%a%s%H(B
$B$r;H$C$FF0$+$7$?$$$+$H;W$o$l$k$N$G!"$=$N>l9g$O(B <CODE>shmget()</CODE> 
$B$r8F$s$GI,MW$JBg$-$5$N%;%0%a%s%H$r?7$7$/:n@.$9$k!#$^$?$3$N%7%9%F%`(B
$B%3!<%k$O!"4{B8$N6&M-%a%b%j$N(B ID $B$rF@$k$?$a$K$b;H$o$l$k!#$I$A$i$N>l9g$b(B
$BJV$jCM$O6&M-%a%b%j$N(B ID $B$+!"%(%i!<$rI=$9(B -1 $B$G$"$k!#Nc$($P!"(B<EM>b</EM> 
$B%P%$%H$NBg$-$5$N6&M-%a%b%j$r:n$k$J$i!"(B<CODE>shmid = shmget(IPC_PRIVATE, <EM>b</EM>, (IPC_CREAT | 0666))</CODE> 
$B$H8F$S=P$9(B
</LI>
<LI>$B<!$N%9%F%C%W$O%W%m%;%9$K$3$N6&M-%a%b%j$r%"%?%C%A$7$F!"J8;zDL$j(B
$B$3$N%W%m%;%9$N2>A[%a%b%j%^%C%W$K2C$($k!#(B
$B%W%m%0%i%^!<$O(B <CODE>shmat()</CODE> $B$r8F$V$3$H$G!"2>A[%"%I%l%9>e$N$I$3$K(B
$B6&M-%a%b%j$N%;%0%a%s%H$,$"$k$N$+$,$o$+$k!#$7$+$7$=$N%"%I%l%9$O%Z!<%86-3&$K(B
$B9g$C$F$$$J$1$l$P$J$i$J$$(B($B$9$J$o$A(B <CODE>getpagesize()</CODE> $B$,JV$9Bg$-$5$O(B
$B%Z!<%8$NBg$-$5$NG\?t$K$J$C$F$$$F!"DL>o$O(B 4096 $B%P%$%H$G$"$k(B)$B!#$^$?!"0JA0(B
$B$=$N%"%I%l%9$r%a%b%j$K%^%C%W$7$?$b$N$OL58z$K$J$k!#(B
$B$D$^$j0JA0%^%C%W$7$F$$$?$b$N$N$+$o$j$K!"$=$N%"%I%l%9$r;HMQ$9$k$h$&$K(B
$B%7%9%F%`$K;X<($9$k$N$G$"$k!#$I$A$i$N>l9g$bJV$jCM$O%^%C%W$5$l$?%;%0%a%s%H(B
$B$N2>A[%"%I%l%9$X$N%]%$%s%?$G$"$k!#%3!<%I$O!"(B<CODE>shmptr =
shmat(shmid, 0, 0)</CODE> $B$H$J$k(B

$BCm0U$9$Y$-E@$O!"6&M-%a%b%j%;%0%a%s%H$KCV$/6&M-$9$k(B static $BJQ?t$O$9$Y$F(B
<CODE>$B9=B$BN(B</CODE>$B$N%a%s%P!<$K$7$F@k8@$9$k$3$H$G3NJ]$G$-$k!"$H$$$&$3$H$@!#(B
$B$=$7$F(B <EM>shmptr</EM> $B$r$=$N9=B$BN$N%]%$%s%?$K$9$k!#$3$N%F%/%K%C%/$r(B
$B;H$&$H!"(B<EM>x</EM> $B$O(B <EM>shmptr</EM><CODE>-&gt;</CODE><EM>x</EM> $B$H;2>H(B
$B$G$-$k(B
</LI>
<LI>$B$3$N6&M-%a%b%j$N%;%0%a%s%H$r2rJ|$7$J$1$l$P$J$i$J$$;~$O!"$3$N(B
$B%;%0%a%s%H$K%"%/%;%9$9$k:G8e$N%W%m%;%9$,=*N;$9$k$+%G%?%C%A$9$k>l9g$G$"$k!#(B
<CODE>shmctl()</CODE> $B$r8F$S=P$7$F!"=i4|>uBV$K@_Dj$9$kI,MW$,$"$k!#%3!<%I$O!"(B
<CODE>shmctl(shmid, IPC_RMID, 0)</CODE> $B$N$h$&$K$J$k(B
</LI>
<LI>Linux $BI8=`$N(B <CODE>fork()</CODE> $B%7%9%F%`%3!<%k$r;H$C$F!"I,MW$J%W%m%;%9(B
$B$rN)$A>e$2$k!D!#$=$l$>$l$N%W%m%;%9$O6&M-%a%b%j$N%;%0%a%s%H$r7Q>5$9$k(B
</LI>
<LI>$B%W%m%;%9$,6&M-%a%b%j$N%;%0%a%s%H$r;H$$=*$C$?$i!"6&M-%a%b%j$N(B
$B%;%0%a%s%H$rI,$:%G%?%C%A$9$k!#$3$l$O(B <CODE>shmdt(shmptr)</CODE> $B$H$9$l$PNI$$(B</LI>
</OL>
<P>
<P>$B$3$N$h$&$K$$$/$D$+$N%7%9%F%`%3!<%k$,@_Dj$N:]$KI,MW$H$J$j$^$9$,!"0lEY(B
$B6&M-%a%b%j$N%;%0%a%s%H$,3NJ]$5$l$l$P!"$I$N%W%m%;%C%5$,%a%b%j>e$NCM$rJQ$((B
$B$F$b<+F0E*$K$9$Y$F$N%W%m%;%C%5$+$i8+$k$3$H$,$G$-$^$9!#:G$bBg@Z$J$3$H$O!"(B
$B%7%9%F%`%3!<%k$N%*!<%P!<%X%C%I$J$7$KA`:n$,$G$-$k$3$H$G$9!#(B
<P>System V $B$N6&M-%a%b%j$N%;%0%a%s%H$r;H$C$?(B C $B$N%W%m%0%i%`Nc$G$9!#$3$l(B
$B$O1_<~N($r7W;;$9$k$b$N$G!"%;%/%7%g%s(B 1.3 $B$G;H$C$?$N$HF1$8%"%k%4%j%:%`(B
$B$rMxMQ$7$F$$$^$9!#(B
<P>
<HR>
<PRE>
#include &lt;stdio.h>
#include &lt;stdlib.h>
#include &lt;unistd.h>
#include &lt;sys/types.h>
#include &lt;sys/stat.h>
#include &lt;fcntl.h>
#include &lt;sys/ipc.h>
#include &lt;sys/shm.h>

volatile struct shared { double pi; int lock; } *shared;

inline extern int xchg(register int reg,
volatile int * volatile obj)
{
  /* Atomic exchange instruction */
__asm__ __volatile__ ("xchgl %1,%0"
                      :"=r" (reg), "=m" (*obj)
                      :"r" (reg), "m" (*obj));
  return(reg);
}

main(int argc, char **argv)
{
  register double width, localsum;
  register int intervals, i;
  register int shmid;
  register int iproc = 0;;

  /* Allocate System V shared memory */
  shmid = shmget(IPC_PRIVATE,
                 sizeof(struct shared),
                 (IPC_CREAT | 0600));
  shared = ((volatile struct shared *) shmat(shmid, 0, 0));
  shmctl(shmid, IPC_RMID, 0);

  /* Initialize... */
  shared->pi = 0.0;
  shared->lock = 0;

  /* Fork a child */
  if (!fork()) ++iproc;

  /* get the number of intervals */
  intervals = atoi(argv[1]);
  width = 1.0 / intervals;

  /* do the local computations */
  localsum = 0;
  for (i=iproc; i&lt;intervals; i+=2) {
    register double x = (i + 0.5) * width;
    localsum += 4.0 / (1.0 + x * x);
  }
  localsum *= width;

  /* Atomic spin lock, add, unlock... */
  while (xchg((iproc + 1), &amp;(shared->lock))) ;      
  shared->pi += localsum;
  shared->lock = 0;

  /* Terminate child (barrier sync) */
  if (iproc == 0) {
    wait(NULL);
    printf("Estimation of pi is %f\n", shared->pi);
  }

  /* Check out */
  return(0);
}
</PRE>
<HR>
<P>$B$3$NNc$G$O!"(BIA32 $B$N%"%H%_%C%/$J8r49(B(exchange)$BL?Na$r;H$C$F%m%C%/$r<B8=(B
$B$7$F$$$^$9!#(B
$B%Q%U%)!<%^%s%9$H0\?"@-$r$5$i$KNI$/$9$k$K$O!"%P%9$r%m%C%/$9$kL?Na$r2sHr(B
$B$9$k$h$&$JF14|$N$7$/$_$KCV$-49$($F$/$@$5$$(B($B%;%/%7%g%s(B 2.2 $B$GO@$8$?$h$&$K(B)$B!#(B
<P>$B%3!<%I$r%G%P%C%0$9$k>l9g$O!"8=:_;H$o$l$F$$$k(B System V $B$N(B IPC $B5!G=$N>uBV(B
$B$r%l%]!<%H$9$k(B <CODE>ipcs</CODE> $B%3%^%s%I$rCN$C$F$*$/$HJXMx$G$9!#(B
<P>
<H2><A NAME="ss2.6">2.6 $B%a%b%j%^%C%W!&%7%9%F%`%3!<%k(B</A>
</H2>

<P>
<P>$B%7%9%F%`%3!<%k$O%U%!%$%kF~=PNO$r$H$b$J$&$H=E$/$J$j$^$9!#<B:]$K!"%f!<%6(B
$B%l%Y%k$G$N%P%C%U%!$r2p$7$?%U%!%$%kF~=PNO%i%$%V%i%j(B(<CODE>getchar()</CODE>$B!"(B
<CODE>fwrite()</CODE> $BEy(B)$B$,$"$k$N$O$3$N$?$a$G$9!#$7$+$7!"%f!<%6%l%Y%k$G$N(B
$B%P%C%U%!$O!"J#?t$N%W%m%;%9$,F1$8=q$-9~$_2DG=$J%U%!%$%k$K%"%/%;%9$7$?>l9g(B
$B$K$OLrN)$A$^$;$s!#$^$?$3$l$r4IM}$9$k%*!<%P!<%X%C%I$b$P$+$K$J$j$^$;$s!#(B
BSD UNIX $B$O$3$NLdBj$r2r7h$9$k$?$a!"%7%9%F%`%3!<%k$r(B 1 $B$DDI2C$7$^$7$?!#(B
$B$=$l$O%U%!%$%k$N0lIt$r%f!<%6$N%a%b%j6u4V$K%^%C%W$7$F!"2>A[%a%b%j$N(B
$B%Z!<%8%s%05!9=$rMxMQ$7$F99?7$r9T$&$b$N$G$9!#(BSequent $B$,$3$l$HF1MM$N$7$/$_(B
$B$r2?G/$bA0$+$i<+<R$N6&M-%a%b%j$r;H$C$?JBNs=hM}$N5!G=$H$7$FDs6!$7$F$-$^$7$?!#(B
($B$H$F$b8E$$(B)man $B$r8+$k$H!"$H$F$bH]DjE*$J%3%a%s%H$,;68+$5$l$^$9$,!"(BLinux 
$B$G$O>/$J$/$H$b4pK\E*$J5!G=$N$$$/$D$+$O@5$7$/F0:n$7$^$9!#$3$N%7%9%F%`%3!<%k(B
$B$,J#?t$N%W%m%;%9$GMxMQ$G$-$k6&DL$N%a%b%j>e$N%;%0%a%s%H$r%^%C%W$9$k$N$K(B
$B;HMQ$5$l$k$N$O$^$l$G$9!#(B
<P>$BK\<AE*$K(B Linux $B$N(B <CODE>mmap()</CODE> $B$O!"%;%/%7%g%s(B 2.5 $B$N4pK\E*$J<jB3$-$N(B
2$B!"(B3$B!"(B4 $B$G@bL@$7$?(B System V $B$N6&M-%a%b%j$NOHAH$_$GCV$-49$($k$3$H$,$G$-(B
$B$^$9!#(B
<P>
<HR>
<PRE>
shmptr =
    mmap(0,                        /* system assigns address */
         b,                        /* size of shared memory segment */
         (PROT_READ | PROT_WRITE), /* access rights, can be rwx */
         (MAP_ANON | MAP_SHARED),  /* anonymous, shared */
         0,                        /* file descriptor (not used) */
         0);                       /* file offset (not used) */
</PRE>
<HR>
<P><CODE>munmap()</CODE> $B$O(B System V $B$N6&M-%a%b%j$N(B <CODE>shmdt()</CODE> $B%7%9%F%`(B
$B%3!<%k$HF1$85!G=$G$9!#(B
<P>
<HR>
<PRE>
munmap(shmptr, b);
</PRE>
<HR>
<P>$B;d8+$G$9$,!"(BSystem V $B$N6&M-%a%b%j$N$+$o$j$K(B <CODE>mmap()</CODE> $B$r;H$C$F$b!"(B
$B$=$l$[$I%a%j%C%H$O$J$$$H;W$$$^$9!#(B
<P>
<HR>
<A HREF="Parallel-Processing-HOWTO-3.html">$B<!$N%Z!<%8(B</A>
<A HREF="Parallel-Processing-HOWTO-1.html">$BA0$N%Z!<%8(B</A>
<A HREF="Parallel-Processing-HOWTO.html#toc2">$BL\<!$X(B</A>
</BODY>
</HTML>