主頁 > 移動端開發 > 程式的指令如何發送到不同的記憶體級別?首次制造芯片時是否已預加載?

程式的指令如何發送到不同的記憶體級別?首次制造芯片時是否已預加載?

2022-02-16 23:40:11 移動端開發

我之前問過一個關于如何將資料推送到 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

標籤:部件 记忆 中央处理器 cpu架构 指示

上一篇:匯入二進制檔案gnu-assembler時檢查標簽之間的距離

下一篇:qemu-system-aarch64總是進入例外級別2并在切換到EL1時掛起。為什么?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more