普通的 x86 或 AMD PC 是直接从 ROM 运行启动/BIOS 代码,还是先将其复制到 RAM? [关闭]

2024-05-07

我知道现代计算机已经修改了哈佛架构。

它们可以从保存数据的地方以外的地方读取指令,这一事实是否允许它们直接从 ROM 芯片获取指令?他们是先将 BIOS 加载到 RAM,还是直接从芯片执行?我附近没有可以打开的计算机,所以...如果我从内存插槽中取出所有 RAM,计算机是否能够启动完整的 BIOS、运行 POST 内容并告诉我我需要 RAM?有趣的是我从来没有尝试过......

编辑:我提出这个问题的目的是了解商用 CPU(或至少是英特尔 cpu)是否可以直接从 ROM 执行代码。这不是为了实用目的,而是为了增加我对计算机体系结构和其他东西的理解。删除 RAM 部分不是我的主要疑问,只是一个例子


It both直接从ROM执行and将内容复制到 RAM 中。

在现代 x86 处理器上,芯片组内存控制器在初始加电时未初始化,因此没有可用的 RAM。

现代 BIOS 通常分为两部分:

  1. 引导块(早期 POST)
  2. 压缩区域(POST中后期)

当处理器退出复位状态时,它开始在内存中的固定地址(称为“复位向量”)处执行指令。 BIOS闪存芯片被映射到内存中的这个地址。处理器只是从该地址开始执行指令。

“引导块”是指从复位向量(加上一些 JMP)开始的 BIOS 代码。这是直接从 ROM 执行的(内存控制器尚未启动),因此速度非常慢。

BIOS 引导块通常执行以下操作:

  1. 初始化内存控制器。 (如果您从主板上收到“未检测到内存”蜂鸣代码,则此处会发生这种情况。)
  2. 对压缩区域执行校验和,以确保 BIOS 的其余部分没有损坏。
  3. 如果检测到任何损坏,则跳转到恢复模式。
  4. 如果校验和通过,则将 BIOS 的其余部分解压缩到 RAM 中的某个位置(通常低于 1MB 边界)。
  5. 跳转到RAM中解压后的代码并继续启动。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

普通的 x86 或 AMD PC 是直接从 ROM 运行启动/BIOS 代码,还是先将其复制到 RAM? [关闭] 的相关文章

  • Mac OS 登录项是否带有参数?

    在 Mac OS 中 我创建了一些 AppleScript 来添加和删除启动应用程序 帐户 系统窗格下的 登录项 bin bash usr bin osascript e tell application System Events to
  • 单核上的多线程有什么意义?

    我最近一直在研究 Linux 内核 并回顾了大学操作系统课程的时代 就像那时一样 我正在玩线程之类的东西 一直以来我一直假设线程是自动在多个核心上同时运行但我最近发现您实际上必须显式编写代码来处理多个核心 那么单核上的多线程有什么意义呢 我
  • WPF 应用程序无法启动

    我在除我之外的其他计算机上启动基于 MahApps 样式的 WPF 应用程序时遇到问题 我正在通过 Inno Setup 安装我的应用程序 当我在我的计算机 装有 Visual Studio 2015 的计算机上或有时在其他计算机上运行 e
  • 如何在 Octave 中永久加载包?

    我在 Windows vista 上使用 Octave 我在代码中使用 4 个包 但是每次我重新启动八度音程时 我都必须从命令行手动加载 pkg load 有没有办法永久加载它们 以便每当 Octave 启动时它都会在其路径中找到它们 当
  • Linux:如何对系统内存施加负载?

    我正在开发一个小功能 它可以让我的用户了解 CPU 的占用情况 我在用着cat proc loadavg 它返回众所周知的 3 个数字 我的问题是 当我正在开发时 CPU 目前没有做任何事情 有没有一种好方法可以在CPU上产生一些负载 我在
  • 阿迪和苏比之间到底是什么“关系”?

    我应该回答这个问题 经过一番研究后发现 add 和 sub 具有相同的操作码 仅在功能领域有所不同 这是答案还是其他什么 Update Nios II CPU 手册中提供了它 subi subtract immediate Operatio
  • Android - 如何在启动后启动 /sdcard 上的应用程序

    有没有一种方法可以在启动后自动启动Android应用程序 如果它位于Android应用程序上 sdcard 好吧 大概是通过BroadcastReceiver 但哪种行动是正确的呢 ACTION BOOT COMPLETED does no
  • 什么是微编码指令?

    我看过很多参考微编码指令的文献 这些是什么以及为什么使用它们 CPU 读取机器代码并将其解码为内部控制信号 将正确的数据发送到正确的执行单元 大多数指令映射到一个内部操作 并且可以直接解码 例如 在 x86 上 add eax edx只是将
  • python 进程占用 100% CPU

    我正在尝试运行 python 应用程序并根据指定的时间间隔执行操作 下面的代码持续消耗 100 的 CPU def action print print hello there interval 5 next run 0 while Tru
  • 启动时系统托盘图标不出现

    我在 FormCreate 事件处理程序中使用以下代码来创建系统托盘图标 当我运行程序时 系统托盘图标显示正常 我将应用程序设置为在 Windows 启动时自动启动 当我重新启动计算机时 我的应用程序进程已启动 但系统托盘图标从未出现 我认
  • 每个 CPU 核心处于 C0 电源状态的时间

    任何帮助弄清楚如何做到这一点都会很棒 在过去一秒内 每个 CPU 核心处于 C0 电源状态的时间有多少 这是针对 Mac 应用程序的 因此需要 Objective C cocoa 和 c OS X 没有任何公开 CPU c 状态的 API
  • NodeJS CPU 一次飙升至 100%

    我有一个用 NodeJS 编写的 SOCKS5 代理服务器 我正在使用原生net and dgram打开 TCP 和 UDP 套接字的库 它可以正常工作大约 2 天 所有 CPU 的最大利用率约为 30 两天没有重新启动后 一个 CPU 峰
  • 是否可以在VM内使用VMX CPU指令?

    VM guest 内部的进程是否有可能使用 VMX AMD V VT x CPU 指令 然后由外部 VMM 处理而不是直接在 CPU 上处理 Edit 假设外部VM使用VMX本身来管理其虚拟客户机 即它在Ring 1中运行 如果可能的话 是
  • 如何检查设备是否“快”足够

    我找不到更好的措辞来回答我的问题 在我的应用程序中的某个时刻 我设置了一些非常密集的动画 事实是 在高端设备上 动画运行流畅且赏心悦目 另一方面 我测试的一款低端设备在制作动画时的性能非常糟糕 为了将用户体验放在第一位 我想在计算能力足够的
  • 分支预测器和分支目标缓冲区如何共存?

    我的问题是它们如何在现代 CPU 架构中共存并协同工作 你把它稍微颠倒了 每次获取时 您都会索引到分支预测器 它会告诉您刚刚收到的指令是否will be解码为已采取的分支 如果没有 则获取下一个连续地址 但是 如果您的分支预测器说它将是一个
  • Java EE 企业应用程序:在部署/启动时执行一些操作[重复]

    这个问题在这里已经有答案了 我想在部署我的应用程序 具有业务逻辑 EJB 和客户端 Web 的企业应用程序 后立即执行某些操作 例如 我想让某个实体处于持久状态 或者以其他方式创建一个文件 我怎样才能做到这一点 Thanks 配置Serlv
  • 在 Android 应用程序中启动应用程序时仅显示一次版本信息

    我想显示一个带有 确定 按钮的简单信息对话框 介绍此版本中的新增内容 但它应该仅在第一次启动时显示 实施这个的最好方法是什么 我会 并且已经 使用带有布尔值或 int 值的 SharedPreferences 只需检查最后一个版本是否比当前
  • 将代码保存在 L1 缓存中

    我一直在阅读维基百科关于 K 编程语言的文章 http en wikipedia org wiki K programming language Performance characteristics这就是我所看到的 解释器的小尺寸和语言的
  • 如何制作可启动程序?

    所以 这个问题可能看起来很奇怪 但假设我编译了 int main void int x 3 int y 4 int z x y 是否可以让CPU这样运行 如何 例如 这允许我写入监视器吗 如果我没记错的话 内存中有些地方可以写入要显示的内容
  • Nodejs 异步函数是否使用所有 CPU 核心?

    如果我使用异步函数或带有回调的函数 例如本机 fs 模块 http 等 它们会默认在所有 cpu 核心上运行吗 或者整个系统只使用 1 个核心 Node js 中的一些异步操作 例如文件 I O fsmodule 将通过 libuv 中的线

随机推荐

  • 获取json中某个键的索引

    我有一个像这样的 json json key1 watevr1 key2 watevr2 key3 watevr3 现在 我想知道一个键的索引 比如 json 中的 key2 即 1 有办法吗 为时已晚 但可能简单又有用 var json
  • 计算一个类的实例?

    我一直在清理我正在扩展的模块中的一些代码 但我似乎找不到 Pythonify 这段代码的方法 global next id 1 class Obj def init self global global next id self id gl
  • 在node.js Express框架中设置两个不同的静态目录

    是否可以 我想设置两个不同的目录来提供静态文件 假设 public 和 mnt 您还可以通过指定附加 第一个 参数来设置将静态文件提供给 Web 的路径use 像这样 app use public express static dirnam
  • Google App Maker - 在 onclick 方法中添加时间戳收集按钮

    我到处搜索 找不到有效的具体答案 我需要在应用程序制作工具中的表单中添加一个按钮 以在单击时记录时间戳 而不是日期 到目前为止 我唯一能开始工作的是 widget datasource item Timestamp OUT new Date
  • 立即更新 UserControl 中的所有绑定

    当 UserControl 的可见性更改为 Visible 时 我需要更新其上的所有绑定 几乎所有绑定都绑定到用 户控件的 DataContext 属性 因此我尝试更新该绑定的目标 BindingOperations GetBindingE
  • Rails 5:ActionMailer 的“deliver_later”从未在生产环境中交付

    我有一个非常基本的邮件程序设置 如下所示来发送交易邮件程序 class PayoutMailer lt ApplicationMailer default from email protected cdn cgi l email prote
  • Swift 3 异步调度警告

    我有这个代码 DispatchQueue global priority DispatchQueue GlobalQueuePriority default async let url URL string itemImageURL let
  • 在 SSIS 流中使用临时表失败

    我有一个 ETL 过程 可将约 40 个表从源数据库 Oracle 10g 提取到 SQL Server 2014 开发人员版 临时环境 我的提取过程 确定暂存中的最新行 从源中选择所有较新的行 将结果插入 TEMPTABLE 将 TEMP
  • 由于空数组包含电子邮件为空的文档,MongoDB 错误 E11000 重复键错误集合

    这是我正在编写的代码 const createOrgPerso new Person org newOrganisation doc id data 但空数组仍在创建中 然后再次运行这段代码 它给出E 11000 duplicate key
  • 打印 HTML 时删除默认浏览器页眉和页脚

    我得到了一个带有以下内容的 HTML 我想问的问题是 有什么方法可以删除网络浏览器添加到打印页面的字符串吗 Such as 打印页面的网站 页数 网页标题 印刷日期 这些通常是浏览器特定的打印设置 例如 在 IE 和 FireFox 中 您
  • Sweetalert 2 异步文本区域

    我尝试使用这个简单的文档示例https sweetalert2 github io https sweetalert2 github io 但我收到错误消息 未捕获的语法错误 await 仅在异步函数中有效 document ready f
  • Hibernate save() 和事务回滚

    在休眠状态下 当我save 事务中的一个对象 然后我回滚它 保存的对象仍然保留在数据库中 这很奇怪 因为这个问题不会发生在update or delete 方法 只需用save 这是我正在使用的代码 DbEntity dbEntity ge
  • 按升序选择最后 20 个顺序 - PHP/MySQL

    这是我的表结构 MyTable ID P K auto increment TopicID UID Comment 现在我想获取某个 TopicID 的最后 20 条评论 但它应该按升序排序 就像 Facebook 默认只显示最后 20 条
  • Angular刷新页面重复url中的页面

    我是一名 Angular 新手 正在构建一个简单的寻呼机 我设置了路由器 以便空 URL 重定向到仪表板组件 因此localhost 4200会自动路由到localhost 4200 dashboard完美的 但是 如果我单击刷新按钮 它会
  • mysql 更新或插入多条记录(如果表中尚不存在)

    mysql 数据库中有一个名为 inventory item 的表 id product id 和 quantity 是表的列 id 是主键 在插入记录时自动生成 当用户提交要向表中插入多条记录的表单时 可以在 foreach 循环中收集所
  • C4533 警告:为什么 goto 会跳过变量初始化?

    我越来越 警告 C4533 goto FreeDC 跳过了 b 的初始化 但是如果代码到达标签FreeDC in WM CREATE b 未初始化 如果在这种情况下未初始化 如何跳过其初始化 我只是不明白这个警告 include
  • iOS 6 模拟器卡在启动画面上

    我正在使用 Mac os 10 8 2 和 Xcode 4 5 2 当我尝试在 ios 5 5 1 模拟器中运行我的应用程序时 它工作正常 但是当我尝试在 ios 6 模拟器中运行应用程序时 它会卡在空白屏幕上 谁能让我知道我的问题的解决方
  • Gradle 构建错误:aidl.exe 以非零退出值 1 完成

    这是我的 build gradle 文件 点击查看截图 https i stack imgur com ENTbh png 和我的错误 错误 任务 app compileDebugAidl 执行失败 com android ide comm
  • 为 schtasks.exe 指定日期参数的独立于语言的方法

    我正在尝试将新任务添加到 Windows 任务计划程序schtasks exe 我现在遇到的问题是指定任务应该在一周中的哪一天运行 据我所知 愚蠢的程序坚持将该参数作为日期名称的字符串缩写 本地化为操作系统语言 其他参数可以很好地接受英语字
  • 普通的 x86 或 AMD PC 是直接从 ROM 运行启动/BIOS 代码,还是先将其复制到 RAM? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我知道现代计算机已经修改了哈佛架构 它们可以从保存数据的地方以外的地方读取指令 这一事实是否允许它们直接从 ROM 芯片获取指令 他们是先