คอมพิวเตอร์ทำงานอย่างไร [ปิด]


59

นี่เป็นคำถามที่น่าอายเกือบ ... ฉันมีปริญญาด้านวิทยาศาสตร์คอมพิวเตอร์ (และกำลังอยู่ในขั้นที่สอง) ฉันทำงานเป็นนักพัฒนา. NET แบบเต็มเวลาเกือบห้าปี ฉันมักจะดูเหมือนมีอำนาจในสิ่งที่ฉันทำ

แต่ฉันไม่รู้ว่าคอมพิวเตอร์ทำงานอย่างไร!

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

ฉันรู้ว่ามีส่วนประกอบ .... แหล่งจ่ายไฟ, เมนบอร์ด, RAM, CPU, ฯลฯ ... และฉันได้รับ 'ความคิดทั่วไป' ของสิ่งที่พวกเขาทำ แต่ฉันไม่เข้าใจว่าคุณไปจากสายของรหัสเช่นConsole.Readline()ใน. NET (หรือ Java หรือ C ++) และมีจริงทำสิ่ง

แน่นอนว่าฉันรู้ตัว MSIL (ในกรณีของ. NET) และความมหัศจรรย์บางอย่างเกิดขึ้นกับคอมไพเลอร์ JIT และเปลี่ยนเป็นรหัสเนทีฟ (ฉันคิดว่า) ฉันบอกว่า Java นั้นคล้ายกันและ C ++ ตัดขั้นตอนกลางออกไป

ฉันได้ทำการประกอบเมนเฟรมแล้วไม่กี่ปีมานี้ ฉันจำได้ว่ามีคำแนะนำและการลงทะเบียนของ CPU และฉันเขียนรหัส .... แล้วก็มีเวทมนตร์บางอย่างเกิดขึ้น .... และโปรแกรมของฉันจะทำงาน (หรือผิดพลาด) จากสิ่งที่ฉันเข้าใจ 'Emulator' จะจำลองสิ่งที่เกิดขึ้นเมื่อคุณเรียกคำสั่งและมันจะอัพเดตการลงทะเบียน CPU; แต่อะไรที่ทำให้คำแนะนำเหล่านั้นทำงานในแบบที่พวกเขาทำ

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

(ใช่นี่คือสิ่งที่เกิดขึ้นเมื่อคุณใช้เวลาหนึ่งวันกับเด็กเล็กใช้เวลาประมาณ 10 นาทีกับการทำซ้ำห้าครั้งเพื่อถามว่า 'ทำไม?' เพื่อให้คุณรู้ว่าคุณไม่รู้เท่าไร)



20
ฉันจะแนะนำCodeโดย Charles Petzold

Emulatorมันไม่ได้เป็น มันเป็นวงจรเซมิคอนดักเตอร์จริงจำนวนมากที่มีหลายร้อย (พัน) สายอินพุตและเอาต์พุตและพันล้านประตูตรรกะ Emulatorถูกนำมาใช้เพื่อจุดประสงค์ในการเรียนการสอนเท่านั้น
rwong

1
ฉันคิดว่าควรเปลี่ยนชื่อให้มีความเฉพาะเจาะจง / ให้ข้อมูลมากกว่า จริงๆแล้วนี่เป็นคำถามที่มีประโยชน์ แต่เมื่อดูแวบแรกมันดูไร้สาระโดยสิ้นเชิงเหมือนกับที่เด็กเล็กถาม แต่เดิม เปลี่ยนเป็น "คำสั่งซอฟต์แวร์ระดับสูงจะเชื่อมต่อกับการตอบกลับฮาร์ดแวร์ระดับต่ำได้อย่างไร"
jhocking

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

คำตอบ:


139

ฉันจะเริ่มจากระดับต่ำสุดที่อาจมีความเกี่ยวข้อง (ฉันสามารถเริ่มต้นจากระดับต่ำกว่า แต่พวกเขาอาจจะไม่เกี่ยวข้องมากเกินไป) เริ่มต้นจาก Atom, ไฟฟ้า, ทรานซิสเตอร์, ทรานซิสเตอร์, ประตูตรรกะ, วงจรรวม (ชิป / ซีพียู) ) และจบที่ Assembly (ฉันคิดว่าคุณคุ้นเคยกับระดับที่สูงขึ้น)

ในตอนเริ่มต้น

อะตอม

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

โดยปกติอะตอมแต่ละอันมีจำนวนโปรตอนและอิเล็กตรอนเท่ากันเราเรียกสถานะนี้ว่า "เป็นกลาง" เมื่อมันเกิดขึ้นมันเป็นไปได้ที่อะตอมจะสูญเสียหรือรับอิเล็กตรอนพิเศษ อะตอมในสถานะที่ไม่สมดุลนี้ถูกกล่าวว่าเป็นอะตอมที่มีประจุบวก (โปรตอนมากกว่าอิเล็กตรอน) และอะตอมที่มีประจุลบ (อิเล็กตรอนมากกว่าโปรตอน) ตามลำดับ

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

ไฟฟ้า

กระแสไฟฟ้าเป็นเพียงการไหลของอิเล็กตรอนจากพื้นที่ที่มีอะตอมที่มีประจุลบจำนวนมากไปยังพื้นที่ที่มีประจุที่มีประจุบวกจำนวนมาก ปฏิกิริยาเคมีบางอย่างสามารถสร้างสถานการณ์ที่เรามีหนึ่งโหนดที่มีอะตอมที่มีประจุลบจำนวนมาก (เรียกว่า "แอโนด") และอีกโหนดที่มีอะตอมที่มีประจุบวกจำนวนมาก (เรียกว่า "แคโทด") หากเราเชื่อมต่อสองโหนดที่มีประจุตรงข้ามกับลวดมวลของอิเล็กตรอนจะไหลจากขั้วบวกไปยังแคโทดและการไหลนี้เป็นสิ่งที่เราเรียกว่า "กระแสไฟฟ้า"

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

กระแสไฟฟ้ามักชอบที่จะไหลผ่านวัสดุที่มีความต้านทานน้อยที่สุดดังนั้นหากขั้วลบและขั้วบวกเชื่อมต่อกับสายไฟสองเส้นสายหนึ่งมีความต้านทานสูงมากและอีกสายหนึ่งที่มีความต้านทานต่ำมากอิเล็กตรอนส่วนใหญ่จะไหลผ่านสายต้านทานต่ำและเกือบ ไม่มีการไหลผ่านวัสดุที่มีความต้านทานสูง

ยุคกลาง

สวิทช์และทรานซิสเตอร์

Switch / Flip-Flops เป็นเหมือนสวิตช์ไฟปกติของคุณสามารถวางสวิตช์ไว้ระหว่างลวดสองชิ้นเพื่อตัดและ / หรือคืนกระแสไฟฟ้า ทรานซิสเตอร์ทำงานเหมือนกับสวิตช์ไฟยกเว้นว่าแทนที่จะเชื่อมต่อและปลดสายไฟทางกายภาพทรานซิสเตอร์ก็จะเชื่อมต่อ / ตัดการไหลของกระแสไฟฟ้าโดยการเปลี่ยนความต้านทานของมันขึ้นอยู่กับว่ามีกระแสไฟฟ้าในโหนดฐานและคุณอาจเดาได้แล้ว / รู้, ทรานซิสเตอร์ทำจากเซมิคอนดักเตอร์เพราะเราสามารถเปลี่ยนเซมิคอนดักเตอร์ให้เป็นตัวต้านทานหรือตัวนำในการเชื่อมต่อหรือตัดกระแสไฟฟ้า

ประเภทสามัญหนึ่งของทรานซิสเตอร์คือNPN Bipolar Junction Transistor (BJT) มีสามโหนด: "ฐาน", "ตัวสะสม" และ "ตัวส่งสัญญาณ" ใน NPN BJT กระแสไฟฟ้าสามารถไหลจากโหนด "ตัวปล่อย" ไปยังโหนด "ตัวสะสม" เฉพาะเมื่อมีการเรียกเก็บค่าโหนด "ฐาน" เมื่อไม่ได้ชาร์จโหนดฐานจะไม่มีอิเล็กตรอนไหลผ่านและเมื่อมีการชาร์จโหนดฐานอิเล็กตรอนก็จะไหลระหว่างอิมิตเตอร์และตัวสะสม

พฤติกรรมของทรานซิสเตอร์

(ฉันขอแนะนำให้คุณอ่านสิ่งนี้ก่อนดำเนินการต่อเพราะสามารถอธิบายได้ดีกว่าฉันด้วยกราฟิกแบบอินเทอร์แอคทีฟ)

สมมติว่าเรามีทรานซิสเตอร์เชื่อมต่อกับแหล่งจ่ายไฟที่ฐานและตัวสะสมแล้วเราต่อสายเอาท์พุทใกล้กับตัวสะสม (ดูรูปที่ 3 ในhttp://www.spsu.edu/cs/faculty/bbrown/web_lectures / ทรานซิสเตอร์ / )

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

B   C  |  E   O
0   0  |  0   0

เมื่อเราใช้ไฟฟ้ากับตัวสะสม แต่ไม่ใช่ฐานไฟฟ้าจะไม่สามารถไหลไปยังตัวปล่อยเนื่องจากฐานกลายเป็นวัสดุที่มีความต้านทานสูงดังนั้นไฟฟ้าจึงหนีไปยังสายออก:

B   C  |  E   O
0   1  |  0   1

เมื่อเราใช้ไฟฟ้ากับฐาน แต่ไม่ใช่ตัวเก็บประจุก็ไม่มีกระแสไฟฟ้าไหลได้เนื่องจากไม่มีความแตกต่างของประจุระหว่างตัวสะสมและตัวปล่อย:

B   C  |  E   O
1   0  |  0   0

เมื่อเราใช้ไฟฟ้ากับทั้งฐานและตัวสะสมเราจะได้กระแสไฟฟ้าที่ไหลผ่านทรานซิสเตอร์ แต่เนื่องจากตอนนี้ทรานซิสเตอร์มีความต้านทานต่ำกว่าเอาท์พุทเกือบจะไม่มีกระแสไฟฟ้าไหลผ่านเอาท์พุต:

B   C  |  E   O
1   1  |  1   O

ประตูลอจิก

เมื่อเราเชื่อมต่ออีซีแอลของทรานซิสเตอร์หนึ่ง (E1) กับตัวเก็บรวบรวมของทรานซิสเตอร์อีกตัว (C2) แล้วเราเชื่อมต่อเอาท์พุทใกล้กับฐานของทรานซิสเตอร์ตัวแรก (O) (ดูรูปที่ 4 ในhttp://www.spsu.edu / cs / คณะ / bbrown / web_lectures / ทรานซิสเตอร์ / ) แล้วสิ่งที่น่าสนใจเกิดขึ้น สมมุติว่าเราใช้กระแสไฟฟ้ากับตัวเก็บรวบรวมทรานซิสเตอร์แรก (C1) เสมอและดังนั้นเราจึงเล่นกับโหนดฐานของทรานซิสเตอร์ (B1, B2) เท่านั้น:

B1   B2   C1   E1/C2  |  E2   O
----------------------+----------
0    0    1    0      |  0    1
0    1    1    0      |  0    1
1    0    1    0      |  0    1
1    1    1    1      |  1    0

ขอสรุปตารางเพื่อให้เราเห็นเฉพาะ B1, B2 และ O:

B1   B2  |  O
---------+-----
0    0   |  1
0    1   |  1
1    0   |  1
1    1   |  0

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

ในความเป็นจริงแล้วซีพียูส่วนใหญ่เป็น (หรือเคยเป็นหรือไม่) ได้รับการออกแบบโดยใช้ NAND เท่านั้นเนื่องจากมีราคาถูกกว่าการผลิตมากกว่าการใช้ NAND, NOR, AND, OR เป็นต้น

รับตัวดำเนินการบูลีนอื่นจาก NAND

ฉันจะไม่อธิบายถึงวิธีการทำให้ผู้ประกอบการบูลีนทั้งหมดเพียงไม่และประตูและคุณสามารถหาส่วนที่เหลือที่อื่น

ให้โอเปอเรเตอร์ NAND จากนั้นเราสามารถสร้างประตูไม่ได้

Given one input B
O = NAND(B, B)
Output O

ให้โอเปอเรเตอร์ NAND และ NOT จากนั้นเราสามารถสร้างประตู AND:

Given two inputs B1, B2
C = NAND(B1, B2)
O = NOT(C) // or NAND(C,C)
Output O

เราสามารถสร้างประตูตรรกะอื่น ๆ ในลักษณะที่คล้ายกัน เนื่องจากเกต NAND ทำงานได้อย่างสมบูรณ์จึงเป็นไปได้ที่จะสร้างลอจิกเกตที่มีอินพุตมากกว่า 2 อินพุตและเอาต์พุตมากกว่า 1 อันฉันจะไม่พูดถึงวิธีสร้างเกทลอจิกที่นี่

อายุตรัสรู้

สร้างเครื่องทัวริงจากประตูบูลีน

CPU เป็นเพียงรุ่นที่ซับซ้อนกว่าของทัวริง การลงทะเบียน CPU เป็นสถานะภายในของเครื่องทัวริงและ RAM เป็นเทปของทัวริง

เครื่องทัวริง (CPU) สามารถทำสามสิ่ง:

  • อ่าน 0 หรือ 1 จากเทป (อ่านเซลล์ของหน่วยความจำจาก RAM)
  • เปลี่ยนสถานะภายใน (เปลี่ยนการลงทะเบียน)
  • เลื่อนไปทางซ้ายหรือขวา (อ่านหลายตำแหน่งจาก RAM)
  • เขียน 0 หรือ 1 ลงในเทป (เขียนไปยังเซลล์ของหน่วยความจำถึง RAM)

เพื่อจุดประสงค์ของเราเรากำลังสร้างเครื่องทัวริง 2 สัญลักษณ์ 3 สถานะของ Wolfram โดยใช้ combinatorial logic (CPU สมัยใหม่จะใช้ไมโครโค้ด แต่มันซับซ้อนกว่าที่จำเป็นสำหรับวัตถุประสงค์ของเรา)

ตารางสถานะของเครื่องทัวริงของ Wolfram (2,3) มีดังนี้:

    A       B
0   P1,R,B  P2,L,A
1   P2,L,A  P2,R,B
2   P1,L,A  P0,R,A

เราต้องการเข้ารหัสตารางสถานะด้านบนใหม่เป็นตารางความจริง:

Let I1,I2 be the input from the tape reader (0 = (0,0), 1 = (0,1), 2 = (1,0))
Let O1,O2 be the tape writer (symbol encoding same as I1,I2)
Let M be connected to the machine's motor (0 = move left, 1 = move right)
Let R be the machine's internal state (A = 0, B = 1)
(R(t) is the machine's internal state at timestep t, R(t+1) at timestep t+1)
(Note that we used two input and two outputs since this is a 3-symbol Turing machine.)

      R  0          1
I1,I2
(0,0)    (0,1),1,1  (1,0),0,0
(0,1)    (1,0),0,0  (1,0),1,1
(1,0)    (0,1),0,0  (0,0),1,0

The truth table for the state table above:

I1  I2  R(t) | O1  O2  M   R(t+1)
-------------+--------------------
0   0   0    | 0   1   1   1
0   0   1    | 1   0   0   0
0   1   0    | 1   0   0   0
0   1   1    | 1   0   1   1
1   0   0    | 0   1   0   0
1   0   1    | 0   0   1   0

ฉันจะไม่สร้างตรรกะประตูแบบนี้ (ฉันไม่แน่ใจว่าจะวาดมันใน SE อย่างไรและมันอาจจะมีขนาดใหญ่มาก) แต่เนื่องจากเรารู้ว่าประตู NAND เสร็จสมบูรณ์ตามหน้าที่เราจึงมีวิธี เพื่อค้นหาชุดประตู NAND ที่จะใช้ตารางความจริงนี้

คุณสมบัติที่สำคัญของเครื่องทัวริงคือมันเป็นไปได้ที่จะจำลองคอมพิวเตอร์โปรแกรมที่เก็บไว้โดยใช้เครื่องทัวริงที่มีตารางสถานะคงที่เท่านั้น ดังนั้น Universal Turing Machine สามารถอ่านโปรแกรมได้จาก Tape (RAM) แทนที่จะต้องมีคำสั่งฮาร์ดโค้ดในตารางสถานะภายใน กล่าวอีกนัยหนึ่ง (2,3) เครื่องทัวริงของเราสามารถอ่านคำแนะนำได้จาก I1, I2 พิน (เป็นซอฟต์แวร์) แทนที่จะเป็นฮาร์ดโค้ดในการติดตั้งลอจิกเกท (เป็นฮาร์ดแวร์)

Microcodes

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

ลงทะเบียนแคชและ RAM

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

ในการเขียนถึงตัวเก็บประจุเราเติมตัวเก็บประจุด้วยอิเล็กตรอน (เขียน 1) หรือระบายอิเล็กตรอนทั้งหมดลงในตัวเก็บประจุจนกว่ามันจะว่างเปล่า (เขียน 0) ในการอ่านค่าของตัวเก็บประจุเราพยายามปลดปล่อยมัน ถ้าเมื่อเราพยายามที่จะปล่อยไม่มีกระแสไฟฟ้าไหลตัวเก็บประจุจะว่างเปล่า (อ่าน 0) แต่ถ้าเราตรวจจับกระแสไฟฟ้าจะต้องชาร์จตัวเก็บประจุ (อ่าน 1) คุณอาจสังเกตเห็นว่าการอ่านตัวเก็บประจุจะเก็บประจุอิเล็กตรอนของมัน RAM ที่ทันสมัยมีวงจรที่จะชาร์จตัวเก็บประจุเป็นระยะเพื่อให้พวกเขาสามารถเก็บความทรงจำไว้ได้ตราบใดที่มีกระแสไฟฟ้า

มีหลายประเภทของตัวเก็บประจุที่ใช้ใน CPU, CPU ที่ลงทะเบียนและแคช CPU ระดับสูงทำโดยใช้ "ตัวเก็บประจุ" ความเร็วสูงที่สร้างขึ้นจริงจากทรานซิสเตอร์ (ดังนั้นจึงแทบจะไม่มี "ความล่าช้า" ในการอ่าน / เขียนจาก พวกเขา) สิ่งเหล่านี้เรียกว่าสแตติกแรม (SRAM); ในขณะที่แรมหน่วยความจำหลักใช้พลังงานต่ำ แต่ตัวเก็บประจุที่ช้ากว่าและราคาถูกกว่ามากเรียกว่า Dynamic RAM (DRAM)

นาฬิกา

ส่วนประกอบที่สำคัญมากของ CPU คือนาฬิกา นาฬิกาเป็นองค์ประกอบที่ "ติ๊ก" เป็นประจำเพื่อประสานการประมวลผล โดยทั่วไปนาฬิกาจะประกอบด้วยควอตซ์หรือวัสดุอื่น ๆ ที่มีระยะเวลาการสั่นที่รู้จักกันดีและค่อนข้างคงที่และวงจรนาฬิการักษาและวัดการแกว่งนี้เพื่อรักษาความรู้สึกของเวลา

การทำงานของ CPU นั้นทำระหว่างสัญญาณนาฬิกาและการอ่าน / เขียนจะถูกทำในเห็บเพื่อให้แน่ใจว่าส่วนประกอบทั้งหมดมีการเคลื่อนไหวแบบซิงโครนัสและไม่เหยียบย่ำกันในขณะที่อยู่ในสถานะระหว่างกลาง ในเครื่องทัวริงของเรา (2,3) ระหว่างนาฬิกาจะทำเครื่องหมายไฟฟ้าผ่านประตูลอจิกเพื่อคำนวณเอาต์พุตจากอินพุต (I1, I2, R (t)) และในติ๊กนาฬิกาตัวเขียนเทปจะเขียน O1, O2 ลงบนเทปมอเตอร์จะเคลื่อนที่ขึ้นอยู่กับค่าของ M และการลงทะเบียนภายในจะถูกเขียนจากค่า R (t + 1) จากนั้นตัวอ่านเทป จะอ่านเทปปัจจุบันและทำการชาร์จลงใน I1, I2 และรีจิสเตอร์ภายในจะอ่านกลับไปที่ R (t)

การพูดคุยกับอุปกรณ์ต่อพ่วง

สังเกตวิธีการ (2,3) ทัวริงเครื่องเชื่อมต่อกับมอเตอร์ นั่นคือมุมมองที่ง่ายมากของวิธีที่ CPU อาจเชื่อมต่อกับฮาร์ดแวร์ที่กำหนดเอง ฮาร์ดแวร์โดยพลการสามารถฟังหรือเขียนลงในสายสัญญาณที่เฉพาะเจาะจงสำหรับอินพุต / เอาต์พุต ในกรณีของเครื่องทัวริง (2,3) ส่วนต่อประสานกับมอเตอร์นั้นเป็นเพียงสายไฟเส้นเดียวที่สั่งให้มอเตอร์หมุนตามเข็มนาฬิกาหรือทวนเข็มนาฬิกา

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

ยุคดิจิทัล

รหัสเครื่องและส่วนประกอบ

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

ภาษาโปรแกรม

เราทุกคนคุ้นเคยกับสิ่งนี้ใช่ไหม?


ในที่สุดก็เสร็จฉันพิมพ์ทั้งหมดนี้ในเวลาเพียง 4 ชั่วโมงดังนั้นฉันแน่ใจว่ามีข้อผิดพลาดบางอย่าง (โดยหลักแล้วฉันเป็นโปรแกรมเมอร์ไม่ใช่วิศวกรไฟฟ้าหรือนักฟิสิกส์ดังนั้นอาจมีหลายสิ่งที่ผิดอย่างโจ่งแจ้ง) กรุณาถ้าคุณพบข้อผิดพลาดอย่าลังเลที่จะให้ @yell หรือแก้ไขด้วยตัวคุณเองถ้าคุณมีตัวแทนหรือสร้างคำตอบเพิ่มเติม


37
" น่ากลัว " ไม่ได้ทำมันยุติธรรม คำตอบนี้เป็นบวกอย่างกล้าหาญ
njd

1
อะตอมไม่ถูกต้องหรือไม่ โดยทั่วไปแล้วพวกมันจะแตกตัวเป็นไอออนในรูปของอะตอมที่มีประจุมากกว่าจะอยู่เป็นกลางเพื่อให้มีชั้นใต้ชั้นเต็ม
ทางเลือก

3
+1, +1000 ถ้าทำได้ สิ่งที่น่าประหลาดใจสำหรับฉันอย่างแท้จริงและทำไมฉันถึงรักสาขานี้คือความหลากหลายของข้อมูลที่ดีในคำตอบนี้ไม่ได้เริ่มต้นที่จะเกาพื้นผิวของความลึกที่น่าทึ่งของเทคโนโลยีที่ทำให้พีซีสมัยใหม่ทำงานได้
quentin-starin

อึศักดิ์สิทธิ์ ที่น่ากลัว. ฉันหวังว่าฉันสามารถทำได้มากกว่าการโหวตครั้งเดียว
Rob P.

3
+1 แม้ว่าฉันรู้สึกว่าควรทราบว่าฮาร์ดแวร์ที่ทันสมัยไม่ได้ทำผ่านประตู NAND ทั้งหมด มีประตูใช่ แต่มันค่อนข้างซับซ้อนและมีเพียงตรรกะปกติของ NAND เท่านั้น ข้อ จำกัด นั้นมีอยู่จริง ประตูทางกายภาพถูกรวมเข้าไว้ในโมดูลตรรกะซึ่งอาจเป็น NAND แบบคลาสสิก แต่โดยทั่วไปจะค่อนข้างมากกว่า (เช่น Flip-Flop หรือ Half-Adder) ประตูที่ได้รับอนุญาตที่แน่นอนนั้นขึ้นอยู่กับสไตล์ของลอจิกที่ใช้และข้อ จำกัด ของโรงงานผลิต ไม่ใช่ทุกคนที่สามารถสร้างทุกอย่างได้ (Aaargh! ฉันเริ่มจดจำรายละเอียด! Help!)
Donal Fellows

12

จาก Nand ถึง Tetris ใน 12 ขั้นตอน

ฉันคิดว่านี่จะสมบูรณ์แบบสำหรับคุณ:

จาก Nands ถึง Tetris ใน 12 ขั้นตอน


ขอบคุณสำหรับลิงค์ดูตอนนี้ มีดัชนีศูนย์กลางของการเจรจาเหล่านี้หรือคุณเพิ่งเห็นสิ่งนี้ในบล็อกที่ไหนสักแห่ง?
jhocking

ฉันไม่แน่ใจว่าสิ่งนี้เกิดขึ้นขณะที่ฉันกำลังท่องวันหนึ่ง
Darknight

เขาพลาดขั้นตอนที่ 13 - เวเฟอร์ซิลิคอน
งาน

ขอบคุณสำหรับการโพสต์! นี่เป็นบทสรุปของหลักสูตรที่ผู้เขียนพูดในการบรรยายวิดีโอที่ IDC ในอิสราเอลและอ้างอิงจากหนังสือของเขา - ฉันโพสต์ลิงก์ไปยังหนังสือในคำตอบของฉัน
littleadv

ไซต์นี้เป็นเนื้อหาเดียวกันหรือไม่ เพราะดูเหมือนว่าจะมีการจัดระเบียบที่ดีกว่าวิดีโอขนาดใหญ่เพียงหนึ่งเดียวnand2tetris.org
jhocking

10

หากคุณประกอบเสร็จแล้วจะเหลือเพียงสองหรือสามชั้นเท่านั้นที่จะเข้าใจ:

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

อันสุดท้าย (Microcode) คือสิ่งที่ทำให้ "คลิก" สำหรับฉันเพราะมันเติมช่องว่างระหว่างอุปกรณ์อิเล็กทรอนิกส์และรหัส


บางทีมันเป็นไมโครโค้ดที่ฉันขาดหายไป ฉันเข้าเรียนในประตูลอจิกและการออกแบบ CPU / ระบบโปรแกรมในแอสเซมบลีและเรียนรู้ทั้งหมดเกี่ยวกับคำสั่งไบนารี (และทำได้ดีในคลาสเหล่านั้นทั้งหมด) แต่ฉันยังไม่สามารถบอกคุณได้ว่า heck มันเข้ากันได้อย่างไร ฉันจะต้องวิจัยไมโครโค้ด
Casey Patton

@Casey: เป็นไปได้มากว่านั่นเป็นสิ่งที่คุณพลาดไป สำหรับฉันการเรียนรู้เกี่ยวกับ (และเขียนบางอย่าง) ไมโครโค้ดเป็นสิ่งที่ฉันคิด: ตกลงตอนนี้ฉันเข้าใจว่าคอมพิวเตอร์ทำงานอย่างไร แน่นอนว่าพวกเขามีความซับซ้อนที่คุณยังสามารถทำงานได้อย่างง่ายดายในสถานการณ์ที่ดูเหมือนจะเป็นไปไม่ได้ที่จะเข้าใจ แต่ฉันค่อนข้างมั่นใจว่าสถานการณ์ดังกล่าวสามารถเข้าใจได้หากคุณมีความสามารถมีความอดทนและมีเวลาเพียงพอ
Michael Borgwardt

7

ตัวอย่างสำหรับหลักสูตรระดับปริญญาตรีหลักสูตร CS ที่อธิบายถึงสิ่งที่คุณถามเกี่ยวกับสามารถพบได้ที่นี่ (IDC.AC.IL แน่นอน CS101) มันใช้หนังสือของ MIT Press เล่มนี้: " องค์ประกอบของระบบคอมพิวเตอร์: การสร้างคอมพิวเตอร์สมัยใหม่จากหลักการแรก "


1
+1 สำหรับการกล่าวถึง "องค์ประกอบของระบบคอมพิวเตอร์" มันเป็นหนังสือที่ยอดเยี่ยมและควรตอบคำถามอย่างแม่นยำว่า "คอมพิวเตอร์ทำงานอย่างไร"
เซดริก

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

7

หากต้องการตอบคำถามนี้อย่างถี่ถ้วนจะใช้เวลาทั้งเล่ม โชคดีที่มีคนเขียนหนังสือเล่มนี้แล้ว มันเรียกว่ารหัส: ภาษาที่ซ่อนอยู่ของฮาร์ดแวร์คอมพิวเตอร์และซอฟต์แวร์โดย Charles Petzold มันเป็นการอ่านที่ให้ข้อมูลและให้ความบันเทิงอย่างมาก


1
+1, เพียงแค่ Ctrl-F สำหรับ "Petzold" นำคำตอบมาให้ฉันแน่ใจว่าอยู่ที่นั่น;)
mlvljr

4

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


3

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

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

(ข้อสังเกตหนึ่ง: แพงมากเนื่องจากมีประมาณ ~ 800 หน้ามันน่าจะดีที่จะได้รุ่นมือสองหรือรุ่นที่เก่ากว่าแนวคิดไม่เปลี่ยนแปลง)


2

มันต้องใช้ลูกบอลเยอะมากในการพูดและถามฉันว่า

ค่อนข้างมากรหัสจะลดลงไปอีกและลงไปที่รหัสระดับล่างที่ซับซ้อนมากขึ้น ลงไปที่รหัสระดับแอสเซมบลีด้วยการกดและย้ายรีจิสเตอร์ .. ฯลฯ ...

จากนั้นฮาร์ดแวร์จะใช้รหัสนี้และดำเนินการกับมัน เวลาส่วนใหญ่ฮาร์ดแวร์จะมีคำแนะนำของตนเองเกี่ยวกับวิธีการทำสิ่งต่าง ๆ ดังนั้นอาจมีคำสั่งง่ายๆเช่น PUSH ที่ register (ตำแหน่งหน่วยความจำ) ได้รับค่าเช่น 1 หรือ 2 หรืออะไรก็ตาม ..

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


1

มีอุปกรณ์

จากนั้นมีไดรเวอร์อุปกรณ์ที่ทำงานกับอุปกรณ์เหล่านี้ ส่วนที่เขียนด้วย C ส่วนหนึ่งในการชุมนุมโดยทั่วไป

ระบบปฏิบัติการโต้ตอบกับแอพพลิเคชั่นซอฟต์แวร์ที่ปลายด้านหนึ่งและไดรเวอร์อุปกรณ์อื่น ๆ เพื่อสื่อสารกับฮาร์ดแวร์จริง

หากคุณสนใจจริงๆทำไมไม่ใช้เคอร์เนลแฮ็กข้อมูลเพื่อเรียนรู้เพิ่มเติม


ขอบคุณสำหรับคำตอบและคำแนะนำของคุณ ฟังดูเหมือนเป็นความคิดที่ยอดเยี่ยม!
Rob P.

1

ที่สำคัญของสิ่งนี้เป็นคำถามอิเล็กทรอนิกส์แม้ว่าพื้นฐานของเรื่องนี้ควรได้รับการครอบคลุมในหลักสูตรการสำรวจสำหรับการศึกษาระดับปริญญา CS ใด ๆ ฮาร์ดแวร์ทั้งหมดทำหน้าที่ตามเกตที่ถูกตั้งโปรแกรมไว้ที่ระดับส่วนประกอบ สิ่งเหล่านี้เป็นพื้นฐานของการดำเนินการทางตรรกะ: NOT, AND, OR, XOR, NAND, NOR ประตูแต่ละบานมีฟังก์ชั่นเฉพาะ:

ไม่ประตูนำค่าการป้อนข้อมูลและผลิตมูลค่าส่งออกหนึ่งจะได้รับ 0 หรือ 1 และผลตรงข้าม

และประตูจะใช้เวลาสองค่าที่ป้อนเข้าและผลิตมูลค่าส่งออกหนึ่งที่จะได้รับการรวมกันของ 0 และ 1 0 และผลใด ๆ สำหรับการรวมกันใด ๆ ยกเว้นสองคนซึ่งมันจะออกผลลัพธ์ 1

หรือประตูทำงานเหมือนและประตู แต่จะผลิต 1 สำหรับการรวมกันของ 0 และ 1 จะได้รับยกเว้นสองศูนย์ซึ่งมันจะออกผลลัพธ์ 0 ทุก

XORประตูเป็นอีกครั้งที่คล้ายกันทั้ง AND และ OR ประตู แต่มันจะผลิต 0 เมื่อทั้งสองปัจจัยการผลิตที่เหมือนกันและ 1 เมื่อทั้งสองปัจจัยการผลิตที่แตกต่างกัน

NANDประตูเป็นตรงข้ามเชิงตรรกะของและประตูและNORประตูเป็นตรงข้ามตรรกะของหรือประตู

กล่าวอีกนัยหนึ่งที่ระดับฮาร์ดแวร์ทุกอย่างจะลงไปที่พื้นฐานที่สุดของการแสดงออกทางตรรกะแบบไบนารี ทุกอย่างเป็นเพียงการเปลี่ยนจากระดับการเขียนโปรแกรมที่สูงขึ้นไปเป็นระดับล่างจนกว่าจะถึงเลเยอร์สุดท้ายนี้


+1 ระดับต่อไปคือวิธีสร้างพฤติกรรมตามลำดับด้วยประตูตรรกะเหล่านี้ องค์ประกอบที่สำคัญคือปัดพลิก รวบรวมประตูตรรกะเพื่อสร้าง ALU บางฟลิปฟล็อปสำหรับการลงทะเบียนนาฬิกาและคุณจะได้รับ CPU
mouviciel

@mouviciel คุณลืมมัลติเพล็กเซอร์
starblue

1

สำหรับส่วนในการแปลงโปรแกรมในภาษาระดับสูงในคำแนะนำเครื่องหนังสือที่รวบรวมควรกรอกใบเรียกเก็บเงิน สำหรับกรณีที่หนังสือมังกร

สำหรับส่วนที่เกี่ยวกับ "วิธีดำเนินการคำแนะนำ" การจัดระเบียบและการออกแบบคอมพิวเตอร์: ส่วนต่อประสานฮาร์ดแวร์ / ซอฟต์แวร์ควรกรอกใบเรียกเก็บเงิน


1

แม้ว่าฉันจะพบว่ามันโซเซที่บางคนสามารถเรียนจบหลักสูตรใน CS โดยไม่เข้าใจฮาร์ดแวร์ แต่ฉันคิดว่าอาจเป็นไปได้ว่าหลักสูตรสามารถให้ความสนใจกับทฤษฎีเป็นสาขาวิชาคณิตศาสตร์มากกว่ารายละเอียดทางวิศวกรรมและการนำไปปฏิบัติ การบรรยายของ SICP ที่น่าเคารพ(ตามที่ได้ส่งมอบในปี 1980) ดูเหมือนจะเป็นเช่นนี้

ในหลักสูตร CS ของฉันเมื่อสองทศวรรษที่แล้วคอมพิวเตอร์รุ่นก่อนหน้า: จากลอจิกถึงสถาปัตยกรรมต้องอ่านในปีแรก
สิ่งนี้ควรเติมในช่องว่าง

อีกทางเลือกหนึ่งคือOpen Coursewareของ MIT ควรมีบางอย่างที่จะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.