關於程式碼如何執行的五個問題
哈嘍大家好,我是咕嚕老尼,今天我和大家分享一下關於程式碼如何執行的五個問題。
問題 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 有個關於多執行緒的識別問題執行緒
- 關於使用JupyterNotebook執行程式碼執行到一半會閃退的問題行程
- 關於 AppCrawler 執行過程中的幾個小問題APP
- DevSecOps五個需要關注的編碼問題dev
- 關於js執行緒問題的解讀JS執行緒
- 關於kindeditor插入程式碼問題
- 關於物件導向的方法並行執行的問題物件並行
- 03.關於執行緒你必須知道的8個問題(中)執行緒
- 04.關於執行緒你必須知道的8個問題(下)執行緒
- 關於公司程式碼許可權的問題
- 關於程式碼簽名證書10個常見問題
- 一個“指令碼執行夯死”問題的分析指令碼
- J2SE - 關於SimpleDateFonnat的執行緒安全問題執行緒
- 請教個問題執行 httprunner 遇到的問題HTTP
- [併發程式設計]-關於 CAS 的幾個問題程式設計
- 關於 Angular Universal 應用執行時需要 Browser API 的問題AngularAPI
- 關於程式與執行緒的一個簡單解釋執行緒
- 實現手機直播原始碼中兩個執行緒依次執行的相關程式碼原始碼執行緒
- 多執行緒相關問題執行緒
- 關於如何解決IDEA中同一個src下多個類中之一執行時自動報錯其他類中的問題導致想要執行的類無法正常執行的問題的解決思路Idea
- 關於執行緒池的面試題執行緒面試題
- Java併發(11)- 有關執行緒池的10個問題Java執行緒
- 多執行緒程式是如何執行程式碼的?執行緒行程
- 關於執行緒的幾個函式執行緒函式
- 關於修改程式碼後不能及時生效的問題
- fastapi 關於執行緒池、同步、非同步的問題解答彙總ASTAPI執行緒非同步
- 教你如何解決win10執行msi提示錯誤程式碼2502的問題Win10
- 關於MQ的幾件小事(五)如何保證訊息按順序執行MQ
- 關於Integer面試的一個問題面試
- 關於ImageView的幾個常見問題View
- 關於解決問題的幾個段位
- 關於dcat-admin的兩個問題...
- 【學習筆記】關於Freemark程式碼輸出值的問題筆記
- 關於dcat-admin 程式碼生成器生成crud的問題
- 回覆關於原始碼沙盒防洩密的四個問題原始碼
- 關於32位程式在64位系統下執行中需要注意的重定向問題
- 關於一個歸檔問題?
- 解決:如何將Python程式碼打包成exe可執行程式的問題Python行程