Io 从基本操作系统导出数据的最简单方法

Io 从基本操作系统导出数据的最简单方法,io,x86,operating-system,bios,protected-mode,Io,X86,Operating System,Bios,Protected Mode,从基本操作系统导出数据的最简单方法是什么 我正在为我的计算机架构课程设计一些作业,要求学生尽可能准确地计算不同代码段的时间。我的想法是将要计时的代码插入osdevwiki()的“裸体”/“helloworld”教程中,这将有效地在最小的操作系统内核中运行测试中的代码 这项技术相当有效;但是,目前,我唯一的输出选项是VGA文本模式。我希望能够保存实验结果,以便学生能够分析/绘制数据 我目前正在将“迷你操作系统”安装到USB闪存驱动器上,并从闪存驱动器启动。我最初的想法是使用BIOS将实验数据转储回

从基本操作系统导出数据的最简单方法是什么

我正在为我的计算机架构课程设计一些作业,要求学生尽可能准确地计算不同代码段的时间。我的想法是将要计时的代码插入osdevwiki()的“裸体”/“helloworld”教程中,这将有效地在最小的操作系统内核中运行测试中的代码

这项技术相当有效;但是,目前,我唯一的输出选项是VGA文本模式。我希望能够保存实验结果,以便学生能够分析/绘制数据

我目前正在将“迷你操作系统”安装到USB闪存驱动器上,并从闪存驱动器启动。我最初的想法是使用BIOS将实验数据转储回USB驱动器;但是,从受保护模式调用BIOS例程似乎并不简单(即,需要切换到real或V86模式)

我所需要做的就是将原始二进制数据转储到另一台机器可以读取的地方。我不需要文件系统或任何类似的东西。是否有一种相对简单的方法来访问USB闪存驱动器(或其他外部设备),或者我是否需要查找/写入完整的USB驱动程序或网络驱动程序堆栈?或者,有没有更简单的解决方案


这篇文章()提到了PwnOS;但是到代码的链接断开了。

USB驱动程序非常困难。但是,正如您提到的网络驱动程序一样,您可能希望查看串行端口。它们比USB更容易编程


应该有足够的关于此主题的信息。

因为您使用的是x86,所以在真正的硬件上计时实际上很困难,因为电源管理(包括Turbo)。您可以使用RDTSC(带有串行化指令以防止重新排序)来计算参考周期,或者使用硬件性能计数器来计算实际核心时钟周期。IIRC,网站上有一些关于这个的链接。在一个正常的操作系统上,如果禁用了超线程和Turbo,并设置了CPU亲和性以使进程保持在同一个内核上,则可以获得良好的结果。不过,计时器中断仍然可能是一个因素。另请参阅使用性能计数器仅计算用户空间周期。这意味着在串行电缆的另一端有第二台计算机侦听数据,对吗?是的,您需要另一台计算机。我忘了提一下,您可以在模拟器内运行裸机操作系统。通过这种方式,您可以在主机操作系统上读取裸体操作系统的串行输出。模拟器可以用于调试,但会破坏“miniOS”的用途(当然,除非Peter的上述建议产生足够精确的测量结果)我提到了在模拟器中运行操作系统的可能性,只是因为这是一种不用第二台计算机就能读取串行输出的方法。