กระบวนการพัฒนาใช้สำหรับโค้ดในภารกิจของ Apollo 11 หรือไม่?


57

ภารกิจของ Apollo นั้นมีเทคโนโลยีไม่ซับซ้อนกว่าเครื่องคิดเลขพกพา

จากลิงค์ที่นี่มีข้อมูลเกี่ยวกับ Apollo Guidance Computer (AGC)

คอมพิวเตอร์แนะนำ Apollo บนบอร์ด (AGC) มีขนาดประมาณ 1 ลูกบาศก์ฟุตพร้อม RAM ขนาด 16 บิต 2K และ 36K ของหน่วยความจำแกนเชือกแบบมีสายแข็งที่มีสายทองแดงเป็นเกลียวหรือไม่มีเกลียวผ่านแกนแม่เหล็กขนาดเล็ก คำ 16- บิตโดยทั่วไปคือ 14 บิตของข้อมูล (หรือสอง op-codes), 1 sign bit และ 1 parity bit รอบเวลาคือ 11.7 ไมโครวินาที การเขียนโปรแกรมทำในภาษาแอสเซมบลีและในภาษาที่สื่อความหมายในโปแลนด์กลับ

ดังนั้นฉันจึงสะดุดกับซอร์สโค้ดบางอย่างเมื่อฉันค้นคว้าสิ่งที่เกิดขึ้นที่นั่นและฉันสังเกตเห็นความคิดเห็นที่ดี (เช่นชั่วคราวฉันหวังว่าจะเป็นความหวัง)

VRTSTART    TS  WCHVERT
# Page 801
        CAF TWO     # WCHPHASE = 2 ---> VERTICAL: P65,P66,P67
        TS  WCHPHOLD
        TS  WCHPHASE
        TC  BANKCALL    # TEMPORARY, I HOPE HOPE HOPE
        CADR    STOPRATE    # TEMPORARY, I HOPE HOPE HOPE
        TC  DOWNFLAG    # PERMIT X-AXIS OVERRIDE
        ADRES   XOVINFLG
        TC  DOWNFLAG
        ADRES   REDFLAG
        TCF VERTGUID

โปรแกรมที่เกิดขึ้นจริงในยานอวกาศถูกเก็บไว้ในหน่วยความจำเชือกแกนหลักซึ่งเป็นเทคโนโลยีหน่วยความจำโบราณที่ทำโดยการทอผ้า / เชือกซึ่งบิตเป็นวงแหวนทางกายภาพของวัสดุเฟอร์ไรต์ หน่วยความจำ "คอร์" ทนต่อรังสีคอสมิก สถานะของแกนบิตจะไม่เปลี่ยนแปลงเมื่อถูกทิ้งระเบิดโดยรังสีในอวกาศ

ซอฟต์แวร์ Virtual Apollo Guidance Computer (AGC) ก็มีอยู่ใน GITHUB เช่นกัน!

เอกสารบางส่วนอยู่ที่นี่

อีกตัวอย่างของรหัสที่มาพร้อมกับความคิดเห็นที่ดี

033911,000064: 32,3017    06037        FLAGORGY        TC       INTPRET      #  DIONYSIAN FLAG WAVING

    034090,000243: 32,3241    13247        BZF      P63SPOT4               #  BRANCH IF ANTENNA ALREADY IN POSITION 1
    034091,000244: 
    034092,000245: 32,3242    33254        CAF      CODE500                #  ASTRONAUT:     PLEASE CRANK THE
    034093,000246: 32,3243    04616        TC       BANKCALL               #                 SILLY THING AROUND
    034094,000247: 32,3244    20623        CADR     GOPERF1                               
    034095,000248: 32,3245    16001        TCF      GOTOP00H               #  TERMINATE
    034096,000249: 32,3246    13235        TCF      P63SPOT3               #  PROCEED        SEE IF HE'S LYING


    034101,000254: 32,3251    04635        TC       POSTJUMP               #  OFF TO SEE THE WIZARD ...
    034102,000255: 32,3252    74126        CADR     BURNBABY

คำถามของฉันนี่คือ:

  • ทีมที่เขียนโค้ดมากขนาดนี้สามารถทำให้เครื่องมือทำงานได้อย่างไรในเวลานั้น?

เพราะถ้าคุณรวบรวมรหัสมากที่ใช้กับ Apollo 11 ... มันต้องใช้เวลาหลายวันหรือหลายสัปดาห์ ฉันสงสัยอย่างจริงจังว่าโปรแกรมเมอร์ย้อนกลับไปและทิ้งทุกสิ่งให้เกิดขึ้นโดยบังเอิญ


4
ฉันมีการแก้ไขที่สำคัญพอสมควรเพื่อทำให้หัวข้อนี้มีความหวังมากขึ้น ฉันคิดว่ามันเป็นคำถามที่น่าสนใจและเป็นสิ่งที่ฉันหวังว่าผู้คนจะสามารถตอบได้อย่างมีประสิทธิภาพ!
enderland

3
อ่านแฮกเกอร์และกับ myth Man เดือน มีเนื้อหาค่อนข้างน้อยอยู่ในนั้น - ฉันไม่แน่ใจว่ามันจะพอดีกับคำตอบที่นี่

2
หัวเรื่องคำถามสไตล์ "แท็ก - คำถาม" ไม่ได้รับการสนับสนุนใน Exchange Exchange กรุณาปล่อยให้ชื่อมันเป็น

4
ไม่มีรอบการคอมไพล์ / แก้ไขเหมือนคำถามของคุณแนะนำ คุณไม่ได้สร้างหน่วยความจำเชือกทดสอบแล้วทำซ้ำหากไม่ได้ผล คุณทำให้ถูกต้องในครั้งแรก
Robert Harvey

7
@ RobertHarvey คุณHOPE HOPE HOPEจะทำให้ถูกต้องในครั้งแรก

คำตอบ:


13

มีสารคดีน่ารักที่ฉันพยายามไล่เกี่ยวกับจอห์น 'แจ็ค' การ์แมนต้อง "คิดค้น" "ระบบปฏิบัติการหลายระบบที่มีความสำคัญที่กำหนดเวลาไว้" สิ่งนี้อาจเกี่ยวข้องกับโมดูลแลนเดอร์ เรื่องราวคือเมื่อคุณลงจอดแลนเดอร์คุณควรให้ความสำคัญกับคำแนะนำมากกว่าเพราะสิ่งอื่น ๆ เช่นอุณหภูมิในห้องโดยสารในอีก 15 วินาทีไม่สำคัญว่าคุณจะชนหรือเผา ในนัดแรกพวกเขาใช้คอมพิวเตอร์มากเกินไปและสัญญาณเตือนเริ่มเกิดขึ้นเนื่องจากรูทีนย่อยบางตัวไม่ได้รับการดำเนินการ มีจำนวนมากเกินไป แต่ต้องขอบคุณแนวคิดลำดับความสำคัญซึ่งการ์แมนเล็งเห็นและสร้างขึ้นเพราะเขาคิดว่ามันเป็นความคิดที่ดีขั้นตอนที่มีลำดับความสำคัญต่ำไม่ทำให้ชะงักลง

การดูสารคดีในเวลานั้นฉันรู้สึกว่ามันเป็นเหมือนการทำ refactoring ที่สำคัญในรหัสโดยไม่บอกผู้บริหารและเกือบถูกไล่ออกเพราะคุณมาช้าในสิ่งที่คุณควรจะทำ อย่างไรก็ตามในกรณีนี้การปรับโครงสร้างจะสว่างเมื่อมีการตรวจสอบเหตุผลของสัญญาณเตือน (และฝ่ายบริหารก็ยังโกรธอยู่! :-)

ลิงค์บางส่วน:

ไม่“ ข้อผิดพลาดในรายการตรวจสอบ” เกือบจะไม่ได้ตกอยู่ในดวงจันทร์ดวงแรก

TALES จากคอมพิวเตอร์แนะนำโมดูลทางจันทรคติ

วิธีที่พวกเขาสร้างมันขึ้นมา: ซอฟต์แวร์ของ Apollo 11

โครงการอวกาศประวัติศาสตร์นาซาจอห์นสันจอห์นสันแก้ไขบันทึกประวัติช่องปาก

ประวัติโดยย่อของโปรแกรม Apollo ของนาซา ข้อความที่ตัดตอนมา: ห้านาทีในการเผาเชื้อสายและ 1,800 เมตรเหนือพื้นผิวของดวงจันทร์คอมพิวเตอร์ระบบนำทางและคำแนะนำของ LM ได้ผลิตสัญญาณเตือนโปรแกรม "1202" และ "1201" ที่ไม่คาดคิดหลายครั้งแรก Jack Garman วิศวกรคอมพิวเตอร์ที่ Mission Control Center ใน Houston บอกกับเจ้าหน้าที่แนะแนวสตีฟเบลส์ว่าปลอดภัยต่อการสืบเชื้อสาย สัญญาณเตือนเหล่านี้บ่งชี้ว่า "ผู้บริหารล้น" หมายถึงคอมพิวเตอร์แนะนำไม่สามารถทำงานทั้งหมดตามเวลาจริงและต้องเลื่อนเวลาบางส่วนออกไป

ระลึกถึง 'Giant Leap' ข้อความที่ตัดตอนมา: เรารู้ว่าเกิดอะไรขึ้นและไม่ควรเกิดขึ้น แต่เราได้ออกแบบระบบที่พยายามอย่างหนักในการกู้คืนจากสภาวะการโอเวอร์โหลดใด ๆ ดังนั้นฉันจึงจำได้ว่าได้ยิน [วิศวกรคอมพิวเตอร์ของนาซา] แจ็คการ์แมนตะโกนว่า "ไปเลย!" และเมื่อพวกเขาไป จากนั้นเราก็ฟังขณะที่นีลบิน LEM ขึ้นไปและพยายามหาจุดที่ดีในการทำดาเมจ ความกังวลใหม่ของเราคือการขาดเชื้อเพลิงที่เหลืออยู่ แต่ในที่สุดเราก็ได้ยินคำบอกกล่าวการติดต่อจากนั้น "The Eagle ได้ลงจอดแล้ว"

สัมภาษณ์ Jack Garman

แก้ไข: บางทีนี่อาจจะเป็นสารคดี: Apollo 11: The Untold Story (2006)

นักแสดง: จอห์นอาร์การ์มัน ...
ตัวเขาเอง - Apollo 11 วิศวกรคอมพิวเตอร์ (เหมือนแจ็คการ์แมน)

(ท่ามกลางคนอื่น ๆ).

ปรับปรุง: แฮ็กเกอร์จากแอฟริกาใต้เพิ่งช่วยคอมพิวเตอร์ NASA เครื่องแรกในอวกาศ


ฉันรู้ว่าเรื่องนี้ฟังดูคุ้นเคย! ส่วน "อพอลโล 11" มีข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ที่en.wikipedia.org/wiki/Margaret_Hamilton_(scientist)
hydo

31

หากฉันเข้าใจอย่างถูกต้องกระบวนการพัฒนาคือการตรวจสอบและทดสอบโดยเพื่อน

ทีมประกอบด้วยคนอย่าง "หมอหมอคณิตศาสตร์" ซึ่งอุทิศตนอย่างชาญฉลาดมีไหวพริบและใส่ใจในรายละเอียดซึ่งคนเหล่านี้อุทิศตนเพื่องานของพวกเขา ดังนั้นเมื่อฉันพูดถึงการตรวจสอบโดยเพื่อนฉันหมายถึงการตรวจสอบโดยเพื่อนหลายคนตลอดระยะเวลาหลายเดือน (มากกว่าหนึ่งปี)

นักพัฒนาซอฟต์แวร์เหล่านี้ "วิ่งแบบจำลองในหัวของพวกเขา", "ดีบั๊กซอฟต์แวร์บนกระดาษ" และทำงานในกลุ่มที่มีนักพัฒนาหลายคนดูรหัสเดียวกันซ้ำแล้วซ้ำอีกจนกว่าพวกเขาจะมั่นใจว่ามันถูกต้อง มีหลายทีม - แต่ละคนทำงานเป็นส่วนหนึ่งของทั้งหมด

ศาสตราจารย์วิธีเชิงตัวเลขของฉันที่มหาวิทยาลัยโอไฮโอสเตต (ฤดูใบไม้ผลิปี 96) เขียนโค้ดที่ตัดสินใจว่าจะเริ่มใช้จรวดบูสเตอร์เมื่อใด เขาอธิบายว่างานพิมพ์มีขนาดเท่ากับสมุดโทรศัพท์ (อาจหนา 2.5 ถึง 3.5 นิ้วของกระดาษขนาด 8.5 x 11 นิ้ว - เขาไม่ได้อธิบายขนาดตัวอักษร) ของรหัส Fortran

เมื่อเชื่อว่าพวกเขาเปิดตัวขีปนาวุธไร้คนขับ (จรวดเทคนิคไม่มีลูกข่าง) กับวิทยุบนกระดานที่ส่งเสียงบี๊บเป็นระยะ ๆ พวกเขาฟังเสียงบี๊บจนถึงจุดที่พวกเขาคาดหวังว่าวิทยุจะกระทบดวงจันทร์ (ชนเข้ากับมันและทำลายตัวเอง) และหยุดส่งเสียงบี๊บ พวกเขารู้ว่าหากพวกเขาพลาดวิทยุจะส่งเสียงบี๊บนานกว่าเวลาที่ได้รับผลกระทบ ผลกระทบเกิดขึ้น 15 วินาทีหลังจากเวลาที่คำนวณ

เรื่องราวเล็ก ๆ น้อย ๆ ที่น่าชื่นชมคือความทรงจำของฉันจากการไปพบหมอ เขาแก่มากและนานมาแล้ว นี่คือความทรงจำที่ดีที่สุดของฉัน


2
เขาอธิบายการพิมพ์ที่มีขนาดของสมุดโทรศัพท์ (ดังนั้นอาจ 2.5 ถึง 3.5 นิ้วหนาของกระดาษ 8.5 x 11 นิ้วโดยทั่วไปรหัสถูกพิมพ์ในโหมดแนวนอนที่มีประมาณ 55 - 60 บรรทัดต่อหน้ารีม (100 แผ่น) กระดาษพิมพ์หนาประมาณ 1.75 นิ้ว
Gilbert Le Blanc

@GilbertLeBlanc โดยทั่วไปแล้วรีม 500 แผ่น (บางครั้ง 480)
joshp

@joshp: ถูกต้อง กระดาษพิมพ์ 500 แผ่นหนาประมาณ 1.75 นิ้ว
Gilbert Le Blanc

15

AGC ควบคุมด้วยคำกริยาและคำนาม

ซอฟต์แวร์คำสั่งของ Apollo ไม่ได้ถูกเขียนในรูปแบบที่ผู้ใช้จะรู้จักในวันนี้ นักบินอวกาศป้อนคำสั่งเป็นตัวเลขโดยมีตัวเลขสองหลักแต่ละตัวแทนคำกริยาหรือคำนาม คำกริยาอธิบายการกระทำที่จะดำเนินการและคำนามระบุข้อมูลที่จะได้รับผลกระทบจากการกระทำของคำกริยา

นักบินอวกาศเกลียดการตั้งค่าคำกริยาและคำนาม

Ramón Alonso หนึ่งในผู้พัฒนาฮาร์ดแวร์ AGC ดั้งเดิมกล่าวว่าอินเทอร์เฟซถูกประดิษฐ์ขึ้นเพื่อสร้างความประทับใจให้ผู้เยี่ยมชมห้องปฏิบัติการของพวกเขา แต่ติดอยู่กับเที่ยวบินเมื่อไม่มีใครพัฒนาอินเตอร์เฟสที่ดีกว่านี้ นักวิจารณ์กล่าวว่ามันไม่ใช่ "วิทยาศาสตร์" และนักบินอวกาศคนแรก - นักบินเจ็ตชั้นยอดทุกคน - แป้นหมุนและสวิตช์ที่ต้องการคล้ายกับแผงควบคุมเครื่องบิน

"AGC นั้นช้ามาก แต่มีความน่าเชื่อถือและเล็กมากในช่วงเวลานั้นในประวัติศาสตร์ของคอมพิวเตอร์ดิจิทัลมันเป็นช่วงแรก ๆ ที่ใช้วงจรรวม"

ซอฟต์แวร์ตามที่ได้รับการออกแบบสร้างโดยเริ่มจากศูนย์โดย MIT

คุณสามารถดาวน์โหลดและติดตั้งโปรแกรมจำลองคอมพิวเตอร์ Apollo Guidance Computer บนคอมพิวเตอร์ส่วนบุคคลของคุณได้โดยไม่มีปัญหา นี่คือสิ่งที่ดูเหมือนใน Mac OS X

ป้อนคำอธิบายรูปภาพที่นี่


8

เช่นเดียวกับโครงการซอฟต์แวร์อื่น ๆ ทุกโครงการทำภายใต้กำหนดเวลาที่เข้มงวดและความกดดันด้านคุณภาพ โชคดีเก็บขนาดใหญ่ของวัสดุจากผู้จัดการโครงการซอฟต์แวร์ฮาเวิร์ดดับเบิลยู“บิล” Tindall จูเนียร์สามารถใช้ได้ที่นี่

หากคุณตัวอย่างบันทึกช่วยจำคุณสามารถเข้าใจถึงความขัดแย้งระหว่างเวลาคุณสมบัติและข้อบกพร่องได้เป็นอย่างดี เป็นที่น่าสังเกตว่าการพัฒนาดำเนินไปเป็นเวลาหลายปีเหมือนกับส่วนที่เหลือของโครงการ

การออกแบบระบบเริ่มขึ้นในไตรมาสที่สองของปี 1961 และ NASA ได้ติดตั้งรุ่น Block I ในยานอวกาศเมื่อวันที่ 22 กันยายน 1965 การวางจำหน่ายซอฟต์แวร์ดั้งเดิม (ชื่อ CORONA) ในเดือนมกราคม 1966 โดยมีเที่ยวบินแรกในวันที่ 25 สิงหาคม พ.ศ. 2509 น้อยกว่า 3 ปีหลังจากนั้นนักออกแบบได้บรรลุวัตถุประสงค์ของโครงการขั้นสุดท้าย ( http://history.nasa.gov/computers/Ch2-5.html )

ฉันไม่สามารถหาข้อมูลอ้างอิงเฉพาะเกี่ยวกับวิธีการสร้างซอฟต์แวร์ได้ แต่ให้วันที่ฉันสามารถสันนิษฐานได้ว่าส่วนใหญ่ทำด้วยปากกาและกระดาษโดยมี "การจำลอง" ทำด้วยตนเอง ดูเหมือนว่ามีระบบสำหรับการโหลดโปรแกรมลงใน AGC ด้วยบัตรเจาะซึ่งสันนิษฐานว่าสำหรับการทดสอบ "รวดเร็ว" บนพื้นดินโดยไม่จำเป็นต้องสร้างหน่วยความจำเชือก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.