x86的“最后真正的Unix”移植

2020-11-26 04:40:35

我在一家位于美国的半导体公司工作,担任负责C编译器开发的首席软件工程师。此处提供的软件通常反映出对C和UNIX的兴趣以及较早的计算历史。

V7 / x86是UNIX操作系统第七版到基于x86(i386)的PC的端口。 UNIX V7是最后一个通用发行版(大约在1979年),该发行版来自UNIX最初的所在地贝尔实验室的研究小组。该端口大部分是在1999年左右完成的,当时“古代UNIX”源代码许可证首次可用,并且在2006-7年度期间进行了修订以进行发布,并进行了一些增强。

该发行版包括完整的UNIX Version 7操作系统,以及源代码,预构建的二进制文件,手册页和原始的Version 7文档。还包括一个定制的UNIX风格的x86汇编器,一个基于ACK的C编译器以及一些关键的早期UCB软件组件,例如C shell,ex和vi编辑器以及寻呼机等等。

V7 / x86目前除了常规的PC屏幕和键盘外,还支持ATA(IDE)硬盘驱动器,ATAPI CDROM驱动器,1.44M软盘驱动器和标准串行端口。为了简化安装和设置,提供的实用程序允许访问CD(ISO 9660)和FAT(MS-DOS)文件系统。源代码在BSD样式许可下可用。

UNIX版本7附带了一组全面的文档,包括手册页(/ usr / man)和其他(/ usr / doc)文档。 V7 / x86策略通常是更新手册页以反映由于x86端口而引起的更改,但保留其他文档不变,因为这些文档通常归因于各个作者。

该发行版主要以小(小于4M,压缩)的CD映像形式提供。下载此文件并将其刻录到CD上。生成的CD可引导,并在基于内存的文件系统上运行V7 / x86,最终出现在菜单驱动的安装程序中。安装程序处理从CD安装到硬盘分区的简单情况。

请注意,安装程序希望将其安装到现有的V7 / x86硬盘分区上。可以使用任何允许指定分区类型的fdisk兼容实用程序创建此文件。 V7 / x86分区类型为0x72(十进制114)。

通过使用引导管理器,V7 / x86可以与其他x86操作系统共存于同一台计算机上。

如果出于某种原因,您无法使用基于CD的安装,则另一种方法是将启动映像放在软盘上,从中启动,然后使用(例如)FAT(MS-DOS)文件系统转移分发包的实用程序。在这种情况下,您必须手动进行大部分安装,但是该过程相当简单,您可以参考安装程序使用的shell脚本(在/ usr / lib / install中)来检查需要的步骤。

还可以将V7 / x86作为虚拟机软件包进行预安装,这可能是查看它的最简单方法:

V7 / x86虚拟机软件包可与各种仿真器和虚拟化应用程序一起使用。这些产品包括Bochs,VMware产品(如Player和Workstation)以及Oracle VirtualBox。 (使用Bochs 2.5.1,VMware Player 4.0.3和VirtualBox 3.2.6进行了测试。)

对于VirtualBox,使用媒体管理器添加.vmdk文件,然后从头开始设置一个简单的虚拟机(操作系统:Other;版本:Other / Unknown;内存:16 MB)。

BCPL显然是由Martin Richards在1967年左右在麻省理工学院首次实现的,并且是1970年代广泛使用的系统编程语言。但是,由于它直接启发了编程语言B,因而引起了极大的成功,而C如今引起了人们的广泛赞誉。

对于任何对C的原因和理由感兴趣的人,与BCPL相识是值得的。从BCPL向前看,而不是从Java和C ++向后看,许多C构造和惯用的C处事方式才有意义。

除了其历史重要性之外,BCPL还具有内在的优点。回想起来,特别令人印象深刻的是其编译器的优雅简洁性。这在《 BCPL:语言及其编译器》(马丁·理查兹(Martin Richards)和科林·惠特比-史蒂文斯(Colin Whitby-Strevens)(剑桥:剑桥大学出版社,1979年)》一书中有很好的记载。

在鼎盛时期,BCPL的一大优点是可移植性。通过使用INTCODE(抽象机的一种简单汇编语言),将编译器首先在新平台上启动的问题减少到使用某种高级语言对INTCODE解释器进行编码的问题。这样的任务可能只需要一两天。

此处的重点是1979年左右的“经典” BCPL,其实现与BCPL书中所述的实现非常接近。

这是来自剑桥大学Tripos研究小组的“经典”旧BCPL编译器(大约在1980年)的x86(i386)端口。该发行版适合在64位和32位Linux和FreeBSD系统上编译和运行一系列较旧的BCPL程序。

作为一个可以研究,修改和使用的真实有效的计算机语言实现,此旧的BCPL编译器有很多值得推荐的地方。编译器前端仅包含约2,000行BCPL代码,并且(按此处提供)编译为大小小于36,000字节的静态(完全链接)x86二进制文件。

本发行版提供了编译器后端(OCODE到x86代码生成器),窥孔优化器以及相当广泛的运行时支持。对编译器前端进行了一些修订-例如,在标准位置查找头文件-并且运行时合并了对UNIX命令行参数和错误报告的支持。还包括一些构成原始BCPL发行磁带一部分的文档,以及一些实用程序。

较早的发行版提供了Cambridge BCPL移植套件,其中包含INTCODE解释器和INTCODE至x86代码生成器。同样,主要版本适用于FreeBSD和Linux系统。这是一个功能较弱的编译器,除非您特别对INTCODE感兴趣,否则应首选obcpl发行版。

还提供了其他发行版使用的原始BCPL发行文件。这些文件的直接来源是tar存档文件“ bcpltape.tgz”,该文件最初由Ken Yap提供,大约在1991年。该归档文件由简短的自述文件和55个名为“ f01”至“ f75”的文件组成,不存在20个文件。自述文件指出,提供的归档文件包含Martin Richards的“传输”磁带中的所有文件,但IBM360对象文件除外。剑桥文件的日期戳早于1984年11月。

当我去寻找原始的移植工具包档案时,它似乎已经从网络上掉下来了,我在这里提供它。在重新分发文件时,我已纠正了许多字符映射问题,这些问题显然是由不兼容的EBCDIC方言引起的,并为文件分配了有意义的名称,并根据内部证据将它们分组在目录中。

David Cannon提供的用于Windows的Classic BCPL发行版利用了此处提供的部分软件,是解决在该平台上编译旧BCPL程序问题的简单解决方案。

BCPL的创始人马丁·理查兹(Martin Richards)继续开发该语言,并在其主页上提供了大量复杂的“现今” BCPL分发以及一些存档材料。