1
4
请注意,我不熟悉arm,也不特别熟悉嵌入式linux,所以我的所有评论都是从一般的角度出发的。 首先,关于缓存:在启动的早期,操作系统会进行一些缓存初始化。确切地说,这将导致不同的处理器,但净效果是确保缓存初始化正确,然后使其使用处理器。在此之后,高速缓存将由处理器独占操作,操作系统或程序不会进行进一步的交互。 现在,到外部(片外)和内部(片内)存储器: 操作系统拥有系统上的所有硬件,包括内部和外部内存,因此最终负责在内核和用户进程中发现、配置和分配这些资源。在一个典型的系统(例如,您的桌面或1U服务器)中,通常不会有任何特殊的内部(片上)RAM,因此操作系统可以平等地对待所有DRAM。它将进入一个通用的页面池(通常是4K)中,用于分配给进程、文件系统缓冲区等。在一个具有各种特殊内存(NVRAM、高速片上内存和其他一些内存)的系统中,操作系统的一般策略通常不正确。 如何向用户展示这一点将取决于将操作系统移植到此系统时所做的选择。
以下是你一些具体问题的答案。
如果您的系统采用了上面描述的设备驱动程序方法,那么操作系统可能只知道外部内存,或者可能只知道足够多的内部内存来正确地初始化它们,尽管如果可能的话,设备驱动程序中也可能有这些内存。如果操作系统更明确地了解片上存储器,那么它肯定会包含任何需要的初始化代码,以及某种提供对用户进程访问的方案。
在我看来,操作系统不太可能尝试自动完成这些选择。相反,我怀疑操作系统或设备驱动程序会提供一个通用接口来提供对片上存储器的访问,并由用户代码决定如何使用它。
几乎可以肯定,
如果通过
缓冲器
你的意思是从标准返回的区域
我不知道这是什么。如果我不得不猜测的话,我会假设它只是另一种形式的片上ram,但是由于它有一个不同的名字,也许我错了。
如果操作系统和/或设备驱动程序提供了对这些内存区域的某种抽象访问,那么就不需要显式地知道地址映射。然而,在内核或设备驱动程序中实现这种访问需要这些知识。 我希望这能有所帮助。 |
Community wiki · 如何调试Python内存故障? 1 年前 |
tuskiomi · 如何为参考提供明确的锈蚀寿命? 2 年前 |
cobb208 · Malloc正在为释放指针引发错误 2 年前 |
mo FEAR · C++ STL映射是否在创建后移动了一个值的位置? 2 年前 |
Pooyanoss · 覆盖类的堆栈分配实例 2 年前 |
TheKing · 为什么数组的地址可以有负值? 2 年前 |
Http2inc · 如何从内存中解析这些二进制数据? 2 年前 |
tifrel · 如何检查已编译类型的表示形式? 2 年前 |
Gabriele · 释放GSL矩阵的正确方法是什么? 6 年前 |
Makogan · 3D纹理大小影响程序输出,不会引发错误 6 年前 |