三个寄存器包含描述处理器类型的标识符。他使用ctypes模块中的类型,以字符串的形式重新解释这三个寄存器(按照之前的顺序)的信息,结果显示为处理器类型。
Intel希望能够测试高度并行化的系统,但GRUB只了解启动了的CPU的信息。所以BITS在系统中唤醒每个CPU,并把它们放入一个睡眠循环中,使用MWAIT(x86监视器等待指令)等待工作的到来。特定CPU有专门的唤醒函数和执行函数。
这个项目还准备用Python获取ACPI的信息和方法。这参考了ACPI组件架构 (ACPICA)的实现并把它加入BITS中。由于全部是C代码,所以增加了Python绑定。这一做法使得Python可以调用任意ACPI方法——只要先将参数转换成ACPI类型并将结果转成Python类型。他用了一个简单的Python程序演示了如何将虚拟机中所有设备的硬件ID显示出来:
1
>>> import acpi
2
>>> print acpi.dump('_HID')
Triplett声称他不会继续深入讲解BITS硬件探索的细节。他已经在其它演讲中更加详尽地解释过了。
英特尔也希望系统能使用这个固件而不是BIOS访问EFI。这种扩展名义上是指一切在EFI中都是”协议“,每一个都包含了原生c语言函数调用。要做到这样,通过libffi提供的外部函数接口被移植到GRUB并且添加了支持EFI调用转换的功能。使用这种方式和Python c类型的模块(Python提供的c语言类型的接口和函数)允许解释器访问EFI。他仅使用Python演示了访问EFI的方法:
1
>>> import efi
2
>>> out = efi.system_table.ConOut.contents
3
>>> out.ClearScreen(out)
4
[ which clears the screen ]
5
>>> out.OutputString(out, 'Hello world!\r\n')
6
Hello world!
访问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环境了。
--------------------------------------分割线 --------------------------------------
CentOS上源码安装Python3.4
《Python核心编程 第二版》.(Wesley J. Chun ).[高清PDF中文版]