How CPU works?

By Unknown | วันศุกร์, กุมภาพันธ์ 28, 2557

ในปี ค.ศ.1945 ศาสตราจารย์ J. von Neumann ได้เปิดเผยรายงานของตนกับผู้ร่วมงานเกี่ยวกับการออกแบบการทำงานของอุปกรณ์อิเล็กทรอนิกส์ที่ใช้ในการคำนวณที่เป็นที่รู้จักกันในชื่อของ "คอมพิวเตอร์" ที่เราใช้ในปัจจุบัน เป็นที่รู้จักกันในชื่อ "Von Neumann architecture" (สถาปัตยกรรมวอนนิวแมนน์) โดยมีลักษณะเด่น ๆ อยู่ดังนี้

  • หน่วยความจำหลักมีหน้าที่เก็บ Instruction (คำสั่งที่สั่งให้ CPU ประมวลผล) และข้อมูลไว้ที่เดียวกัน
  • ALU หรือ arithmetic/logic unit จะมีหน้าที่คำนวณทางคณิตศาสตร์และตรรกศาสตร์
  • I/O มีหน้าที่นำข้อมูล เข้า/ออก ระหว่างหน่วยความจำภายนอกเข้าสู้หน่วยประมวลผล
  • Control unit มีหน้าที่ควบคุม I/O และประมวลผลจาก Instruction Code

จากสถาปัตยกรรมที่กล่าวมา ทำให้เรารู้ว่าคำสั่งที่สั่งให้ตัว CPU ทำงานนั้นถูกเก็บไว้ที่หน่วยความจำที่เรียงต่อกันเป็นลำดับ ส่วนข้อมูลอื่น ๆ ที่ใช้ในการประมวลผลจะถูกเก็บอยู่อีกส่วนหนึ่งของหน่วยความจำ (เพื่อไม่ให้ CPU สับสนระหว่าง Instruction กับข้อมูล) ดังนั้นการทำงานของ CPU จะเริ่มตั้งแต่การอ่าน Instruction จากหน่วยความจำ แปลงคำสั่งนั้น ดึงข้อมูลที่จะต้องใช้ปหระมวลผล และเริ่มประมวลผล ซึ่งตัว CPU เองจะทำเป็นวงจรอย่างนี้ไปจนกว่าจะเจอคำสั่งให้หยุด เราเรียกวงจรนี้ว่า "Fetch-Execute cycle"

ขั้นตอนการทำงานใน Fetch-Execute cycle นั้นแบ่งออกเป็น 4 ขั้นตอนคือ

  1. Fetch the next instruction
  2. Decode the instruction
  3. Get data if needed
  4. Execute the Instruction


Fecth the Next Instruction

ใน CPU จะมีสิ่งที่เรียกว่า program counter (PC) เอาไว้สำหรับเก็บตำแหน่งถัดไปของ instruction ที่ CPU จะต้องทำการประมวลผล ในขั้นแรก PC จะถูกกำหนดให้เป็นตำแหน่งเริ่มต้นของ instruction หลังจากนั้น control unit จะทำการคัดลอก instruction ในส่วนนั้นมาไว้ใน Instruction Register (IR) หลังจากขั้นตอนนี้ CPU ก็พร้อมที่จะประมวลผลคำสั่งโดยดูจาก IR ว่าจะให้ทำอะไร เมื่อ control unit ทำงานในขั้นนี้เสร็จแล้ว ตัว PC จะอัพเดทค่าไปยังคำสั่งถัดไป

Decode the instruction

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

Get data if needed

ในบางครั้ง การประมวลผลจะต้องนำข้อมูลภายนอกเข้ามาประมวลผล เช่น การบวกเลข จะต้องส่งเลขที่ต้องการบวกเข้าไปด้วย ดังนั้นขั้นตอนนี้ control unit จะทำการดึงข้อมูลจากภายนอกมาเพื่อประมวลผล

Execute the Instruction

หลังจากที่ทำการแปลงสัญญาณและดึงข้อมูลเข้ามาเรียบร้อยแล้ว ตัว control unit ก็พร้อมที่จะส่งสัญญาณไปให้ CPU ประมวลผล โดยจะส่งสัญญาณไปให้ ALU ทำหน้าที่ของมันตามคำสั่งที่แปลงได้ เมื่อประมวลผลเสร็จ เป็นอันสั้นสุดวงจรนี้ หลังจากนี้ก็จะเริ่มทำการ fetch instruction มาอีก โดยอ้างอิงตำแหน่งจาก PC ที่ถูกอัพเดทค่าใหม่แล้ว และทำตามวงจรนี้ต่อไปเรื่อย ๆ จนเจอคำสั่งให้หยุดประมวลผล

ตัวอย่างบวกเลขโดยใช้ CPU

1+1 = 2, การบวกเลขปกติแล้วเกิดจากการที่ตัวเลข 2 ตัวนำมาบวกกัน โดยเพิ่มตำเลขที่ 2 ลงไปที่ตัวเลขตัวที่ 1 ดังนั้นนเวลาที่ CPU ทำการบวกเลข จะต้องทำการดึงค่าของเลขตัวเเรกลงไปใน register ก่อนชั่วคราวเพื่อใช้ในการประมวลผล หลังจากทำก็เพิ่มค่าไปที่ register โดยจะเพิ่มไปเท่ากับตัวเลขตัวที่ 2 ทำให้คำตอบที่ได้นั้นยังคงอยู่ใน register ซึ่งพร้อมที่จะนำไปเก็บในหน่วยความจำหลัก

Reference : Computer Science Illuminated, 3rd edition, N. Dale and J. Lewis, 2008

แสดงความคิดเห็น