2KB项目,专业的源码交易网站 帮助 收藏 每日签到

无需操纵系统间接运转 Python 代码

  • 时间:2019-03-15 16:32 编辑:2KB 来源:2KB.COM 阅读:388
  • 扫一扫,手机访问
  • 分享
摘要:
Python 英文原文:Python without an operating system

Josh Triplett以一个“笑点”开端了他在PyCon 2015上的演讲:移植Python使其无需操纵系统运转:他和他的英特尔同事让说明器可以在GRUB领导顺序、BIOS或EFI系统上运转。连演讲的歇息工夫也没放过,他有非常多风趣的要说的工作,另有很多让人大开眼界的演示。

Python在Boot Loader上运转的最后设法是可以测试硬件,像BIOS,可扩大固件接口(EFI)和初级设置装备摆设和电源接口(ACPI),而无需去写一些“一次性测试项目“顺序集。传统来讲,英特尔曾经写了非常多针对DOS(BIOS系统)或EFI系统的测试顺序。不管是DOS仍是EFI都不供给情况维护,如许顺序就可以够驻入在内存和硬件中去做他们所需的任何工作。

[Josh Triplett]他不外是想用剧本来写测试代码罢了,“由于如许比拟风趣”。他既不想写太多的 C 言语代码,也不想像之前那样用阿谁能盘算 C-类 表达式的 GRUB shell。 实在, 他说,“C 代码写的越少, 我就越轻松"。

跟着工夫的推移, 移植到 GRUB 中的 Python 曾经酿成操控硬件的利器。它又把我们带回到运用 PEEK 和 POKE 在 Commodore 64(or DOS) 上面操控硬件的美妙光阴。“那些事是如今的硬件装备没法完成的”他说。 

GRUB中的PYTHON

BIOS Implementation Test Suite(BITS),正如其名,将会运转在多种固件上的GRUB中:32位BIOS或32/64位EFI。他运用原始的GRUB或GRUB 2。基于规范的PYTHON说明器(如CPython),可是他抱歉道:它运用PYTHON2.7。这个Tools的目的受众对这个版本的言语相当熟习。假如不是如许,他更爱好在当前迁徙到Python 3.

有一个“读取-求值-输出 轮回” 交互情况[read-eval-print loop (REPL)]让你完整拜访Python言语。它包含Tab完成,汗青记载,和行编辑。一个规范库的“大量碎片”曾经被不断BITS上运转。最主要的是,这个项目曾经添加了一些对平台支撑的模块:CPU,SMP(symmetric multi-processing),ACPI,EFI和其他。INTEL曾经创立了一个测试集和 运用Python写了运用以上模块的一些摸索性的Tools。

Triplett然后从幻灯片切换到了虚拟机的GRUB中运转一个Python说明器的提醒界面。他输出了两句语句到说明器来展现它支撑列表剖析和恣意大的整数(如:bignums)。

要取得一个python交互情况,GRUB需求挪用一个独自的函数:

PyRun_InteractiveLoop(stdin, "<stdin>");

它会处置一切REPL[读取-履行-输出 轮回],包含对输出的剖析和履行、行编辑等等。
这两个参数容易的标明了在那里获得输出 和 当发作异常时在traceback里要输出甚么来当作源文件。可是想要能在GRUB里挪用阿谁函数另有一些任务要做。

由于不克不及运用来自于 Linux 主机的Tools链和特征,这个项目不克不及像往常那样装置和设置装备摆设 Python。关于 GRUB 来讲,没有 GNU 目的声明(例如:用于穿插编译的 cpu-vendor-od-triple)和目的头文件可使用。因而,BITS 将一切的 Python 源文件添加到了 GRUB 的构件系统中。实质上说那仅仅是一些GRUB 添加 Python 所必须的 C 言语文件。凡是,autoconf 将创立 Python 构件顺序中的apyconfig.h 文件来讲明哪些功用在平台上存在。相反的,这个项目手动的创立 apyconfig.h 文件大量“不,我没有这个功用”的设置装备摆设参数和一小撮“是”的条目。

很多在 pyconfig.h 文件中被列出的功用是被(或不被)操纵系统所供给的,可是在这类状况下是没有操纵系统的。Python 确实需求最低限制的一些支撑功用,和一些额定被设置装备摆设的特征。这个项目需求去做的是供给任何被盼望而又不存在功用。

CPython 需求甚么

那末,甚么状况下你真的需求运转 CPython?Triplett 供给的大量实例来证实甚么时分需求运转 CPython。有一些往常的文件操纵就需求了,比方说:运用 stat () 来断定一个途径能否包括 __init__或是文件中能否包括 __init__。增加 ***isatty()(以位为单元,文件描绘符是少于三则前往 true)比如阅历一个 seek() 履行一样。为了支撑那些功用,不能不添加一个容易的文件描绘符表,由于 GRUB 的文件功用运用构造体指针,而不是描绘符。

剖析器把一个字符放回在输出流的时分,Python 也需求运用 ungetc() 。而不是在添加一个字符缓冲区的时分运用,即添加"疾速 hack"来寻觅后一个字符。添加开放式编码的 qsort() 时也一样一样要运用  ungetc();GRUB 不任何支撑排序。

GRUB还没有支撑的另外一个方面是浮点运算。项目组发明了一个答应的浮点运算库FDLIBM。它没有运用任何浮点硬件减速,这在GRUB情况长短常有效的。这意味啊即便在固件没完整初始化浮点运算硬件时也能运用浮点运算。

在运用Python时,我们大量运用printf()和sprintf()。大部分状况,GRUB版本任务很好,但对“%%”(输出一个”%“)这类特别格局还不支撑。现实证实,Python频仍运用格局化的字符串输出。

在被发明和修复之前,奇异的BUG依然存在。

这个工程另有一些功能问题需求处理。起首,启动工夫出人意料的长。对硬件来讲,这是非常苦楚的工作,可是在 CPU 的模仿电路上也很蹩脚(“我们不想花三地利间做领导”)。部分问题来自于 Python 的说明器,每次它读取一个数据的时分都要挪用 usesungetc()。GRUB 没有太多高速缓存的磁盘,所以一切 I/O 端口间接拜访磁盘。

经过参加对 .pyc (Python 字节代码)文件格局的支撑,这个工程可以提早减少量多语法剖析任务。主机的版本和 GRUB 的版本在统一时辰编译,用于 Python 文件在启动时的编译任务。

这做出了本质性的晋升,可是因为stat()的缘由,启动工夫依然有点慢。他说在Linux系统上,stat()仅破费几微秒的工夫,可是BITS版本会破费几毫秒。增加对zipimport的支撑能让工程把一切的.py文件打包放入一个单一的ZIP文件中来防止对stat()的挪用。

这个工程盼望做有汗青和tab主动补全的REPL(读取﹣求值﹣输出轮回),可是普通取得支撑的方法是运用GUN的Readline library。这个库由有终端装备的POSIX(可移植操纵系统接口)供给情况支撑。开辟者不想写一个“C代码文件”来支撑它,所以他们用Python写了一个读取线支撑来替换。CPython的PyOS_ReadlineFunctionPointer被称为一个运用C言语API的新Python函数的C函数聚集。

为了可以运用其他的操纵和多种的测试套件,仍急切需求构建 GRUB 的静态菜单。GRUB 曾经为装备供给了磁盘和文件系统像磁盘分区和 CD 驱动器(例如:“(hd0)”,"(cd)")因而 BITS 增加了一个的“(python)”装备和一个任务起来像在 Linux 用户空间的文件系统(译者注:打不开请加梯子)。因而 Python 代码能拜访恣意的内存文件,例如在 (python)/menu.cfg 下的菜单设置装备摆设文件,“即便我们没有写更多的C代码”,Triplett 说道。

拜访硬件

既然目的是供给一个友好的测试硬件情况,Python 需求可以拜访它。一个叫做“bits”的模块被添加出去供给拜访各类硬件的功用,例如:CPUID,特别模块存放器 (MSRs),I/O 端口,和内存映照 I/O。他用几行代码展现了这些才能。

    >>> import bits
    >>> from ctypes import *
    >>> c = bits.cpuid(0, 0)
    >>> c
    cpuid_result(eax=0x..., ebx=..., ecx=..., edx=...)
本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。 2KB翻译任务按照 CC 协定,假如我们的任务有进犯到您的权益,请实时联络我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部