UNIX:老派作风

作者:Matthew Hoskins

有些人称我“年纪轻轻就怀旧”,我想这很准确。我出生于 1976 年,一直对早期小型计算机和大型机历史有着强烈的兴趣。我认为有记录的历史本身就是人类存在的最重要的创新。我们人类似乎有一种与生俱来的冲动,去记录、传承和学习前人的错误和成功。开源软件是这一概念应用于计算机技术的自然演变。在开源理念中,我们都可以自由地学习前人创造的大量软件。通过研究一个项目的演变,我们可以从他人的错误中吸取教训,或许最重要的是,可以逐字逐句地复制他们的成功经验。通过利用这种免费提供的历史以及不受限制的合作,我们促进了共同利益。

最近,各公司已开始放松对早期计算“知识产权”的控制。尽管有些公司尚未完全拥抱开源,但这些有时很小的象征性姿态为我们提供了丰富的知识。在本文中,我重点介绍如何通过在我们自己的 Linux 机器上使用模拟器运行“历史悠久”的 UNIX 版本来探索早期操作系统历史。SCO 集团(是的,“他们”,以前是 Caldera, Inc.)声称拥有早期 UNIX 的当前所有权,并已在“Ancient Unix”许可下发布它们,该许可允许非商业用途。我在此重点介绍 UNIX V5 版本,因为它是最早可用的版本。UNIX V6、V7 和各种早期 BSD 版本也可用。如果您计划试用这些操作系统中的任何一个,请在启动它们之前检查每个操作系统随附的许可证。

异域奇遇:UNIX V5 用户环境

与现代丰富多彩的 UNIX/Linux 系统相比,磁盘镜像中提供的 UNIX V5 系统相当简陋且不友好。以下是一些入门提示

  • sh 是 shell。它只有 858 行 C 代码;不要期望它像 bash 那样工作。

  • 使用chdir来更改默认目录。

  • 退格键和方向键很少起作用。

  • ed 是文本编辑器;请参阅 en.wikipedia.org/wiki/Ed

  • bas 是 basic 解释器。

  • fc 是 FORTRAN 解释器。

  • cc 是 C 编译器。

  • 源代码位于 /usr/source 中。

  • 文件不多,因此请使用find / -print查看还包含哪些内容。

为了探索这些操作系统,我们需要能够在常用的计算硬件上运行它们。幸运的是,我们有用于此目的的模拟器。由于其质量和深度支持,最流行的模拟器之一是 SIMH,可从 SIMH 网站(请参阅在线资源)获得。SIMH 可在每个流行的 *nix 操作系统以及 Microsoft Windows 上运行,并且能够模拟各种早期计算机系统,包括数字设备公司 (Digital Equipment Corp.) 的 PDP 和 VAX 系统、MITS Altair、早期 IBM 系统等等。一些最具历史意义的系统是 DEC 的 PDP 系列,UNIX 的诞生系统。

SIMH 是一个从头开始构建的系统模拟器;它模拟了许多早期计算机系统的 CPU、内存、固件和设备。这意味着原始分发的软件可以在这些模拟系统上未经修改地运行。SIMH 成功地模拟了磁盘、磁带驱动器、打印机和网络设备等设备。这意味着我们不仅可以运行这些历史悠久的系统,还可以使用现代技术和协议与它们通信并传输数据。非常感谢 SIMH 的贡献者。他们决定以开源方式贡献和发布,这进一步增进了我们对历史的理解,并保证这段历史将永远免费。

入门指南:安装 SIMH

下载最新的 SIMH 版本,在撰写本文时为 V3.4-0,编译并安装。如果您想使用以太网仿真,您可能需要升级与您的操作系统捆绑在一起的 libpcap 库,因为目前分发的大多数版本都太旧了。SIMH 安装文档解释了如何执行此操作,如果您不打算在模拟机器上使用网络支持,则可以跳过此步骤。编译可以由任何用户完成,并且非常简单,只需

$ mkdir simh
$ cd simh
$ unzip /path/to/simhv34-0.zip
$ mkdir BIN  # Note all CAPS
$ gmake USE_NETWORK=1 all
# Only include USE_NETWORK=1 if your PCAP lib is up to date.

(compilation chatter omitted)
$ ls -l ./BIN/
total 11624
-rwxrwxr-x  1 matt matt  301959 Jul 16 18:45 altair
-rwxrwxr-x  1 matt matt  482274 Jul 16 18:45 altairz80
-rwxrwxr-x  1 matt matt  529317 Jul 16 18:44 eclipse
-rwxrwxr-x  1 matt matt  297590 Jul 16 18:45 gri
-rwxrwxr-x  1 matt matt  375737 Jul 16 18:44 h316
-rwxrwxr-x  1 matt matt  577678 Jul 16 18:44 hp2100
-rwxrwxr-x  1 matt matt  355225 Jul 16 18:44 i1401
-rwxrwxr-x  1 matt matt  381672 Jul 16 18:45 i1620
-rwxrwxr-x  1 matt matt  441079 Jul 16 18:46 ibm1130
-rwxrwxr-x  1 matt matt  502037 Jul 16 18:46 id16
-rwxrwxr-x  1 matt matt  508378 Jul 16 18:46 id32
-rwxrwxr-x  1 matt matt  294614 Jul 16 18:46 lgp
-rwxrwxr-x  1 matt matt  434940 Jul 16 18:44 nova
-rwxrwxr-x  1 matt matt  345034 Jul 16 18:41 pdp1
-rwxrwxr-x  1 matt matt  752055 Jul 16 18:43 pdp10
-rwxrwxr-x  1 matt matt 1055376 Jul 16 18:43 pdp11
-rwxrwxr-x  1 matt matt  474153 Jul 16 18:42 pdp15
-rwxrwxr-x  1 matt matt  459203 Jul 16 18:41 pdp4
-rwxrwxr-x  1 matt matt  460363 Jul 16 18:41 pdp7
-rwxrwxr-x  1 matt matt  499473 Jul 16 18:42 pdp8
-rwxrwxr-x  1 matt matt  467662 Jul 16 18:42 pdp9
-rwxrwxr-x  1 matt matt  352233 Jul 16 18:45 s3
-rwxrwxr-x  1 matt matt  429312 Jul 16 18:46 sds
-rwxrwxr-x  1 matt matt  982694 Jul 16 18:43 vax

这将构建所有可能的系统模拟器。每个模拟器都成为 ./BIN/ 目录中的一个单独的二进制文件。SIMH 可以作为任何普通用户运行,但如果您想使用以太网网络模拟,您需要以 root 用户身份(在 UNIX 下)执行它,以允许 libpcap 访问以太网设备。

运行 UNIX V5

UNIX V5 于 1974 年 6 月发布,在贝尔实验室的 UNIX 开发中仍处于早期阶段。系统的大部分仍然是用汇编程序编写的。此磁盘镜像包括一个可工作的 C 编译器 (cc) 和大量有趣的源代码,位于 /usr/source 下。要开始我们的探索,我们必须下载 UNIX V5 磁盘镜像(请参阅资源)。此 zip 存档包含预安装的镜像文件以及 README 和包含许可证信息的文件。磁盘镜像是一个正在运行的已安装系统的快照。在本例中,它模拟的是一个 RK05 磁盘驱动器。我们现在必须收集启动此系统所需的组件。首先创建一个目录,然后从 SIMH 构建目录下的 BIN/ 目录中复制 pdp11 二进制文件,以及 uv5swre.zip 存档的解压缩内容。然后,使用您选择的编辑器创建一个 pdp11.ini 文件来控制模拟器,并将以下行放入 ini 文件中

set cpu U18
attach rk0 unix_v5_rk.dsk
boot rk0

这告诉模拟器要模拟哪种类型的 CPU,并将 unix_v5_rk.dsk 文件作为模拟的 RK 样式磁盘连接,使用 rk0 设备名称。最后,此文件告诉模拟器启动该磁盘上的操作系统镜像。

您的模拟器目录应如下所示

-rw-rw-r--  1 matt matt   12299 Jan 24  2002 AncientUnix.pdf
-rwxrwxr-x  1 matt matt  913614 Jul 22 19:33 pdp11
-rw-rw-r--  1 matt matt      47 Jul 22 23:59 pdp11.ini
-rw-rw-r--  1 matt matt     263 Nov 25  1996 README.txt
-rw-rw-r--  1 matt matt 2494464 Jul 23 00:39 unix_v5_rk.dsk

要启动 UNIX V5,只需输入./pdp11在当前目录下,然后在提示时输入unix在 @ 提示符下。您几乎会立即获得 login: 提示符;在这些旧 UNIX 中,启动消息不多。没有 root 密码,因此您将被赋予命令提示符。您的会话可能如下所示

$ ./pdp11

PDP-11 simulator V3.4-0
Disabling XQ
@unix

login: root

# ls -l /
total 60
drwxr-xr-x  2 bin       944 Nov 26 18:13 bin
drwxr-xr-x  2 bin        80 Nov 26 18:13 dev
drwxr-xr-x  2 bin       240 Mar 21 12:07 etc
drwxr-xr-x  2 bin       224 Nov 26 18:13 lib
drwxr-xr-x  2 bin        32 Nov 26 18:13 mnt
drwxrwxrwx  2 bin       112 Mar 21 12:11 tmp
-rwxrwxrwx  1 bin     25802 Mar 21 12:07 unix
drwxr-xr-x 14 bin       224 Nov 26 18:13 usr

# chdir /usr/source/s1

# cat echo.c
main(argc, argv)
int argc;
char *argv[];
{
        int i;

        argc--;
        for(i=1; i<=argc; i++)
                printf("%s%c", argv[i], i==argc? '\n': ' ');
}

# cc echo.c

# mv a.out newecho

# ./newecho Hello World
Hello World

# chdir /tmp

# cat >hello.c
main()
{
   printf ("Hello World!\n");
}

# cc hello.c

# ./a.out
Hello World!

# cat >hello.b
10 print "Hello World!"

# bas hello.b
run
Hello World!

就是这样;您已启动并运行。您已正式接触到“真正”的历史 UNIX 系统。如您所见,有大量的源代码可供查看,还有一个可工作的编译器可供使用。UNIX V5 只是您可以使用 SIMH 探索的早期操作系统之一。在 SIMH 网站上,您将找到其他系统的磁盘镜像存储库。

如果您有兴趣了解 PDP-11 系统和 RK05 磁盘的实际外观,请查看 SIMH 网站上的照片库(请参阅资源)。此外,尝试在 Google 图片中搜索大量精美的照片。

本文资源: /article/8587

Matthew Hoskins 是新泽西理工学院的高级 UNIX 系统管理员,他在那里维护着许多公司管理系统。他喜欢尝试让截然不同的系统和软件协同工作,通常使用薄薄的一层 Perl(在当地被称为“MattGlue”)。当不破解系统时,他经常可以在厨房里破解美食。可以通过 matt@njit.edu 联系 Matt。

加载 Disqus 评论