?? x1291.html
字號:
<HTML
><HEAD
><TITLE
>Symmetrical Multi-Processing</TITLE
><META
NAME="GENERATOR"
CONTENT="Microsoft FrontPage 4.0"><LINK
REL="HOME"
TITLE="The Linux Kernel Module Programming Guide"
HREF="index.html"><LINK
REL="UP"
TITLE="Symmetric Multi Processing"
HREF="c1289.html"><LINK
REL="PREVIOUS"
TITLE="Symmetric Multi Processing"
HREF="c1289.html"><LINK
REL="NEXT"
TITLE="Common Pitfalls"
HREF="c1315.html"></HEAD
><BODY
CLASS="SECT1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Linux內(nèi)核驅(qū)動模塊編程指南 (內(nèi)核版本2.2, 2.4)</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="c1289.html"
ACCESSKEY="P"
>返回</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
>第十三章.對稱多線程處理</TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="c1315.html"
ACCESSKEY="N"
>繼續(xù)</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="AEN1291"
></A
>13.1. 對稱多線程處理</H1
><P
>提高性能的最簡單也是最便宜的方法是給你的主板加第二個CPU(如果你的主板支持的話)。這可以通過讓不同的CPU完成不同的工作(非對稱多線程處理)或是相同的工作(對稱多線程處理)。實現(xiàn)高效率的非對稱的多線程處理需要特殊硬件相關(guān)的知識,而對于Linux這樣通用操作系統(tǒng)這是不可能的。相對而言,對稱多線程處理是較容易實現(xiàn)的。</P
><P
>我這里所說的相對容易,老實說,還是不容易。在一個對稱多線程處理的環(huán)境中,多個CPU共享內(nèi)存,導(dǎo)致的結(jié)果是其中一個CPU運行的代碼會對別的CPU也產(chǎn)生影響。你不能再確定你代碼中第一行中設(shè)置的變量在接下來的那行代碼中還是那個設(shè)置值;其它的CPU可能會趁你不注意已經(jīng)把它修改了。顯然,如果是這樣的話,是無法進(jìn)行任何編程的。</P
><P
>對于進(jìn)程層面上的編程這通常不是個問題,因為一個進(jìn)程通常同一時間只在一個CPU上運行<A
NAME="AEN1309"
HREF="#FTN.AEN1309"
><SPAN
CLASS="footnote"
>[1]</SPAN
></A
>。但是,對于內(nèi)核,就可以被在不同的CPU上的同時運行的不同的進(jìn)程使用。</P
><P
>在內(nèi)核版本2.0.x中,這還不算作什么問題,因為整個內(nèi)核是一個spinlock[2],這就意味著一旦某個CPU進(jìn)入內(nèi)核態(tài),別的CPU將不允許進(jìn)入內(nèi)核態(tài)。這使Linux的SMP實現(xiàn)很安全<A
NAME="AEN1312"
HREF="#FTN.AEN1312"
><SPAN
CLASS="footnote"
>[3]</SPAN
></A
>,但缺乏效率。</P
><P
>在內(nèi)核版本2.2.x以后,多CPU已經(jīng)允許同時進(jìn)入內(nèi)核態(tài)。內(nèi)核模塊的作者應(yīng)該意識到這一點。</P
></DIV
><H3
CLASS="FOOTNOTES"
>注意</H3
><TABLE
BORDER="0"
CLASS="FOOTNOTES"
WIDTH="100%"
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
WIDTH="5%"
><A
NAME="FTN.AEN1309"
HREF="x1291.html#AEN1309"
><SPAN
CLASS="footnote"
>[1]</SPAN
></A
></TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
WIDTH="95%"
><P
>存在例外,就是線程化的進(jìn)程,這樣的進(jìn)程可以在多個CPU上同時運行。</P
></TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
WIDTH="5%"
><A
NAME="FTN.AEN1312"
HREF="x1291.html#AEN1312"
><SPAN
CLASS="footnote"
>[2]</SPAN
></A
></TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
WIDTH="95%"
><P
>抱歉,我沒有找到合適的詞語來表達(dá)這個單詞。這是內(nèi)核中的一種機(jī)制,可以對內(nèi)核中的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)進(jìn)行鎖定保護(hù),防止其被破壞。</P
></TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
WIDTH="5%"
><A
NAME="FTN.AEN1312"
HREF="x1291.html#AEN1312"
><SPAN
CLASS="footnote"
>[3]</SPAN
></A
></TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
WIDTH="95%"
><P
>意味著這樣的SMP使用起來很安全。</P
></TD
></TR
>
</TABLE
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="c1289.html"
ACCESSKEY="P"
>返回</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>返回首頁</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="c1315.html"
ACCESSKEY="N"
>繼續(xù)</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>對稱多線程處理</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="c1289.html"
ACCESSKEY="U"
>返回本章開始</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>常見困難</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -