bochs 中文文档 下载 App

内存与 CPU 配置——模拟什么型号的 CPU、给多少内存

cpu: 关键字

cpu: model=pentium4, count=1, ips=10000000, reset_on_triple_fault=1

常用字段:

字段说明默认值
modelCPU 型号sx(i386)
countCPU 核心数(SMP 支持)1
ips每秒指令数(影响执行速度的节流参数)10000000
quantumSMP 下每次执行多少指令后切换核心250
time0 / time1PIT / APIC 定时器频率偏移0
reset_on_triple_fault三重故障时是否重启(OS 开发常用)1
ignore_bad_msr是否忽略写入不存在的 MSR0
exception_on_unimplemented遇到未实现的指令是否抛异常0

CPU 型号选择

Bochs 模拟的 CPU 型号覆盖了 386 到最新的 Intel Core 和 AMD Ryzen:

model 值真实硬件指令集覆盖适用场景
sxIntel 38632 位基础OS 教学起步(最简单)
dxIntel 48632 位 + FPU较老教学场景
pentiumPentium MMXP6 + MMX经典 Win95/98
pentium2Pentium IIP6 + SSE + 段寄存器Win2000
pentium3Pentium IIIP6 + SSEWinXP
pentium4Pentium 4NetBurst + SSE2 + HTWinXP / Linux 开发
coreduoCore DuoCore + SSE3 + SSSE3现代 Linux / Windows
nehalemCore i7 一代Nehalem + SSE4 + AES + VMX最新 x86-64
sandybridge / ivybridge / haswell / broadwell / skylake / coffee / alderlake各代 Core各代特性 + AVX/AVX2/AVX-512追求最新指令集

OS 开发选 pentium4 或 coreduo 就够了——足够新支持常用特性,又不会太复杂。

经典系统跑 Win95 选 pentium 或 pentium2,跑 WinXP 选 pentium4。

ips 参数是什么意思

Bochs 的 CPU 完全是软件模拟的,执行速度取决于宿主机性能。ips 是 Bochs 用来节流的参数——告诉 Bochs "我要模拟一颗每秒能跑 N 条指令的 CPU"。如果宿主机跑得太快,Bochs 会自动休眠让模拟速度降下来。

OS 开发对 ips 不敏感(跑纯内核代码本来就很快),经典系统跑 UI 时调一下可以改善流畅度。

SMP 多核心

cpu: model=pentium4, count=2, ips=10000000

Bochs 最多模拟 8 个核心。SMP 场景下 quantum 参数控制每次执行多少指令后切换核心(默认 250)。研究多核调度或 Linux 内核 SMP 支持时开。

memory: 关键字

memory: guest=64, host=64

两者通常相等。Bochs 建议 host 略大于 guest(留一些给视频 RAM),但实际相等也没问题。

内存太小会导致某些系统启动失败:

系统推荐内存
DOS4~8 MB
Windows 95/9832~64 MB
Windows XP128~256 MB
Windows 7512~1024 MB
Linux(桌面)256~512 MB
OS 开发内核实验32~128 MB

reset_on_triple_fault

OS 开发者的利器。当内核发生 triple fault(连续 3 次异常都找不到可用的异常处理)时:

写内核的人通常设 0,这样 crash 后可以直接在调试器里看现场。

一份实用模板

# OS 开发推荐 CPU/内存配置
cpu: model=pentium4, count=1, ips=15000000, reset_on_triple_fault=0
memory: guest=64, host=64

# Windows 95 推荐
cpu: model=pentium, count=1, ips=8000000
memory: guest=32, host=32

# Windows XP 推荐
cpu: model=pentium4, count=1, ips=15000000
memory: guest=256, host=256

# Windows 7 推荐
cpu: model=coreduo, count=2, ips=15000000
memory: guest=1024, host=1024