iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
Software Development

閱讀 Linux Kernel 文件系列 第 3

# Day3 Virtual Memory Layout on RISC-V Linux

星期日,感覺是個適合算數的好日子,所以今天的文件,就決定是你了 Virtual Memory Layout on RISC-V Linux

文件

=============================
RISC-V Linux 的虛擬記憶體佈局
=============================

:Author: Alexandre Ghiti <alex@ghiti.fr>
:Date: 12 February 2021

這份文件描述 RISC-V Linux 核心的虛擬記憶體佈局。

32 位元 RISC-V Linux 核心
=========================

32 位元 RISC-V Linux 核心
------------------------

待完成

64 位元 RISC-V Linux 核心
=========================
RISC-V 的特權架構文件描述 64 位元長度的位址
"必須讓第 63-48 位都等於第 47 位,否則會發生分頁錯誤中斷。"
而這表示有一個巨大的記憶體"孔洞"將虛擬記憶體空間分成兩半,
下半部是使用者空間所在的位址,上半部則是 RISC-V Linux 核心所使用的位址。

RISC-V Linux Kernel SV39
------------------------

https://ithelp.ithome.com.tw/upload/images/20210912/20141136sXEjeJIz7o.png

我的理解

  • RISC-V 特權架構規範(Privilege Specification)定義了 3 種不同的虛擬記憶體分頁機制(Paging),分別是 32 bit 核心的 SV32,支援 32 bit 的虛擬記憶體位址空間(virtual memory space);還有 64 bit 核心的 SV39 和 SV48,分別支援 39 bit 和 48 bit 的虛擬記憶體位址空間。
    • 需要注意的是,原文件中 RISC-V Linux Kernel 64 bit 的內文是引用 SV48 的文句;而記憶體的佈局(layout) 則是以 SV39 為例。
  • 記憶體佈局表格中提到的 different per mm,這裡的 mm 指的應該是核心中使用到的資料結構 (data structure) struct mm,這個資料結構是用來描述不同程序(process)所使用的記憶體空間(memory space)。
  • 記憶體佈局有提到的一些專有名詞,像是 kasanfixmapvmalloc/ioremapvmemmap 等等,都是核心內部使用到的不同技術,也分別有不同的文件來做介紹,這邊就不詳加贅述了,有機會另闢新文再來做紀錄。(因為筆者自己也沒有很清楚每一項的功能XDDD)
  • 本文一開始有提到算數,是指筆者有將每一個記憶體佈局中的起始位址、終端位址,拿來計算,看看是否與大小吻合,結果還真的發現感覺有些問題的地方。(筆者的組長約莫於 1 個月前有向同組組員們提及這份文件有出錯XDD)
    • 原文中 ffffffe000000000 | -128 GB | ffffffff7fffffff | 124 GB | direct mapping of all physical memory 這一個區段,拿 ffffffff7fffffff - ffffffe000000000 計算出來的大小應該是 126 GB
    • 不過若是 126 GB 的話,和接下來的區段並不吻合,所以正確的應該是:
      • 大小還是 124 GB
      • 但是 End Addr 的值要改成 fffffffeffffffff

Patch time

$ git send-email --to corbet@lwn.net \
                 --to src.res@email.cn \
                 --to alex@ghiti.fr \
                 --to linux-kernel@vger.kernel.org \
                 --to linux-doc@vger.kernel.org \
                 --to linux-doc-tw-discuss@lists.sourceforge.net \
                 --cc ycliang@cs.nctu.edu.tw \
                 --cc ycliang@andestech.com \
                 *.patch
# *.patch ==  0001-doc-Fix-typo-in-Documentation-riscv-vm-layout.patch,0002-docs-zh_TW-Add-translation-for-riscv-vm-layout.patch                                

那我們一樣明天見啦~


上一篇
# Day2 Boot image header in RISC-V Linux
下一篇
# Day 4 Feature status on riscv architecture
系列文
閱讀 Linux Kernel 文件30

尚未有邦友留言

立即登入留言