设为首页 加入收藏

TOP

无需操作系统直接运行 Python 代码(二)
2015-07-16 12:56:49 来源: 作者: 【 】 浏览:18
Tags:无需 操作系统 直接 运行 Python 代码
试硬件环境,Python 需要能够访问它。一个叫做“bits”的模块被添加进来提供访问各种硬件的功能,例如:CPUID,特殊模块寄存器 (MSRs),I/O 端口,和内存映射 I/O。他用几行代码展示了这些能力。


他引入ctypes模块,以便在下一部分演示中“操作原始内存片”。对于那些想要深挖一些的人来说,几乎所有演示都可以在这个YouTube视频的演讲中看到。cpuid()调用返回了CPU0的CPUID,他之后将其打印出来。他问:“这是不是很有趣?我们正从Python中得到处理器的寄存器信息。”?接着,他使用Python来解释这个结果:


三个寄存器包含描述处理器类型的标识符。他使用ctypes模块中的类型,以字符串的形式重新解释这三个寄存器(按照之前的顺序)的信息,结果显示为处理器类型。


Intel希望能够测试高度并行化的系统,但GRUB只了解启动了的CPU的信息。所以BITS在系统中唤醒每个CPU,并把它们放入一个睡眠循环中,使用MWAIT(x86监视器等待指令)等待工作的到来。特定CPU有专门的唤醒函数和执行函数。


这个项目还准备用Python获取ACPI的信息和方法。这参考了ACPI组件架构?(ACPICA)的实现并把它加入BITS中。由于全部是C代码,所以增加了Python绑定。这一做法使得Python可以调用任意ACPI方法——只要先将参数转换成ACPI类型并将结果转成Python类型。他用了一个简单的Python程序演示了如何将虚拟机中所有设备的硬件ID显示出来:


Triplett声称他不会继续深入讲解BITS硬件探索的细节。他已经在其它演讲中更加详尽地解释过了。?


英特尔也希望系统能使用这个固件而不是BIOS访问EFI。这种扩展名义上是指一切在EFI中都是”协议“,每一个都包含了原生c语言函数调用。要做到这样,通过libffi提供的外部函数接口被移植到GRUB并且添加了支持EFI调用转换的功能。使用这种方式和Python c类型的模块(Python提供的c语言类型的接口和函数)允许解释器访问EFI。他仅使用Python演示了访问EFI的方法:


访问EFI后,允许Python使用EFI文件协议去创建目录和写文件到EFI文件系统中。这是非常有帮助的,因为GRUB仅仅能够读文件。不仅仅如此,存在着图像输出协议(GOP)能够读写屏幕内容。正如他所解释的,幻灯片就是简单的图像,事实上是通过在笔记本上BITS和EFI显示出来的。在BITS的环境下,做出了这个幻灯片和demo,因此,事实来说,整个演示就是一个demo,他说这些话时周围响起了掌声。这样做是不需要任何一行新的C语言代码的。


最后他保存了认为最好的demo,并从EFI(可扩展固件接口)GOP(画面组)的帧缓冲区中作为Python启动,当他敲完最后的几行代码,很明显机器开始识别了,计算并显示了一个400x400大小的 Mandelbrot set(曼德布洛特集合)的灰度图片。他对周围鼓掌的人说:“在EFI图形协议中仅用八行Python代码显示了不规则图形(Fractal)”。大约要15秒来绘出图像,有点慢,他说,那不是Python的问题,而是因为使用纯软件进行浮点运算了。


在谈话最后,Triplett指出在BITS(后台智能传输服务)里没有中断处理的钩子函数(hook),但是这很容易就添加上的。他说,在像Mirage OS(和其它的“类似操作系统”)也能在BITS上添加Python代码,并且和这没有多大区别。“待办事件清单上的下一个有趣的项目”是添加Python绑定的EFI TCP网络协议和钩子到Python的socket模块,看看能否在那样的环境(BITS)下运行一个简单的HTTP服务(SimpleHTTPServer)。这样就能添加一个“网络REPL(web REPL)”到BITS环境了。


--------------------------------------分割线 --------------------------------------


英文原文:Python without an operating system


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇为什么在类型转换时C++将int转换.. 下一篇C程序与Lua脚本相互调用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: