โฮมเพจ » ทำอย่างไร » HTG อธิบายว่า CPU ใช้งานได้จริงอย่างไร

    HTG อธิบายว่า CPU ใช้งานได้จริงอย่างไร

    สิ่งต่าง ๆ ส่วนใหญ่ในคอมพิวเตอร์นั้นค่อนข้างง่ายที่จะเข้าใจ: RAM, ที่เก็บข้อมูล, อุปกรณ์ต่อพ่วงและซอฟต์แวร์ทั้งหมดทำงานร่วมกันเพื่อสร้างฟังก์ชันคอมพิวเตอร์ แต่หัวใจของระบบซีพียูของคุณดูเหมือนจะเป็นเรื่องมหัศจรรย์แม้แต่กับคนที่มีเทคโนโลยีมากมาย ที่นี่เราจะทำอย่างดีที่สุดเพื่อทำลายมัน.

    การวิจัยส่วนใหญ่สำหรับบทความนี้มาจาก "แต่รู้ได้อย่างไร?" โดย J. Clark Scott มันเป็นการอ่านที่ยอดเยี่ยมเจาะลึกลงไปมากกว่าที่จะเป็นในบทความนี้และคุ้มค่ากับเงินสองเท่าใน Amazon.

    หมายเหตุหนึ่งก่อนที่เราจะเริ่ม: CPU สมัยใหม่คือคำสั่งของขนาดที่ซับซ้อนกว่าสิ่งที่เราสรุปไว้ที่นี่ แทบเป็นไปไม่ได้ที่คนคนหนึ่งจะเข้าใจทุกความแตกต่างของชิปที่มีทรานซิสเตอร์มากกว่าพันล้านตัว อย่างไรก็ตามหลักการพื้นฐานของวิธีการที่ทุกอย่างเข้าด้วยกันยังคงเหมือนเดิมและการทำความเข้าใจพื้นฐานนั้นจะทำให้คุณเข้าใจระบบสมัยใหม่ได้ดีขึ้น.

    เริ่มต้นเล็ก ๆ

    คอมพิวเตอร์ทำงานในไบนารี พวกเขาเข้าใจเพียงสองสถานะเท่านั้น: เปิดและปิด ในการคำนวณแบบไบนารี่พวกมันใช้สิ่งที่เรียกว่าทรานซิสเตอร์ ทรานซิสเตอร์อนุญาตเฉพาะกระแสที่มาไหลผ่านไปยังท่อระบายน้ำหากมีกระแสข้ามเกต โดยพื้นฐานแล้วจะเป็นสวิตช์แบบไบนารี่ซึ่งจะตัดลวดออกโดยขึ้นอยู่กับสัญญาณอินพุตที่สอง.

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

    ประตูลอจิก

    สแต็คทรานซิสเตอร์สองสามตัวให้เหมาะสมและคุณมีสิ่งที่เรียกว่าลอจิกเกท ประตูลอจิกรับสองอินพุตไบนารีดำเนินการกับมันแล้วส่งคืนเอาต์พุต ยกตัวอย่างเช่นประตูเกทหรือคืนค่าจริงถ้าทั้งสองอินพุตเป็นจริง ประตูเกทและตรวจสอบว่าอินพุตทั้งสองเป็นจริงหรือไม่ XOR ตรวจสอบว่ามีเพียงอินพุตใดอินพุตหนึ่งเท่านั้นที่เป็นจริงและตัวแปร N (NOR, NAND และ XNOR) เป็นรุ่นกลับด้านของประตูฐานของพวกเขา.

    การทำคณิตศาสตร์ด้วยประตู

    ด้วยสองประตูคุณสามารถทำการเพิ่มไบนารีพื้นฐานได้ แผนภาพด้านบนนี้แสดง adder ครึ่งตัวที่สร้างขึ้นโดยใช้ Logicly สนามเด็กเล่นออนไลน์ฟรีสำหรับประตูตรรกะ ประตู XOR ที่นี่จะเปิดขึ้นหากมีเพียงหนึ่งอินพุตเปิด แต่ไม่ใช่ทั้งสอง ประตู AND จะเปิดขึ้นหากอินพุตทั้งคู่เปิดอยู่ แต่จะปิดอยู่หากไม่มีอินพุต ดังนั้นหากทั้งคู่เปิดอยู่ XOR จะปิดอยู่และประตู AND จะเปิดขึ้นมาเพื่อหาคำตอบที่ถูกต้องของสองข้อ:

    สิ่งนี้ทำให้เราตั้งค่าได้ง่ายด้วยสามเอาต์พุตที่แตกต่างกัน: ศูนย์หนึ่งและสอง แต่หนึ่งบิตไม่สามารถเก็บอะไรที่สูงกว่า 1 ได้และเครื่องนี้ไม่มีประโยชน์มากนักเพราะมันจะแก้ปัญหาคณิตศาสตร์ที่ง่ายที่สุดเพียงวิธีเดียว แต่นี่เป็นเพียง adder ครึ่งหนึ่งและถ้าคุณเชื่อมต่อพวกเขาสองคนเข้ากับอินพุตอื่นคุณจะได้รับ adder แบบเต็ม:

    adder เต็มมีสามอินพุต - ตัวเลขสองตัวที่จะเพิ่มและ "พกพา" พกพาจะใช้เมื่อหมายเลขสุดท้ายเกินกว่าสิ่งที่สามารถเก็บไว้ในบิตเดียว ตัวเชื่อมแบบเต็มจะถูกเชื่อมโยงในห่วงโซ่และการส่งผ่านจะถูกส่งจาก adder หนึ่งไปยังอีกอัน กระเป๋าถือจะถูกเพิ่มเข้าไปในผลลัพธ์ของประตู XOR ใน adder ครึ่งแรกและมีประตูพิเศษหรือ OR เพื่อจัดการทั้งสองกรณีเมื่อต้องการให้เปิด.

    เมื่ออินพุตทั้งคู่เปิดอยู่เครื่องจะเปิดและส่งไปยังแอดเดอร์แบบเต็มถัดไปในสายโซ่:

    และนี่เป็นเรื่องที่ซับซ้อนพอ ๆ กับการเพิ่มขึ้นมา การย้ายไปที่บิตมากขึ้นนั้นหมายถึงว่าจะมีโปรแกรมเสริมมากขึ้นในสายที่ยาวกว่า.

    การดำเนินการทางคณิตศาสตร์อื่น ๆ ส่วนใหญ่สามารถทำได้ด้วยการเพิ่ม; การคูณเป็นเพียงการบวกซ้ำการลบสามารถทำได้ด้วยการผกผันบิตแฟนซีและการหารก็แค่ลบซ้ำ และในขณะที่คอมพิวเตอร์สมัยใหม่ทั้งหมดมีโซลูชันที่ใช้ฮาร์ดแวร์เพื่อเพิ่มความรวดเร็วในการดำเนินการที่ซับซ้อนมากขึ้น.

    บัสและหน่วยความจำ

    ตอนนี้คอมพิวเตอร์ของเราไม่มีอะไรมากไปกว่าเครื่องคิดเลขที่ไม่ดี นี่เป็นเพราะมันจำอะไรไม่ได้เลยและไม่ทำอะไรกับผลลัพธ์ของมัน ดังที่แสดงไว้ด้านบนเป็นเซลล์หน่วยความจำซึ่งสามารถทำสิ่งต่างๆได้ทั้งหมด ภายใต้ฝากระโปรงมันใช้ประตู NAND จำนวนมากและในชีวิตจริงอาจแตกต่างกันมากขึ้นอยู่กับเทคนิคการเก็บรักษา แต่ฟังก์ชั่นมันเหมือนกัน คุณให้อินพุตมันเปิดบิต 'เขียน' และมันจะเก็บอินพุตภายในเซลล์ นี่ไม่ใช่เพียงเซลล์หน่วยความจำเนื่องจากเราต้องการวิธีในการอ่านข้อมูลจากมัน สิ่งนี้ทำด้วยตัวเปิดใช้งานซึ่งเป็นชุดของ AND ประตูสำหรับแต่ละบิตในหน่วยความจำทั้งหมดเชื่อมโยงกับอินพุตอื่นบิต“ อ่าน” บิตการเขียนและการอ่านมักเรียกว่า "set" และ "enable" เช่นกัน.

    แพ็คเกจทั้งหมดนี้รวมอยู่ในสิ่งที่เรียกว่าการลงทะเบียน รีจิสเตอร์เหล่านี้เชื่อมต่อกับบัสซึ่งเป็นชุดสายไฟที่วิ่งรอบระบบทั้งหมดซึ่งเชื่อมต่อกับส่วนประกอบทั้งหมด แม้แต่คอมพิวเตอร์ที่ทันสมัยก็มีรถเมล์ถึงแม้ว่าพวกเขาอาจมีรถเมล์หลายคันเพื่อปรับปรุงประสิทธิภาพการทำงานมัลติทาสก์.

    การลงทะเบียนแต่ละครั้งยังคงมีบิตการเขียนและการอ่าน แต่ในการตั้งค่านี้อินพุตและเอาต์พุตเป็นสิ่งเดียวกัน นี่เป็นสิ่งที่ดีจริงๆ ตัวอย่างเช่น. หากคุณต้องการคัดลอกเนื้อหาของ R1 ไปเป็น R2 คุณจะเปิดบิตอ่านสำหรับ R1 ซึ่งจะผลักเนื้อหาของ R1 ไปยังรถบัส ในขณะที่บิตการอ่านเปิดอยู่คุณจะเปิดบิตการเขียนสำหรับ R2 ซึ่งจะคัดลอกเนื้อหาบัสเป็น R2.

    รีจิสเตอร์ถูกใช้เพื่อสร้าง RAM เช่นกัน RAM มักจะถูกจัดวางในตารางโดยมีสายเชื่อมต่อสองทิศทาง:

    ตัวถอดรหัสใช้อินพุตแบบไบนารี่และเปิดสายตัวเลขที่สอดคล้องกัน ตัวอย่างเช่น "11" คือ 3 ในเลขฐานสองจำนวนสูงสุด 2 บิตดังนั้นตัวถอดรหัสจะเปิดสายที่สูงที่สุด ที่สี่แยกแต่ละแห่งจะมีการลงทะเบียน ทั้งหมดนี้เชื่อมต่อกับบัสกลางและป้อนข้อมูลแบบเขียนและอ่านส่วนกลาง ทั้งอินพุตการอ่านและการเขียนจะเปิดขึ้นหากสายไฟทั้งสองต่อกันข้ามการลงทะเบียนเปิดทำงานอยู่อย่างมีประสิทธิภาพช่วยให้คุณเลือกรีจิสเตอร์ที่จะเขียนและอ่านได้อย่างมีประสิทธิภาพ อีกครั้ง RAM ที่ทันสมัยมีความซับซ้อนมากขึ้น แต่การตั้งค่านี้ยังคงทำงาน.

    นาฬิกา Stepper และตัวถอดรหัส

    รีจิสเตอร์ถูกใช้ทุกที่และเป็นเครื่องมือพื้นฐานสำหรับการย้ายข้อมูลไปรอบ ๆ และจัดเก็บข้อมูลใน CPU ดังนั้นสิ่งที่บอกให้พวกเขาย้ายสิ่งต่าง ๆ รอบ ๆ?

    นาฬิกาเป็นองค์ประกอบแรกในแกนกลางของ CPU และจะปิดและเปิดตามช่วงเวลาที่กำหนดไว้วัดเป็นเฮิรตซ์หรือรอบต่อวินาที นี่คือความเร็วที่คุณเห็นโฆษณาพร้อมกับ CPU ชิป 5 GHz สามารถทำงานได้ 5 พันล้านรอบต่อวินาที ความเร็วสัญญาณนาฬิกามักเป็นตัวชี้วัดที่ดีมากสำหรับความเร็วของ CPU.

    นาฬิกามีสถานะที่แตกต่างกันสามสถานะ: นาฬิกาฐานนาฬิกาเปิดใช้งานและนาฬิกาตั้งค่า นาฬิกาฐานจะเปิดครึ่งรอบและปิดอีกครึ่ง นาฬิกาเปิดใช้งานถูกใช้เพื่อเปิดการลงทะเบียนและจะต้องเปิดอีกต่อไปเพื่อให้แน่ใจว่าข้อมูลถูกเปิดใช้งาน นาฬิกาตั้งค่าจะต้องเปิดพร้อมกันกับเปิดใช้งานนาฬิกามิฉะนั้นข้อมูลที่ไม่ถูกต้องสามารถเขียนได้.

    นาฬิกาเชื่อมต่อกับสเต็ปเปอร์ซึ่งจะนับจากหนึ่งถึงขั้นตอนสูงสุดและรีเซ็ตตัวเองกลับเป็นหนึ่งเมื่อเสร็จสิ้น นาฬิกาเชื่อมต่อกับ AND ประตูสำหรับการลงทะเบียนแต่ละครั้งที่ CPU สามารถเขียนถึง:

    และประตูเหล่านี้เชื่อมต่อกับเอาท์พุทของส่วนประกอบอื่นนั่นคือตัวถอดรหัสคำสั่ง ตัวถอดรหัสคำสั่งใช้คำสั่งเช่น“ SET R2 ถึง R1” และถอดรหัสมันเป็นสิ่งที่ซีพียูสามารถเข้าใจได้ มันมีการลงทะเบียนภายในของตัวเองที่เรียกว่า "Instruction Register" ซึ่งเป็นที่ที่การดำเนินการปัจจุบันถูกเก็บไว้ สิ่งนี้เกิดขึ้นได้อย่างไรกับระบบที่คุณกำลังใช้งานอยู่ แต่เมื่อถอดรหัสแล้วมันจะเปิดการตั้งค่าที่ถูกต้องและเปิดใช้งานบิตสำหรับการลงทะเบียนที่ถูกต้องซึ่งจะปิดตามนาฬิกา.

    คำแนะนำโปรแกรมจะถูกเก็บไว้ใน RAM (หรือแคช L1 ในระบบที่ทันสมัยใกล้กับ CPU) เนื่องจากข้อมูลโปรแกรมถูกเก็บไว้ในรีจิสเตอร์เหมือนกับตัวแปรอื่น ๆ มันสามารถถูกควบคุมได้ทันทีเพื่อกระโดดไปรอบ ๆ โปรแกรม นี่คือวิธีที่โปรแกรมรับโครงสร้างด้วยลูปและถ้ามีคำสั่ง คำสั่งการกระโดดตั้งค่าตำแหน่งปัจจุบันในหน่วยความจำที่ตัวถอดรหัสคำสั่งอ่านจากตำแหน่งอื่น.

    มันมารวมกันอย่างไร

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

    ในการทำการคำนวณข้อมูลโปรแกรมจะถูกโหลดจาก RAM ระบบไปยังส่วนควบคุม ส่วนควบคุมจะอ่านตัวเลขสองตัวจาก RAM โหลดตัวเลขแรกลงในคำแนะนำการลงทะเบียนของ ALU จากนั้นโหลดตัวเลขที่สองลงบนบัส ในขณะเดียวกันก็ส่งรหัสคำสั่ง ALU เพื่อแจ้งให้ทราบว่าจะต้องทำอย่างไร ALU จะทำการคำนวณทั้งหมดและเก็บผลลัพธ์ไว้ในรีจิสเตอร์อื่นซึ่ง CPU สามารถอ่านได้จากนั้นดำเนินการตามกระบวนการต่อไป.

    เครดิตรูปภาพ: Rost9 / Shutterstock