cost 83 ms
了解 AArch64 轉換表

[英]Understanding AArch64 Translation Tables

我正在做一個愛好操作系統項目,我試圖設置虛擬 Memory。 我在 x86 架構中有另一個項目使用頁表,但我現在正在學習 ArmV8。 現在,我現在知道用於尋址的最大位數是 48 [1] 。 最后 12 到 16 位“按原樣”用於選定區域內的索引(取決於選擇的粒度[2] )。 我只是不明白我們如何獲 ...

ARMv8A 管理程序 - PCI MMU 故障

[英]ARMv8A hypervisor - PCI MMU fault

我正在嘗試在 ARMv8A(QEMU 版本 6.2.0 上的 Cortext A53)上實現一個最小的管理程序。我在 EL2 中編寫了一個最小的管理程序代碼,Linux 在 EL1 中成功啟動。 現在我想啟用 stage-2 MMU。 我已經在 stage2 中編寫了基本頁表(只有必要的頁表條目到 ...

[ARM Cortex-A]:由於映射為讀/寫的代碼區域導致的權限錯誤

[英][ARM Cortex-A]: Permission fault due to code region mapped as read/write

當我嘗試從映射為讀/寫 (AP[2] == 0) 的區域執行代碼時,CPU 發出權限錯誤(異常 class == 0b100001,指令錯誤狀態代碼 == 0b001111)。 當我將映射更改為只讀 (AP[2] == 1) 時,權限錯誤就消失了。 這是 MMU 的預期行為嗎? 我認為允許從映射為讀 ...

如何檢查 Linux 內核上的默認 kvm mmu?

[英]How to check default kvm mmu on a linux kernel?

我發現 kvm 將 tdp_mmu 更改為默認啟用https://lore.kernel.org/lkml/20210726163106.1433600-1-pbonzini@redhat.com/ 如何檢查我的內核是否啟用了此參數? 我可以在運行的 centos 或 ubuntu 上重新配置它 ...

訪問跨越 MMU 頁面邊界的變量

[英]Accessing a variable that crosses a MMU page boundary

我正在從最新版的《64位匯編語言的藝術》一書中學習Windows下的X64匯編語言和MASM64。 我對書中的那句話有疑問: 在一種情況下,您確實必須擔心內存中的 MMU 頁面組織。 有時訪問(讀取)超出內存中數據結構末尾的數據是很方便的。 但是,如果該數據結構與 MMU 頁的末尾對齊,則訪問 ...

memory 管理和內存分配之間的區別。當分配/訪問發生時,它們是否一起工作2內存|它們如何完全相關

[英]difference between memory management &memory allocation.do they both work together when allocation/access happens2 memory|how they are exactly related

所以我想知道當我撥打malloc時到底發生了什么? 由於 malloc 必須是一個包裝器,所以其他一些 function 必須在內部調用它可能是brk或其他東西,但是在 brk 內部發生了什么,我所知道的是 memory 分配函數,如果成功則分配 memory 並返回非零值。 但是后來什么是memo ...

Main Memory 和 Disk storage 之間的地址轉換是如何工作的?

[英]How does the address translation between Main Memory and Disk storage work?

學習虛擬memory和memory管理時出現了這個問題。 以下描述了我到目前為止的理解: 受益於局部性原則的 memory 層次結構簡要包括(從上到下): 登記高速緩存(SRAM) 主 memory (DRAM) 磁盤存儲頁表提供從虛擬地址到物理地址的地址轉換虛擬 memory 為物理 memor ...

拆分 alloc_pages() 返回的 kernel 大頁面(THP)

[英]Splitting kernel huge page (THP) returned by alloc_pages()

我正在尋找一種方法將內核的大頁面 (2MiB) 映射拆分為較小的 (4KiB) 頁表條目。 到目前為止,我只遇到了 function set_memory_4k ,它只在早期啟動階段有效(全局變量early_boot_irqs_disabled必須為真)。 我有點不願意禁用中斷來調用這個 func ...

ARM64 linux 早期啟動階段硬掛起后啟用 mmu - 檢查更新

[英]ARM64 linux early boot stage hard hang post mmu enable - Check update

我正在嘗試在 FPGA 平台上模擬的 cortex A53 上啟動 arm64 linux(從 09/23/21 的當前 git master 構建的自定義內核配置)。 我擁有的可用內存是 2GB( 0x0 - 0x80000000 )。 我使用 u-boot 作為引導加載程序將 uImage 傳遞 ...

如何理解圖中的ARMv8 AArch64 MMU表描述符格式?

[英]How to understand the ARMv8 AArch64 MMU table descriptor format in the diagram?

下圖摘自 ARMv8-A Programmer's Guide: 我對突出顯示的條目類型有點困惑。 讓我首先陳述我目前的理解(假設在 EL3 中進行階段 1 翻譯的場景,粒度為 4KB)。 首先,在這種情況下,名稱“條目”和“描述符”似乎是可以互換的。 然后,根據 ARM ARM doc( ...

2021-09-18 05:52:07   1   264    mmu / armv8  
Linux Kernel 中 mm_struct 中的“pgd”屬性是物理地址還是虛擬地址?

[英]Is 'pgd' Attribute Physical or Virtual Address in mm_struct in Linux Kernel?

在 Arm32 架構(Flat Memory 模型)中,mm_struct 中的 'pgd' 屬性是一個虛擬地址。 但是,如果我理解正確,在 Arm64 架構(稀疏 Memory 模型)中,mm_struct 中的 'pgd' 屬性是物理地址。 為什么兩種架構之間會有如此大的差異? 為什么 Arm ...

在 C++ 中,為什么我發現堆 memory 訪問比堆棧訪問快

[英]In C++, why am I finding heap memory accesses to be faster than stack acccesses

我一直在使用 C++ 中的分析器並注意到一些非常奇怪的東西:寫入堆 memory 比堆棧 memory 更快? 這是我跑的片段 與 output 這非常重要,我意識到因為我只訪問堆上 memory 的一部分。 如果我訪問堆的許多部分,它可能總是在緩存中。 我假設我會因為 memory 可能會在堆上碎 ...

如何在 ARM64 Linux 中創建 1:1 MMU 映射?

[英]How to create 1:1 MMU mapping in ARM64 Linux?

我正在嘗試關閉 MMU 以運行一些測試代碼。 我需要創建精確的 1:1 虛擬到物理 memory 映射,以便在 MMU 關閉后運行代碼。 在這個問題中,一個人描述了一種使用匯編代碼創建這種映射的方法,但似乎在他創建映射時,系統已經無法正常工作。 我的問題是: 是否可以創建 1:1 MMU 映射, ...

linux 上的 MMU 初始化

[英]MMU initialization on linux

我正在 rust 中編寫我的 linux risc v 仿真器。 我偶然發現了 mmu 初始化。 OpenSBI 工作正常,打印信息並將控制權轉移到 linux kernel。 但是當模擬器在 arch/riscv/kernel/head.S:119 中的 satp setup ffffffe00 ...

分配前零頁的原因是什么?

[英]What is the reason for zero-out pages before allocate?

O/S 有空閑的頁面池。 所以不同的進程可以將頁面釋放到空閑池中。 在它從池 O/S 清零頁面中獲取頁面之前。 因為它們可能是頁面上的機密數據。 但為什么它歸零? 有必要嗎? 即使它們是機密數據,它也看不到。 因為不同進程的地址空間是唯一的。 分配前零頁的原因是什么? ...

Memory 管理單元如何決定將 map 頁面放入 Pysycal memory 幀?

[英]How Memory Management Unit decide to map Pages into Pysycal memory frames?

在操作系統中,它們是稱為進程頁面的塊。 所以它只會將必要的頁面加載到物理 memory 幀中。 我的問題是這些過程是二進制的嗎? (過程指令在那個階段是二進制格式?)假設編譯了 c 或 c++ 或任何程序。 所以頁面將包含整個二進制文件的一部分,對嗎? (如果我錯了,請糾正我。)這些頁面是否包 ...

誰分配進程地址

[英]Who Assigns the Process Address

我了解到計算機中的每個進程都有一個地址空間,其中包含該進程的所有指令的地址。 我也知道這個地址是一個虛擬地址——這意味着它映射到物理 RAM 地址,實際上並不存在。 當一個進程要執行時,CPU 向 MMU 發送它需要的指令的虛擬地址(我猜是頁面?),然后 MMU 可以提供它在 RAM 中的物理地址, ...

MMU如何知道操作系統正在使用的頁表級別?

[英]how do MMU knows the level of page table being used by operating system?

Afaik,在 x86 中,操作系統所做的只是設置 CR3 寄存器並讓 MMU 向左將線性地址轉換為物理地址。 但是既然這項工作是由MMU完成的,那么MMU就應該知道多級頁表是如何划分的規則。 但是,我從未見過任何文件談論這樣的細節。 有什么我誤解了嗎? ...

AArch64 (Cortex-A53) - 理解翻譯表

[英]AArch64 (Cortex-A53) - Understanding translation table

我試圖從 Cortex-A53 中理解翻譯表。 目前沒有成功。 無法啟用 MMU。 我想知道如何正確設置 MMU。 已從 ARM 嘗試過本教程。 相關代碼(啟用): 當我不啟用緩存時,它也不起作用。 用於使緩存無效的子過程調用中的代碼也是基於 ARM 教程。 我在_cpu_el2_tlb_creat ...

如何將分頁系統(demand paging)視為另一層緩存?

[英]How to view paging system (demand paging) as another layer of cache?

我嘗試解決以下問題考慮一台機器有 128MiB(即 2^27 字節)的 main memory 和一個頁面大小為 8KiB(即 2^13 字節)的 MMU。 操作系統向大型旋轉磁盤提供請求分頁。 將此分頁系統視為處理器末級緩存 (LLC) 下的另一層緩存,請回答以下有關此“緩存”特征的問題: 以字 ...


 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM