Page 1 of 1

ซีพียูทำงานอย่างไร - 1001

Posted: 04 Oct 2014, 08:46
by brid.siriwan
ซีพียูทำงานอย่างไร - 1001


ท่านเคยสงสัยเหมือนผมไหม ว่าคอม พิวเตอร์ทำงานอย่างไร สัปดาห์นี้เรามา “ทดลองทำ” เพื่อตอบคำถามนี้ด้วยกัน

คอมพิวเตอร์เครื่องหนึ่งมีส่วนประกอบหลายอย่าง แต่หัวใจคือตัวประมวลผลกลาง (Central Processing Unit) หรือเรียกว่า ซีพียู เทคโนโลยีการผลิตซีพียูเป็นสิ่งมหัศจรรย์ในยุคเรา แรกเริ่มเดิมที คอมพิวเตอร์มีขนาดใหญ่เป็นตู้ ๆ หลายตู้เอกสาร ถูกย่อส่วนลงมาเป็นคอมพิวเตอร์ตั้งโต๊ะ และกลายมาเป็นคอมพิว เตอร์ส่วนตัว ในยุคปี ค.ศ. 1970 เพราะเทคโนโลยีการผลิตไมโครชิปที่เป็นหัวใจของระบบคอมพิวเตอร์ ซึ่งมีความก้าวหน้าอย่างก้าวกระโดด ถ้าอยากจะรู้ว่าพัฒนาเร็วแค่ไหน ลองเทียบกับ 10 ปีที่แล้ว ปัจจุบันซีพียูทำงานได้เร็วขึ้น 10 เท่า มีหน่วยความจำมากขึ้น 10 เท่า กินพลังงานลดลง 10 เท่า พูดได้ว่า มีการพัฒนาขึ้น 1,000 เท่าจาก 10 ปีที่แล้ว จะหาเทคโนโลยีที่พัฒนาได้เร็วอย่างนี้ไม่มีอีกแล้ว

เรามาดูส่วนประกอบภายในของซีพียูกัน อย่างแรก คือ หน่วยความจำภายใน หรือช่องเก็บข้อมูล (register) มีความเร็วสูง จำนวน 16 ถึง 128 ช่อง ถัดไปเป็นตัวคำนวณ (arithmetic logic unit) สามารถทำเลข เช่น บวกลบ หรือเปรียบเทียบกัน ผลลัพธ์ไปเก็บไว้ในกระดาษทด (accumulator) ตัวสำคัญในซีพียูอีกตัว คือ ตัวควบคุมมีหน้าที่อ่านโปรแกรมมาทีละคำสั่งแล้วกำกับการทำงานทุกส่วนของซีพียูให้เข้าจังหวะกัน ส่วนที่กำหนดว่า จะอ่านโปรแกรมไหน คือ ตัวนับ (program counter) การทำงานของซีพียู จึงถูกกำหนดด้วยโปรแกรมนั้นเอง

เพื่อที่จะเข้าใจการทำงานของซีพียู เราลองมาเขียนโปรแกรมอย่างง่ายด้วยกัน โปรแกรมในที่นี้เป็นคำสั่งภาษาเครื่อง แต่ละคำสั่งจะทำงานง่าย ๆ อย่างหนึ่ง เช่น บวกเลข ย้ายข้อมูลจากช่องเก็บ ฯลฯ ซีพียูปัจจุบันที่เราใช้อยู่ในเครื่อง ในสำนักงาน ในคอมพิวเตอร์ โน้ตบุ๊ก หรือในโทรศัพท์มือถือ จะมีคำสั่งที่แตกต่างกันอยู่ราว 300 คำสั่ง ผมจะพูดถึงเฉพาะคำสั่งที่จะใช้ในตัวอย่างเท่านั้น ซีพียูจะทำงานเป็นรอบ ๆ คือ 1) อ่านคำสั่งมา 2) หน่วยควบคุมถอดรหัสคำสั่ง 3) ทำตามคำสั่งนั้น แล้วอ่านคำสั่งถัดไป โดยการขยับตัวนับไปอีกหนึ่ง เช่นนี้เรียกว่า จบหนึ่งรอบ ผมจะสร้างซีพียูที่มีขนาดข้อมูล 32 บิตเพื่อใช้งานตอนนี้ คำสั่งประกอบด้วย 2 ส่วน ส่วนแรก คือ รหัสคำสั่ง เป็นตัวเลข 0 ถึง 255 ส่วนที่สองคือ ตัวประกอบ บ่งถึงของหลายอย่าง เช่น เลขช่องเก็บ ซีพียูที่ผมจินตนาการขึ้น จะมีช่องเก็บ 32 ช่อง หรืออาจจะเก็บตัวเลข 0 ถึง 16 ล้าน และสุดท้ายอาจเป็นเลขที่อยู่ ตัวประกอบจะเป็นอะไรขึ้นกับคำสั่งนั้น ๆ ทุกคำสั่งมีขนาด 32 บิตเท่ากัน มาเริ่มเขียนโปรแกรมแรกกัน

ผมมีเลขสองตัวเก็บที่ช่อง 1 และ 2 จับมาบวกกันแล้วเอาไปเก็บที่ช่อง 3 เขียนได้รูปในกล่องสีน้ำเงินทางซ้ายมือ

กล่องสีเขียวทางขวามือ เป็นรหัสคำสั่งที่แปลงเสร็จแล้ว ซึ่งผมจะอธิบายต่อไป โปรแกรมนี้ทำงานดังต่อไปนี้

คำสั่งแรก mov r1 ย้ายเลขตัวแรกจากช่อง 1 ไปไว้ในกระดาษทด คำสั่งที่สอง add r2 บวกเลขในช่องที่ 2 กับกระดาษทด คำสั่งสุดท้าย put r3 เอาผลจากกระดาษทดไปเก็บช่อง 3 เสร็จแล้วเราต้องแปลงโปรแกรมนี้เป็นรหัสเลข ผมขอกำหนดรหัสคำสั่งเรียงตามลำดับ 1 คือ mov, 2 คือ add และ 3 คือ put ดังนั้นโปรแกรมนี้ จะเขียนเป็นรหัสได้ดังกล่องสีเขียวทางขวามือ

เอาล่ะ โปรแกรมแรกสำเร็จแล้ว ลองใช้โปรแกรมนี้ดู

ผมได้เขียนโปรแกรมจำลองการทำงานซีพียูตัวนี้ โดยท่านสามารถใช้เบราว์เซอร์ตัวใดก็ได้ โดยเข้าไปที่ www.cp.eng.chula.ac.th/~piak/project/cpu1001.htm ผมทดสอบกับ ie11, chrome และ safari ว่าทำงานถูกต้องดี การใช้งานท่านก็พิมพ์รหัส “1 1 2 2 3 3 0” (เลข 0 ตบท้ายเป็นคำสั่ง “หยุด” ครับ) เข้าไปในช่องโปรแกรม แล้วคลิก “ทำงาน” ซีพียูจะทำงานและแสดงผลในช่องออก

ในสัปดาห์นี้ ผมคงจะหยุดไว้ตรงที่ให้ท่านผู้อ่านไปลองเล่นโปรแกรมจำลองการทำงานซีพียูตัวนี้ เพื่อให้ท่านคุ้นมือเสียก่อน ท่านลองเขียนโปรแกรมให้สลับข้อมูลในช่อง 1 กับช่อง 2 ดู แล้วในสัปดาห์หน้า เราจะมาลองเล่นกับโปรแกรมที่ซับซ้อนมากกว่านี้ดูครับ.

ศ.ดร.ประภาส จงสถิตย์วัฒนา

ภาควิชาวิศวกรรมคอมพิวเตอร์

คณะวิศวกรรมศาสตร์

จุฬาลงกรณ์มหาวิทยาลัย

ที่มา เดลินิวส์
วันที่ 3 ตุลาคม 2557