目前状况:
我在一所中学里管理计算机机房,机房里共有14台奔腾机运行Windows
98通过以太网联网,用于Windows、Works、Office和编程基础的教学。
这个学期我打算向高年级的学生(17到18岁)介绍UNIX,具体的说就是Linux。除了通常用户的工作外,我还希望让他们初步接触一下X环境下的编程,例如画正弦曲线。此外,我还希望他们能够学习使用UNIX上的数学软件,Gnoplot和Octave。
但是,奔腾机上还是应该继续跑Windows--因为低年级的学生(16,17岁)和一般工作人员不熟悉Linux,短期之内也不可能熟悉。
于是,我从各种途径搞到了这样一些机器:一台486 DX2(即将成为我们的服务器)、几台386
和486,都是更有年头了。最后,我还有希望弄到一台主频中等的奔腾机。这些机器最多只有16M内存。
背景情况:学校当局里还有人不习惯免费或者自由计算机系统的概念,那似乎违背了多年来的“传统”。这倒是Linux进入课堂所面临的最大挑战。
解决方法:
我从两方面人手:
386和486做X终端
尽管这些老机器的配置各不相同,但最“好”的配置大致就是下面这样了:
总而言之,硬件是80年代的MS-DOS水平,因此我们的软件配置必须尽量紧凑。
为了节省空间,我选择了1.2.13版本的老内核,这样既省硬盘空间又省内存,而且没有模块,启动也快一些。安装使用的是老的Slackware,只选装了A和X系列(基本操作系统和基本X系统)。Slackware做这种项目是最方便不过了,选择安装什么东西特别简单,而且如果你不能使用NFS安装的话,只有它能从软盘安装。
硬盘分区是这样的:34M划给操作系统,6M划给盘交换区(SWAP)。我格式化硬盘时使用了1024字节的inode,这也许是犯了一个错误。df报告硬盘使用了31K inode中的28K,34M的硬盘已经用掉了98%!。内存在一般状况下的使用量为7M,3.5M物理内存,3.5盘交换区。
通常一个学生在这样一台机器上运行的X程序如下(大多数通过脚本自动执行):
startx (.login中指定,我们使用tcsh而不是bash)
xterm (在.xinitrc中指定)
xhost 服务器IP (授权允许服务器上的X客户程序连接本地显示)
rsh 服务器IP (远程登录到服务器)
xterm -display "本机IP":0.0 (服务器上启动一个X终端到本地显示)
exit (退出到服务器的rlogin)
...
Windows上运行的X服务器软件
我使用的是来自Microimages(http://www.microimages.com/)的MIXserver 5.6。这是一个比较典型的Windows X服务器软件,自带一个最简单的Windows Manager (类似twm),可以从网站直接下载,我是从SUSE的CDROM中得到这个软件的。在640x480 256色和800x600 真彩色(24bit)下它工作的很不错,绝大多数的字符和线条显示正常,位图可能会稍有一些问题。我试过的软件包括Netscape和Xmahjong。
一个学生的典型X会话如下:
开始MIX
使用Windows标准的telnet访问服务器
执行xterm -display "客户机 IP":0.0
exit,离开telnet
...
在MIX中不需要xhost,因为它接受任意地址的X请求。
我希望能在网站上发表这些孩子们在1999到2000学年上的一些作品,其中有许多非常漂亮的图片。
译注:
我个人对Linux利用旧的386、486跑X进行课堂教学一直很感兴趣,有兴趣的网友可以
emailaxisx@poboxes.com 和我联系,请先用英文。当然我不是老师啦,只是曾经用8M内存的486跑Linux 2.0.18作为X终端,效果还不错:
1、8M内存跑X,分辨率不能太高,800x600x16比特(64k)比较合适,否则每个色彩比特也都是要内存的。我当时是log on到一台16M内存的奔腾服务器上跑KDE pre1(比现在的KDE 1.x小多了)但如果Netscape窗口开得太多,则X server内存占用量明显上升,机器SWAP(3M以上),显示的反应降低。
2、由上可见,系统响应速度的快慢关键是保证内存够用,无须利用硬盘虚拟--两者的速度差几个数量级。一般的方法是:
a. 减小内核?
如本文介绍的使用1.2.13内核。1.2.13是Linux比较早的一个最稳定版本,我的一个同学的网站去年被人黑了,才不得不从1.2.13升级:?
如果由于网卡驱动的关系,必须使用2.0甚至2.2的内核,那么尽量减少编译进内核的功能模块,而且选择不支持模块(节省module的hook和kerneld)
b. 使用早一些的系统。
Linux可执行程序的格式发展历经了aout, ELF/libc5, ELF/glibc2 , ELF/glibc2.1的阶段。简而言之,aout是静态链接的,如果同样的程序同时运行多个,必然有可以共享的代码无法共享,ELF是动态链接的,libc5,glibc2,glibc2.1功能一个比一个强,多线程和国际化支持一个比一个,也一个比一个大。本文作者谈到的Slackware,多半就是用aout的。
c. 减少系统启动后的进程
反正是终端,daemon守护进程绝对是多余的,只要进单用户模式,初始化网络,然后 X -query 服务器IP 即可,比本文作者的做法更省。你可以参考Redhat或者Slackware的安装盘做法,写自己的linuxrc,我还曾经用同样的方式,做过自己的网络Ghost(把一个安装的比较好的Win95压缩备份到网络NFS服务器上,需要恢复时用特制的Linux启动盘启动,然后敲一下y!? 这方面还可以参考mini HOWOT中的small memory howto。
d. 减少X服务器本身的内存使用量。可以从X的linkkit略去不需要的驱动模块(特别是SVGA server)和功能模块(XIM,mitshm,如果内存真的很成问题,可以把double buffer和 save under两个通常会耗费内存加速响应时间的选项也去掉)。而且可以把X编译成静态链接的,速度会快一些,内存占用量也小一些(不过事先要设好XF86Config)
3、X和网络
X是网络透明,但事实上还是一个网络传输量比较大的协议,我读到过有人在大学里用Pentium
Pro的服务器(好象是200M内存左右,当时是算很大内存了)拖30个Linux X终端进行教学,但我相信,如果30个人都在用Quake II 或者DOOM的时候,网络上一定够瞧的...当然,本文的主题是课堂上的Linux,Quake开课应该是下一个千年的事情啦。