色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

內存是怎么映射到物理地址空間的?內存是連續分布的嗎?

冬至子 ? 來源:UEFI社區 ? 作者:wolf uefiblog ? 2023-06-30 15:59 ? 次閱讀

如果我們將兩個4G內存插入內存插槽,得到的內存地址空間是0到8G嗎?是不是0到4G是第一根內存,4到8G是第二根內存呢?實際情況相差甚遠,內存在物理地址空間的映射是分散的。一部分原因是4G以下有Memory map IO(mmio)空間和PCIe的配置空間,另一個原因是Interleaving會打撒內存地址到各個Channel、DIMM甚至是Rank和bank上。今天我們就一起來了解一下x86系統的地址空間分布。

物理地址空間

一個典型的物理地址空間是這樣的:

圖片

其中只有灰色部分是真正的內存,其余都是MMIO。而內存被分為High DRAM和Low DRAM,如圖:

圖片

為什么要把內存強行分割成兩塊呢?因為歷史的包袱。最早內存都很小,32位的地址(4G)空間看起來永遠也用不完,低地址被分配給內存用,高地址就自然而然被分配用來給Memory map IO。既然已經分給它們了,為了兼容以前的驅動,這一塊就被固定下來。再有內存就只能從4G以上分配了。

Low MMIO和High MMIO

Low MMIO結構如下圖:

圖片

其中有幾塊要特別說明一下:

1.Boot Vector的空間是BIOS內容映射的地址,它的大小是可以調節的,為了滿足不同大小的BIOS。

2.Local APIC是APIC中斷模式各個內核local APIC寄存器的映射地址。

3.PCI ECAM也有叫做PCIBAR,是PCIe配置地址空間的映射地址。它的起始地址可調,臺式機BIOS一般會把它設置得很高,這樣4G以下內存會比較大,方便32位Windows使用。舉個例子,如果我們把PCIe BAR(BEGREG)設為0x80000000,那么盡管插了8G DIMM,4G以下也不會超過2G的內存可以使用,而2到8G的真實內存都被映射到在4G地址空間以上了,而這些是32位Windows使用不了的。所以有的主板運行32位操作系統發現可用內存小了一大塊就是這個原因。它的大小可以修改,一般可以設為64MB和128MB。

High MMIO被BIOS保留作為64位mmio分配之用,例如PCIe的64位BAR等。

Low DRAM和High DRAM

4G以下內存最高地址叫做BMBOUND,也有叫做Top of Low Usable DRAM (TOLUD) 。BIOS也并不是把這些都報告給操作系統,而是要在里面劃分出一部分給核顯、ME和SMM等功能:

圖片

紅框中是在low DRAM被“偷”的部分

4G以上的內存最高端叫做Top of Up Usable DRAM (TOUUD) ,再上面就是High MMIO了。

1MB以下比較特殊,里面全部都是已經被淘汰的傳統BIOS和DOS關心的內容,我們叫它DOS Space或者Legacy Region:

圖片

在那里,我們習慣用傳統的實模式地址來劃分它們的具體內容:

1.0~640KB,傳統DOS空間。

2.A段和B段,傳統SMM空間。VGA的MMIO也被映射到這里,可以通過寄存器切換。

3.C段和D段,legacy opROM映射空間和EBDA空間。

4.E段和F段,BIOS空間的Lower和Upper映射地址。BIOS的rom內容也會被映射到這里,方便Legacy BIOS實模式跳轉到保護模式。

內存的Interleave

從前面可以看出內存在地址空間上被拆分成兩塊:Low DRAM和High DRAM。那么在每塊地址空間上分配連續嗎?現代內存系統在引入多通道后,為了規避數據的局部性(這也是Cache為什么起作用的原因)對多通道性能的影響,BIOS基本缺省全部開啟了Interleaving,過去美好的DIMM 0和DIMM 1挨個連續分配的日子一去不復返了。

什么是Interleaving?簡單來說,就是讓內存交錯起來,如下面的動圖:

圖片

這是一個bank層級的模4的interleaving。在桌面電腦上,常見的還有Channel級的、DIMM級的和Rank級的。

服務器上Interleaving更是不可或缺,它的粒度更細,可以達到數十bytes層級的interleave,它和內存的其他特性,如類似磁盤陣列RAID的內存spare, mirror特性,構成了復雜異常的內存映射系統。在BIOS里面,臺式機/筆記本內存映射相對簡單,只有一個大表和數十個寄存器;而在服務器BIOS中,有數個相互關聯的大表和寄存器陣列來解碼(decode)內存的請求,代碼的硬件邏輯也是相當復雜。關于它,我會有一篇專欄文章討論地址譯碼和地址反向解碼,詳細內容那里再說,這里只需要知道,物理內存分布在各個DIMM上就夠了。

物理地址到內存單元的反推

BIOS實際上一手導演的內存的分配,它當然可以從任何物理地址反推回內存的單元地址。我們可以用下面一組數據來唯一確定某個內存單元:

Channel #;DIMM #; Rank #;Bank #;Row #;Column #

在內存分配表缺失的情況下,BIOS甚至可以通過它填過的寄存器重建這個映射表。但實際上BIOS并不希望一般用戶知道這些信息,因為有安全性問題。

暴露內存信息容易招來內存側信道攻擊(Side Channel),比較有名的有Row hammer攻擊。簡單的來說它是通過反復寫某個內存單元,借助內存的特性,希望影響相鄰Row/Column的內容。

有些情況確實需要知道這些信息,就是內存出錯的時候。和大家想象的不同,內存是會出錯的。尤其云服務器中內存的出錯是十分頻繁的。出錯起來也千奇百怪,開始可能是偶爾的隨機錯誤,經過ECC等校正后,就再也不會復現;而有時是某個Bit總是出錯,進而慢慢的整個row、column或者相鄰的cell開始出錯,從可以糾正的錯誤變成不可修正的錯誤,導致服務器必須停機。這時候就必須知道哪個內存壞了,進而換掉它。

報告給操作系統,但這個信息里面只有物理地址,如何才能知道是哪個內存單元壞了呢?在Linux上面可以通過edca(參考資料4),有編程經驗的同學可以通過edca的程序接口(參考資料3),可以得到更加豐富的信息。

如何關掉Interleaving

對內存有特殊需求的朋友,如果希望內存連續,可以在BIOS里面關閉所有的Interleaving來達成這個目標:

圖片

注意是所有的。之后可以通過SMBIOS來看到內存分布信息(dmidecode)。

結論

BIOS作為內存的大管家,也負責內存的分配和映射memory map。它會把這些信息通過E820, GetMemoryMap函數和SMBIOS傳遞給操作系統。操作系統在此基礎上再建立頁表,產生虛擬地址。

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

    關注

    31

    文章

    5336

    瀏覽量

    120232
  • Linux系統
    +關注

    關注

    4

    文章

    593

    瀏覽量

    27392
  • DRAM芯片
    +關注

    關注

    1

    文章

    84

    瀏覽量

    18011
  • PCIe接口
    +關注

    關注

    0

    文章

    120

    瀏覽量

    9702
  • DOS系統
    +關注

    關注

    0

    文章

    9

    瀏覽量

    1394
收藏 人收藏

    評論

    相關推薦

    鴻蒙內核源碼分析:物理地址映射

    MMU的本質 虛擬地址(VA):就是線性地址,鴻蒙內存部分全是VA的身影,是由編譯器和鏈接器在定位程序時分配的,每個應用程序都使用相同的虛擬內存地址
    的頭像 發表于 11-03 10:28 ?2097次閱讀

    操作系統中的邏輯地址物理地址

    本文是關于操作系統中邏輯地址物理地址之間的區別。計算機操作系統中的內存使用兩種不同類型的地址物理地址
    發表于 09-14 14:26 ?3996次閱讀

    EC SRAM映射到CPU Memory空間的共享內存設計

    ShareMemory,顧名思義就是共享內存。這個概念在很多計算機系統中都存在,本文特指 EC SRAM 映射到 CPU Memory 空間的共享內存設計。
    的頭像 發表于 11-18 15:11 ?1659次閱讀
    EC SRAM<b class='flag-5'>映射到</b>CPU Memory<b class='flag-5'>空間</b>的共享<b class='flag-5'>內存</b>設計

    為什么MMU的地址映射物理地址會跳變?

    關于MMU的地址映射,32位的cpu有4G的虛擬地址空間,將它分為4096個小塊,每個小塊是1M,用描述符進行虛擬地址
    發表于 08-22 05:45

    關于ARM的統一編制與內存映射機制

    中很大一部分是留給內存條中的內存的,但也常被映射到其他存儲器上(如顯存、BIOS等)。在程序指令中的虛擬地址經過段映射和頁面
    發表于 10-23 15:53

    【HarmonyOS】虛擬地址<->物理地址是如何映射

    MMU的本質虛擬地址(VA): 就是線性地址, 鴻蒙內存部分全是VA的身影, 是由編譯器和鏈接器在定位程序時分配的,每個應用程序都使用相同的虛擬內存地址
    發表于 11-03 16:20

    鴻蒙內核源碼分析(內存映射篇):虛擬地址物理地址之間是如何映射

    MMU的本質虛擬地址(VA): 就是線性地址, 鴻蒙內存部分全是VA的身影, 是由編譯器和鏈接器在定位程序時分配的,每個應用程序都使用相同的虛擬內存地址
    發表于 11-19 10:52

    ARM32 Linux的內存布局

    Kernel維護的,所以Kernel可以決定1GB的虛擬地址空間具體映射到什么物理地址。但是不管Kernel怎么映射,最多也只能
    發表于 04-24 14:20

    Linux虛擬內存物理內存的深刻分析

    內存地址,這是有獨立內存空間的好處當不同的進程使用同樣的代碼時,比如庫文件中的代碼,物理內存中可以只存儲一份這樣的代碼,不同的進程只需要把自己的虛擬
    發表于 05-31 08:00

    IO端口與IO內存區別詳解

    地址的概念 1)物理地址:CPU地址總線傳來的地址,由硬件電路控制其具體含義。物理地址中很大一部分是留給
    發表于 01-17 12:40 ?1920次閱讀
    IO端口與IO<b class='flag-5'>內存</b>區別詳解

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

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

    詳解io端口與io內存

    (一)地址的概念 1)物理地址:CPU地址總線傳來的地址,由硬件電路控制其具體含義。物理地址中很大一部分是留給
    發表于 02-11 15:37 ?0次下載
    詳解io端口與io<b class='flag-5'>內存</b>

    Linux內存映射的原理

    物理地址是處理器在系統總線上看到的地址。使用RISC的處理器通常只實現一個物理地址空間,外圍設備和物理
    的頭像 發表于 01-15 09:55 ?2094次閱讀

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

    很多人接觸Linux的內存管理是從malloc()這個C語言庫函數開始,也是從那時開始就知道了虛擬內存的概念。但很多人可能并不知道虛擬地址是如何轉換成物理地址的,今天帶你搞懂虛擬
    的頭像 發表于 10-08 11:40 ?1198次閱讀
    Linux虛擬<b class='flag-5'>地址</b><b class='flag-5'>空間</b>和<b class='flag-5'>物理地址</b><b class='flag-5'>空間</b>的關系

    linux系統查看物理地址

    將從基礎知識開始,逐步介紹高級技術。 什么是物理地址 物理地址是指訪問計算機內存或其他硬件設備時使用的真實物理位置。在計算機系統中,每個設備都有一個唯一的
    的頭像 發表于 11-16 16:47 ?3460次閱讀
    主站蜘蛛池模板: 中文字幕A片视频一区二区| 日韩hd高清xxxⅹ| 免费99精品国产人妻自在线| 美女张开腿露尿口给男人亲| 女仆乖H调教跪趴| 日日操夜夜操狠狠操| 香蕉99久久久久成人麻豆| 亚洲精品无码专区在线播放| 伊人色综合久久大香| 92午夜免费福利757| 成片在线看一区二区草莓| 国产麻豆91网在线看| 国语自产视频在线不卡| 伦理片天堂eeuss影院| 欧洲另类一二三四区| 午夜无码国产理论在线| 一起碰一起噜一起草视频| ankha成人| 国产精品视频国产永久视频| 久久电影午夜| 欧美重口绿帽video| 小向美奈子厨房magnet| 在线观看国产区| 哺乳溢出羽月希中文字幕| 国产精品亚洲精品久久国语| 久久久久影视| 日本一卡2卡3卡四卡精品网站| 亚洲精品123区| 欧美成人中文字幕在线看| 色久天| 伊人综合在线22| 成 人 动漫3d 在线看| 狠狠色狠狠色综合系列| 国产一区二区内射最近更新 | 99在线在线视频观看| 国产精品久久久久婷婷五月色婷婷| 久久精品国产只有精品| 人成片在线观看亚洲无遮拦| 日韩一区精品视频一区二区| 亚洲色播永久网址大全| yellow免费观看在线|