- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在寻找关于BIOS现在如何工作相当一段时间的解释。我已经设计了一个引导加载程序,并在成功初始化IDT和GDT的同时跳入了32位模式,但是这样做的时候,我发现“操作系统”似乎非常简单,并且感觉就像“BIOS”是每台计算机的实际操作系统。
因此,现在我面临着一个新的挑战,即尝试发现BIOS实际上是如何自我初始化,发现有多少可用的RAM以及如何/在何处将附加卡ROM导入RAM。据我了解,处理器不是通过跳转而是自动在16位段:偏移地址0xFFFF:0x0000处开始在RAM内部执行代码。这意味着从技术上讲,由于处理器的启动位置,所有计算机从一开始就必须至少具有1MB的RAM才能启动,并且由于这些知识,我一直假设所有BIOS会在启动之前自动将自身写入RAM。处理器获取其RST信号。我觉得这是不对的,因为我相信可以通过BIOS禁用“影子BIOS”。我到处都在寻找《 BIOS设计指南》,但是我似乎总是空手而归。
作为一名程序员,我知道可能有很多方法可以真正完成我实际要问的事情,并且 hell 中不可能给出一个正当的直截了当的答案,如果我必须更具体一点,那就说我在工作我使用Dell Inspiron 518或至少一台装有G33芯片组的计算机(G33北桥和ICH9南桥),并且我想对初始的Pre-POST程序进行编程,并构建带有所有标准中断的我自己的16位IDT和可能会成功启动其他操作系统(例如Windows 10)的所有所需内容。 BIOS实际上如何知道有多少RAM?它只是在最高的内存区域进行位写入位读取测试,然后从那里下来吗?附加卡ROM甚至如何加载到RAM中?据我了解,BIOS建立了一个非常基本的中断和/或“入口点”列表,附加卡ROM可以利用这些中断和/或“入口点”,并使它们能够“锁存”其他BIOS的中断,例如“$ PMM”? BIOS制造商如何知道BIOS中需要什么确切的 anchor 字符串才能启动Windows之类的操作系统?
任何答案,以及任何推荐的规范和/或任何指南都可以帮助我了解我一直在寻求的知识,将非常有帮助。例如,也许有一个指导说:“在移交给IPL之前,BIOS需要完成的最低限度要求的过程?”甚至是C或Assembly中的源代码示例,它可以告诉我附加卡的ROM镜像实际上是什么或看起来是什么样的,这将非常有帮助。
最佳答案
由于我最熟悉英特尔架构,因此我只能将其答案限于此。
您(以及我)正在查找的文档称为《 BIOS编写器指南》,很遗憾,该文档是 secret 的,并且到目前为止尚未泄漏(AFAIK)。
为了在开放源代码社区中推广其产品,英特尔发布了Firmware Support Package。这被认为类似于固件编写器的库,并且包含用于初始化内存 Controller ,PCH(外围 Controller 中枢,非正式地称为“芯片组”)和CPU1的(二进制)代码。
开源开发人员或通常不起不起与英特尔签署保密协议(protocol)的任何开发人员都可以使用FSP编写自己的固件。
可以逆转FSP(我的许多TODO之一),但是将其用作引用会更快。
当电源打开时,在CPU从复位向量2开始执行之前发生了很多事情,但是要记住的重要一点是芯片组(即PCH)已经允许CPU访问闪存ROM。
实际上,这就是第一条指令的执行方式,因为CPU只能从内存地址空间中提取指令。
因此,只要固件将执行流程保持在映射到闪存ROM的内存区域内(此区域由闪存ROM本身中的闪存描述确定,PCH就会在重置期间读取它并配置内存请求的路由)相应地),其代码即可执行。
由于内存尚未初始化,并且闪存ROM是只读的(没有内存写周期),因此无法使用以下功能:
TempRamInit()
例程(顺便说一句,必须通过跳转来调用它),实际上,它设置了RAM缓存(CAR)。
CD
寄存器中的
CR0
(禁用缓存)位),然后从与L13一样大的内存区域进行虚拟读取(甚至写入)。
CD
时,不会进行任何行替换。我假设这也不会在更高的缓存中来回移动行。
关于post - BIOS如何初始化DRAM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63159663/
在了解了计算机程序的运行方式后,我对 CPU 和 RAM 有了一些想法。在观看了一些 youtube 视频(linus 技术提示和其他)之后,它们似乎都表明增加 RAM 速度(频率)并不能真正提高普通
我想检索 DRAM 访问次数 在我的应用程序中。准确地说,我需要 区分在数据和代码访问之间。处理器是 Intel(R) Core(TM) i7-4720HQ CPU @ 2.60GHz (Haswel
我只是想更好地理解地址空间中的堆栈是什么(即你有代码/文本、堆、数据和堆栈) 基本上我的理解是堆栈包含局部变量,但是数据包含的内容和堆栈包含的内容有什么区别?数据变量不也是如此吗? 如果程序对函数 a
我知道如果我尝试打印数组元素的地址,它将是来自虚拟内存的地址,而不是来自真实内存(物理内存),即 DRAM。 printf ("Address of A[5] and A[6] are %u and
我想知道是否有任何关于如何判断两个给定的物理内存地址是否在同一个内存库中的信息。我正在研究 x86 多核架构,需要在任务级别破解内存访问性能。 提前致谢 /彭 最佳答案 编辑:事实证明它比我意识到的更
如何以编程方式或使用 *nix 系统中现有的工具来查找 DRAM 行缓冲区大小? 最佳答案 作为示例,使用金士顿 DDR4,我执行了以下命令(您可能需要安装一些软件包): sudo modprob
我正在阅读 David Patterson 和 John Hennessy 的计算机体系结构书籍。在第2章中,提到如果我们将标签存储在DRAM中,我们可能需要在两个周期内发出两个单独的请求来读取标签和
在 GPU 中,到 L2 缓存的事务大小可以是 32B、64B 或 128B(读和写)。此类交易的总数可以使用 gst_transactions 和 gld_transactions 等 nvprof
如果这不是问这个问题的地方,我深表歉意。我想知道 C 编程语言是否允许用户访问 DRAM 位单元,我似乎无法在网上找到任何专门回答我的问题的资源,所以我更倾向于认为这是不可能的。谢谢 最佳答案 C 没
实际吞吐量 CUDA 分析器使用四个指标报告内核实现的结果: 全局内存负载吞吐量 全局内存存储吞吐量 DRAM 读取吞吐量 DRAM 写入吞吐量 CUDA C 最佳实践指南将全局内存加载/存储吞吐量描
如何从 Rocket-Chip 连接到外部 AHB 从端口(即内存 Controller 上的 AHB 端口)?我尝试在连接到 AXI4 从设备的其他几个示例之后对我的代码进行模式化,并且工作正常。但
我正在试验一个简单的矩阵乘法 CUDA 程序。我发现如果矩阵大小很小(512*512 或更小),L2 缓存命中率总是 100%。 profiled DRAM read transactions 不稳定
我在 android studio 中使用 NDK 工具为 android 设备编写 C 程序。我想知道如何获取 SRAM 或 DRAM samsung galaxy S7 的起始地址。 最佳答案 听
没有细节的问题: 是否可以从 Linux 复制裸机可执行文件,从 DDR 运行到处理器内部 SRAM 中并运行它?此应用程序将暂停 DDR 并禁用电源轨以修复硬件问题。 详细信息: 我正在开发一款使用
我是一名优秀的程序员,十分优秀!