【发布时间】:2023-04-05 00:44:01
【问题描述】:
从基本操作系统导出数据的最简单方法是什么?
我正在为我的计算机架构课程开发一些作业,要求学生尽可能准确地对不同的代码段进行计时。我的想法是将要计时的代码插入到 OSDev wiki (http://wiki.osdev.org/Bare_Bones) 的“Bare Bones”/“Hello World”教程中,这将在最小的操作系统内核中有效地运行被测代码。
这种技术效果很好;但是,目前,我唯一的输出选项是 VGA 文本模式。我希望能够保存实验结果,以便学生分析/绘制数据。
我目前正在将“mini-OS”安装到 USB 闪存驱动器上并从闪存驱动器启动。我最初的想法是使用 BIOS 将实验数据转储回 U 盘;但是,从保护模式调用 BIOS 例程似乎并非易事(即,需要切换到实模式或 V86 模式)。
我需要做的就是将原始二进制数据转储到另一台机器可以读取的地方。我不需要文件系统或类似的东西。是否有一种相对简单的方法来访问 USB 闪存驱动器(或其他一些外部设备),或者我需要查找/编写完整的 USB 驱动程序或网络驱动程序堆栈?或者,有没有更简单的解决方案?
这篇文章 (Real mode BIOS routine and Protected Mode) 提到了 PwnOS;但代码的链接已损坏。
【问题讨论】:
-
由于您使用的是 x86,实际硬件上的计时实际上很困难,因为电源管理(包括 Turbo)。您可以使用 RDTSC(带有序列化指令以防止重新排序)来计算参考周期,或使用硬件性能计数器来计算实际核心时钟周期。 IIRC,x86 tag wiki 中有一些关于此的链接。您可以在禁用超线程和 Turbo 并设置 CPU 亲和性以使您的进程保持在同一核心上的普通操作系统上获得良好的结果。不过,定时器中断仍然是一个因素。
-
另见stackoverflow.com/questions/39864416/… 使用性能计数器只计算用户空间周期。
标签: io x86 operating-system bios protected-mode