2010-04-10 167 views
0

考慮一個系統如下:一個硬件板,具有ARM Cortex-A8和Neon Vector協處理器,以及在Cortex-A8上運行的嵌入式Linux操作系統。在這種環境下,如果某些應用程序 - 例如,視頻解碼器 - 被執行,則:如何組織外部內存,內部內存和緩存?

  • 它是如何決定哪些緩衝區將在外部存儲器中,哪些會在內部SRAM分配等

  • 當在這樣的系統/代碼上調用calloc/malloc時,返回的指針來自哪個內存:內部還是外部?

  • 用戶可以在他選擇的內存(內部/外部)中分配緩衝區嗎?

  • 在ARM體系結構中,還有另一個稱爲「緊耦合存儲器」(TCM)的存儲器。那是什麼以及用戶如何啓用和使用它?我可以在這個內存中聲明緩衝區嗎?

  • 我是否需要查看硬件板的內存映射(如果有)以瞭解典型硬件板中存在的所有這些不同的物理內存?

  • 操作系統在區分這些不同的內存方面扮演了多大的角色?

對不起,有很多問題,但我認爲它們都是相互關聯的。

+0

你是什麼意思的內部與外部記憶?您已經分別提到了緩存,所以我認爲既不是「內存」,也不是「緩存」的一部分。您是否使用「內部存儲器」來指代由Cortex-A8提供的一些片上RAM? – 2010-04-10 18:50:24

+0

@戴爾:我的意思是內部存儲器 - 快速訪問芯片內存。外部存儲器=高延遲內存片外存儲器,高速緩存是分開的,可以說L1高速緩存。 – goldenmean 2010-04-11 06:49:43

回答

4

請注意,我並不熟悉ARM或嵌入式Linux的具體內容,因此我所有的評論都是從一般觀點出發的。

首先,關於緩存:在引導很早的時候,操作系統會做一些緩存初始化。實際上,每個處理器會有所不同,但最終效果是確保緩存正確初始化,然後啓用處理器使用。在此之後,緩存僅由處理器操作,操作系統或程序無需進一步交互。現在

,到外部(芯片外)和內部(片內)存儲器:

操作系統擁有系統上的所有硬件,包括內部和外部存儲器等是最終用於發現負責,在內核和用戶進程中配置和分配這些資源。在典型的系統中(例如桌面或1u服務器),通常不會有任何特殊的內部(片上)內存,因此操作系統可以平等對待所有的內存。它將進入一個普通的頁面池(通常爲4k),用於分配進程,文件系統緩衝區等。在具有各種特殊內存(nvram,高速片上內存和其他一些內存)的系統上,操作系統的一般政策通常不正確。

這如何呈現給用戶將取決於將操作系統移植到此係統時所做的選擇。

  • 一個可以修改OS是明確地意識到這個特殊的內存,並提供特殊的系統調用分配給用戶進程的土地。但是,這可能是相當多的工作,除非使用嵌入式Linux至少有一些支持這種事情。

  • 我可能採取的方法是避免修改內核本身,而是爲內部內存寫一個設備驅動程序。這種驅動程序通常會提供某種類型的接口,以允許用戶進程獲得對內部存儲器的簡單地址訪問。

下面是一些具體問題的答案。

操作系統在區分這些不同的內存方面扮演了多大的角色?

如果您的系統已經採取上述的設備驅動程序的方法,那麼操作系統可能只知道大約外部存儲器,或者只是有足夠的瞭解內部存儲器他們正確初始化儘管這有可能會在設備驅動程序太,如果可能的話。如果操作系統更清楚地瞭解片上內存,那麼它肯定會包含任何所需的初始化代碼,以及某種方案來提供對用戶進程的訪問。

它是如何決定哪些緩衝區將在外部存儲器中,哪些會在內部SRAM分配等

這似乎不太可能,我認爲操作系統會嘗試這樣的選擇自動化。相反,我懷疑操作系統或設備驅動程序會提供一個通用接口來提供對片上存儲器的訪問,並將其留給用戶代碼來決定如何處理它。

當在這樣的系統/代碼上調用calloc/malloc時,返回的指針來自哪個內存:內部還是外部?

幾乎可以肯定,malloc和朋友會返回指向一般片外存儲器的指針。在上面建議的基於驅動程序的方法中,您可以使用mmap訪問片上存儲器。如果您需要進行更細粒度的分配,您需要編寫自己的分配器,或者找到一個可以提供顯式內存區域的分配器。

用戶可以將緩衝區設置爲被分配在他選擇的記憶中(內部/外部)?

如果你指的是從地區標準malloc調用返回,大概不會緩衝區。但是,如果您的意思是「用戶程序能否以某種方式獲得指向片上內存的指針」,那麼答案几乎肯定是,但機制將取決於將Linux移植到此係統時所做的選擇。

在ARM體系結構中,還有另一個稱爲「緊耦合存儲器」(TCM)的存儲器。那是什麼以及用戶如何啓用和使用它?我可以在這個內存中聲明緩衝區嗎?

我不知道這是什麼。如果我不得不猜測,我會認爲這只是片上內存的另一種形式,但由於它有不同的名稱,可能我錯了。

我是否需要查看硬件板的內存映射(如果有)以瞭解典型硬件板中存在的所有這些不同的物理內存?

如果操作系統和/或設備驅動程序提供了對這些內存區域的某種抽象訪問,那麼您不需要明確瞭解地址映射。然而,這種知識需要在內核或設備驅動程序中實現這種訪問。

我希望這有些幫助。

+0

@戴爾:嗨戴爾,謝謝你的詳細解答。它有幫助。 – goldenmean 2010-04-11 12:44:49

+0

關於TCM,它是快速記憶。非常像高速緩存 - 事實上,在大多數設備中,內存可以配置爲TCM或緩存 - 除了內容是靜態的:如果您將數據存儲在那裏,它將保證保留。您將使用它來存儲您需要快速訪問的代碼和數據,並且您無法承擔使用緩存的不可預測性。例如。關鍵中斷例程或任何非常時間關鍵的代碼,您認爲您可以(而且值得)比緩存分配機制更智能。 – Lolo 2015-01-07 17:34:18

+0

@Lolo感謝您的補充信息。 – 2015-01-08 06:17:08