จากที่ทราบกันว่าระบบปฏิบัติการ Windows ในปัจจุปันมีทั้ง 32 bit และ 64 bit หนึ่งในสิ่งที่ต่างกันระหว่าง version ทั้งสองคือ การส่งชุดคำสั่งไปให้ CPU ประมวลผล โดยระบบปฏิบัติการ 32 bit จะสามารถส่งชุดคำสั่งไปให้ CPU ประมวลผลครั้งล่ะ 32 bit สำหรับระบบปฏิบัติการ 64 bit ก็จะส่งชุดคำสั่งไปประมวลผมคั้งล่ะ 64 bit เพราะฉะนั้นระบบปฏิบัติการ 64 bit ก็จะสามารถทำงานได้รวดเร็วกว่า แน่นอนครับในปัจจุบันแทบจะไม่มี CPU ที่เป็น 32 bit ในท้องตลาด แต่ในระดับอุตสาหกรรม เช่น เครื่องจักรที่ใช้ในโรงงานซึ่งส่วนใหญ่จะใช้เป็น CPU customize การ customize CPU 64 bit ยังมีราคาที่แพงอยู่ รวมถึง hardware ส่วนอื่นๆ เช่น special card ที่ยังต้องติดต่อกับ CPU ที่ต้องต้องการติดต่อกับ CPU ระดับ 32 bit อยู่ ดังนั้นในปัจจุบันจึงยังมี CPU 32 bit และระบบปฏิบัติการ 32 bit ใช้อยู่นั้นเอง
สำหรับโปรแกรมที่เราพัฒนาขึ้นเราสามารถระบุชนิดของระบบปฏิบัติการ ที่เราต้องการให้โปรแกรมทำงานได้ การระบุชนิดของ ระบบปฏิบัติการ จะทำในกรณีที่มีการเขียน unsafe code หรือใส่ UnManged code ลงไปใน Managed code ในระบบปฏิบัติการ Windows XP ที่มีทั้ง 32 bit และ 64 bit จะไม่อนุญาติให้โปรแกรม execute ข้าม platform นักพัฒนาโปรแกรมจึงต้อง พัฒนาโปรแกรม 2 version สำหรับ Windows XP 32 bit และ 64 bit
แต่ในระบบปฏิบัติการรุ่นใหม่ Microsoft ได้ออก technology ที่ชื่อว่า WoW64 (for Windows on Windows 64) โดยจะอนุญาติให้โปรแกรมสำหรับ 32 bit สามารถ execute ได้บนระบบปฏิบัติการ 64 bit ด้วยการเลียนแบบโครงสร้าง ชุดคำสั่ง CPU 32 bit แล้วส่งไปให้ตัว CPU ประมวลผลในรูปแบบ 64 bit
การ compile code โดยระบุชนิดของ CPU สามารถใช้ /platform เพื่อระบุชนิดของระบบปฏิบัติการ ตัวอย่างน่ะครับ
ถ้าเราเขียน code ด้วย Microsoft Visual Studio เราสามารถเลือกระบุชนิดของ CPU ได้ที่ property ของ Project ครับ
Platform ที่เราสามารถเลือกใช่ในการ compile code มีดังนี้
csc /platform:anycpu filename.cs
ถ้าเราเขียน code ด้วย Microsoft Visual Studio เราสามารถเลือกระบุชนิดของ CPU ได้ที่ property ของ Project ครับ
หลังจาก compiler compile code แล้ว compiler ก็จะสร้าง PE32(+) header ถ้าระบุเป็น 32 bit header ก็จะเป็นชนิด PE32 แต่ถ้าเป็น 64 bit header ก็จะเป็น PE32+ แต่ถ้าโปรแกรมสามารถ execute ได้ทั้ง 32 bit และ 64 bit header ก็จะเป็น PE32(+)
เมื่อเราทำการ execute โปรแกรมแบบ Managed code ตัว CLR (เป็นหนึ่งในชุดของ .Net framework) จะทำการดู header ของ โปรแกรมว่าต้องการ CPU แบบไหนแล้วเปรียบเทียบกับ CPU จริงๆ ที่อยู่ในเครื่อง computer เพื่อทำการ compile code IL ให้เป็น Native CPU ให้ตรงกับ CPU ของเครื่องจริงๆ ขั้นตอนนี้จะกล่าวอย่างละเอียดในบทความถัดไปครับ
1) anycpu
ตัวนี้จะเป็นตัว default ของการ compile code โดยจะระบุว่าโปแกรม สามารถ ทำงานได้ทั้ง 32 bit และ 64 bit ถ้า CPU ของเครื่องเป็น 64 bit ก็จะให้ CLR compile IL code ให้เป็น Native code แบบ 64 bit
2) anycpu32bitpreferred
ตัวเลือกนี้ จะคล้ายๆ กับ anycpu แต่จะให้ CLR compile IL code ให้เป็น Native code ด้วยโครงสร้าง CPU 32 bit แม้โปรแกรมจะ execute อยู่บนระบบปฏิบัติการ Windows 64 bit ก็ตาม ความสามารถนี้จะใช้ได้ก็ต่อเมื่อ โปรแกรมรันบน .Net Framework version 4.5 ขึ้นไปเท่านั้น
3) ARM - Advanced RISC Machine
ตัวนี้จะเป็นกรณี CPU ที่เป็น ARM ไม่ใช่ intel base ลักษณะของ CPU พวกนี้จะพบได้กับ smart phone หรือ PC ที่ต้องการกินไฟต่ำๆ เสถียรภาพสูงๆ ระบบปฏิบัติการส่วนใหญ่จะเป็น Windows Embedded เช่น Oscilloscope หรือ เครื่องมือทางการแพทย์ ณ ปัจจุบันรบบปฏิบัติการ Windows ทำงานบน ARM ตามท้องตลาดยังทำงานได้ไม่ดีน่ะ แต่ในอนาคต Microsoft ออกมาประกาศแล้วว่าระบบปฏิบัติการ Windows 10 จะสามารถรันได้บน Raspberry Pi 2 แบบ Free
ผมปัจจุบันใช้ CPU ประเภทนี้อยู่เหมือนกัน ต้องยอมรับเลยครับว่าเหนื่อยถ้าจะเอา Windows มาลงบน ARM เพราะมีปัญหาทั้งเสถียรภาพ ความเร็วแล้วโดยเฉพาะ driver ถ้ามีโอกาสผมจะพาไปเจาะลึกอย่างละเอียดกับ CPU ประเภทนี้ (ในปัจจุบันผมใช้ CubieTruck with Ubuntu ใช้ USB power bank เป็นแหล่งจ่ายไฟ)
ตัวนี้จะเป็นกรณี CPU ที่เป็น ARM ไม่ใช่ intel base ลักษณะของ CPU พวกนี้จะพบได้กับ smart phone หรือ PC ที่ต้องการกินไฟต่ำๆ เสถียรภาพสูงๆ ระบบปฏิบัติการส่วนใหญ่จะเป็น Windows Embedded เช่น Oscilloscope หรือ เครื่องมือทางการแพทย์ ณ ปัจจุบันรบบปฏิบัติการ Windows ทำงานบน ARM ตามท้องตลาดยังทำงานได้ไม่ดีน่ะ แต่ในอนาคต Microsoft ออกมาประกาศแล้วว่าระบบปฏิบัติการ Windows 10 จะสามารถรันได้บน Raspberry Pi 2 แบบ Free
ผมปัจจุบันใช้ CPU ประเภทนี้อยู่เหมือนกัน ต้องยอมรับเลยครับว่าเหนื่อยถ้าจะเอา Windows มาลงบน ARM เพราะมีปัญหาทั้งเสถียรภาพ ความเร็วแล้วโดยเฉพาะ driver ถ้ามีโอกาสผมจะพาไปเจาะลึกอย่างละเอียดกับ CPU ประเภทนี้ (ในปัจจุบันผมใช้ CubieTruck with Ubuntu ใช้ USB power bank เป็นแหล่งจ่ายไฟ)
4) x64
เป็นการบังคับใช้ CPU ชนิด 64 bit อย่างเดียวเท่านั้น ถ้ามีการ execute โปรแกรมที่ ระบบปฏิบัติการ 32 bit โปรแกรมจะแสดง error และไม่ทำงานต่อ ต่างจาก anycpu ที่โปรแกรมยังทำงานต่อไปได้
5) x32
เหมือนกับ x64 แต่จะเป็นการบังคับใช้ CPU 32 bit เท่านั้น
6) Itanium
CPU ชนิดนี้เป็น CPU เฉพาะ Windows server สำหรับ CPU ชนิด Itanium สำหรับ CPU ชนิดนี้ Microsoft ประกาศออกมาแล้วว่าจะไม่ support CPU ชนิดนี้อีกต่อไปโดย version Windows server 2008 จะเป็น version สุดท้ายของ CPU Itanium ครับ เอาเป็นว่าให้รู้ว่ามันมี CPU ชนิดนี้เคยยิ่งใหญ่อยู่บนโลกเราละกันครับ
บทความถัดไปผมจะอธิบายว่า Managed code ถูกแปลงเป็น Native CPU ได้ยังไง พบกันใหม่บทความหน้าครับ
TuChay
ไม่มีความคิดเห็น:
แสดงความคิดเห็น