• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大城小魔

            天下難事,必作于易;天下大事,必作于細(xì)

              C++博客 ::  :: 聯(lián)系 :: 聚合  :: 管理

            公告


            最新評(píng)論

            第二節(jié):內(nèi)存層次結(jié)構(gòu)


                當(dāng)有人們提到“內(nèi)存”這個(gè)詞的時(shí)候,往往都與主板上的專門提供數(shù)據(jù)存儲(chǔ)能力的芯片聯(lián)系起來(lái)。通常將這類提供存儲(chǔ)能力的芯片稱之為隨機(jī)存儲(chǔ)器(RAM),主內(nèi)存(main memory),和主存儲(chǔ)器(primary storage).回首計(jì)算機(jī)的鐵器時(shí)代,大型機(jī)大行其道的時(shí)候,稱之為核心部件(core)。這些芯片提供的存儲(chǔ)只是臨時(shí)的,也就是說(shuō),存儲(chǔ)在這些芯片里的數(shù)據(jù)只要當(dāng)電源被關(guān)閉以后也隨之消失。


            有這么幾類RAM
            • DRAM
            • SDRAM
            • SRAM
            • VRAM

            動(dòng)態(tài) RAM(DRAM)一秒鐘內(nèi)會(huì)進(jìn)行數(shù)千次的充電動(dòng)作。同步 DRAM (SDRAM) 隨著處理器高速的時(shí)鐘運(yùn)行速度下保持同步刷新。靜態(tài) RAM(SRAM)不需要像DRAM那樣頻繁的刷新,這使得它的速度大大加快。不幸地是,SRAM的價(jià)格也比DRAM昂貴得多,只得以被少量的使用。 SRAM適合用于處理器的高速緩存,DRAM則適用于大規(guī)模的主存儲(chǔ)器。最后還有一種視頻RAM(VRAM),它是一種有視頻硬件使用的一類內(nèi)存。在下一章中,會(huì)有一個(gè)例子用語(yǔ)演示如何通過(guò)控制VRAM來(lái)向屏幕輸出信息。

            最近隨著某些硬件廠商對(duì)技術(shù)的不斷進(jìn)步和特別的性能優(yōu)化實(shí)現(xiàn)又衍生出很多新的縮寫出來(lái),下面有幾個(gè): 
            • DDR SDRAM
            • RDRAM
            • ESDRAM 
            DDR SDRAM是雙倍數(shù)據(jù)傳輸速率的同步隨機(jī)存儲(chǔ)器。使用DDR SDRAM 數(shù)據(jù)可以在一個(gè)系統(tǒng)時(shí)間周期的上升沿和下降沿同時(shí)讀取數(shù)據(jù),基本上兩倍于常規(guī)的可用帶寬。RDRAM是Rambus DRAM的簡(jiǎn)稱,由Rambus公司出售的高性能版本的DRAM,它可以達(dá)到800MHz的傳輸速率。增強(qiáng)型的同步DRAM(ESDRAM),由 Enhanced Memory Systems,Inc 公司生產(chǎn),作為取代SRAM的一種更廉價(jià)的SDRAM。

            1(bit)比特是一個(gè)二進(jìn)制數(shù),(例如一個(gè)1或者一個(gè)0)。RAM中由比特這樣的基本單元結(jié)構(gòu)構(gòu)成,依據(jù)RAM的類型,以某種晶體管和電容器的布局方式組成。每一個(gè)單元是一個(gè)可以設(shè)置為‘開(kāi)’ 和‘關(guān)’的數(shù)字開(kāi)關(guān)(例如:1或者0)。這些單元每八個(gè)分為一組成為字節(jié)(bytes)。字節(jié)是用來(lái)計(jì)量存儲(chǔ)器所提供的內(nèi)存總量的的基本單位。在過(guò)去,硬件廠商曾經(jīng)使用不同大小的byte單位。有些使用6比特作為一個(gè)字節(jié),還有使用16字節(jié)作為一個(gè)字節(jié)。而現(xiàn)在所有人都遵守了相同的8比特一為個(gè)字節(jié)的標(biāo)準(zhǔn)。

            以下是以byte為單位的內(nèi)存單位容量說(shuō)明。

            1 byte = 8bits
            1 word = 2bytes
            1 double word = 4bytes
            1 quad word = 8bytes
            1 octal word = 8bytes
            1 paragraph = 16bytes
            1 kilobyte(KB) = 1,024bytes
            1 megabyte(MB) = 1,024KB = 1,048,576bytes
            1 gigabyte(GB) = 1,024MB = 1,073,741,824bytes
            1 terabyte(TB) = 1,024GB = 1,099,511,627,776bytes
            1 petabyte(PB) = 1,024TB = 1,125,899,906,842,624bytes


                注解:在80年代,擁有一個(gè)上M的DRAM內(nèi)存已經(jīng)很了不起了。孩子們不斷的游說(shuō)父母再升級(jí)16KB的內(nèi)存,讓他們?cè)贏tari400可以玩上更復(fù)雜一些的游戲。在那個(gè)時(shí)候只有1M內(nèi)存并不是什么大問(wèn)題,因?yàn)檐浖こ處焸兌純A向使用匯編代碼構(gòu)建更加精巧的程序。實(shí)際上,經(jīng)常有人引用比爾蓋茨于1981年的一句話:"640K的內(nèi)存對(duì)于每個(gè)人都綽綽有余了"

             而今,大多數(shù)用于開(kāi)發(fā)的計(jì)算機(jī)至少擁有128M的DRAM,在2002年擁有256M被視為是標(biāo)準(zhǔn)配置。此后的十年內(nèi)。上G的內(nèi)存將作為標(biāo)準(zhǔn)配置出現(xiàn)。(如果我們?nèi)允褂肈RAM)。希望以后不要有人引用我的這段話。


            RAM并不是唯一存儲(chǔ)數(shù)據(jù)的地方,這里引出了我們內(nèi)存層次結(jié)構(gòu)的議題。不同的數(shù)據(jù)存儲(chǔ)位置,根據(jù)與處理器的遠(yuǎn)近關(guān)系排列。排列后產(chǎn)生了如下層次結(jié)構(gòu):


            1.Registers   寄存器
            2.Cache    高速緩存區(qū)
            3.RAM     主內(nèi)存
            4.Disk storage 硬盤


            這些存儲(chǔ)器之間最大的區(qū)別在于存儲(chǔ)時(shí)滯或者說(shuō)延遲。訪問(wèn)靠近處理器的存儲(chǔ)設(shè)備所用的時(shí)間比相對(duì)稍遠(yuǎn)處理器的存儲(chǔ)器少。處理器訪問(wèn)硬盤上數(shù)據(jù)的時(shí)間遠(yuǎn)遠(yuǎn)的大于處理器訪問(wèn)它內(nèi)部的高速緩沖區(qū)數(shù)據(jù)的響應(yīng)速度。比如,DRAM往往使用納秒來(lái)衡量時(shí)滯,而硬盤的時(shí)滯,卻是用毫秒來(lái)衡量!(如下表1.1)


            圖 1-1

            寄存器是位于處理器內(nèi)部的小型存儲(chǔ)器。寄存器是處理器鐘愛(ài)的工作區(qū)。處理器的大部分日常工作是對(duì)寄存器中的數(shù)據(jù)進(jìn)行處理。將數(shù)據(jù)在寄存器之間移動(dòng),是最為實(shí)用的數(shù)據(jù)移動(dòng)方式。


            工程師們?cè)谠O(shè)計(jì)的編譯器時(shí)跨越種種難題,力求將所有變量和常量都保存在寄存器中。應(yīng)用程序狀態(tài)保存在處理器內(nèi)部所擁有的大量寄存器中從而降低了存儲(chǔ)時(shí)滯。因此MIPS64處理器設(shè)計(jì)了32個(gè)64位的通用寄存器。安騰——INtel的下一代64位處理器,更加不可匹敵,它有用竟然數(shù)百個(gè)寄存器。

            Intel Pentium處理器擁有多種寄存器(如圖 1-2)其中:6中16位的段寄存器(CS,DS,ES,FS,GS,SS)。8位,32位通用寄存器(EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP )還有一個(gè)32位的錯(cuò)誤標(biāo)志寄存器(EFLAGS)用以標(biāo)識(shí)錯(cuò)誤狀態(tài),以及一個(gè)32位的指令指針寄存器(EIP)。

             
            圖 1-2


            高級(jí)內(nèi)存管理的功能得到由四種系統(tǒng)寄存器(GDTR,LDTR,IDTR,TR)和五種模式控制寄存器(CR0,CR1,CR2,CR3,CR4)協(xié)助。這些寄存器的使用方法會(huì)在后面介紹。

                注釋:  注意很有意思的是由于歷史的原因Pentium處理器的寄存器數(shù)量受到了限制由于向后的兼容性的設(shè)計(jì)需求,使得Pentium處理器所擁有的寄存器數(shù)量比當(dāng)年的8086沒(méi)有太多增加。

            高速緩沖區(qū)提供訪問(wèn)速度大于DRAM的臨時(shí)存儲(chǔ)器。通過(guò)將程序部分集中放置在高速緩沖區(qū)中的進(jìn)行運(yùn)算的方式,處理器可以避免重復(fù)訪問(wèn)DRAM所帶來(lái)的性能開(kāi)銷,這個(gè)效果十分顯著。有不同類型的高速緩沖區(qū)。L1緩沖區(qū)是位于存儲(chǔ)器內(nèi)部的存儲(chǔ)器。L2是典型的SRAM類型存儲(chǔ)器,于處理器外部。(例如,Intel Pentium4搭載了這樣256或者512KB的高速緩存器)

                注釋: 如果你正在嘗試針對(duì)高速緩沖區(qū)優(yōu)化程序代碼,你應(yīng)該避免不必要的函數(shù)調(diào)用。調(diào)用一個(gè)遠(yuǎn)程函數(shù)需要處理器執(zhí)行高速緩沖區(qū)以外的代碼。這將會(huì)導(dǎo)致重新裝載高速緩沖區(qū)里的內(nèi)容。這也便是為什么某些C編譯器提供內(nèi)聯(lián)函數(shù)功能選項(xiàng)的原因。從另一個(gè)方面來(lái)說(shuō),使用內(nèi)聯(lián)函數(shù)比不使用內(nèi)聯(lián)函數(shù)的程序體積更大(占用更多的存儲(chǔ)器空間)時(shí)間和空間的互換的取舍平衡的問(wèn)題一直貫穿整個(gè)計(jì)算科學(xué)領(lǐng)域。

            硬盤是數(shù)據(jù)存儲(chǔ)的最后一個(gè)位置。通常,硬盤常常用于創(chuàng)建虛擬內(nèi)存。虛擬內(nèi)存使用硬盤空間來(lái)模擬主內(nèi)存。換言之,將一部分存儲(chǔ)在DRAM上的數(shù)據(jù)寫入硬盤,處理器便可以訪問(wèn)的內(nèi)存總量大于實(shí)際物理內(nèi)存。例如,如果你有10MB的DRAM內(nèi)存并且使用了2MB的硬盤空間作為虛擬內(nèi)存,處理器便可以訪問(wèn)12MB的虛擬內(nèi)存。

               
            注釋:我將在本書中反復(fù)重申的一點(diǎn)是硬盤I/O的嚴(yán)重性能損耗。正如我之前所提到的,硬盤是使用毫秒為單位來(lái)橫定響應(yīng)能力的。處于處理器來(lái)說(shuō)這個(gè)時(shí)間太過(guò)漫長(zhǎng)。這個(gè)情形就類似遠(yuǎn)北達(dá)科他州做pizza的小店,如果運(yùn)氣好的話,你冰箱里有一個(gè)冷凍pizza,加熱只需要30分鐘。否則你不得不給那個(gè)pizza小店叫份pizza外賣(就好象訪問(wèn)硬盤上的數(shù)據(jù))然后花上幾個(gè)小時(shí)等待外賣小子跨越150英里的距離送到你的房間。

            使用虛擬內(nèi)存就好象跟魔鬼打交道,當(dāng)然你會(huì)獲得很多擴(kuò)展內(nèi)存,但是你會(huì)在性能上付出昂貴的代價(jià)。硬盤I/O涉另一整套的操作行為,其中還有一些物理機(jī)械性的。Windows系統(tǒng)的內(nèi)存分頁(yè),
            粗略的估計(jì)會(huì)因此占用10%的執(zhí)行時(shí)間。管理虛擬內(nèi)存還需要生成大量的內(nèi)存信息記錄。我會(huì)在后面詳細(xì)的談?wù)撚嘘P(guān)虛擬內(nèi)存信息記錄的內(nèi)容。

                                                                             題外話
            我曾經(jīng)在一家ERP的公司工作過(guò),其中一位副主管常常對(duì)過(guò)度濫用硬盤I/O的工程師處以罰金。在代碼復(fù)審時(shí)候,他會(huì)用grep命令搜索源代碼里面的所有 fopen()和fread()標(biāo)準(zhǔn)庫(kù)函數(shù)。我們接受了這樣基本課程:你應(yīng)該盡可能的將一切緩存到內(nèi)存中只有在別無(wú)選擇的情況下才將數(shù)據(jù)保存到硬盤中(這個(gè)操作甚至需要得到他的許可)。歸功于該副主管,公司的三層中間件產(chǎn)品成為產(chǎn)業(yè)中性能最高的。

            硬盤總是比RAM便宜,在60年代買一塊8KB的RAM花費(fèi)不菲,用硬盤虛擬內(nèi)存或許很有意義。今天,硬盤和DRAM的價(jià)格差距并不是像以前那樣那么明顯了。買一臺(tái)512MB內(nèi)存的計(jì)算機(jī)并不是大不了的事情。虛擬內(nèi)存可能會(huì)完全成為歷史或者成為某些緊急情況下的數(shù)據(jù)安全方案。
            posted on 2008-11-28 16:21 momor 閱讀(868) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 翻譯
            无码八A片人妻少妇久久| 久久久久中文字幕| 国产免费久久精品丫丫| 久久久久久亚洲Av无码精品专口 | 青青草原综合久久| 久久精品国产亚洲AV嫖农村妇女| 久久精品国产99国产精品导航| 色婷婷噜噜久久国产精品12p| 91久久精品电影| 久久精品国产第一区二区| 久久久91人妻无码精品蜜桃HD| 国内精品久久久久久麻豆| 久久久久人妻一区精品| 亚洲精品成人网久久久久久| 国产精品久久久久久久app| 欧美精品九九99久久在观看| 久久久久亚洲AV无码专区首JN| 无码人妻久久一区二区三区 | 无码人妻久久久一区二区三区| 婷婷久久香蕉五月综合加勒比| 国产V综合V亚洲欧美久久| 国产精品亚洲综合专区片高清久久久 | 亚洲伊人久久综合中文成人网| 久久福利资源国产精品999| 无码精品久久久久久人妻中字| 久久99精品国产自在现线小黄鸭 | 国产一级持黄大片99久久| 日本福利片国产午夜久久| 亚洲国产精品无码久久久久久曰 | 日产精品久久久一区二区| 精品国产福利久久久| 久久国产视频网| 亚洲国产精品18久久久久久| 久久久久久久尹人综合网亚洲 | 久久国产精品偷99| 狠狠色婷婷久久一区二区| 91精品国产综合久久婷婷| 色婷婷狠狠久久综合五月| 久久免费小视频| 久久精品人人做人人妻人人玩| 国内精品久久久久久久coent|