لا بد أنك سمعت العبارة: "ذاكرة الحاسوب الذي ذهب إلى القمر كانت أصغر من صورة فوتوغرافية". وقلنا في الفيديو أيضًا "4 كيلوبايت". هذا الرقم صحيح، لكنه ناقص وحده. فقد كان لحاسوب التوجيه في أبولو (Apollo Guidance Computer، ويُختصر AGC) ذاكرتان منفصلتان في الحقيقة، و"4 كيلوبايت" لا تصف سوى الأصغر منهما.
تعال نفتح هذا الرقم الشهير معًا.
ماذا تصف "4 كيلوبايت" بالضبط؟
كانت ذاكرة العمل في AGC، أي الذاكرة القابلة للمسح التي نسميها اليوم RAM، تتألف من 2,048 "كلمة". وكانت كل كلمة بطول 16 بت: 15 بت بيانات وبت واحد للتكافؤ (parity) لفحص الأخطاء. وإذا عددنا الكلمة بايتين فإن 2,048 كلمة تساوي نحو 4 كيلوبايت. أي أن عبارة "4 كيلوبايت" هي حجم ورقة المسودة التي استخدمها الحاسوب في الحساب أثناء الرحلة.
ولم تكن البرامج داخل هذه الذاكرة. ففيها كان يُحتفظ بالموقع اللحظي والسرعة والعدادات والنتائج الوسيطة المنقولة بين المهام. وكانت الذاكرة مصنوعة من حلقات صغيرة تسمى القلوب المغناطيسية (core)، وتحتفظ بمحتواها حتى لو انقطعت الكهرباء.
أما البرامج فكانت في مكان آخر تمامًا: في ذاكرة ثابتة من 36,864 كلمة، أي ROM. وبالحساب نفسه يساوي ذلك نحو 72 كيلوبايت. باختصار، الجملة الأدق هي: هبط أبولو 11 على القمر بنحو 4 كيلوبايت RAM ونحو 72 كيلوبايت ROM.
البرامج كانت منسوجة بالحبال
كانت ذاكرة ROM في AGC ذاكرة "core rope" (حبل القلوب) وكانت تُنسج يدويًا بالمعنى الحرفي. فإن مرّ سلك عبر قلب مغناطيسي كان البت 1، وإن التف حول القلب كان 0. أي أن البرمجيات كانت تتحول إلى عتاد بالنسيج كما تُنسج الأقمشة.
وقامت بهذا العمل عاملات شركة Raytheon في والثام بولاية ماساتشوستس. وبحسب الدراسة المفصلة لكين شيريف، كان جزء كبير ممن عُيّنوا نساءً جئن من قطاع النسيج المحلي بسبب مهارتهن في الخياطة. وكان نسج وحدة واحدة يستغرق نحو 8 أسابيع ويكلف 15,000 دولار. وكانت كل وحدة تحمل 6 آلاف كلمة، وتشكل ست وحدات 36,864 كلمة بالمجموع.
وكان لذلك أثر جانبي مهم: كان لا بد من تجميد البرمجيات قبل الرحلة بأشهر. ولم يكن هناك شيء اسمه ترقيعة اللحظة الأخيرة، لأن تصحيح خطأ كان يعني إعادة النسج.
إنذار دوّى قبل دقائق من الهبوط
أثناء الهبوط في 20 يوليو 1969 أطلق حاسوب وحدة الهبوط القمرية على الشاشة إنذار 1202 أولًا ثم 1201. وكلاهما يعني "فيض المنفذ": حُمّل الحاسوب من العمل أكثر مما يطيق. وبحسب الشرح المفصل في ويكيبيديا، كان السبب إشارات زائفة من رادار الالتقاء الذي تُرك في وضع الانتظار شغلت المعالج. لم تكن المشكلة خطأ برمجة ولا خطأ طيار ولا عطلًا في العتاد. وإنما نشأت في أصلها من عيب في وثيقة الواجهة بين نظامين.
والأمر الأكثر إثارة هو ما فعله البرنامج في هذه الحالة. فقد كان AGC يعمل بجدولة قائمة على الأولويات. وعندما جاء الحمل الزائد أعاد تشغيل نفسه بسرعة، وترك الأعمال منخفضة الأولوية، وواصل المهام الحرجة مثل إدارة الهبوط. أي أن تلك الذاكرة الصغيرة الشهيرة كفت لأنها أُديرت بذكاء.
وكان هناك تفصيل آخر زاد الأمر صعوبة. فالأمر 1668 الذي أدخله باز ألدرين إلى الحاسوب أثناء الهبوط أضاف حملًا على المعالج المتعب أصلًا وأطلق إنذار 1202 آخر. وتجاوز البرنامج ذلك بالطريقة نفسها، وهبط النسر (Eagle) على سطح القمر.
طُوّرت البرمجيات في مختبر الأجهزة بمعهد MIT. وأدار فريقان مختلفان برمجيات وحدة القيادة (COLOSSUS) وبرمجيات وحدة الهبوط القمرية (LUMINARY). أما تنفيذ التفاصيل فكان في الفريق الذي قادته مارغريت هاميلتون.
الماضي / الحاضر
| حاسوب التوجيه في أبولو (1969) | هاتف اليوم |
|---|---|
| نحو 4 كيلوبايت ذاكرة قابلة للمسح (RAM) | غيغابايتات من RAM |
| نحو 72 كيلوبايت ROM منسوجة يدويًا | مئات الغيغابايتات من التخزين |
| أشهر من النسج لتحديث البرنامج | تحديثات تُنزَّل وحدها ليلًا |
| نحو 32 كغ | يتسع في راحة اليد |
الدرس الحقيقي للرقم
كثيرًا ما يُروى رقم "4 كيلوبايت" بنبرة "انظر كم كان بدائيًا". لكن جوهر القصة عكس ذلك: فالذاكرة المحدودة أجبرت المهندسين على حساب كل بت. ولهذا وُلد برنامج يعطي المهام أولويات ويتعافى ذاتيًا عند الحمل الزائد.
الأجهزة التي في جيوبنا اليوم تملك ذاكرة أكبر بما لا يُقارن، لكن معظم التطبيقات لا تُكتب بتلك العناية. وقد يكون تحديث واحد لتطبيق مراسلة أكبر بأضعاف من برمجيات أبولو كلها.
برأيك، هل القيود تخرّج مهندسين أفضل، أم الوفرة؟