草庐IT

memory - 对内存映射感到困惑

我最近开始研究低级的东西并研究引导加载程序和操作系统等......据我了解,至少对于ARM处理器,外围设备由引导加载程序初始化,然后映射到物理内存空间。从这里,代码可以通过简单地将值写入映射到外设寄存器的内存空间来访问外设。稍后如果芯片有一个MMU,它可以用来进一步重新映射到虚拟内存空间。我说的对吗?我不明白的是(假设我上面说的是正确的):如果外围设备尚未映射到地址空间,引导加载程序如何初始化它们?通过虚拟内存映射,有一些表可以告诉MMU在哪里映射什么。但是什么决定了外设在物理内存中的映射位置? 最佳答案 当设备启动时,MMU会关闭

c++ - 使用 MMU 实现可调整大小的数组

通常,列表要么被实现为链表,它的遍历速度很慢,要么是数组列表,它在插入元素时很慢。我想知道是否可以通过在插入或删除元素时重新映射而不是复制内存来使用处理器的MMU更有效地实现列表。这意味着索引和插入/删除数组中任何地方的速度都是O(1),betterthananyotherlistimplementation.我的问题是:程序是否真的能够控制自己的虚拟内存,或者是否需要对操作系统进行更改?每个进程的页表条目数是否有限制?随着条目的增加,内存访问会变慢吗?更改页表条目是否如此缓慢以至于仅对非常大的列表更有效?是否有此类列表的任何现有实现?如果是,是什么阻止人们更多地使用它们?

c++ - 使用 MMU 实现可调整大小的数组

通常,列表要么被实现为链表,它的遍历速度很慢,要么是数组列表,它在插入元素时很慢。我想知道是否可以通过在插入或删除元素时重新映射而不是复制内存来使用处理器的MMU更有效地实现列表。这意味着索引和插入/删除数组中任何地方的速度都是O(1),betterthananyotherlistimplementation.我的问题是:程序是否真的能够控制自己的虚拟内存,或者是否需要对操作系统进行更改?每个进程的页表条目数是否有限制?随着条目的增加,内存访问会变慢吗?更改页表条目是否如此缓慢以至于仅对非常大的列表更有效?是否有此类列表的任何现有实现?如果是,是什么阻止人们更多地使用它们?

linux - ARM MMU在各种操作模式下的操作

在我提问之前,我会把我的理解与主题相关,LinuxKernelmode对应于ARMsupervisormode。Linux用户模式对应于ARM用户模式。在内核模式(启用MMU)下,Linux使用相对地址而不是物理地址。即,物理地址=相对地址-PAGE_OFFSET+PHYS_OFFSET在用户模式(启用MMU)下,Linux使用虚拟地址而不是物理地址。即,物理地址=MMU转换(虚拟地址)使用pte、pmd、pgd问题:是否在管理员模式下启用了MMU(用于内核地址)。如果它被启用,那么这是否意味着相同的MMU在转换管理员模式和用户模式时以不同的方式运行。如果MMU在不同模式下有不同的功能

Linux 页表管理和 MMU

我有一个关于linux内核和MMU之间关系的问题。我现在明白了linux内核管理虚拟内存地址和物理内存地址之间的页表。同时x86架构中有MMU管理虚拟内存地址和物理内存地址之间的页表。如果MMU出现在CPU附近,内核还需要处理页表吗?这个问题可能比较傻,但另一个问题是,如果MMU负责内存空间,谁来管理高位内存和低位内存?我相信内核将从MMU(32位中的4GB)接收虚拟内存的大小,然后内核将在虚拟地址中区分用户空间和内核空间。我对么?还是完全错误?提前致谢! 最佳答案 操作系统和MMU页面管理职责是同一机制的两个方面,存在于体系结构和

c - 在 ARM Cortex-R4 上运行无 MMU Linux

我的系统使用的是ARMCortex-R4。它有一个内存保护单元而不是一个内存管理单元。实际上,这意味着内存保护有专用硬件,但物理地址和虚拟地址之间存在一对一的映射。我对我应该选择哪个Linux感到有些困惑-禁用MMU的标准Linux内核或uCLinux。在ARM的评估板上,我运行了在禁用MMU的情况下编译的标准内核。我使用了ARM官方网站上提供的cramfs文件系统。内核启动后,我在shell中,但我无法做太多实验,因为我发现大多数时候,shell停止响应(特别是当我按“tab”自动完成时)。所以我仍然不确定如果我使用正确的文件系统,无MMU内核是否应该顺利运行。另外,我应该为no-V

linux - Linux内核中virt_to_phys和CPU的MMU是什么关系?

我正在阅读有关Linux内存管理的信息。我知道TheLinuxkernelisresponsibleforcreatingandmaintainingpagetablesbutemploystheCPU’smemorymanagementunit(MMU)totranslatethevirtualmemoryaccessesofaprocessintocorrespondingphysicalmemoryaccesses.但是,我也知道内核可以使用它的一些函数来管理内存,例如virt_to_phys(),virt_to_page(),__pa(),...例子:staticinlineu

嵌入式 Linux 入门(一、Linux 基本介绍及文件结构)

嵌入式Linux入门第一课,嵌入式linux基础说明以及Linux文件结构。目录前言一、嵌入式Linux基础1.1Linux简介1.2Linux与windows1.3Linux版本选择1.4何为嵌入式Linux?1.5STM32为什么不能跑Linux?1.6什么是MMU?二、安装环境说明2.1虚拟机软件2.2环境安装三、Linux文件结构3.1FHS_3.03.2目录简要说明结语前言学习嵌入式Linux,首先我们得知道什么是Linux,什么是嵌入式Linux,有一些基本概念就先得先了解。基本的说明介绍完,我们第一篇先来了解一下Linux的文件结构。本文就简单的说明一些必要的基本概念,以及介绍一

嵌入式 Linux 入门(一、Linux 基本介绍及文件结构)

嵌入式Linux入门第一课,嵌入式linux基础说明以及Linux文件结构。目录前言一、嵌入式Linux基础1.1Linux简介1.2Linux与windows1.3Linux版本选择1.4何为嵌入式Linux?1.5STM32为什么不能跑Linux?1.6什么是MMU?二、安装环境说明2.1虚拟机软件2.2环境安装三、Linux文件结构3.1FHS_3.03.2目录简要说明结语前言学习嵌入式Linux,首先我们得知道什么是Linux,什么是嵌入式Linux,有一些基本概念就先得先了解。基本的说明介绍完,我们第一篇先来了解一下Linux的文件结构。本文就简单的说明一些必要的基本概念,以及介绍一

ARMv8-A 地址翻译技术之MMU的前世今生

MMU的重要性不言而喻,支撑操作系统之上的各种复杂应用。但在正式讲MMU之前,我们先说说MMU的发展史,因为ARMv8-A的MMU相当复杂,直接切入正题,会显得比较枯燥。废话不多说,咱们马上开始:一、前言关于虚拟内存系统的演变史,MMU在其中扮演了什么样的角色。早期计算机是没有MMU的概念的,也没有对存储器的抽象,直接将物理内存暴露给程序用。那个时候硬件资源有限,大家都勒紧裤腰带写程序,不敢多浪费一个字节。我曾经规划过一个游戏掌机的开源项目,将早期的街机游戏移植到现代硬件上。在调研阶段我就发现,这些程序都很小,只有十几KB,但无一例外,都是对内存进行直接操作(有点类似单片机/微控制器编程)。图