我之前問過一個關于如何將資料推送到 CPU 中的暫存器的問題
我現在的問題是,程式執行所需的指令是否會像推送資料一樣被編譯器移動到記憶體中?
如果第一個問題的答案是肯定的,那么當 CPU 設計人員剛從代工廠出來時,它們會將什么加載到快取/主記憶體中?由于以前從未在芯片上運行過任何程式,是否在芯片設計和制造時將任何指令預加載到記憶體中,以便在第一次上電時執行一組預定義的序列?
uj5u.com熱心網友回復:
程式的指令如何發送到不同的記憶體級別?
處理器使用程式計數器(也稱為指令指標)將它們拉入快取,該指令指標指向要執行的下一條指令。
首次制造芯片時是否已預加載?
不適用于通用程式。只有特殊環境才能將程式刻錄到永久存盤中,例如 ROM,這可能會在啟動計算機或嵌入式系統時發生。通用程式依靠作業系統將其代碼和資料與記憶體相關聯。
我現在的問題是,程式執行所需的指令是否會像推送資料一樣被編譯器移動到記憶體中?
回顧:編譯器遵循(源)代碼程式的陳述句和運算式,將它們翻譯成機器代碼指令和資料;這些機器代碼指令指示處理器如何執行高級語言程式。這包括將資料加載到 CPU 暫存器中的機器代碼指令,有時是為了使資料更接近 CPU 以便更快地使用,有時是因為這是 CPU 可以對資料進行操作的唯一方式(通過機器代碼指令處理器組)。
在記憶體中擁有機器代碼指令和在處理器中擁有機器代碼指令是有區別的。
編譯器本身并不命令將指令移入處理器。處理器是機器代碼指令的解釋器,它自己會將指令拉入自身執行。編譯器列出指令序列,CPU 自動將它們帶入執行——這就是 CPU 的目的。
程式代碼(模現代快取)太大而無法直接加載到 CPU 中。因此,程式存盤在主存盤器中,例如太大而無法直接放入 CPU 的資料。程式代碼是機器代碼指令的序列。由于這些指令存盤在記憶體中,每條指令都有一個唯一的記憶體地址!處理器通過它們的記憶體地址來參考指令,并且通過它們的記憶體地址來了解現在正在執行什么指令以及接下來將/應該執行什么。
其機制是指令指標暫存器(intel-speak)或程式計數器暫存器(幾乎所有其他機器代碼語言),但概念是相同的:處理器內部有一個基本暫存器,其作業是保存現在正在執行的機器代碼指令的地址,其作業也是改變以指示接下來要執行的指令。
如前所述,處理器是機器代碼指令的解釋器。它以所謂的獲取-執行模式使用其內部程式計數器,在這種模式下,它要求記憶體系統提供下一步要執行的機器代碼指令的值。這種需求,即讀取某個特定記憶體地址的請求,可能會導致快取未命中或頁面錯誤(或兩者兼而有之),最終,通過處理器和作業系統的合謀,將導致機器代碼指令加載到記憶體中,加載到快取,加載到處理器本身。
程式的每條機器代碼指令都會通知處理器接下來要執行什么機器代碼指令。程式可以向后移動程式計數器以重新執行已經執行的指令(形成回圈)或向前移動以退出回圈或跳過 then 或 else 陳述句。處理器和機器代碼之間存在合作,在每一步都告訴處理器下一步要執行什么機器代碼。因此,機器代碼程式正在指導機器代碼程式序列的執行,但實際執行的是處理器(盡管在程式的指導下)。
我們會說編譯器告訴處理器將指令加載到 CPU 中執行嗎?有點,但不像將資料加載到 CPU 中的命令那么明確。
The compiler creates a sequences in the machine code program used to control execution, so I would say it implicitly tells the processor what instructions to bring into the caches. Otherwise (modulo memory mapping and page faulting) the machine code instructions are already in memory (by the operating system associating the memory with the program code & data), and the processor will manage caches to keep frequently executing instructions in the higher levels of the cache.
what do CPU designers load into the cache/main memory when it comes fresh out of the foundry?
Nothing, the memory is considered blank and can be repurposed. On some systems we cannot even guarantee the value of each memory cell when the processor boots. Where the program (as a file on disc) specifies the proper initial values for memory, then the original values that were in memory, from boot or from another program's execution, are replaced with those specified values. Other memory used by the program is zeroed out before use.
are any instructions preloaded into memory at the time of designing and manufacturing of the chip so that it executes a pre-defined set of sequences when it is powered up for the first time?
Yes, sometime some memories are hard-coded with code and data that helps the computer boot. This is not a general purpose way that programs run.
uj5u.com熱心網友回復:
我認為您試圖使這一點過于復雜化。您的問題當然很廣泛,并且有不同的解決方案。
微控制器、MCU 往往具有某種形式的非易失性存盤,今天這意味著閃存。對于每個品牌/系列/產品,都有某種方法可以使用零件的引腳以某種方式對閃存進行編程。機器代碼、程式/指令以及資料都可以編程到這個閃存中。然后在正常啟動時,MCU 中的處理器將開始執行這些指令并運行應用程式。
普通處理器,或者說是非 mcus,通常沒有片上非易失性存盤。通常會有某種形式的片外非易失性存盤,例如閃存、SD 卡介面等。該存盤將包含機器代碼等,用于啟動芯片并使其運行。
一些處理器具有片上 sram 并具有一些介面,可以通過芯片上的介面進入以停止處理器,將指令加載到該存盤器并開始執行這些指令。有些人可能會以某種方式使用這個 sram,復位/啟動時的邏輯會將指令從 sd 卡復制到這個 sram,然后啟動從那個 sram 執行的處理器。
每個處理器都沒有一種啟動方式。
例如,一旦運行作業系統,硬碟上的程式就可以被作業系統加載到記憶體中,然后跳轉到該代碼開始運行。
快取只是快取,它位于處理器和主記憶體之間(對于 Linux/Windows/MacOS 型別的系統通常是 DRAM)。您通常有一個 MMU,即記憶體管理單元,由軟體(內核/作業系統)配置來描述系統并定義要快取地址空間的哪些部分以及以何種方式(指令、資料等)。然后,當處理器發生記憶體事務并通過 mmu 時,這會將事務標記為可快取或不可快取,然后快取(如果已配置并啟用)將....快取該事務...您不填寫直接快取,快取基本上是自動的,并且基于經過的事務,通常不可預測。
已經有處理器芯片設計,由于各種原因,具有片上 ROM 或閃存,由芯片制造商編程。這可以用于驅動 CISC 設計的微代碼,這可以是 MCU 的工廠引導加載程式,或其他原因。
記憶體,DRAM,是動態的 D,你不僅要為它作業才能保留任何資訊,它是易失性的,當電源關閉或重繪 停止時,它會丟失它的資訊。您絕對不會在某些工廠對此進行預編程。
SRAM 也是如此。
除了一些非常罕見的情況外,邏輯設計為從一些非易失性存盤啟動(這些天是某種形式的片上或片上閃存設備)。該非易失性存盤通常由產品供應商(而非芯片供應商)、計算機主板、電視機頂盒、手機等進行編程。然后該代碼通常會在其他某種非易失性存盤上尋找其他軟體(硬碟、SSD 等)。當然,該軟體可能是一個作業系統,然后可以運行其他各種應用程式(網路瀏覽器、郵件程式、游戲等)。您通常有一種解決方案來啟動芯片、初始化 DRAM 等,以準備系統從某些媒體加載和運行作業系統,這與引導加載程式不同并不罕見。然后作業系統加載并運行應用程式,
車很一般。用戶必須插入一個密鑰并打開它并啟動它。然后用戶必須把它開到某個地方。事物完成其作業的多個步驟。汽車的設計使得駕駛員不是預先內置在汽車中的,而是一個通用界面,以便無數不同的操作員可以啟動和駕駛汽車。
與處理器/系統相同,復位啟動引導加載程式,引導加載程式加載作業系統,作業系統加載應用程式。軟體存盤在一種或多種形式的非易失性存盤器中,并通過設計到硬體(芯片或板)中的通用介面加載。
RAM, including layers of caches, are simply volatile storage devices on layers of buses according to some design. Professor writes formulas on the whiteboard, from their brain, student copies those formulas onto paper, longer term storage. Professor runs out of white board and starts to erase some of the info to make room for more. The whiteboard is just a cache between the professor and the students notebook. There is no reason for the whiteboard to be pre-loaded with a fraction of one lecture when the building is constructed. It is designed to be used and reused runtime.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/424431.html
