黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

指令和數(shù)據(jù)混合存儲與分開存儲的比較

系統(tǒng) 2113 0
<!-- [if gte mso 10]> <mce:style><!-- /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:宋體; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-font-kerning:1.0pt;} -->

<!-- [endif]--><!-- [if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="1030"/> </xml><![endif]--><!-- [if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]-->

指令和數(shù)據(jù)混合存儲與分開存儲的比較

劉愛貴

(高能物理研究所計算中心 北京 2003年)

摘要 存儲程序概念對計算機的發(fā)展影響深遠。本文從總線、指令系統(tǒng)、數(shù)據(jù)表示、指令相關(guān)、編譯對寄存器的管理等幾個相關(guān)方面對 . 諾依曼結(jié)構(gòu)的指令和數(shù)據(jù)混合存儲與哈佛結(jié)構(gòu)的指令和數(shù)據(jù)分開存儲進行了比較詳細的分析和比較。

關(guān)鍵詞 . 諾依曼結(jié)構(gòu) 哈佛結(jié)構(gòu) 總線 指令修改 數(shù)據(jù)表示 結(jié)構(gòu)相關(guān) 數(shù)據(jù)相關(guān) 寄存器管理

<!-- [if gte vml 1]><v:line id="_x0000_s1026" style='position:absolute; left:0;text-align:left;z-index:251656192' from="0,7.8pt" to="477pt,7.8pt"/><![endif]--><!-- [if !vml]--><!-- [endif]-->

1946 Von Neumann 在“電子計算機邏輯設(shè)計的初步討論”一文中,首次提出了存儲程序概念( stored program concept ),這是馮 . 諾依曼設(shè)計思想的核心。馮 . 諾依曼結(jié)構(gòu)中指令和數(shù)據(jù)是不加區(qū)別混合存儲在同一存儲器中的,程序執(zhí)行時通過譯碼來識別指令和數(shù)據(jù)。這種思想在現(xiàn)代計算機中仍被廣泛應(yīng)用。與馮 . 諾依曼結(jié)構(gòu)混合存儲思想相對應(yīng)的是一種稱為哈佛結(jié)構(gòu)的設(shè)計思想,其指令和數(shù)據(jù)分開存儲的,即指令和數(shù)據(jù)分別存儲于不同的存儲器中。這種設(shè)計思想廣泛用于單片機的設(shè)計中。 眾所周知,計算機的工作體現(xiàn)為程序的執(zhí)行,計算機功能的擴展在很大程度上體現(xiàn)為所存儲程序的擴展。 [1] . 諾依曼結(jié)構(gòu)和哈佛結(jié)構(gòu)的存儲器設(shè)計思想各有優(yōu)缺點,本文將就幾個相關(guān)方面對兩者進行分析和比較。

. 諾依曼結(jié)構(gòu)(如圖 1 所示)指令和數(shù)據(jù)是不加區(qū)別混合存儲的、共享數(shù)據(jù)總線,因而取指令和取操作數(shù)是不可以同時進行的。而哈佛結(jié)構(gòu)(如圖 2 所示)指令和數(shù)據(jù)是完全分開的,存儲器分為固定大小的兩個部分,分別用來存放指令和數(shù)據(jù)。這樣取指令和取操作數(shù)可以同時進行。從圖 1 可以看到,馮 . 諾依曼結(jié)構(gòu)中,數(shù)據(jù)和程序存儲器是共享數(shù)據(jù)總線的。數(shù)據(jù)總線共享有許多優(yōu)點,它可以減少總線的開銷,這樣控制邏輯也相對簡單。哈佛結(jié)構(gòu)中必須設(shè)置各自獨立的數(shù)據(jù)總線和地址總線用于訪問指令存儲器和數(shù)據(jù)存儲器,不僅總線開銷增大許多,控制邏輯更復(fù)雜。如果要和外部的程序和數(shù)據(jù)存儲器進行交互,對于兩部分存儲器來說,由于地址總線和數(shù)據(jù)總線的相互獨立,就需要額外增加大量的芯片管腳。共享數(shù)據(jù)總線的另一個優(yōu)點在于能夠把 RAM 映射到程序空間,這樣設(shè)備也能訪問 EEPROM 中的內(nèi)存。對于指令和數(shù)據(jù)存儲器采用獨立的地址和數(shù)據(jù)總線來說,映射是非常困難的。哈佛結(jié)構(gòu)中指令和數(shù)據(jù)可以同時進行訪問,能夠在一個周期內(nèi)同時同時取指令和取操作數(shù),這相應(yīng)減少了指令執(zhí)行時間,從而提供了很高的并行度,提高了數(shù)據(jù)吞吐率。因此并行存儲指令和專用指令可以在這種結(jié)構(gòu)上得到充分利用。馮 . 諾依曼結(jié)構(gòu)中不能同時取指令和取操作數(shù),由于存儲器存取速度遠遠低于 CPU 運算速度,從而使計算機運算速度受到很大限制, CPU 與共享存儲器間的數(shù)據(jù)交換成了影響高速計算和系統(tǒng)性能的“瓶頸”。


<!-- [if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"/> <v:f eqn="sum @0 1 0"/> <v:f eqn="sum 0 0 @1"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="prod @3 21600 pixelWidth"/> <v:f eqn="prod @3 21600 pixelHeight"/> <v:f eqn="sum @0 0 1"/> <v:f eqn="prod @6 1 2"/> <v:f eqn="prod @7 21600 pixelWidth"/> <v:f eqn="sum @8 21600 0"/> <v:f eqn="prod @7 21600 pixelHeight"/> <v:f eqn="sum @10 21600 0"/> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/> <o:lock v:ext="edit" aspectratio="t"/> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:300.75pt; height:75pt' o:ole=""> <v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtmlclip1/01/clip_image002.png" mce_src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtmlclip1/01/clip_image002.png" o:title=""/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]--><!-- [if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="PBrush" ShapeID="_x0000_i1025" DrawAspect="Content" ObjectID="_1319481136"> </o:OLEObject> </xml><![endif]-->

<!-- [if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75" style='width:298.5pt;height:75pt' o:ole=""> <v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtmlclip1/01/clip_image004.png" mce_src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtmlclip1/01/clip_image004.png" o:title=""/> </v:shape><![endif]--><!-- [if !vml]--><!-- [endif]--><!-- [if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="PBrush" ShapeID="_x0000_i1026" DrawAspect="Content" ObjectID="_1319481137"> </o:OLEObject> </xml><![endif]-->

存儲器在現(xiàn)代計算機中作為全機數(shù)據(jù)傳送的中心,不僅要向高速運行的 CPU 提供所需的指令的數(shù)據(jù)外,還需承擔同 CPU 并行工作的大量的外部設(shè)備和終端所輸入和輸出的數(shù)據(jù)的讀寫工作。 [1] 可見存儲器已經(jīng)成為影響整個計算機系統(tǒng)運行速度的一個關(guān)鍵因素,尤其是在高性能的計算機系統(tǒng)中。存儲器的有效利用和可擴充性在體系結(jié)構(gòu)中也是很重要的。馮 . 諾依曼結(jié)構(gòu)中,共享數(shù)據(jù)總線,即取指令和取數(shù)據(jù)的帶寬是相同的,只要總線位數(shù)足夠多,存儲器的擴充是很容易的。哈佛結(jié)構(gòu)中,指令存儲器和數(shù)據(jù)存儲器使用相互獨立的地址總線和數(shù)據(jù)總線,因而地址總線和數(shù)據(jù)總線可以采用不同的寬度。例如,指令存儲器的數(shù)據(jù)總線可以是 8 位、 16 位或 32 位的,而指令存儲器的數(shù)據(jù)總線是 12 位、 14 位或 16 位的。兩個存儲器數(shù)據(jù)總線寬度不相互制約,這樣可以通過增加數(shù)據(jù)存儲器和總線寬度來實現(xiàn)更大的存儲帶寬,從而縮小存儲器與 CPU 的速度差異。采用哈佛結(jié)構(gòu)的單片機數(shù)據(jù)線和指令線分離,由于一般指令線寬于數(shù)據(jù)線,使其較之馮 . 諾依曼結(jié)構(gòu)單片機指令包含更多的處理信息,執(zhí)行效率更高、速度亦更快。同時這種單片機指令多為單字節(jié), 指令存儲器的利用率大大提高,有利于實現(xiàn)超小型化。指令和數(shù)據(jù)集中存儲一個優(yōu)點是存儲空間的利用率較高,哈佛結(jié)構(gòu)的指令和數(shù)據(jù)分開存儲可能會導(dǎo)致存儲空間利用率比較低。實際的程序,指令和數(shù)據(jù)的比例一般不會為 1 1 ,甚至兩者相差很大,所以經(jīng)常會出現(xiàn)一個存儲器放得很滿,另一個存儲器比較空的情況。現(xiàn)代計算機中的高速緩沖存儲器 Cache ,第一級 Cache 層次采用哈佛結(jié)構(gòu),把 Cache 分為指令 Cache 和數(shù)據(jù) Cache 兩個部分,而主存儲器采用馮 . 諾依曼結(jié)構(gòu),只有一個,由指令的數(shù)據(jù)合用。如此將馮 . 諾依曼結(jié)構(gòu)和哈佛結(jié)構(gòu)結(jié)合起來,不僅可以提高主存儲器的利用率,而且可以提高程序執(zhí)行的效率,縮短指令執(zhí)行的時鐘周期。

指令和數(shù)據(jù)混合存儲,即一個存儲單元在解釋時期其性質(zhì)是含混的。這個含混性只有當被取出或當成一條指令來執(zhí)行或當成一個數(shù)據(jù)來操作時才暫時地能分辨出來。 [3] 對含混的開拓之一,產(chǎn)生了指令修改技術(shù)。即在計算機的運算器中作為某些操作的結(jié)果產(chǎn)生的數(shù)據(jù),和其他的數(shù)據(jù)一樣放在存儲器中,但以后當作指令來取出和執(zhí)行。迭代法的實現(xiàn)就是靠把指令當成數(shù)據(jù)取出,對它的地址段進行修改,然后把它存起來,并把它當成一條指令再取出和再執(zhí)行。假設(shè)在哈佛結(jié)構(gòu)中實現(xiàn)迭代法,可以想象是非常困難的。哈佛結(jié)構(gòu)中,指令和數(shù)據(jù)是嚴格區(qū)分的,分別存儲在不同的存儲器中,從指令存儲器中取出來的 CPU 只會把它當成指令進行處理,而不會當作數(shù)據(jù)處理。所以指令的自我修改是很難實現(xiàn)的。指令自我修改技術(shù)在指令系統(tǒng)設(shè)計中的微程序設(shè)計中得到了非常成功的應(yīng)用。機器語言的一條指令對應(yīng)于一個微程序。 微程序從微程序入口開始執(zhí)行。每條微指令執(zhí)行完畢后,都要根據(jù)其順序控制字段的規(guī)定形成后續(xù)微地址,寫入微地址寄存器 uAR ,保證微程序的連續(xù)執(zhí)行。 [2] 一些微指令的后續(xù)微地址不是按增量的方式形成的,在執(zhí)行前是不確定的,例如條件轉(zhuǎn)移微指令,只能在當前微指令執(zhí)行結(jié)束后根據(jù)測試條件確定后續(xù)微指令的地址,然后寫入微地址寄存器中,使后續(xù)微指令順利調(diào)入和執(zhí)行。

<!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves/> <w:TrackFormatting/> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>ZH-CN</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:DontVertAlignCellWithSp/> <w:DontBreakConstrainedForcedTables/> <w:DontVertAlignInTxbx/> <w:Word11KerningPairs/> <w:CachedColBalance/> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="&#45;-"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true" DefSemiHidden="true" DefQFormat="false" DefPriority="99" LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Normal"/> <w:LsdException Locked="false" Priority="9" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="heading 1"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/> <w:LsdException Locked="false" Priority="39" Name="toc 1"/> <w:LsdException Locked="false" Priority="39" Name="toc 2"/> <w:LsdException Locked="false" Priority="39" Name="toc 3"/> <w:LsdException Locked="false" Priority="39" Name="toc 4"/> <w:LsdException Locked="false" Priority="39" Name="toc 5"/> <w:LsdException Locked="false" Priority="39" Name="toc 6"/> <w:LsdException Locked="false" Priority="39" Name="toc 7"/> <w:LsdException Locked="false" Priority="39" Name="toc 8"/> <w:LsdException Locked="false" Priority="39" Name="toc 9"/> <w:LsdException Locked="false" Priority="0" Name="header"/> <w:LsdException Locked="false" Priority="0" Name="footer"/> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/> <w:LsdException Locked="false" Priority="0" Name="page number"/> <w:LsdException Locked="false" Priority="10" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Title"/> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/> <w:LsdException Locked="false" Priority="11" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/> <w:LsdException Locked="false" Priority="22" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Strong"/> <w:LsdException Locked="false" Priority="20" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/> <w:LsdException Locked="false" Priority="59" SemiHidden="false" UnhideWhenUsed="false" Name="Table Grid"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/> <w:LsdException Locked="false" Priority="1" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 1"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 1"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 1"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/> <w:LsdException Locked="false" Priority="34" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/> <w:LsdException Locked="false" Priority="29" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Quote"/> <w:LsdException Locked="false" Priority="30" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 1"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 1"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 2"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 2"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 2"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 2"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 2"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 3"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 3"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 3"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 3"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 3"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 4"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 4"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 4"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 4"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 4"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 5"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 5"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 5"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 5"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 5"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 6"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 6"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 6"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 6"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 6"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/> <w:LsdException Locked="false" Priority="19" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/> <w:LsdException Locked="false" Priority="21" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/> <w:LsdException Locked="false" Priority="31" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/> <w:LsdException Locked="false" Priority="32" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/> <w:LsdException Locked="false" Priority="33" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Book Title"/> <w:LsdException Locked="false" Priority="37" Name="Bibliography"/> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/> </w:LatentStyles> </xml><![endif]--><!-- /* Font Definitions */ @font-face {font-family:宋體; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face {font-family:"/@宋體"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman","serif"; mso-fareast-font-family:宋體; mso-font-kerning:1.0pt;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:10.0pt; mso-ansi-font-size:10.0pt; mso-bidi-font-size:10.0pt; mso-ascii-font-family:"Times New Roman"; mso-fareast-font-family:宋體; mso-hansi-font-family:"Times New Roman"; mso-font-kerning:0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} --><!-- [if gte mso 10]> <mce:style><!-- /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:宋體; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-font-kerning:1.0pt;} --> <!-- [endif]-->

指令與數(shù)據(jù)不加區(qū)別混合存儲,操作數(shù)本身沒有屬性標志,其類型要由指令的操作碼確定。 [1] 對于不同的數(shù)據(jù)類型,雖然進行同一種操作,也要設(shè)置不同的操作碼。例如,加法就要用定點加、浮點加、浮點雙字加、十進制加等不同的操作碼來區(qū)分不同操作數(shù)的數(shù)據(jù)類型。高級語言中用說明語句來指明數(shù)據(jù)類型,數(shù)據(jù)類型直接屬于數(shù)據(jù)本身,因而運算符對各種數(shù)據(jù)類型是通用的,運算符中并不需要有數(shù)據(jù)類型的含義。所以機器語言指令的數(shù)據(jù)表示方法同高級語言的對數(shù)據(jù)屬性的說明之間有很大的語義差距。究其原因,主要是指令和數(shù)據(jù)是無法區(qū)分造成的。因而馮 . 諾依曼結(jié)構(gòu)中多采用 CISC 指令系統(tǒng)。哈佛結(jié)構(gòu)中指令和數(shù)據(jù)是完全分開的,這種天然的屬性使我們可以采用一種帶標志的數(shù)據(jù)表示方法(如圖 3 所示)來縮小語義差距。這樣每種操作只要用一種操作碼,指令類型就較少,所需指令操作碼位數(shù)減少,可以簡化編譯器的設(shè)計。所以在哈佛結(jié)構(gòu)中采用 RISC 指令系統(tǒng)是很自然的。當然,采用帶標志符的數(shù)據(jù)表示需要增加硬件來進行數(shù)據(jù)類型的判別和轉(zhuǎn)換,但這比馮 . 諾依曼結(jié)構(gòu)中用軟件變換效率要高得多,且生成的目標代碼較短。


指令級并行是提高計算機性能的一個主要方向,其中一個重要技術(shù)是指令流水。但是流水線中會因為指令間的相關(guān)而造成流水線的停頓,使指令不能連續(xù)不斷地進入流水線,其結(jié)果是降低流水線的工作效率,使流水線達不到理想 CPI 1 的目標。流水線指令相關(guān)具體分為結(jié)構(gòu)相關(guān)、數(shù)據(jù)相關(guān)和控制相關(guān)。 哈佛結(jié)構(gòu)可以免除許多結(jié)構(gòu)相關(guān)和因寄存器中數(shù)據(jù)相關(guān)引起的問題 [1]

結(jié)構(gòu)相關(guān)是由流水線中的指令間爭用有限硬件資源引起的。解決結(jié)構(gòu)相關(guān)可以采取把有沖突的資源配置多套的辦法。馮 . 諾依曼結(jié)構(gòu)中存儲器沖突的結(jié)構(gòu)相關(guān)在取指令( IF )和訪存( MEM )階段是經(jīng)常發(fā)生的,即某指令需取指令的同時另一條指令在等待訪存取操作數(shù)。由于取指令和取操作數(shù)不可以同時進行,造成了流水線若干時鐘周期的延遲。這個問題在哈佛結(jié)構(gòu)中被天然地解決了,其指令和數(shù)據(jù)是分開的, IF MEM 可以同時進行,根本不會產(chǎn)生 IF MEM 的結(jié)構(gòu)相關(guān)問題。數(shù)據(jù)相關(guān)是由重疊執(zhí)行的指令引用同一個存儲單元或同一個通用寄存器引起的。哈佛結(jié)構(gòu)由于取指令和取操作數(shù)的同時進行,則很大部分的操作數(shù)不必事先取出放入寄存器中暫存,而是直接可以從數(shù)據(jù)存儲器中取出送入 ALU 部件進行運算。由于沒有引用寄存器,很多寄存器的數(shù)據(jù)相關(guān)問題在無形中得到了完美的解決。而在馮 . 諾依曼結(jié)構(gòu)中就沒有這樣幸運了,需要通過設(shè)置旁路數(shù)據(jù)源、指令調(diào)度和寄存器改名等方法來盡量解決,如果實在無法解決就只好暫停流水線。

寄存器對應(yīng)用程序是透明的,寄存器的分配和管理全部由編譯程序來負責。計算機系統(tǒng)中的寄存器數(shù)量是非常的限的,為了高效合理地分配和利用寄存器,編譯程序要運用復(fù)雜的策略進行分配。寄存器分配是一個 NP 完全問題,所以少引用寄存器將會給編譯程序減輕不小的工作量。哈佛結(jié)構(gòu)由于減少了常用數(shù)據(jù)暫存寄存器的工作量,這樣寄存器的分配和管理就會簡單很多,從而簡化了編譯程序的設(shè)計。馮 . 諾依曼結(jié)構(gòu)中必須事先將數(shù)據(jù)讀入寄存器中暫存,指令執(zhí)行時再從寄存器送入 ALU 部件進行運算,這就需要大量的寄存器。可是寄存器數(shù)量是很有限的,這個矛盾要由編譯程序的合理分配來緩和,這加重了編譯程序的負擔,編譯程序的設(shè)計也將變得更復(fù)雜。

如果僅僅從存儲器的角度來看,哈佛結(jié)構(gòu)的優(yōu)越性更多一些。程序的執(zhí)行最終需要明確區(qū)分指令和數(shù)據(jù),假設(shè)馮 . 諾依曼結(jié)構(gòu)存儲單元的含混性直到指令執(zhí)行時仍沒有得以區(qū)分,程序是沒有辦法執(zhí)行的。 Von Neumann IAS 體系結(jié)構(gòu)設(shè)計中一個很重要的設(shè)計思想是設(shè)置了各種寄存器,其中有數(shù)據(jù)寄存器 DR 和指令寄存器 IR ,這與哈佛結(jié)構(gòu)的設(shè)計思想是一致的。文章前面所提到的指令自我修改技術(shù),哈佛結(jié)構(gòu)實現(xiàn)起來比較困難,但并不是實現(xiàn)不了。完全可以設(shè)計一條專用地址修改指令用于修改指令的地址段,同樣可以達到指令修改的目的。由此可見,馮 . 諾依曼結(jié)構(gòu)和哈佛結(jié)構(gòu)并不是完全對立的,兩者也有著微妙的聯(lián)系。在計算機體系設(shè)計中,若能將兩者的優(yōu)點有機結(jié)合起來可能會取得非常好的實際效果。文章前面所提到的存儲層次設(shè)計就是一個很好的例證, Cache 采用哈佛結(jié)構(gòu),而主存儲器采用馮 . 諾依曼結(jié)構(gòu),這樣不僅縮短了指令執(zhí)行周期,而且提高了存儲器的利用率。

[ 參考文獻 ]

[1] 孫強南、孫昱東        計算機系統(tǒng)結(jié)構(gòu) 2002.7 科學(xué)出版社

[2] 、俸遠禎、閻慧娟、羅克露    計算機組成原理 1996.4 電子工業(yè)出版社

[3] 張效強            計算機科學(xué)技術(shù)百科全書 1998.8 清華大學(xué)出版社

指令和數(shù)據(jù)混合存儲與分開存儲的比較


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論