關於程式碼如何執行的五個問題
哈嘍大家好,我是咕嚕老尼,今天我和大家分享一下關於程式碼如何執行的五個問題。
問題 1:FLASH中的程式碼是如何得到執行的呢?比如PC指標是在哪裡由誰設定的? 以 ARM 為例 的 微控制器 , 該類微控制器的程式碼在 nor flash中,cortex核心可以直接執行,不需要將程式碼載入到ram中執行。ARM-cortex-A系列的SOC , 該類 SOC更加複雜,通常有記憶體管理單元,程式碼儲存在nand flash中,程式執行時,需要先將程式碼載入到ram中執行,該類SOC的啟動環節包含了載入程式。就像Windows作業系統儲存在硬碟中,開機的時候,作業系統的程式碼會載入到 RAM 中。 PC指標:無論什麼微控制器或者SOC,都有一個PC暫存器,這個暫存器儲存了下一條待取指令的地址。正常情況下自動加“4”,遇到分支跳轉的時候,由跳轉指令設定值。那麼指標是什麼?指標是一個變數的地址,在含有作業系統即硬體層面含有記憶體管理單元的情況下,指標是虛擬地址,不含作業系統的情況下,是實體地址,虛擬地址和實體地址經過MMU轉換。
問題 2:這些程式碼需要搬到RAM中才能執行嗎?不這樣做會有什麼不妥嗎?
上文講了,大部分微控制器的程式碼直接在 nor flash中執行,少部分需要載入到ram中。nor flash可以直接定址一個位元組,可以找到一個指令的具體地址,因此可以直接執行。nand flash 的儲存單元是塊,不能對指令直接定址,因此不能直接執行其中的程式碼。因此儲存在nand flash中的程式不載入到ram中執行不了。即你的硬碟中的Windows不載入到記憶體條中,執行不起來。
問題 3:如果需要搬到RAM,那是片內還是片外有什麼區別嗎?
片內片外都可以,具體看是那款 SOC或CPU了。
問題 4:如果使用者存在FLASH的實際程式碼大小(比如1MB),超過了RAM的可用空間(比如512KB),那這個搬移過程是啥樣的?
現在實際情況很少遇到這種情況,當然可能會有 RAM很小的系統,可以分時分段的使用,即程式執行一段,載入一段,執行完,載入下一段。很不建議這樣玩,現在的RAM很大了,你的實際程式碼達到1MB的時候,你的記憶體可能都有1G,2G了。比如Linux作業系統編譯完後,實際上只有幾MB,實際的Linux系統會有幾個G 的記憶體可用。
問題 5:片外擴充套件的FLASH和SRAM與片內的想比,除了空間大小有差別,效能速度上會有怎樣的差異呢?
具體要看 SOC的匯流排設計。一般來說片外的效能弱一點。能不能在Flash中直接執行程式程式碼,取決於Flash的訪問特性。Flash儲存器是按塊組織的,在使用時也傾向於按塊訪問才更加高效。Flash類似於ROM一類的儲存器,但它其實是可讀可寫的,不同於同樣可讀可寫的RAM,它在寫入資料時需要先將你所寫位置所屬的塊擦除,不管你是不是隻寫幾個位元組,所以如果要改寫Flash中的資料,總是會先將資料所屬的塊快取到記憶體中,然後再在記憶體中改寫好資料後又重新將塊寫回,這樣就不會丟失資料,但是花銷太大。讀的時候,往往也是先定位塊的位置,然後在塊中順序讀取,在不同塊中間斷讀取資料是非常低效的,所以按塊讀按塊寫是Flash的一大特點,它不能夠隨意的對儲存區域定址,典型的如NAND Flash。
好啦今天就講到這了,我是咕嚕老尼,我們下次再見
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70035601/viewspace-3001490/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於執行緒的問題...執行緒
- 請教一個關於執行緒的問題執行緒
- 有個關於多執行緒的識別問題執行緒
- 請教一個關於NIO執行方式的問題
- 請教一個關於執行平臺的問題
- 關於執行緒插入函式如何用的問題執行緒函式
- 關於petstore的執行問題,謝謝~
- 關於defer執行順序問題
- 關於第2章執行問題
- 關於 AppCrawler 執行過程中的幾個小問題APP
- 關於js執行緒問題的解讀JS執行緒
- 關於使用JupyterNotebook執行程式碼執行到一半會閃退的問題行程
- 關於物件導向的方法並行執行的問題物件並行
- 關於kindeditor插入程式碼問題
- 關於el表示式和java程式碼的2個問題,Java
- 小小問題―關於java多執行緒Java執行緒
- 關於程式猿的六個問答題
- 關於執行緒的問題,清高手指點執行緒
- 關於多執行緒訪問靜態方法的問題執行緒
- DevSecOps五個需要關注的編碼問題dev
- 04.關於執行緒你必須知道的8個問題(下)執行緒
- 03.關於執行緒你必須知道的8個問題(中)執行緒
- 關於如何利用COM+,來提高ASP執行許可權的問題!
- 關於執行效率的問題,附原始碼,請大家給點意見原始碼
- 關於線上檢測主執行緒卡頓的問題執行緒
- 請教關於執行緒的結束問題,急!!!執行緒
- 關於的Eclipse3.0.1執行問題請教Eclipse
- 關於離開頁面時執行的操作問題
- 關於公司程式碼許可權的問題
- 40個關於Java多執行緒知識點問題總結Java執行緒
- 關於程式碼簽名證書10個常見問題
- 關於diag程式的問題
- 請教一個涉及到多執行緒的關於單例的問題執行緒單例
- 一個“指令碼執行夯死”問題的分析指令碼
- 關於解決 Java 程式語言執行緒問題的建議(4)(轉)Java執行緒
- 關於解決 Java 程式語言執行緒問題的建議(3)(轉)Java執行緒
- 關於解決 Java 程式語言執行緒問題的建議(2)(轉)Java執行緒
- 關於解決 Java 程式語言執行緒問題的建議(1)(轉)Java執行緒