刺眼的日光灯下正式打响。
没有现代化的集成开发环境,没有方便的代码纠错工具。
苏寒坐在工位前,盯着黑色的屏幕。屏幕上跳动着绿色的光标。
他的大脑在飞速运转。他需要将复杂的页面置换算法(Page ReplaCement AlgOrithm)转化为机器能够理解的指令。
键盘的敲击声在大厅里连成一片,就像是一场永不停歇的机械暴雨。
“啪啪啪啪……”
沉重的机械轴体在手指的按压下发出清脆的回弹声。
时间在这里失去了意义。没有白天黑夜的交替,只有食堂按时送来的铝盒饭和不断更换的浓茶。
第三周。 苏寒所在的第六组遇到了致命的逻辑死结。
他们编写的内存调度代码,在模拟运行简单的多任务读写时,总是会在运行到第三十分钟左右发生系统崩溃。屏幕上会突然弹出一长串毫无规律的十六进制乱码,然后主机发出死机报警的长鸣。
“又死锁了!”旁边的一名老教授烦躁地拍了一下键盘,摘下老花镜,痛苦地揉着太阳穴。
“指针地址在发生堆栈溢出,可是我检查了三遍汇编代码,循环逻辑没有任何问题。” 苏寒盯着屏幕上死机前定格的最后一行代码。
他的双眼布满红血丝,头发已经长得很长,乱蓬蓬的像个鸟窝。 他已经连续工作了三十个小时,只靠着两杯特浓的苦丁茶吊着精神。
“不是循环逻辑的问题。”苏寒的声音沙哑,像是在自言自语。 他拿过几张空白的草稿纸,开始在上面画出内存块的寻址地图。
“是中断优先级冲突。”苏寒的笔尖在纸上快速划过,“当软盘驱动器发出读取数据的硬件中断请求时,正好碰上了我们的内存回收子程序在执行关键区的内存释放。两个指令争夺同一个内存地址的控制权,系统不知道该听谁的,所以死锁了。”
“必须在回收子程序执行前,强行屏蔽掉所有非致命的硬件中断。等内存释放完毕后,再重新打开中断允许标志位。” 苏寒转过身,双手在键盘上飞速敲击。 CLI ...执行内存释放... STI 加上这几行底层控制代码后。 重新编译,运行。 系统稳定运转了两个小时,没有再出现乱码崩溃。 老教授看着屏幕,长长地出了一口气,向苏寒投去了赞许的目光。
这种在代码泥潭里的挣扎和突破,每天都在大厅的各个区域上演。
这是一种纯粹的脑力榨取。没有任何投机取巧的可能。一个标点符号的错误,一个寻址地址的偏移,都会导致整个庞大系统的轰然倒塌。
许多人在高压下达到了生理的极限。
有人在敲击键盘时,突然流出鼻血,滴在白色的键帽上;有人在黑板上推演算法时,直接晕倒在讲台上,被抬去医务室打点滴。
大厅的过道里,摆满了折叠行军床。累到极限的程序员,直接倒在床上,和衣而睡。几个小时后,又被同伴叫醒,用冷水洗把脸,继续坐回那台散发着辐射和热量的CRT显示器前。
两个月过去了。
西京市的地面上,秋风已经开始扫落叶。
但在地下零号机房里,热火朝天的气氛达到了顶点。
各个模块的代码已经基本编写完成。接下来,是最惊险的时刻——系统总成与联调。
这就像是把无数个单独制造的精密齿轮,拼装成一台巨大的钟表。任何一个齿轮的模数不匹配,整个钟表就会卡死。
总指挥台上,几台作为测试母机的“昆仑-PC100”被摆放在正中央。
五百名程序员停下了手里的工作,大厅里那持续了两个月的键盘敲击声终于平息了下来。所有人都站起身,屏住呼吸,死死地盯着指挥台。
苏寒站在人群的最前面,他的手心里全是冷汗。
高级工程师将汇编好的、包含了内核、驱动和文件系统的最终版代码,烧录进了一张五点二五英寸的启动软盘中。
“各模块负责组确认代码版本。”工程师的声音在安静的大厅里显得异常清晰。
“内核组确认。版本RC-1。”
“驱动组确认。无冲突报告。”
“文件系统组确认。寻道测试通过。”
工程师深吸了一口气,将那张承载着五百人两个月心血和生命透支的黑色软盘,缓缓推入了第一台测试母机的软盘驱动器插槽中。
“咔哒。”
驱动器锁扣按下。
“接通电源。执行硬件引导。”
工程师按下了主机面板上的红色电源开关。
机箱内部的散热风扇发出嗡鸣。
紧接着,软盘驱动器发出了标志性的“嘎吱嘎吱”机械寻道读取声。磁头在涂满磁粉的盘片上快速移动,读取着第一扇区的引导记录。
这短暂的几秒钟,在所有人的感知中,漫长得如同一个世纪。
屏幕上首先亮起