【ARM】Cortex存儲系統

00. 目錄

01. 存儲系統概述

ARM 存儲系統有非常靈活的體系結構,可以適應不同的嵌入式應用系統的需要。ARM存儲器系統可以使用簡單的平板式地址映射機制

(就像一些簡單的單片機一樣,地址空間的分配方式是固定的,系統中各部分都使用物理地址),也可以使用其他技術提供功能更爲強大

的存儲系統。例如:
(1)系統可能提供多種類型的存儲器件,如 Flash、ROM、SRAM 等。

(2)Cache 技術。

(3)寫緩存技術(Write Buffers)。

(4)虛擬內存和 I/O 地址映射技術。

大多數系統通過下面的方法之一可實現對複雜存儲系統的管理。

(1)使用 Cache,縮小處理器和存儲系統速度差別,從而提高系統的整體性能。

(2)使用內存映射技術實現虛擬空間到物理空間的映射。這種映射機制對嵌入式系統非常重要。通常嵌入式系統程序存放在 ROM/Flash

中,這樣系統斷電後程序能夠得到保存。但是,通常 ROM/Flash 與 SDRAM 相比,速度慢很多,而且基於 ARM 的嵌入式系統中通常把異

常中斷向量表放在 RAM 中。利用內存映射機制可以滿足這種需要。在系統加電時,將 ROM/Flash 映射爲地址 0,這樣可以進行一些初始

化處理;當這些初始化處理完成後將SDRAM 映射爲地址 0,並把系統程序加載到 SDRAM 中運行,這樣可以很好地滿足嵌入式系統的需要。

(3)引入存儲保護機制,增強系統的安全性。

(4)引入一些機制保證將 I/O 操作映射成內存操作後,各種 I/O 操作能夠得到正確的結果。在簡單存儲系統中,不存在這樣的問題。而

當系統引入了 Cache 和 write buffer 後,就需要一些特別的措施。

在 ARM 系統中,要實現對存儲系統的管理通常使用協處理器 CP15,它通常也被稱爲系統控制協處理器(System Control

Coprocessor)。

ARM 的存儲器系統是由多級構成的,可以分爲內核級、芯片級、板卡級、外設級。下圖 所示爲存儲器的層次結構。
在這裏插入圖片描述

每級都有特定的存儲介質,下面對比各級系統中特定存儲介質的存儲性能。

(1)內核級的寄存器。處理器寄存器組可看做是存儲器層次的頂層。這些寄存器被集成在處理器內核中,在系統中提供最快的存儲器訪

問。典型的 ARM 處理器有多個 32 位寄存器,其訪問時間爲 ns 量級。

(2)芯片級的緊耦合存儲器(TCM)是爲彌補 Cache 訪問的不確定性增加的存儲器。TCM 是一種快速 SDRAM,它緊挨內核,並且保證

取指和數據操作的時鐘週期數,這一點對一些要求確定行爲的實時算法是很重要的。TCM 位於存儲器地址映射中,可作爲快速存儲器來

訪問。

(3)芯片級的片上 Cache 存儲器的容量在 8~32KB 之間,訪問時間大約爲 10ns。高性能的 ARM 結構中,可能存在第二級片外

Cache,容量爲幾百千字節(KB),訪問時間爲幾十納秒。

(4)板卡級的 DRAM。主存儲器可能是幾兆字節(MB)到幾十兆字節(MB)的動態存儲器,訪問時間大約爲 100ns。

(5)外設級的後援存儲器,通常是硬盤,可能從幾百兆字節(MB)到幾個吉字節(GB),訪問時間爲幾十毫秒。

02. 協處理器(CP15)

​ ARM 處理器支持 16 個協處理器。在程序執行過程中,每個協處理器忽略屬於 ARM處理器和其他協處理器的指令。當一個協處理器硬

件不能執行屬於它的協處理器指令時,將產生一個未定義指令異常中斷,在該異常中斷處理程序中,可以通過軟件模擬該硬件操作。例

如,如果系統不包含向量浮點運算器,則可以選擇浮點運算軟件模擬包來支持向量浮點運算。CP15 即通常所說的系統控制協處理器

(System Control Coprocessor),它負責完成大部分的存儲系統管理。除了 CP15 外,在具體的各種存儲管理機制中可能還會用到其他

一些技術,如在 MMU 中除了 CP15 外,還使用了頁表技術等。

在一些沒有標準存儲管理的系統中,CP15 是不存在的。在這種情況下,針對 CP15 的操作指令將被視爲未定義指令,指令的執行結果不

可預知。CP15 包含 16 個 32 位寄存器,其編號爲 0~15。實際上對於某些編號的寄存器可能對應多個物理寄存器,在指令中指定特定的

標誌位來區分這些物理寄存器。這種機制有些類似於 ARM 中的寄存器,當處於不同的處理器模式時,某些相同編號的寄存器對應於不同

的物理寄存器。

CP15 中的寄存器可能是隻讀的,也可能是隻寫的,還有一些是可讀/可寫的。在對協處理器寄存器進行操作時,需要注意以下幾個問題:

(1)寄存器的訪問類型(只讀/只寫/可讀可寫)。

(2)不同的訪問引發不同的功能。

(3)相同編號的寄存器是否對應不同的物理寄存器。

(4)寄存器的具體作用。

03. 存儲管理單元(MMU)

​ 在創建多任務嵌入式系統時,最好用一個簡單的方式來編寫、裝載及運行各自獨立的任務。目前大多數的嵌入式系統不再使用自己定製

的控制系統,而使用操作系統來簡化這個過程。較高級的操作系統採用基於硬件的存儲管理單元(MMU)來實現上述操作。

​ MMU 提供的一個關鍵服務是使各個任務作爲各自獨立的程序在自己的私有存儲空間中運行。在帶 MMU 的操作系統控制下,運行的任

務無須知道其他與之無關的任務的存儲需求情況,這就簡化了各個任務的設計。

​ MMU 提供了一些資源以允許使用虛擬存儲器(將系統物理存儲器重新編址,可將其看成一個獨立於系統物理存儲器的存儲空間)。

MMU 作爲轉換器,將程序和數據的虛擬地址(編譯時的連接地址)轉換成實際的物理地址,即在物理主存中的地址。這個轉換過程允許

運行的多個程序使用相同的虛擬地址,而各自存儲在物理存儲器的不同位置。

​ 這樣存儲器就有兩種類型的地址:虛擬地址和物理地址。虛擬地址由編譯器和連接器在定位程序時分配;物理地址用來訪問實際的主存

硬件模塊(物理上程序存在的區域)。

04. 高速緩衝存儲器(Cache)

​ Cache 是一個容量小但存取速度非常快的存儲器,它保存最近用到的存儲器數據副本。對於程序員來說,Cache 是透明的。它自動決定

保存哪些數據、覆蓋哪些數據。現在 Cache通常與處理器在同一芯片上實現。Cache 能夠發揮作用是因爲程序具有局部性。所謂局部性就

是指在任何特定的時間,處理器趨於對相同區域的數據(如堆棧)多次執行相同的指令(如循環)。

​ Cache 經常與寫緩存器(Write Buffer)一起使用。寫緩存器是一個非常小的先進先出(FIFO)存儲器,位於處理器核與主存之間。使

用寫緩存的目的是,將處理器核和 Cache從較慢的主存寫操作中解脫出來。當 CPU 向主存儲器做寫入操作時,它先將數據寫入到寫緩存

區中,由於寫緩存器的速度很高,這種寫入操作的速度也將很高。寫緩存區在 CPU 空閒時,以較低的速度將數據寫入到主存儲器中相應

的位置。

​ 通過引入 Cache 和寫緩存區,存儲系統的性能得到了很大的提高,但同時也帶來了一些問題。例如,由於數據將存在於系統中不同的

物理位置,可能造成數據的不一致性;由於寫緩存區的優化作用,可能有些寫操作的執行順序不是用戶期望的順序,從而造成操作錯誤。

05. 附錄

5.1 ARM處理器開發詳解筆記

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章