ในยุคที่การสนับสนุนซอฟต์แวร์สำหรับฮาร์ดแวร์รุ่นเก่ายังคงลดน้อยลงเรื่อยๆ มีโครงการที่น่าสนใจเกิดขึ้นเพื่อนำชีวิตใหม่มาสู่ฮาร์ดแวร์คอมพิวเตอร์ที่มีอายุหลายทศวรรษ นักพัฒนาได้ประสบความสำเร็จในการฟื้นฟูการสนับสนุนการจำลองหน่วยประมวลผลตัวเลขทศนิยม (FPU) สำหรับโปรเซสเซอร์ i486SX ใน NetBSD 10.x และเวอร์ชันต่อๆ ไป ทำให้สามารถใช้งานระบบปฏิบัติการสมัยใหม่บน CPU รุ่นเก่าเหล่านี้ที่ไม่มีความสามารถในการประมวลผลตัวเลขทศนิยมในฮาร์ดแวร์
ประวัติของ i486SX และการจำลอง FPU
i486SX เป็นโปรเซสเซอร์รุ่นประหยัดในตระกูล 486 ของ Intel ที่เปิดตัวในช่วงต้นทศวรรษ 1990 ซึ่งถูกจำกัดความสามารถโดยการปิดการทำงานของหน่วยประมวลผลตัวเลขทศนิยม ตามที่ผู้แสดงความคิดเห็นรายหนึ่งได้กล่าวไว้ว่า มันถูกมองว่าเป็นฮาร์ดแวร์ที่ถูกตัดทอนความสามารถในช่วงเวลาที่เปิดตัว หากปราศจาก FPU โปรเซสเซอร์เหล่านี้ไม่สามารถจัดการกับการคำนวณตัวเลขทศนิยมได้โดยตรง ซึ่งมีความสำคัญสำหรับแอปพลิเคชันหลายประเภท รวมถึงการคำนวณทางวิทยาศาสตร์และการทำงานกราฟิกบางประเภท
โครงการฟื้นฟูนี้ได้นำตัวเลือก MATH_EMULATE
กลับมาใช้ในเคอร์เนลของ NetBSD ทำให้ระบบปฏิบัติการสามารถดักจับคำสั่งตัวเลขทศนิยมและจำลองการทำงานในซอฟต์แวร์ได้ วิธีการนี้ช่วยให้ไบนารีที่ไม่ได้รับการแก้ไขซึ่งใช้การดำเนินการตัวเลขทศนิยมสามารถทำงานบนระบบ i486SX ได้โดยไม่จำเป็นต้องคอมไพล์พิเศษหรือเชื่อมโยงกับไลบรารี soft-float
สิ่งนี้เคยเป็นเรื่องปกติมากก่อนที่จะมีโปรเซสเซอร์ Pentium ชุดเครื่องมือคอมไพเลอร์หลายตัว (ส่วนใหญ่?) รวมตัวจำลอง FPU ในซอฟต์แวร์ไว้ด้วย โครงการที่เจ๋งมาก!
การประยุกต์ใช้ที่กว้างขวางกว่า i486SX
การสนทนาในชุมชนเผยให้เห็นว่างานนี้มีนัยสำคัญนอกเหนือจากฮาร์ดแวร์ Intel รุ่นเก่า ตามที่ผู้แสดงความคิดเห็นรายหนึ่งชี้ให้เห็น SoC x86 ทางเลือกจำนวนมากที่มุ่งเน้นระบบฝังตัวไม่มี FPU รวมถึง Vortex86 รุ่นแรก สิ่งนี้บ่งชี้ว่าโครงการนี้อาจเป็นประโยชน์ต่อฮาร์ดแวร์ที่หลากหลายมากกว่าที่เห็นในตอนแรก
นอกจากนี้ยังมีความสนใจว่าการพัฒนานี้อาจทำให้ NetBSD 10.x สามารถทำงานบนการใช้งาน FPGA ของโปรเซสเซอร์ x86 เช่น คอร์ ao486 ในโครงการ MiSTer แม้ว่าการทดสอบเบื้องต้นโดยสมาชิกชุมชนคนหนึ่งจะไม่ประสบความสำเร็จ แต่ความเป็นไปได้ยังคงน่าสนใจสำหรับผู้ที่ชื่นชอบการคอมพิวเตอร์ย้อนยุค
การนำไปใช้ทางเทคนิคและที่มา
ที่น่าสนใจคือ โครงการนี้รวมโค้ดที่มีประวัติอันยาวนาน โค้ดจำลอง FPU หลักมีที่มาย้อนกลับไปถึง Linus Torvalds ผู้สร้าง Linux โดยมีประกาศลิขสิทธิ์ตั้งแต่ปี 1991 และในที่สุดก็มีต้นกำเนิดมาจาก 386BSD การเชื่อมโยงทางประวัติศาสตร์นี้ได้จุดประกายการอภิปรายเกี่ยวกับความเข้ากันได้ของใบอนุญาตระหว่างโค้ด Linux รุ่นแรกและโครงการที่ใช้ใบอนุญาตแบบ BSD
การนำไปใช้จัดการกับการดำเนินการตัวเลขทศนิยมที่หลากหลาย ตั้งแต่การคำนวณพื้นฐานไปจนถึงฟังก์ชันที่ซับซ้อนมากขึ้น เช่น ลอการิทึม อย่างไรก็ตาม การดำเนินการบางอย่างยังไม่ได้รับการนำไปใช้หรือมีปัญหาที่ทราบเกี่ยวกับความแม่นยำ โดยเฉพาะอย่างยิ่งกับฟังก์ชันลอการิทึม
หมวดหมู่คำสั่ง FPU ที่จำลองได้
- การควบคุมและการเริ่มต้น: คำสั่งเช่น
fninit
สำหรับการเริ่มต้น FPU - การโหลดไปยังสแต็ก FPU: คำสั่งรวมถึง
fld
,fldt
,filds
,fildl
สำหรับการโหลดค่า - การเก็บค่าจากสแต็ก FPU: คำสั่งเช่น
fstps
,fstpt
สำหรับการเก็บค่า - การดำเนินการทางคณิตศาสตร์: การดำเนินการพื้นฐานเช่น
fadd
,fsub
,fmul
,fdiv
- การเปรียบเทียบ: คำสั่งรวมถึง
fcom
,fucom
,ftst
- การจัดการสแต็ก: การดำเนินการเช่น
fxch
,fchs
,fabs
,frndint
- การคำนวณลอการิทึม/คณิตศาสตร์พิเศษ: การดำเนินการบางอย่างเช่น
f2xm1
ได้รับการพัฒนาแล้ว ส่วนอื่นๆ เช่นfyl2x
อยู่ระหว่างการพัฒนา
หมายเหตุ: การดำเนินการที่ซับซ้อนบางอย่างยังไม่ได้รับการพัฒนาหรือมีปัญหาเกี่ยวกับความแม่นยำ
เปรียบเทียบกับการพัฒนาเคอร์เนล Linux
จังหวะเวลาของโครงการนี้มีความน่าสังเกตเป็นพิเศษเมื่อพิจารณาถึงการพัฒนาล่าสุดในชุมชนเคอร์เนล Linux เพียงไม่กี่วันก่อนที่โครงการนี้จะได้รับการเน้นย้ำ มีการเสนอแพตช์เพื่อยกเลิกการสนับสนุนเคอร์เนล Linux สำหรับ CPU x86 ที่ไม่มี FPU ทั้งหมด ความแตกต่างในแนวทางระหว่าง NetBSD และ Linux นี้แสดงให้เห็นถึงปรัชญาที่แตกต่างกันในการสนับสนุนฮาร์ดแวร์ระหว่างระบบปฏิบัติการเหล่านี้ โดย NetBSD ยังคงรักษาชื่อเสียงในการสนับสนุนแพลตฟอร์มฮาร์ดแวร์ที่หลากหลายและรุ่นเก่า
ในขณะที่การคำนวณสมัยใหม่ได้ก้าวไปไกลจากโปรเซสเซอร์รุ่นเก่าเหล่านี้แล้ว โครงการเช่นนี้แสดงให้เห็นถึงความสนใจที่ยังคงมีอยู่ในการรักษาให้ฮาร์ดแวร์รุ่นเก่าสามารถทำงานได้กับซอฟต์แวร์ร่วมสมัย สำหรับผู้ที่ชื่นชอบการคอมพิวเตอร์ย้อนยุค วัตถุประสงค์ทางการศึกษา หรือการใช้งานอุตสาหกรรมเฉพาะทางที่ใช้โปรเซสเซอร์ x86 แบบฝังตัวที่ไม่มี FPU การฟื้นฟูการจำลองตัวเลขทศนิยมใน NetBSD นี้ถือเป็นการมีส่วนร่วมที่มีคุณค่าต่อระบบนิเวศการคำนวณ