Apple ประกาศตอนเปิดตัว Mac OS X Snow Leopard ไว้ว่าระบบปฏิบัติการตัวนี้จะเป็นระบบปฏิบัติการแบบ 64 บิตแท้ตัวแรกของ Apple แต่ก็มีคำถามมากมายว่าหากโปรแกรมที่เรารันเป็น 64 บิต โปรแกรมจะรันเร็วขึ้นหรือไม่ แล้วทำไม Apple ถึงไม่ยอมเปิดใช้ Kernel แบบ 64 บิตบนเครื่อง Mac ที่ไม่ใช่ Server ผมคิดว่าบทความสั้นๆนี้จะช่วยไขปัญหาและข้อสงสัยต่างๆเกี่ยวกับระบบ 64 บิตบน Mac OS X Snow Leopard ได้ไม่มากก็น้อยครับ
สถาปัตยกรรม AMD 64 (x86-64)
เครื่องคอมพิวเตอร์ใดๆก็ตามในปัจจุบันที่ใช้ CPU ของ Intel และ AMD ที่รองรับระบบ 64 บิตนั้นใช้สถาปัตยกรรม CPU ที่เรียกกันว่า AMD 64 หรือ x86-64 ซึ่งยังคงความเข้ากันได้กับโปรแกรมแบบ 32 บิต 100% อย่างที่ทึกคนรู้กันดีว่าเครื่อง Mac Intel ตั้งแต่รุ่น Core 2 Duo เป็นต้นมามีความสามารถในการรันโปรแกรมแบบ 64 บิตได้ สิ่งที่สถาปัตยกรรม x86-64 นั้นได้เพิ่มเติมขึ้นมาจากสถาปัตยกรรม IA32 (x86) ที่มีผลกระทบกับโปรแกรมมากที่สุดก็คือการเพิ่มจำนวน General Purpose Register (GPR) จาก 8 ตัวเป็น 16 ตัว การเพิ่มจำนวน SSE Register จาก 8 เป็น 16 ตัว และการอ้างถึงหน่วยความจำแบบ 64 บิต ซึ่งจะทำให้ระบบปฏิบัติการสามารถใช้งานหน่วยความจำ (ตามทฤษฎี) ได้มากที่สุดถึง 16 EiB (ประมาณ 1 พันล้าน GB)
การที่ CPU มี Register เพิ่มขึ้นนั้นก็เปรียบเหมือนกับ CPU มีกระดาษทดเลขภายใน CPU เองเพิ่มมากขึ้น ซึ่งจะช่วยให้โปรแกรมต่างๆเมื่อมีการคำนวณแล้วไม่จำเป็นที่จะต้องดึงข้อมูลมาจากหน่วยความจำบ่อยๆ ด้วยเหตุนี้เอง การที่ CPU มี Register เพิ่มขึ้นจึงเป็นปัจจัยหนึ่งที่สามารถทำให้โปรแกรมที่รันบนระบบ 64 บิตสามารถทำงานได้เร็วขึ้น
การเปลี่ยนแปลงในระบบปฏิบัติการเพื่อรองรับสถาปัตยกรรม x86-64
Apple นั้นได้มีการเปลี่ยนแปลงการทำงานภายในระบบปฏิบัติการ Mac OS X ขนานใหญ่ เริ่มตั้งแต่สมัยการพัฒนา Mac OS X 10.5 Leopard โดยเฉพาะการเปลี่ยนแปลงการเรียกใช้ System Call โดยปกติแล้ว ระบบปฏิบัติบัตรการจำพวก UNIX นั้นจะแบ่งการทำงานของโปรแกรมต่างๆออกเป็น 2 ส่วน คือส่วน User Space (ส่วนโปรแกรมทั่วไป) และส่วน Kernel Space (ส่วนของแกนหลักของระบบปฏิบัติการและไดรเวอร์ต่างๆ) โปรแกรมโดยทั่วไปนั้นหากต้องการติดต่อกับอุปกรณ์ Hardware ใดๆ หรือเรียกใช้บริการของระบบปฏิบัติการเช่นการเปิดไฟล์ หรือบันทึกไฟล์ ก็จำเป็นที่จะต้องร้องขอบริการนั้นผ่านกระบวนการที่เรียกว่าการเรียกใช้ System Call
บนสถาปัตยกรรม x86-64 นั้นได้มีการเพิ่มคำสั่งสำหรับ CPU ขึ้นมาคำสั่งหนึ่งคือ SYSCALL ซึ่งช่วยให้การเรียกใช้งาน System Call นั้นมีความรวดเร็วมากขึ้น Mac OS X เองก็ได้มีการเปลี่ยนแปลงตัวเองโดยในสมัย 32 บิตนั้น เมื่อโปรแกรมต้องการเรียกใช้ System Call โปรแกรมจำเป็นที่จะต้องนำข้อมูลต่างๆที่จะบอกระบบปฏิบัติการ ยกตัวอย่างเช่นโปรแกรม TextEdit ต้องการที่จะเปิดไฟล์ /hello.txt โปรแกรม TextEdit จะต้องนำชื่อไฟล์นั้นไปเก็บไว้ในหน่วยความจำ (Stack) แล้วจึงบอกระบบปฏิบัติการให้ทำงานตามที่สั่ง แต่ในระบบ 64 บิตนั้น Mac OS X ได้เปลี่ยนจากการที่จะต้องนำข้อมูลเหล่านั้นไปไว้ในหน่วยความจำ ให้เอาไปไว้ใน Register ของ CPU แทน ซึ่งเมื่อโปรแกรมร้องขอ System Call จากระบบปฏิบัติการ CPU ก็ไม่จำเป็นที่จะต้องไปเอาข้อมูลจากหน่วยความจำอีกต่อไป เพราะว่าการเข้าไปเอาข้อมูลจากหน่วยความจำนั้นช้ากว่าการทำงานของ CPU หลายเท่าตัว
ด้วยเหตุนี้เอง โปรแกรมที่ทำงานแบบ 64 บิต จึงสามารถทำงานได้เร็วขึ้นบ้าง แต่สาเหตุหลักย่อมเนื่องมาจากว่า CPU นั้นมี Register มากขึ้นและ CPU สามารถประมวลผลจำนวนเลขขนาด 64 บิต (8 ไบต์) ได้นั่นเอง
ข้อเสียของโปรแกรมแบบ 64 บิต
ข้่อเสียของโปรแกรมแบบ 64 บิตที่เห็นได้ชัดก็คือตัวโปรแกรมจะมีขนาดใหญ่ขึ้น ไม่มากก็น้อยเนื่องจากขนาดของตัวแปรที่อ้างถึงหน่วยความจำขยายใหญ่ขึ้นถึง 1 เท่าตัว เช่นในสมัย 32 บิต โปรแกรมที่ต้องการอ้างถึงหน่วยความจำหนึ่งตำแหน่งสามารถอ้างถึงได้โดยเก็บข้อมูลเพียง 4 ไบต์ แต่เมื่อต้องอ้างถึงหน่วยความจำแบบ 64 บิตแล้ว โปรแกรมจำเป็นต้องใช้เนื้อที่ถึง 8 ไบต์เลยทีเดียว
ปัญหานี้ก็ไม่ใช่ปัญหาเดียวที่เกิดขึ้นกับโปรแกรมแบบ 64 บิต ปัญหาใหญ่อีกปัญหาหนึ่งก็คือไดรเวอร์ และส่วนขยายของ Kernel ที่เป็นแบบ 32 บิตจะไม่สามารถทำงานได้เมื่อ Kernel ของระบบปฏิบัติการทำงานในแบบ 64 บิต
ทำไม Apple ถึงกำหนดให้ Snow Leopard Kernel ทำงานในโหมด 32 บิต
Apple กำหนดให้ Snow Leopard Kernel ทำงานในโหมด 32 บิตเนื่องจากว่าโปรแกรมที่เราใช้งานกันในปัจจุบัน มีบางโปรแกรมที่ยังไม่ได้ถูกแก้ไขให้ทำงานในแบบ 64 บิต และโปรแกรมเหล่านั้นจำเป็นที่จะต้องติดตั้งส่วนขยาย Kernel ลงไปในระบบปฏิบัติการด้วย โปรแกรมประเภทนี้มีตัวอย่างเช่น VMWare Fusion และ Parallels Desktop
อีกประการหนึ่งก็คือ Driver ต่างๆที่ถูกโหลดลงไปในระบบปฏิบัติการก็จำเป็นที่จะต้องเป็น 64 บิต แต่ยังมีไดรเวอร์ของผู้ผลิต Hardware รายอื่นเช่น Scanner ที่ไม่มีไดรเวอร์แบบ 64 บิต และจะไม่สามารถโหลดขึ้นมาทำงานได้เลยหาก Kernel ของระบบปฏิบัติการทำงานแบบ 64 บิต
ดังนั้น ผมคิดว่าด้วยเหตุผลทั้งสองข้อเป็นหลักใหญ่จึงทำให้ Apple ตัดสินใจกำหนดให้ Kernel ของ Mac OS X Snow Leopard บนเคร่ือง Mac ที่เป็น Client ทำงานแบบ 32 บิต แต่ให้ Kernel ที่ทำงานบน Server ทำงานแบบ 64 บิต เนื่องจากโดยปกติแล้ว Server มักไม่จำเป็นที่จะต้องติดตั้งอุปกรณ์ 3rd Party เข้าไปมากนัก
ถ้าบทความนี้มีข้อผิดพลาดอย่างไรก็ช่วยกันแก้ไขติชมด้วยนะครับ
ป.ล. ผมเอาบทความนี้ไปโพสต์ไว้ที่ Freemac.net แล้วก็ที่นี่ครับ
น่าจะมีเข
น่าจะมีเขียนเป็น series แบบใน Appleinsider นะครับ
Mac + iPhone + iPod + Airport = Apple Environment