สิ่งต่างๆส่วนใหญ่ในคอมพิวเตอร์นั้นค่อนข้างเข้าใจง่าย: แรมที่เก็บข้อมูลอุปกรณ์ต่อพ่วงและซอฟต์แวร์ทั้งหมดทำงานร่วมกันเพื่อสร้างฟังก์ชันคอมพิวเตอร์ แต่หัวใจสำคัญของระบบของคุณคือซีพียูดูเหมือนจะเป็นเวทมนตร์สำหรับคนที่มีเทคโนโลยีจำนวนมาก ที่นี่เราจะพยายามอย่างเต็มที่เพื่อทำลายมันลง
งานวิจัยส่วนใหญ่สำหรับบทความนี้มาจาก “ แต่มันรู้ได้อย่างไร?” โดย J.Clark Scott เป็นการอ่านที่ยอดเยี่ยมเจาะลึกมากกว่าบทความนี้และคุ้มค่ากับเงินสองสามเหรียญใน Amazon
ข้อควรทราบประการหนึ่งก่อนที่เราจะเริ่ม: ซีพียูสมัยใหม่มีลำดับความสำคัญที่ซับซ้อนกว่าที่เราสรุปไว้ที่นี่ แทบจะเป็นไปไม่ได้เลยที่คน ๆ หนึ่งจะเข้าใจความแตกต่างของชิปที่มีทรานซิสเตอร์กว่าพันล้านตัว อย่างไรก็ตามหลักการพื้นฐานของการรวมเข้าด้วยกันยังคงเหมือนเดิมและการทำความเข้าใจพื้นฐานจะทำให้คุณเข้าใจระบบสมัยใหม่ได้ดีขึ้น
เริ่มต้นจากขนาดเล็ก
คอมพิวเตอร์ทำงานใน ไบนารี่ . พวกเขาเข้าใจเพียงสองสถานะ: เปิดและปิด ในการคำนวณแบบไบนารีจะใช้สิ่งที่เรียกว่าทรานซิสเตอร์ ทรานซิสเตอร์อนุญาตให้กระแสต้นทางไหลผ่านไปยังท่อระบายน้ำเท่านั้นหากมีกระแสไฟฟ้าข้ามประตู โดยพื้นฐานแล้วสิ่งนี้จะสร้างสวิตช์ไบนารีซึ่งจะตัดสายออกโดยขึ้นอยู่กับสัญญาณอินพุตที่สอง
ที่เกี่ยวข้อง: ไบนารีคืออะไรและทำไมคอมพิวเตอร์ถึงใช้มัน?
คอมพิวเตอร์สมัยใหม่ใช้ทรานซิสเตอร์หลายพันล้านตัวในการคำนวณ แต่ในระดับต่ำสุดคุณต้องใช้เพียงไม่กี่ชิ้นในการสร้างส่วนประกอบพื้นฐานที่สุดที่เรียกว่าประตู
ลอจิกเกตส์
วางทรานซิสเตอร์สองสามตัวให้ถูกต้องและคุณมีสิ่งที่เรียกว่าลอจิกเกต ลอจิกเกตรับอินพุตไบนารีสองตัวดำเนินการกับอินพุตเหล่านั้นและส่งคืนเอาต์พุต ตัวอย่างเช่นประตู OR จะคืนค่า true หากอินพุตใดอินพุตหนึ่งเป็นจริง ประตู AND จะตรวจสอบว่าอินพุตทั้งสองเป็นจริงหรือไม่ XOR จะตรวจสอบว่าอินพุตเพียงตัวเดียวเป็นจริงหรือไม่และตัวแปร N (NOR, NAND และ XNOR) เป็นเวอร์ชันกลับด้านของประตูฐาน
ทำคณิตศาสตร์กับประตู
ด้วยสองประตูคุณสามารถเพิ่มไบนารีพื้นฐานได้ แผนภาพด้านบนนี้แสดง adder ครึ่งตัวที่สร้างขึ้นโดยใช้ ตรรกะ สนามเด็กเล่นออนไลน์ฟรีสำหรับประตูตรรกะ ประตู XOR ที่นี่จะเปิดขึ้นหากอินพุตเพียงตัวเดียวเปิดอยู่ แต่ไม่ใช่ทั้งสองอย่าง ประตู AND จะเปิดหากอินพุตทั้งสองเปิดอยู่ แต่จะปิดหากไม่มีอินพุต ดังนั้นหากทั้งสองเปิดอยู่ XOR จะดับและประตู AND จะเปิดขึ้นมาเพื่อให้ได้คำตอบที่ถูกต้องของสองข้อ:
สิ่งนี้ทำให้เราสามารถตั้งค่าได้อย่างง่ายดายโดยมีเอาต์พุตที่แตกต่างกันสามแบบ: ศูนย์หนึ่งและสอง แต่บิตหนึ่งไม่สามารถเก็บอะไรที่สูงกว่า 1 ได้และเครื่องนี้ก็ไม่มีประโยชน์มากนักเพราะมันช่วยแก้ปัญหาทางคณิตศาสตร์ที่ง่ายที่สุดได้เพียงหนึ่งข้อเท่านั้น แต่นี่เป็นเพียงแอดเดอร์ครึ่งตัวและหากคุณเชื่อมต่อสองตัวกับอินพุตอื่นคุณจะได้แอดเดอร์เต็ม:
แอดเดอร์เต็มมีอินพุตสามตัวคือตัวเลขสองตัวที่จะเพิ่มและ "พกพา" การพกพาจะใช้เมื่อจำนวนสุดท้ายเกินที่สามารถจัดเก็บได้ในบิตเดียว แอดเดอร์แบบเต็มจะเชื่อมโยงกันเป็นห่วงโซ่และการพกพาจะถูกส่งต่อจากแอดเดอร์ตัวหนึ่งไปยังอีกแอด การพกพาจะถูกเพิ่มเข้าไปในผลลัพธ์ของประตู XOR ในครึ่งแรกและมีประตูพิเศษหรือประตูพิเศษสำหรับจัดการทั้งสองกรณีเมื่อจำเป็นต้องเปิด
เมื่ออินพุตทั้งสองเปิดการพกพาจะเปิดขึ้นและส่งไปยังแอดเดอร์เต็มตัวถัดไปในห่วงโซ่
และนี่ก็ซับซ้อนพอ ๆ กับการบวก การเลื่อนขึ้นเป็นบิตมากขึ้นโดยพื้นฐานแล้วหมายถึงส่วนเติมเต็มมากขึ้นในห่วงโซ่ที่ยาวขึ้น
การคำนวณทางคณิตศาสตร์อื่น ๆ ส่วนใหญ่สามารถทำได้ด้วยการเพิ่ม การคูณเป็นเพียงการบวกซ้ำการลบสามารถทำได้ด้วยการผกผันบิตแฟนซีและการหารเป็นเพียงการลบซ้ำ และในขณะที่คอมพิวเตอร์สมัยใหม่ทั้งหมดมีโซลูชันที่ใช้ฮาร์ดแวร์เพื่อเพิ่มความเร็วในการทำงานที่ซับซ้อนมากขึ้นในทางเทคนิคคุณสามารถทำได้ทั้งหมดด้วย adder เต็มรูปแบบ
บัสและหน่วยความจำ
ตอนนี้คอมพิวเตอร์ของเราไม่มีอะไรมากไปกว่าเครื่องคิดเลขที่ไม่ดี เนื่องจากจำอะไรไม่ได้และไม่ได้ทำอะไรเลย ที่แสดงด้านบนคือเซลล์หน่วยความจำซึ่งสามารถทำสิ่งนั้นได้ทั้งหมด ภายใต้ฝากระโปรงนั้นใช้ประตู NAND จำนวนมากและในชีวิตจริงอาจแตกต่างกันมากขึ้นอยู่กับเทคนิคการจัดเก็บ แต่การทำงานของมันก็เหมือนกัน คุณให้อินพุตบางส่วนเปิดบิต "เขียน" และมันจะเก็บอินพุตไว้ในเซลล์ นี่ไม่ใช่แค่เซลล์ความจำเท่านั้น แต่เรายังต้องการวิธีอ่านข้อมูลจากเซลล์นั้นด้วย สิ่งนี้ทำได้ด้วยตัวเปิดใช้งานซึ่งเป็นคอลเลกชันของ AND ประตูสำหรับแต่ละบิตในหน่วยความจำทั้งหมดนี้เชื่อมโยงกับอินพุตอื่นบิต "อ่าน" บิตสำหรับเขียนและอ่านมักเรียกว่า "set" และ "enable" เช่นกัน
แพ็กเกจทั้งหมดนี้รวมอยู่ในสิ่งที่เรียกว่าทะเบียน รีจิสเตอร์เหล่านี้เชื่อมต่อกับบัสซึ่งเป็นมัดของสายไฟที่วิ่งไปทั่วทั้งระบบโดยเชื่อมต่อกับทุกส่วนประกอบ แม้แต่คอมพิวเตอร์สมัยใหม่ก็มีบัสแม้ว่าอาจมีบัสหลายคันเพื่อปรับปรุงประสิทธิภาพการทำงานหลายอย่างพร้อมกัน
รีจิสเตอร์แต่ละตัวยังคงมีบิตสำหรับเขียนและอ่าน แต่ในการตั้งค่านี้อินพุตและเอาต์พุตจะเหมือนกัน นี่เป็นสิ่งที่ดีจริง ตัวอย่างเช่น. หากคุณต้องการคัดลอกเนื้อหาของ R1 ไปยัง R2 คุณจะต้องเปิดบิตอ่านสำหรับ R1 ซึ่งจะผลักเนื้อหาของ R1 ไปยังบัส ในขณะที่อ่านบิตเปิดอยู่คุณจะต้องเปิดบิตเขียนสำหรับ R2 ซึ่งจะคัดลอกเนื้อหาบัสไปยัง R2
รีจิสเตอร์ใช้ในการสร้างแรมเช่นกัน RAM มักจะวางในตารางโดยมีสายไฟไปในสองทิศทาง:
ตัวถอดรหัสรับอินพุตไบนารีและเปิดสายตัวเลขที่เกี่ยวข้อง ตัวอย่างเช่น“ 11” คือ 3 ในไบนารีซึ่งเป็นตัวเลข 2 บิตสูงสุดดังนั้นตัวถอดรหัสจะเปิดสายสูงสุด ที่สี่แยกแต่ละแห่งจะมีทะเบียน ทั้งหมดนี้เชื่อมต่อกับบัสกลางและเข้ากับอินพุตการเขียนและอ่านส่วนกลาง ทั้งอินพุตอ่านและเขียนจะเปิดก็ต่อเมื่อเปิดสายไฟสองเส้นที่ข้ามไปที่รีจิสเตอร์ด้วยซึ่งช่วยให้คุณสามารถเลือกรีจิสเตอร์ที่จะเขียนและอ่านได้อย่างมีประสิทธิภาพ อีกครั้งแรมสมัยใหม่มีความซับซ้อนกว่ามาก แต่การตั้งค่านี้ยังคงใช้งานได้
นาฬิกาสเต็ปเปอร์และตัวถอดรหัส
รีจิสเตอร์ถูกใช้ทุกที่และเป็นเครื่องมือพื้นฐานสำหรับการย้ายข้อมูลและจัดเก็บข้อมูลใน CPU แล้วอะไรบอกให้พวกเขาย้ายของไปรอบ ๆ ?
นาฬิกาเป็นส่วนประกอบแรกในแกนกลางของ CPU และจะปิดและเปิดตามช่วงเวลาที่กำหนดโดยวัดเป็นเฮิรตซ์หรือรอบต่อวินาที นี่คือความเร็วที่คุณเห็นโฆษณาควบคู่ไปกับซีพียู ชิป 5 GHz สามารถทำงานได้ 5 พันล้านรอบต่อวินาที ความเร็วนาฬิกามักเป็นตัวชี้วัดที่ดีมากสำหรับความเร็วของ CPU
นาฬิกามีสถานะที่แตกต่างกันสามสถานะ ได้แก่ นาฬิกาฐานนาฬิกาเปิดใช้งานและนาฬิกาที่ตั้งไว้ นาฬิกาฐานจะเปิดอยู่ครึ่งรอบและปิดอีกครึ่งหนึ่ง นาฬิกาเปิดใช้งานใช้เพื่อเปิดการลงทะเบียนและจะต้องเปิดใช้งานนานขึ้นเพื่อให้แน่ใจว่าเปิดใช้งานข้อมูล นาฬิกาที่ตั้งไว้จะต้องเปิดในเวลาเดียวกันกับนาฬิกาที่เปิดใช้งานเสมอมิฉะนั้นอาจมีการเขียนข้อมูลที่ไม่ถูกต้อง
นาฬิกาเชื่อมต่อกับสเต็ปเปอร์ซึ่งจะนับจากหนึ่งไปยังขั้นตอนสูงสุดและรีเซ็ตตัวเองกลับเป็นหนึ่งเมื่อเสร็จสิ้น นาฬิกายังเชื่อมต่อกับ AND ประตูสำหรับแต่ละรีจิสเตอร์ที่ CPU สามารถเขียนถึง:
ประตู AND เหล่านี้ยังเชื่อมต่อกับเอาต์พุตของส่วนประกอบอื่นคือตัวถอดรหัสคำสั่ง ตัวถอดรหัสคำสั่งใช้คำสั่งเช่น“ SET R2 TO R1” และถอดรหัสเป็นสิ่งที่ CPU สามารถเข้าใจได้ มีรีจิสเตอร์ภายในของตัวเองเรียกว่า“ Instruction Register” ซึ่งเป็นที่เก็บการดำเนินการปัจจุบัน สิ่งนี้เกิดขึ้นกับระบบที่คุณใช้งานอยู่ได้อย่างไร แต่เมื่อถอดรหัสแล้วระบบจะเปิดชุดที่ถูกต้องและเปิดใช้งานบิตสำหรับการลงทะเบียนที่ถูกต้องซึ่งจะเริ่มทำงานตามนาฬิกา
คำแนะนำโปรแกรมจะถูกเก็บไว้ใน RAM (หรือแคช L1 ในระบบสมัยใหม่ใกล้กับ CPU มากขึ้น) เนื่องจากข้อมูลโปรแกรมถูกเก็บไว้ในรีจิสเตอร์เช่นเดียวกับตัวแปรอื่น ๆ จึงสามารถจัดการได้ทันทีเพื่อข้ามไปรอบ ๆ โปรแกรม นี่คือวิธีที่โปรแกรมรับโครงสร้างโดยมีคำสั่งลูปและ if คำสั่งกระโดดตั้งค่าตำแหน่งปัจจุบันในหน่วยความจำที่ตัวถอดรหัสคำสั่งกำลังอ่านจากไปยังตำแหน่งอื่น
ทั้งหมดมารวมกันได้อย่างไร
ตอนนี้การลดความซับซ้อนขั้นต้นของเราเกี่ยวกับวิธีการทำงานของ CPU เสร็จสมบูรณ์ รถบัสหลักครอบคลุมทั้งระบบและเชื่อมต่อกับการลงทะเบียนทั้งหมด แอดเดอร์แบบเต็มพร้อมกับการดำเนินการอื่น ๆ อีกมากมายจะถูกบรรจุลงใน Arithmetic Logic Unit หรือ ALU ALU นี้จะมีการเชื่อมต่อกับบัสและจะมีรีจิสเตอร์ของตัวเองสำหรับจัดเก็บหมายเลขที่สองที่ทำงานอยู่
ในการคำนวณข้อมูลโปรแกรมจะถูกโหลดจาก RAM ของระบบไปยังส่วนควบคุม ส่วนควบคุมจะอ่านตัวเลขสองตัวจาก RAM โหลดหมายเลขแรกลงในทะเบียนคำสั่งของ ALU จากนั้นโหลดหมายเลขที่สองลงบนบัส ในขณะเดียวกันมันจะส่งรหัสคำสั่ง ALU เพื่อบอกสิ่งที่ต้องทำ จากนั้น ALU จะทำการคำนวณทั้งหมดและเก็บผลลัพธ์ไว้ในรีจิสเตอร์อื่นซึ่ง CPU สามารถอ่านจากนั้นดำเนินการตามขั้นตอนต่อไป
เครดิตรูปภาพ: Rost9 / Shutterstock