2016-10-12 20 views
3

从裸骨操作系统导出数据的最简单方法是什么?最简单的从裸露骨骼中导出数据的方式操作系统

我正在开发计算机体系结构课程的一些作业,要求学生尽可能准确地对不同的代码段进行计时。我的想法是将代码直接插入到OSDev wiki(http://wiki.osdev.org/Bare_Bones)的“Bare Bones”/“Hello World”教程中,该教程将在最低限度的操作系统内核内有效运行待测代码。

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

我正在将“mini-OS”安装到USB闪存驱动器上并从闪存驱动器启动。我最初的想法是使用BIOS将实验数据转储回USB驱动器;但是,看起来像从保护模式调用BIOS例程不是微不足道的(即需要切换到实际模式或V86模式)。

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

此帖子(Real mode BIOS routine and Protected Mode)提到PwnOS;但是代码的链接被破坏了。

+1

由于您在x86上,因为电源管理(包括Turbo),实际硬件上的时间确实很难。您可以使用RDTSC(使用序列化指令来防止重新排序)来计算参考周期,或使用硬件性能计数器来计算实际的核心时钟周期。 IIRC,在[x86 tag wiki](http://stackoverflow.com/tags/x86/info)中有关于此的一些链接。您可以在超线程和Turbo禁用的正常操作系统上获得良好的结果,并设置CPU亲和力以使您的进程保持在同一内核上。但是,定时器中断仍然是一个因素。 –

+0

另请参阅http://stackoverflow.com/questions/39864416/perf-overcounting-simple-cpu-bound-loop-mysterious-kernel-work使用perf计数器仅计算用户空间周期。 –

回答

2

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

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

+0

这意味着在串口线的另一端连接第二台机器来侦听数据,是否正确? – Zack

+0

是的,你需要另一台机器。 – glauxosdever

+0

我忘了提及您可以从模拟器内部运行您的裸机操作系统。通过这种方式,您可以读取主机操作系统上的裸机操作系统的串行输出。 – glauxosdever