存儲器系統

原文連接:http://kasheemlew.github.io/2...git

基礎概念

  • 存儲器容量:取決於尋址方式,16位機能產生16位地址,所以能在2^16=64K個存儲器單元中尋址,同理,32位機能使用包含4G個單元的存儲器。程序員

  • MAR(存儲器地址寄存器)和 MDR(存儲器數據寄存器):經過這兩個寄存器實現處理器和存儲器之間的數據傳輸。若是MAR的長度是k位,MDR的長度是n位,那麼存儲器部件能夠包含2^k個可編址單元,在一個存儲週期中,n位數據在處理器和存儲器之間傳輸(在包含k條地址線和n條數據線的處理器總線上完成)github

  • Read/^(Write)控制線:處理器從存儲器讀地址時,先把存儲單元的地址裝進MAR,而後把R/^(W)線設成1(讀信號);寫入數據時,先把要寫入的存儲單元地址裝入MAR,並把數據裝入MDR,再把R/^(W)線設成0(寫信號)。算法

  • MFC(存儲器功能完成控制線):讀取數據的過程當中,R/^(W)線設成1後,存儲器作出響應,把指定位置的數據放到數據線上,併發送MFC信號確認這個操做,收到MFC信號,處理器就把數據線上的數據裝入MDR寄存器。數據庫

  • 塊傳輸:讀寫操做訪問主存中一個連續的存儲單元地址時採用。只須要將塊的第一個單元地址發送到存儲器中。編程

  • 存儲器延遲:指向或從存儲器傳輸一個字的數據所要花費的時間。讀寫單個字的時候能夠用來標誌存儲器的性能,但對於一塊數據還依賴與後繼字節的傳輸速度以及塊的大小。緩存

  • 存儲器帶寬:單位時間能傳輸的位或字節的數量。併發

  • 衡量存儲器的速度:異步

    • 存儲器訪問時間:讀信號和MFC信號之間的時間。ide

    • 存儲器週期時間:相繼兩個存儲器操做考試時刻之間的最小時間延遲,如兩個讀操做之間的時間。通常比訪問時間長。

  • 隨機訪問存儲器(RAM):任何存儲單元的讀寫訪問都能在固定時間段(與地址無關)內完成,主要與連續存儲設備(如磁帶)區分開。

  • 主存儲器:簡稱主存,是計算機系統的主要存儲器,用來存放計算機正在執行的大量程序和數據,主要由MOS半導體存儲器組成。

  • 外存儲器:簡稱外存,是計算機系統的大容量輔助存儲器,用於存放系統中的程序、數據文件及數據庫。與主存相比,外存的特色是存儲容量大,位成本低,但訪問速度慢。目前,外存儲器主要有磁盤存儲器、磁帶存儲器和光盤存儲器。

  • 高速緩存:一個容量小、速度快的存儲器,插在容量大、速度慢的主存與處理器之間,用來緩解計算機處理器處理指令和數據的速度比從存儲器中獲取指令和數據速度快的問題。

  • 虛擬存儲器:現代計算機系統中,物理主存空間沒有處理器生成的地址所能跨越的空間大,沒法將全部程序一次性放入主存,所以經過虛擬存儲器技術實如今執行中把將要執行的程序塊和數據塊自動移入主存。

  • 虛擬地址(邏輯地址):使用虛擬存儲器技術時處理器產生的地址(與物理存儲器的存儲位置不一樣)。

  • 存儲器管理部件:用來實現虛擬地址空間到數據實際所在的物理存儲器上的映射。

  • CS(芯片選擇):在多芯片存儲器系統中選擇一個給定的芯片。

  • MOSC(Metal-Oxide-Semiconductor Capacitor)金氧半電容,一種兩端控制的半導體元件。

半導體隨機存儲器

半導體存儲器出如今20世紀60年代,速度快,成本低,取代了磁芯存儲器。

  1. 組織結構:

    • 結構圖:

    • 結構特色:陣列形式、每一個單元存儲一位(bit)。一個單元行組成存儲器中一個字,全部單元行經過一條公共的線鏈接。圖中包含8個字,每一個字包括4位,稱爲8x4的結構,一共須要11條引線,其中地址線3條,數據線4條,控制線2條(CS和R/^(W)),還有2條線用於 電源支持 和 接地。

  2. 靜態隨機存儲器(SRAM):

    • 特色:

      • 利用雙穩態觸發器來保存信息,只要不斷電信息就不會丟失。

      • 集成度低,成本高,功耗較大,一般做爲Cache的存儲體。

    • 存儲單元:

      結構:兩個反相器交叉耦合造成一個鎖存器,經過兩根晶體管(起開關做用,在字線的控制下打開或關閉)分別鏈接到兩根位線上


    工做原理:字線低電平時晶體管斷開,鎖存器保存;讀操做時,字線激活,閉合開關,若是bit被設置爲與單元狀態相同的狀態,^bit被設置爲相反的狀態,位線一段的讀出/寫電路檢測狀態並設置輸出;寫操做時,先把適當的值放到bit,把其補值放到^bit,而後激活字線,位線上須要的信號由讀出/寫電路產生。

  3. 動態隨機存儲器(DRAM):

    • 特色:

      • 利用MOS電容存儲電荷來保存信息,使用時須要不斷給電容充電才能保持信息。

      • 動態存儲器電路簡單,集成度高,成本低,功耗小,但須要反覆進行刷新(Refresh)操做,工做速度較慢,適合做爲主存儲器的主體部分。

    • 存儲單元:
      結構:電容器 和 晶體管(與字線和位線相連) 構成


      工做原理:存儲信息時,晶體管打開,電壓加到位線(圖中垂直)上,使電荷存到電容中,以後關閉晶體管,這時電容會開始漏電。讀操做時,選中的晶體管打開,鏈接到位線上的傳感放大器檢測電容上的電荷是否高於某個閥值,若高於,則將位線上的電壓提升成滿電壓(同時將電容器電荷充滿),不然將位線拉成低電平,保證電容沒有電荷,所以讀操做時會自動刷新。

    • 組織結構及工做原理:
      讀寫操做期間,行地址首先被加載,芯片響應在 行選通地址(RAS)輸入線 上的脈衝信號,把行地址裝入行地址鎖存器中,選中行上的全部單元被讀取和刷新。列地址隨後被加載到地址引腳,而後在列地址選通(CAS)信號控制下被裝入列地址鎖存器。爲了讓RAS和CAS信號從高電平變成低電平時使地址鎖存,這兩個信號被設計成低電平有效。此外,爲了減小外部鏈接的引腳數,行地址和列地址採用多路複用。

    • 同步動態隨機存儲器(SDRAM):操做直接與時鐘信號同步,不須要CAS線上提供外部產生的脈衝去選擇連續的列,芯片內部用列計數器和時鐘信號來提供須要的控制信號。有內置的刷新電路,其中一部分是刷新計數器,提供要刷新的行地址。

    • 雙倍數據速率SDRAM(DDR SDRAM):存儲器單元陣列被組織成兩個存儲體,每一個能夠單獨訪問。一個給定塊中連續的字被存儲到不一樣的存儲體中,實如今一個時鐘信號的連續邊沿上傳輸兩個字。

只讀存儲器

只讀存儲器ROM是一種存儲固定信息的存儲器,其特色是在正常工做狀態下只能讀取數據,不能即時修改或從新寫入數據。電路結構簡單,且存放的數據在斷電後不會丟失,特別適合於存儲永久性的、不變的程序代碼或數據,計算機中的自檢程序就是固化在ROM中的。ROM的最大優勢是具備不易失性。

  1. 掩模只讀存儲器(MROM):又稱固定ROM。這種ROM在製造時,生產廠家利用掩模(Mask)技術把信息寫入存儲器中,使用時用戶沒法更改。

  2. 可編程只讀存儲器(Programmable ROM):是可由用戶一次性寫入信息的只讀存儲器,一經寫入就不能再更改。

  3. 光擦可編程只讀存儲器(EPROM):其中的內容能夠用特殊的裝置進行擦除和重寫。EPROM出廠時,其存儲內容爲全「1」,用戶可根據須要改寫爲「0」,當須要更新存儲內容時,可將原存儲內容擦除(恢復爲全「1」),以便寫入新的內容。

  4. 電擦可編程只讀存儲器(EEPROM或E2PROM):能夠用電氣方法將芯片中的存儲內容擦除,擦除時間較快,甚至能夠在聯機狀態下操做。
    EEPROM既可以使用字擦除方式又可以使用塊擦除方式,使用字擦除方式可擦除一個存儲單元,使用塊擦除方式可擦除數據塊中全部存儲單元。

  5. 閃速存儲器(Flash ROM):一種塊擦寫型存儲器,是一種高密度、非易失性的讀/寫半導體存儲器。在某種低電壓下,其內部信息可讀不可寫,在較高的電壓下,其內部信息能夠更改和刪除。

高速緩存

利用程序訪問的局部性原理,把程序中正在使用的部分(活躍塊)存放在一個小容量的高速Cache中,使CPU的訪存操做大多針對Cache進行,從而解決高速CPU和低速主存之間速度不匹配的問題,使程序的執行速度大大提升。最早須要的數據項應該被放入高速緩存,同時最好將臨近的多個項也放入。

  1. 地址映射

    • 直接映射:


    主存塊直接映射到Cache上,每一個主存塊只有一個固定位置可存放,容易產生衝突,只適合大容量Cache採用。

    • 相聯映射:


    主存塊能夠放置到高速緩存中任何一個位置上,Cache的利用率高,塊衝突機率低,只要淘汰Cache中的某一塊,便可調入主存的任一塊。可是,因爲Cache比較電路的設計和實現比較困難,這種方式只適合於小容量Cache採用。

    • 組相聯映射:


    將直接映射和相聯映射結合起來使用,高速緩存被分紅組,主存塊能夠被映射到特定組中的任意位置。

  2. 替換算法:

    • LFU(Least Frequently Used,最不常用)算法:將一段時間內被訪問次數最少的那個塊替換出去。每塊設置一個計數器,從0開始計數,每訪問一次,被訪塊的計數器就增1。當須要替換時,將計數值最小的塊換出,同時將全部塊的計數器都清零。不能嚴格反映近期訪問狀況,新調入的塊很容易被替換出去。

    • LRU(Least Recently Used,近期最少使用)算法:把CPU近期最少使用的塊替換出去。這種替換方法須要隨時記錄Cache中各塊的使用狀況,以便肯定哪一個塊是近期最少使用的塊。每塊也設置一個計數器,Cache每命中一次,命中塊計數器清零,其餘各塊計數器增1。當須要替換時,將計數值最大的塊換出。實現起來比較複雜,系統開銷較大,保護了剛調入Cache的新數據塊,具備較高的命中率,可達90%。

    • 隨機替換算法:無論Cache的狀況,根據一個隨機數選擇一塊替換出去。隨機替換算法在硬件上容易實現,速度快。可是下降了命中率和Cache工做效率。

  3. 寫操做策略:

    • 寫回法(Write-Back):當CPU寫Cache命中時,只修改Cache的內容,而不是當即寫入主存;只有此塊被換出時才寫回主存。這種方法寫Cache和寫主存異步進行,減小了訪問主存的次數,可是存在數據不一致的隱患。實現這種方法時,每一個Cache塊必須配置一個修改位,以反映此塊是否被CPU修改過。

    • 全寫法(Write-Through):當寫Cache命中時,Cache與主存同時發生寫修改。使用這種方法寫Cache和寫主存同步進行,於是較好地維護了Cache與主存的內容一致性。實現這種方法時,Cache中的每一個塊無需設置修改位以及相應的判斷邏輯,但因爲Cache對CPU向主存的寫操做沒有高速緩衝功能,從而下降了Cache的功效。

    • 寫一次法(Write-Once):結合寫回法和全寫法的寫操做策略,寫命中與寫未命中的處理方法與寫回法基本相同,只是第一次寫命中時要同時寫入主存,以便於維護系統所有Cache的一致性。

  4. 預取:經過預取指令使地址指向的數據被裝入高速緩存,避免讀失效時處理器暫停引起的開銷。最好在處理器執行不會引起失效指令時開始預取,這樣主存訪問就能與處理器運算重疊。預取也能夠經過硬件實現,這須要增長用於發現存儲器引用模式並根據這個模式預取數據的電路。

  5. 無鎖定高速緩存:能支持多個未響應失效的高速緩存,容許處理器在高速緩存響應失效時仍能訪問他(傳統的高速緩存在預取操做完成前會阻止其餘對高速緩存的訪問,在它響應一次失效時稱他爲被鎖定了)。一次只能響應一個失效,所以須要引入用於跟蹤全部未響應失效的電路。

虛擬存儲器

一個容量很是大的存儲器的邏輯模型,藉助於磁盤等輔助存儲器來擴大主存容量。當計算機系統的物理主存空間沒有處理器生成的地址所能跨越的空間大時,由操做系統把主存和輔存這兩級存儲系統管理起來,實現自動覆蓋。一個大做業在執行時,其一部分地址空間在主存,另外一部分在輔存,當所訪問的信息不在主存時,則由操做系統而不是程序員來安排I/O指令,把信息從輔存調入主存。

  1. 頁式虛擬存儲器:

    • 每頁長度固定的,創建方便,新頁調入也容易可是因爲程序不可能正好是頁面的整數倍,最後一頁的零碎空間將沒法利用而形成浪費。

    • 以頁爲基本單位的虛擬存儲器,虛存地址到實存地址的變換是經過存放在主存中的頁表來實現。

    • 不是邏輯上獨立的實體,這使得程序的處理、保護和共享都比較麻煩。

    • 虛存地址由高位的邏輯頁號和低位的頁內地址組成。實存地址由高位的物理頁號和低位的頁內地址組成。虛存地址到實存地址的變換是經過主存中的頁表實現。頁表中,對應每個虛存邏輯頁號有一個表項,表項內容包含該邏輯頁所在的主存頁面地址(物理頁號),用它做爲實存地址的高字段,與虛存地址的頁內地址字段相拼接,產生完整的實存地址,訪問主存,過程如圖:

    • 快表和慢表:

      用途:快表由硬件組成,比頁表小得多,存放當前最經常使用的頁表信息,做爲慢表部份內容的副本。存儲在一個小容量的快速存儲器中,該存儲器是按內容查找的相聯存儲器,可按虛頁號名字進行查詢,迅速找到對應的實頁號。


    查詢過程:查表時,由邏輯頁號同時去查快表和慢表。當在快表中有此邏輯頁號時,就能很快地找到對應的物理頁號送入實主存地址寄存器,從而作到雖採用虛擬存儲器但訪主存速度幾乎沒有降低;若是在快表中查不到,那就要花費一個訪主存時間去查慢表,從中查到物理頁號送入實存地址寄存器,並將此邏輯頁號和對應的物理頁號送入快表,替換快表中應該移掉的內容。

    1. 段式虛擬存儲器:

      • 按照程序的邏輯結構劃分的,各個段的長度因程序而異,容易在段間留下不能利用的零碎空間,形成浪費。

      • 具備邏輯獨立性,因此易於實現程序的編譯、管理、修改和保護,也便於多道程序共享。

      • 段表:須要一個段表。段表通常駐留在主存中,其中每一行記錄了(虛擬)段號、裝入位、段起點和段長等信息。結構如圖:

      • 訪問過程:CPU根據虛地址訪存時,首先將段號與段表的起始地址相拼接,造成訪問段表對應行的地址,而後根據段表的裝入位判斷該段是否已調入主存。若已調入主存,則從段表讀出該段在主存中的起始地址,與段內地址(偏移量)相加,獲得對應的主存實地址。

    1. 段頁式虛擬存儲器:把程序按邏輯單位分段,再把每段分紅固定大小的頁。主存空間也劃分爲若干個一樣大小的頁。虛存和實存之間以頁爲基本傳送單位,每一個程序對應一個段表,每段對應一個頁表。虛地址包含段號、段內頁號、頁內地址三部分。CPU訪問時,首先將段表起始地址與段號合成,獲得段表地址,而後從段表中取出該段的頁表起始地址,與段內頁號合成,獲得頁表地址,最後從頁表中取出實頁號,與頁內地址拼接造成主存實地址。

    2. 頁面替換:

      • 經常使用算法:LRU算法、LFU算法、FIFO算法

      • 與Cache替換策略的不一樣:

        • 缺頁至少要涉及一次磁盤外存存取,讀取所缺的頁,因缺頁損失要比Cache未命中大得多。

        • 頁面替換是由操做系統軟件實現的,而Cache的塊替換則是由硬件實現的。

        • 頁面替換的選擇餘地很大,屬於一個進程的頁面均可替換。

    磁性硬盤

    磁盤系統中存儲介質由安裝在一個軸上的一個或多個磁盤組成,每一個盤上覆蓋着一層磁性薄膜,一般兩面都有。盤放在一個旋轉的驅動器上,使磁性表面在讀寫磁頭附近移動,各個磁盤旋轉速度統一,每一個磁頭包括一個磁軛和一個磁性線圈。?視頻:How a Hard Drive works

    • 磁盤:裝配的盤體

    • 磁盤驅動器:電機裝置,旋轉磁盤和移動讀寫磁頭。

    • 磁盤控制器:控制系統運做。

    • 寫操做:磁性線圈施加適當極性的電流脈衝將數字信息存儲到磁性薄膜上,這使磁頭下的薄膜區域的磁化方向與施加的磁場同向。

    • 讀操做:磁性薄膜相對磁軛的運動致使磁頭附近的磁場發生變化,在磁性線圈中感應出電壓。由控制電路檢測到的電壓正負判斷磁膜的磁化狀態。

    • 相位編碼(曼徹斯特編碼):若是二進制狀態0、1用磁化兩個相反狀態表示,那麼只有在位流中0變成1或者1變成0時磁頭才能感應出電壓,而一長串的0或1只有在這個串的開頭和結尾才能產生感應電壓。爲了判斷存儲的連續的0或1的個數,必須用一個時鐘提供同步信息。而相位編碼把時鐘信息結合到數據中,使每一個位都有磁性變化發生。

    • 讀寫過程:讀寫磁頭與轉動的盤面保持一個很近的距離,以此來得到較高的位密度和可靠的讀寫操做。當磁盤以一個穩定的速度旋轉時,在盤面和磁頭之間會產生一個空氣壓力,迫使磁頭遠離盤面(可用彈簧裝置抵消這個力,緩解可能形成的起伏)。

    • 溫徹斯特技術:將盤體和磁頭放在一個密封的、對空氣進行過濾的外殼中,使裏面不存在灰塵微粒。這樣,磁頭能夠離磁化軌跡表面更近,數據也就能以更高的密度存放,磁道之間的距離也越近。

    • 磁盤的組織結構:磁盤的盤面被分紅同心的磁道,每一個 磁道 又分紅 扇區(扇形的),各個表面上相同磁道的集合造成邏輯上的柱面。數據位順序存在每一個磁道中,每一個扇區一般包含512個字節。數據前面有一個扇區頭,包含(標誌)尋址信息,用來在選定的磁道上找到須要的扇區。數據後由糾錯碼(ECC)組成附加位,用來檢測讀寫時可能發生的錯誤。兩個扇區之間存在一個扇區間隙。

    相關文章
    相關標籤/搜索