在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

沒有虛擬地址的處理器是怎么工作的?

星星科技指導員 ? 來源:eetop ? 作者:eetop ? 2023-12-07 10:29 ? 次閱讀

這個概念在大概14年前第一次接觸,當時本科的專業并不是計算機,記得當時坐在圖書館里抱著一本書硬啃,一直想把這個概念弄清楚。

費盡力氣卻仍然似是而非,似懂非懂,因此挫敗感很大;后來讀研后,方向一直不在這里,也沒有再去看,但是當時抱著一本書“深入理解計算機系統”看了好多年,斷斷續續,仍然覺得沒有真正理解。

后來工作后,一頭扎在了各種小型芯片的設計中,各種ip的設計,各種SoC層面的調度調式,CPU性能加速優化,和模擬的各種掰扯,和軟件一起定位各種奇怪的問題,因為數字系統比較小,距離“虛擬存儲器”更加遙遠了;后來又做了一個中型的系統,說是中型,也就是大幾百萬門的系統,但是在和軟件的各種扯皮中,確實看到了復雜系統軟件健壯性的嚴峻挑戰,定位問題的困難程度,可是仍然沒有接觸“虛擬存儲器”;再后來,終于看到了真正的大系統,正經的正在做的芯片中使用了“虛擬存儲器”的概念。

終于,14年后,可以來談這個問題了。

看看沒有虛擬地址的處理器是怎么工作的,編譯環境除了將高級語言轉換成機器碼外,linker把眾多分散開發文件串起來,使得增量編譯

成為可能;同時loader就要考慮把多個獨立程序安排地址空間,例如操作系統視頻驅動,display驅動,IO驅動,wifi驅動等。

他們存儲在nor-flash or nand flash等NVM中。注意這些程序大部分會使用相對的地址尋址(或長或短,提高存儲密度必然要求),也有少量絕對跳轉地址,

這些絕對跳轉必須由loader(在這個語境下還是指 IDM PC環境)了解整個地址劃分,最后根據情況修改這些絕對跳轉地址;

然后程序開始執行時,操作系統先初始化,然后加載各個進程;

1. 指令

只是cache,不區分是誰的操作系統指令 or 進程指令;

但如果要卸載某個程序,或者update,只能重新編譯,linker and loader;但這對于大型系統來說是不可接接受的;

因為假使某個程序卸載后,update后的程序比原來大,原來連續的地址空間不夠用了,只能看看哪里還有空缺

- 用不連續的兩塊nor flash區域拼接;

但是complier會很痛苦,因為實際可能遠遠不止2塊不連續,要處理address remap問題,即使是相對分支跳轉指令;

- 或者干脆找一塊足夠大的區域,導致內存碎片,利用率不高;

note:當然處理器不會關心這些復雜的事情,它只傻傻的執行每一條指令規定的行為。

如果系統沒有cache,這些指令直接就流進處理器;

如果系統有cache,它也傻傻的根據這些物理地址,一定的算法,例如LRU來管理高速緩存,因此對cache沒什么影響;

ps:注意支持虛擬存儲器與否,對cache沒什么影響;

2. 數據

這里的數據專指程序執行過程產生的臨時數據,存儲在片上sram,or DDR中,而不是只一開始就存儲在nor flash中的literal data

-------------------------------------------------------

系統如果沒有d-cache(只有片上sram),且沒有操作系統:所有全局變量,靜態變量,全部由編譯器分配好,稱之為heap,然后分配一塊向下生長的空間作為stack,編譯器會根據某種算法估計要給stack開辟多少空間,例如這個程序就是一個大的while(1) {}, 在結尾處wfi進入休眠,由中斷驅動,

編譯器會計算最深的函數調用(stack向下生長最長) + 在這種情況下發生中斷保存現場stack需要;

但如果有“遞歸調用”則是另外一回事,編譯器可能并不知道實際工作情況,自然無法準確預估stack需要;

--------------------------------------------------------

系統如果沒有d-cache(只有片上sram),有操作系統:因為操作系統有內存管理功能,一般programmer編程不當(內存要及時free),會造成內存泄露,這個和無操作系統場景不同;當然也可能純粹應用需要的太多,系統能力有限支持不了;

--------------------------------------------------------

系統有d-cache(只有片上sram),有操作系統:和上一種區別不大,d-cache也是無腦工作,并不需要知道加載的到底是heap or stack,或者什么變量;

--------------------------------------------------------

問題:那么加入虛擬存儲器會 make a difference ?對編譯器沒什么影響,但是對系統卻有很大的影響。

分析:對于小型系統來說,各個程序系統開發者可以把關,并進行測試保證系統穩定性;

但對于大型系統來說,程序及其龐雜,開發者眾多,開發者水平不一;有第三方開發的軟件需要安裝,甚至有些有些惡意軟件要攻擊別的軟件;即某個程序可能異常可能會造成系統崩潰,或信息泄露,不管有意還是無意,最終導致這個后果。

審核編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19407

    瀏覽量

    231186
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10903

    瀏覽量

    213018
  • 操作系統
    +關注

    關注

    37

    文章

    6895

    瀏覽量

    123745
  • 虛擬存儲器
    +關注

    關注

    0

    文章

    12

    瀏覽量

    8799
  • 編譯器
    +關注

    關注

    1

    文章

    1642

    瀏覽量

    49286
收藏 人收藏

    評論

    相關推薦

    linux虛擬地址如何轉物理地址

    linux虛擬地址轉物理地址
    發表于 05-13 09:31

    探討一下ARM中的MMU虛擬地址

    的緩存效率較低。緩存效率較低,因為小內存塊需要多次讀取級別才能轉換。處理器在開始表查找時不知道轉換的大小。處理器通過執行表遍歷計算出正在轉換的塊的大小。在ARMv8-A中有三個獨立的虛擬地址空間,分別
    發表于 04-08 17:17

    ARM處理器使用虛擬地址來提供cache index和cache tag

    早期的ARM處理器使用虛擬地址(virtual addresses)來提供cache index和cache tag。VIVT優點這樣做的好處是處理器內核可以使用虛擬地址進行cache
    發表于 06-20 15:22

    用戶態得到虛擬地址對應的物理地址

    一般我們不需要從用戶態得到進程虛擬地址對應的物理地址,因為一般來說用戶進程是完全不關心物理地址的。
    的頭像 發表于 10-10 14:10 ?2555次閱讀
    用戶態得到<b class='flag-5'>虛擬地址</b>對應的物理<b class='flag-5'>地址</b>

    鴻蒙內核中虛擬地址與物理地址之間是如何映射的

    虛擬地址(VA):?就是線性地址?鴻蒙內存部分全是VA的身影?是由編譯和鏈接在定位程序時分配的,每個應用程序都使用相同的虛擬內存地址空間
    發表于 11-19 14:45 ?9次下載
    鴻蒙內核中<b class='flag-5'>虛擬地址</b>與物理<b class='flag-5'>地址</b>之間是如何映射的

    內核邏輯地址和內核虛擬地址到底有什么區別

      1) 凡是通過MMU頁表訪問的地址都叫虛擬地址,而一旦啟用了MMU,那CPU發出的所有地址都是虛擬地址內核用到的地址范圍是3G-4G(不
    發表于 03-11 10:10 ?6次下載

    虛擬地址和邏輯地址的區別是什么?

    先解釋下一個困擾了我很久的問題:虛擬地址(vitural address)和邏輯地址(logical address)的區別。 大部分操作系統的書籍要么寫的是虛擬地址,要么寫的是邏輯地址
    的頭像 發表于 06-17 14:08 ?2.4w次閱讀
    <b class='flag-5'>虛擬地址</b>和邏輯<b class='flag-5'>地址</b>的區別是什么?

    虛擬地址物理地址等眾多地址及MMU相關知識

    虛擬地址物理地址等眾多地址及MMU相關知識先聊聊存儲STM32單片機存儲關于編譯生成的文件
    發表于 12-08 12:36 ?12次下載
    <b class='flag-5'>虛擬地址</b>物理<b class='flag-5'>地址</b>等眾多<b class='flag-5'>地址</b>及MMU相關知識

    為什么要用MMU?為什么要用虛擬地址

    既然MMU開啟后,硬件會自動的將虛擬地址轉換成物理地址,那么還需要我們軟件做什么事情呢?即創建一個頁表翻譯都需要做哪些事情呢?或者說啟用一個MMU需要軟件做什么事情呢?
    的頭像 發表于 04-26 14:37 ?5043次閱讀

    虛擬地址翻譯物理地址的流程有哪些呢?

    現代的操作系統將可執行文件加載后,創建了進程,進程中每一條指令和數據都被分配了一個虛擬地址,CPU獲取到這個虛擬地址后,需要翻譯成內存的物理地址后,才能訪問指令和數據
    的頭像 發表于 08-14 10:30 ?1379次閱讀
    <b class='flag-5'>虛擬地址</b>翻譯物理<b class='flag-5'>地址</b>的流程有哪些呢?

    Linux系統為什么需要引入虛擬地址

    ,這 4GB 的內存空間按照 3:1 的比例進行分配,其中用戶進程享有 3G 的空間,而內核獨自享有剩下的1G 空間,如下所示: 虛擬地址會通過硬件MMU(內存管理單元)映射到實際的物理地址空間中,建立虛擬地址到物理
    的頭像 發表于 10-07 17:28 ?1022次閱讀
    Linux系統為什么需要引入<b class='flag-5'>虛擬地址</b>

    Linux虛擬地址空間和物理地址空間的關系

    過程,這其實也是MMU的工作原理。 我們知道,在Linux中,每個進程都有自己獨立的地址空間,且互不干擾。每個進程的地址空間又分為用戶空間和內核空間,但這些地址空間使用的都是
    的頭像 發表于 10-08 11:40 ?1258次閱讀
    Linux<b class='flag-5'>虛擬地址</b>空間和物理<b class='flag-5'>地址</b>空間的關系

    Linux虛擬地址到物理地址轉換過程

    虛擬地址到物理地址轉換過程 虛擬地址和物理地址都被劃分了兩部分: 虛擬地址虛擬頁面號VPN和
    的頭像 發表于 10-08 11:45 ?2052次閱讀
    Linux<b class='flag-5'>虛擬地址</b>到物理<b class='flag-5'>地址</b>轉換過程

    虛擬內存到物理地址的轉換

    處理器根據頁表基地址控制寄存TTBCR和虛擬地址來判斷使用哪個頁表基地址寄存,是TTBR0還
    的頭像 發表于 10-30 17:34 ?794次閱讀
    <b class='flag-5'>虛擬</b>內存到物理<b class='flag-5'>地址</b>的轉換

    MMU虛擬地址空間布局

    當然虛擬地址空間劃分不只是如此。因為目前應用程序沒有那么大的內存需求,所以ARM64處理器不支持完全的64位虛擬地址,實際支持情況如下。 (1)-
    的頭像 發表于 11-26 16:35 ?927次閱讀
    主站蜘蛛池模板: 三级网站视频 | 亚洲视频一二三 | 94久久国产乱子伦精品免费 | www四虎| 亚洲一级视频在线观看 | 国产叼嘿网站免费观看不用充会员 | 成人精品人成网站 | 天天色综 | 免费一区二区 | 中国黄色一级毛片 | 天堂网一区 | 久久久久久久综合狠狠综合 | 亚洲男人的天堂成人 | 人成xxxwww免费视频 | 婷婷综合七月激情啪啪 | 色综合综合色综合色综合 | 在线干 | 国产传媒在线观看视频免费观看 | 国产美女亚洲精品久久久久久 | 亚洲精品在线不卡 | 久久国产午夜精品理论片34页 | 国产成人99久久亚洲综合精品 | 全免费a级毛片免费看不卡 全日本爽视频在线 | 日韩色中色 | 免费观看黄视频 | 国产精品久久久久天天影视 | 免费日本黄色片 | 天天综合色天天综合网 | 国产综合视频 | 欧美女同在线观看 | 老师别揉我胸啊嗯上课呢视频 | 亚洲不卡视频在线 | 狠狠综合 | 国产精品午夜剧场 | 在线天堂中文新版有限公司 | 手机看片国产高清 | 2019偷偷狠狠的日日 | 色婷婷综合久久久久中文一区二区 | 男女视频免费观看 | 欧美在线性| 色吧在线视频 |