Máy tính làm việc như thế nào? [đóng cửa]


59

Điều này gần như lúng túng hỏi ... Tôi có bằng về Khoa học Máy tính (và bằng thứ hai trong tiến trình). Tôi đã làm việc như một Nhà phát triển .NET toàn thời gian trong gần năm năm. Tôi thường có vẻ có thẩm quyền ở những gì tôi làm.

Nhưng tôi không biết máy tính hoạt động như thế nào!

Xin vui lòng, trần với tôi trong một giây. Google nhanh chóng 'Cách thức máy tính hoạt động' sẽ mang lại rất nhiều kết quả, nhưng tôi đã vật lộn để tìm ra một câu trả lời thực sự cho những gì tôi đang tìm kiếm. Tôi nhận ra đây là một câu hỏi lớn, rất lớn, vì vậy thực sự, nếu bạn có thể chỉ cho tôi một số từ khóa hoặc một số hướng.

Tôi biết có các thành phần .... nguồn cung cấp năng lượng, bo mạch chủ, ram, CPU, v.v ... và tôi có được 'ý tưởng chung' về những gì họ làm. Nhưng tôi thực sự không hiểu làm thế nào bạn đi từ một dòng mã như Console.Readline()trong .NET (hoặc Java hoặc C ++) và nó thực sự làm công cụ.

Chắc chắn, tôi mơ hồ biết về MSIL (trong trường hợp .NET), và một số phép thuật xảy ra với trình biên dịch JIT và nó biến thành mã gốc (tôi nghĩ). Tôi đã nói với Java là tương tự và C ++ cắt bỏ bước giữa.

Tôi đã thực hiện một số lắp ráp máy tính lớn, bây giờ đã vài năm rồi. Tôi nhớ có một số hướng dẫn và một số thanh ghi CPU, và tôi đã viết mã .... và sau đó một số phép thuật đã xảy ra .... và chương trình của tôi sẽ hoạt động (hoặc sụp đổ). Theo những gì tôi hiểu, một 'Trình giả lập' sẽ mô phỏng những gì xảy ra khi bạn gọi một lệnh và nó sẽ cập nhật các thanh ghi CPU; Nhưng điều gì làm cho những chỉ dẫn đó hoạt động theo cách họ làm?

Điều này có biến thành câu hỏi Điện tử chứ không phải câu hỏi 'Máy tính' không? Tôi đoán không có bất kỳ lý do thực tế nào để tôi hiểu điều này, nhưng tôi cảm thấy mình có thể làm được.

(Vâng, đây là những gì xảy ra khi bạn dành một ngày với một đứa trẻ nhỏ. Chúng mất khoảng 10 phút và năm lần lặp lại câu hỏi 'Tại sao?' Để bạn nhận ra mình không biết bao nhiêu)



20
Tôi muốn giới thiệu của Charles Petzold

Nó không phải là một Emulator. Nó là một loạt các mạch bán dẫn thực sự với hàng trăm (hàng ngàn) dây đầu vào và đầu ra, và hàng tỷ cổng logic. Các Emulatorđã được sử dụng cho mục đích duy nhất giảng dạy.
rwong

1
Tôi nghĩ tiêu đề nên được thay đổi để cụ thể hơn / nhiều thông tin hơn. Đây thực sự là một câu hỏi khá hữu ích, nhưng thoạt nhìn có vẻ hoàn toàn vô lý, giống như những gì đứa trẻ nhỏ ban đầu hỏi. Thay đổi nó thành một cái gì đó như "làm thế nào để các lệnh phần mềm cấp cao kết nối với các phản ứng phần cứng cấp thấp?"
jhocking

2
Xin chào Rob, như đã nói ngay bây giờ, điều này là vô vọng và đã nhanh chóng biến thành một câu hỏi giới thiệu sách và thảo luận mở rộng: cả hai điều chúng tôi không muốn ở đây. Nếu bạn có thể thắt chặt tập trung của bạn và yêu cầu một cái gì đó cụ thể về một vấn đề bạn đang hiện phải đối mặt, cảm thấy tự do để hỏi về điều đó.

Câu trả lời:


139

Tôi sẽ bắt đầu từ cấp thấp nhất có thể có liên quan (tôi có thể bắt đầu từ cấp thấp hơn, nhưng chúng có thể quá không liên quan), bắt đầu từ Atom, đến Điện, đến Transitor, tới Cổng logic, cho Mạch tích hợp (Chip / CPU ) và kết thúc tại hội (Tôi giả sử bạn đã quen thuộc với các cấp cao hơn).

Ở thời điểm bắt đầu

Nguyên tử

Nguyên tử là một cấu trúc bao gồm các electron, proton và neutron (bản thân chúng bao gồm các hạt cơ bản ). Phần thú vị nhất của nguyên tử cho máy tính và điện tử là các electron vì electron là điện thoại di động (nghĩa là nó có thể di chuyển xung quanh tương đối dễ dàng, không giống như các proton và neutron khó di chuyển hơn) và chúng có thể tự trôi nổi mà không bị giữ bên trong Một nguyên tử.

Thông thường, mỗi nguyên tử có số lượng proton và electron bằng nhau, chúng ta gọi đây là trạng thái "trung tính". Khi nó xảy ra, một nguyên tử có thể bị mất hoặc có thêm electron. Các nguyên tử ở trạng thái không cân bằng này được gọi là nguyên tử "tích điện dương" (nhiều proton hơn electron) và nguyên tử "tích điện âm" (nhiều electron hơn proton) tương ứng.

Các điện tử là không thể cấu trúc và không thể phá hủy (không như vậy trong cơ học lượng tử, nhưng điều đó không liên quan đến mục đích của chúng tôi); vì vậy nếu một nguyên tử mất electron, một số nguyên tử khác ở gần đó phải nhận thêm electron hoặc electron phải giải phóng thành electron nổi tự do, ngược lại vì electron không thể bị phá hủy, để có thêm electron, một nguyên tử phải loại bỏ các nguyên tử gần đó hoặc từ một electron nổi tự do. Cơ học của các electron là nếu có một nguyên tử tích điện âm gần một nguyên tử tích điện dương, thì một số electron sẽ di chuyển cho đến khi cả hai nguyên tử có cùng điện tích.

Điện lực

Điện chỉ là một dòng điện tử từ một khu vực có số lượng nguyên tử tích điện âm rất cao đến khu vực có số lượng nguyên tử tích điện dương rất cao. Một số phản ứng hóa học có thể tạo ra tình huống trong đó chúng ta có một nút có nhiều nguyên tử tích điện âm (gọi là "cực dương") và một nút khác có nhiều nguyên tử tích điện dương (gọi là "cực âm"). Nếu chúng ta kết nối hai nút tích điện trái dấu bằng một dây, khối lượng electron sẽ chảy từ cực dương sang cực âm, và dòng chảy này là cái mà chúng ta gọi là "dòng điện".

Không phải tất cả các dây có thể truyền các electron dễ dàng như nhau, các electron dễ dàng di chuyển trong các vật liệu "dẫn" hơn so với các vật liệu "kháng". Vật liệu "dẫn điện" có điện trở thấp (ví dụ dây đồng trong cáp) và vật liệu "kháng" có điện trở cao (ví dụ cách điện cáp cao su). Một số vật liệu thú vị được gọi là chất bán dẫn (ví dụ như silic), vì chúng có thể dễ dàng thay đổi điện trở của chúng, trong một số điều kiện, chất bán dẫn có thể hoạt động như một chất dẫn và trong các điều kiện khác, nó có thể biến thành điện trở.

Điện luôn thích truyền qua vật liệu có điện trở nhỏ nhất, vì vậy nếu cực âm và cực dương được nối với hai dây, một dây có điện trở rất cao và dây còn lại có điện trở rất thấp, phần lớn các electron sẽ chạy qua cáp điện trở thấp và gần như không có dòng chảy qua vật liệu kháng cao.

Thời trung cổ

Công tắc và bóng bán dẫn

Công tắc / Dép lật giống như công tắc đèn thông thường của bạn, một công tắc có thể được đặt giữa hai phần dây để cắt và / hoặc khôi phục dòng điện. Các bóng bán dẫn hoạt động giống hệt như một công tắc đèn, ngoại trừ việc thay vì kết nối và ngắt kết nối vật lý, một bóng bán dẫn kết nối / ngắt kết nối dòng điện bằng cách thay đổi điện trở của nó tùy thuộc vào việc có điện trong nút cơ sở hay không, như bạn có thể đã đoán / biết, bóng bán dẫn được chế tạo từ chất bán dẫn vì chúng ta có thể thay đổi chất bán dẫn để trở thành điện trở hoặc dây dẫn để kết nối hoặc ngắt dòng điện.

Một loại bóng bán dẫn phổ biến, Transitor Bipolar Junction Transitor (BJT), có ba nút: "cơ sở", "bộ thu" và "bộ phát". Trong NPT BJT, điện có thể truyền từ nút "bộ phát" đến nút "bộ thu" chỉ khi nút "cơ sở" được sạc. Khi nút cơ sở không được tích điện, thực tế không có electron nào có thể chảy qua và khi nút cơ sở được tích điện, thì các electron có thể chảy giữa bộ phát và bộ thu.

Hành vi của một bóng bán dẫn

(Tôi thực sự khuyên bạn nên đọc qua điều này trước khi tiếp tục, vì nó có thể giải thích tốt hơn tôi với đồ họa tương tác)

Giả sử chúng ta có một bóng bán dẫn được kết nối với một nguồn điện ở cơ sở và bộ thu của nó, và sau đó chúng ta nối dây cáp Đầu ra gần bộ thu của nó (xem Hình 3 trong http://www.spsu.edu/cs/facemony/bbrown/web_lectures / bóng bán dẫn / ).

Khi chúng ta áp dụng điện cho cả cơ sở lẫn người thu gom, thì không có dòng điện nào có thể chảy cả vì không có điện để nói về:

B   C  |  E   O
0   0  |  0   0

Khi chúng ta sử dụng điện cho bộ thu nhưng không phải là cơ sở, điện không thể chạy đến bộ phát vì cơ sở trở thành vật liệu có điện trở cao, do đó, điện thoát ra khỏi dây Đầu ra:

B   C  |  E   O
0   1  |  0   1

Khi chúng ta áp dụng điện cho cơ sở nhưng không phải là bộ thu, cũng không có dòng điện nào có thể chảy do không có sự chênh lệch điện tích giữa bộ thu và bộ phát:

B   C  |  E   O
1   0  |  0   0

Khi chúng ta sử dụng điện cho cả cơ sở và bộ thu, chúng ta sẽ có dòng điện chạy qua bóng bán dẫn, nhưng vì bóng bán dẫn bây giờ có điện trở thấp hơn dây Đầu ra, gần như không có dòng điện nào chạy qua dây Đầu ra:

B   C  |  E   O
1   1  |  1   O

Cổng logic

Khi chúng ta kết nối bộ phát của một bóng bán dẫn (E1) với bộ thu của một bóng bán dẫn khác (C2) và sau đó chúng ta kết nối một đầu ra gần đế của bóng bán dẫn đầu tiên (O) (xem Hình 4 trong http://www.spsu.edu / cs / khoa / bbrown / web_lectures / bóng bán dẫn / ), sau đó một cái gì đó thú vị xảy ra. Chúng ta cũng nói rằng chúng ta luôn luôn sử dụng điện cho bộ thu của bóng bán dẫn đầu tiên (C1) và vì vậy chúng ta chỉ chơi xung quanh với các nút cơ sở của bóng bán dẫn (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

Hãy tóm tắt bảng để chúng ta chỉ thấy B1, B2 và O:

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

Xin lưu ý , nếu bạn quen thuộc với Logic Boolean và / hoặc Cổng logic, bạn nên chú ý rằng đây chính xác là cổng NAND. Và nếu bạn đã quen thuộc với Logic Boolean và / hoặc Cổng logic, bạn cũng có thể biết rằng một NAND (cũng như NOR) đã hoàn thành về mặt chức năng , tức là chỉ sử dụng NAND, bạn có thể xây dựng tất cả các cổng logic khác và phần còn lại của sự thật những cái bàn. Nói cách khác, bạn có thể thiết kế toàn bộ chip máy tính chỉ sử dụng cổng NAND.

Trên thực tế, hầu hết các CPU được (hoặc trước đây là?) Được thiết kế chỉ sử dụng NAND vì nó rẻ hơn để sản xuất so với sử dụng kết hợp NAND, NOR, AND, OR, v.v.

Xuất phát từ các toán tử boolean khác từ NAND

Tôi sẽ không mô tả làm thế nào để tạo tất cả các toán tử boolean, chỉ cổng KHÔNG và cổng AND, bạn có thể tìm thấy phần còn lại ở một nơi khác.

Đưa ra một toán tử NAND, sau đó chúng ta có thể xây dựng một cổng KHÔNG:

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

Đưa ra một toán tử NAND và KHÔNG, sau đó chúng ta có thể xây dựng một cổng AND:

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

Chúng ta có thể xây dựng các cổng logic khác theo cách tương tự. Vì cổng NAND đã hoàn thành về mặt chức năng , nên cũng có thể xây dựng các cổng logic có nhiều hơn 2 đầu vào và hơn 1 đầu ra, tôi sẽ không thảo luận về cách xây dựng các cổng logic như vậy ở đây.

Thời đại khai sáng

Xây dựng máy Turing từ Boolean Gates

CPU chỉ là phiên bản phức tạp hơn của Máy Turing. Các thanh ghi CPU là trạng thái bên trong của Turing Machine và RAM là băng của Turing Machine.

Một máy Turing (CPU) có thể làm ba việc:

  • đọc 0 hoặc 1 từ băng (đọc một ô nhớ từ RAM)
  • thay đổi trạng thái bên trong của nó (thay đổi thanh ghi của nó)
  • di chuyển sang trái hoặc phải (đọc nhiều vị trí từ RAM)
  • ghi 0 hoặc 1 vào băng (ghi vào ô của bộ nhớ vào RAM)

Với mục đích của chúng tôi, chúng tôi đang xây dựng Máy Turing 2 biểu tượng 3 trạng thái của Wolfram bằng logic tổ hợp (CPU hiện đại sẽ sử dụng vi mã, nhưng chúng phức tạp hơn mức cần thiết cho mục đích của chúng tôi).

Bảng trạng thái của Máy Turing của Wolfram (2,3) như sau:

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

Chúng tôi muốn mã hóa lại bảng trạng thái ở trên dưới dạng bảng chân lý:

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

Tôi thực sự sẽ không xây dựng một cổng logic như vậy (Tôi không chắc chắn làm thế nào để vẽ nó trong SE và nó có thể sẽ khá lớn), nhưng vì chúng tôi biết rằng cổng NAND đã hoàn thiện về mặt chức năng , nên chúng tôi có cách để tìm một loạt các cổng NAND sẽ thực hiện bảng chân lý này.

Một tính chất quan trọng của Turing Machine là có thể mô phỏng một máy tính chương trình được lưu trữ bằng máy Turing chỉ có bảng trạng thái cố định. Do đó, bất kỳ Máy Turing phổ dụng nào cũng có thể đọc chương trình của nó từ Băng (RAM) thay vì phải được mã hóa cứng vào bảng trạng thái bên trong. Nói cách khác, Máy Turing (2,3) của chúng tôi có thể đọc hướng dẫn của nó từ các chân I1, I2 (dưới dạng phần mềm) thay vì được mã hóa cứng khi triển khai cổng logic (dưới dạng phần cứng).

Mã vi

Do sự phức tạp ngày càng tăng của các CPU hiện đại, việc sử dụng logic tổ hợp trở nên cực kỳ khó khăn để thiết kế toàn bộ CPU. CPU hiện đại thường được thiết kế như một trình thông dịch của hướng dẫn vi mã; một microcode là một chương trình nhỏ được nhúng trong CPU được CPU sử dụng để diễn giải mã máy thực tế. Bản thân trình thông dịch vi mã này thường được thiết kế bằng logic tổ hợp.

Đăng ký, Cache và RAM

Chúng tôi đã quên một cái gì đó ở trên. Làm thế nào để chúng ta nhớ một cái gì đó? Làm thế nào để chúng tôi thực hiện các băng và RAM? Câu trả lời là trong một thành phần điện tử gọi là Tụ. Một tụ điện giống như một pin sạc, nếu một tụ điện được sạc, nó sẽ giữ lại các điện tử phụ và nó cũng có thể trả lại các điện tử cho mạch điện.

Để ghi vào tụ điện, chúng ta lấp đầy tụ điện bằng điện tử (viết 1) hoặc rút hết điện tử trong tụ điện cho đến khi trống (viết 0). Để đọc giá trị của một tụ điện, chúng tôi cố gắng xả nó. Nếu, khi chúng ta cố gắng phóng điện, không có dòng điện chạy, thì tụ điện trống (đọc 0), nhưng nếu chúng ta phát hiện ra điện thì phải sạc tụ điện (đọc 1). Bạn có thể nhận thấy rằng việc đọc một tụ điện làm cạn kiệt kho điện tử của nó, RAM hiện đại có mạch để sạc lại định kỳ tụ điện để chúng có thể giữ lại bộ nhớ của mình miễn là có điện.

Có nhiều loại tụ điện được sử dụng trong CPU, các thanh ghi CPU và bộ nhớ CPU cấp cao hơn được tạo ra bằng cách sử dụng các "tụ điện" tốc độ rất cao thực sự được chế tạo từ các bóng bán dẫn (do đó hầu như không có "độ trễ" để đọc / ghi từ chúng), chúng được gọi là RAM tĩnh (SRAM); trong khi RAM bộ nhớ chính được tạo ra bằng cách sử dụng công suất thấp hơn, nhưng tụ điện chậm hơn và rẻ hơn nhiều, chúng được gọi là RAM động (DRAM).

Đồng hồ

Một thành phần rất quan trọng của CPU là đồng hồ. Đồng hồ là một thành phần "đánh dấu" thường xuyên để đồng bộ hóa quá trình xử lý. Đồng hồ thường chứa thạch anh hoặc các vật liệu khác có chu kỳ dao động nổi tiếng và tương đối ổn định, và mạch đồng hồ duy trì và đo dao động này để duy trì cảm giác về thời gian.

Các hoạt động của CPU được thực hiện giữa các dấu đồng hồ và đọc / ghi được thực hiện trong các dấu tick để đảm bảo rằng tất cả các thành phần di chuyển đồng bộ và không chà đạp vào nhau trong khi ở trạng thái trung gian. Trong (2,3) Máy Turing của chúng tôi, giữa các đồng hồ tích điện đi qua các cổng logic để tính toán đầu ra từ đầu vào (I1, I2, R (t)); và trong tiếng tích tắc của đồng hồ, người viết băng sẽ ghi O1, O2 vào băng, động cơ sẽ di chuyển tùy theo giá trị của M và thanh ghi bên trong được ghi từ giá trị của R (t + 1), sau đó là đầu đọc băng sẽ đọc băng hiện tại và nạp điện vào I1, I2 và thanh ghi bên trong được đọc lại về R (t).

Nói chuyện với thiết bị ngoại vi

Lưu ý cách (2,3) Turing Machine giao tiếp với động cơ của nó. Đó là một cái nhìn rất đơn giản về cách CPU có thể giao tiếp với một phần cứng tùy ý. Phần cứng tùy ý có thể nghe hoặc ghi vào một dây cụ thể cho đầu vào / đầu ra. Trong trường hợp cho (2,3) Turing Machine, giao diện của nó với động cơ chỉ là một dây duy nhất hướng dẫn động cơ quay theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ.

Điều còn lại chưa được trả lời trong chiếc máy này là Motor phải có một "đồng hồ" khác chạy đồng bộ với "đồng hồ" bên trong của Máy để biết khi nào bắt đầu và dừng chạy, vì vậy đây là một ví dụ về truyền dữ liệu đồng bộ . Cách truyền khác, truyền không đồng bộ thường được sử dụng khác sử dụng một dây khác, được gọi là đường ngắt, để giao tiếp các điểm đồng bộ hóa giữa CPU và thiết bị không đồng bộ.

Thời đại kỹ thuật số

Mã máy và lắp ráp

Ngôn ngữ hội là một bản ghi nhớ dễ đọc của con người đối với mã máy. Trong trường hợp đơn giản nhất, có một ánh xạ một-một giữa lắp ráp với mã máy; mặc dù trong các ngôn ngữ lắp ráp hiện đại, một số hướng dẫn có thể ánh xạ tới nhiều opcode.

Ngôn ngữ lập trình

Tất cả chúng ta đều quen thuộc với điều này phải không?


Phew, cuối cùng cũng xong, tôi đã gõ tất cả những thứ này chỉ trong 4 giờ, vì vậy tôi chắc chắn có lỗi ở đâu đó (tôi chủ yếu là lập trình viên, không phải kỹ sư điện cũng không phải nhà vật lý, vì vậy có thể có một số điều sai trái rõ ràng). Vui lòng nếu bạn tìm thấy một lỗi, đừng ngần ngại đưa ra @yell hoặc tự sửa nó nếu bạn có đại diện hoặc tạo một câu trả lời bổ sung.


37
" Tuyệt vời " không làm điều đó công lý. Câu trả lời này là tích cực anh hùng .
njd

1
Có phải phần nguyên tử không chính xác? Thông thường, chúng sẽ ion hóa để tạo thành các nguyên tử tích điện thay vì ở trạng thái trung tính để có lớp vỏ ngoài hoàn toàn.
thay thế

3
+1, +1000 nếu tôi có thể. Điều thực sự làm tôi ngạc nhiên, và tại sao tôi yêu thích lĩnh vực này, đó là thông tin rộng lớn trong câu trả lời này thậm chí còn không bắt đầu làm trầy xước bề mặt của công nghệ làm cho một PC hiện đại hoạt động.
quentin-starin

Thánh lồn Thật tuyệt vời. Tôi ước tôi có thể làm nhiều hơn upvote một lần.
Rob P.

3
+1 mặc dù tôi cảm thấy nên lưu ý rằng phần cứng hiện đại không được thực hiện chính xác thông qua cổng NAND. Có cổng, vâng, nhưng chúng thực sự khá phức tạp và chỉ (thường) gần đúng logic NAND; các ràng buộc là khá nhiều vật lý. Các cổng vật lý đầu tiên được lắp ráp thành các mô-đun logic, có thể là một NAND cổ điển nhưng thường là nhiều hơn (ví dụ, flip-flop hoặc nửa adder). Bộ cổng chính xác được phép phụ thuộc vào kiểu logic được sử dụng và các ràng buộc của nhà máy chế tạo; không phải tất cả các fab có thể xây dựng mọi thứ. (Aaargh! Tôi bắt đầu nhớ chi tiết! Trợ giúp!)
Donal Fellows

12

Từ Nand đến Tetris trong 12 bước

Tôi nghĩ rằng điều này sẽ hoàn toàn tuyệt vời cho bạn:

Từ Nands đến Tetris trong 12 bước


cảm ơn vì liên kết, xem nó bây giờ Có một chỉ số trung tâm của những cuộc nói chuyện này, hoặc bạn chỉ tình cờ thấy điều này trên một blog ở đâu đó?
jhocking

Tôi không chắc chắn, điều này đặc biệt xuất hiện khi tôi đang lướt web một ngày
Darknight

Ông đã bỏ lỡ một bước thứ 13 - tấm silicon.
Công việc

cảm ơn vì đã đăng nó Về cơ bản, đây là bản tóm tắt các giáo trình của khóa học mà tác giả của các bài nói chuyện trong các bài giảng video tại IDC ở Israel, và dựa trên cuốn sách của anh ấy - tôi đã đăng một liên kết đến cuốn sách trong câu trả lời của tôi.
littleadv

Là trang web này cùng một tài liệu? Bởi vì có vẻ như nó được tổ chức tốt hơn nhiều so với chỉ một video lớn nand2tetris.org
jhocking

10

Nếu bạn đã thực hiện lắp ráp, thì thực sự chỉ còn hai hoặc ba lớp để hiểu:

  • Các cổng logic , đó là cách logic được thực hiện thông qua các electron di chuyển - ở đây nó trở thành một câu hỏi điện tử
  • Thiết kế CPU và hệ thống, đó là cách các cổng logic được tạo thành để tạo thành CPU và kết nối với RAM và các thiết bị ngoại vi. Các CPU hiện đại cực kỳ phức tạp, nhưng với mong muốn của bạn để hiểu mọi thứ về cơ bản hoạt động như thế nào, thì cần phải nhìn vào một CPU đơn giản cổ điển như Z80 .
  • Microcode , đó là cách các hướng dẫn lắp ráp được diễn giải và biến thành các hành động ở mức phần cứng của các thanh ghi và mạch logic.

Cái cuối cùng (Microcode) là thứ khiến nó "nhấp" cho tôi, bởi vì nó lấp đầy khoảng cách giữa thiết bị điện tử và mã.


Có lẽ đó là vi mã mà tôi đang thiếu. Tôi đã tham gia các lớp về cổng logic và thiết kế CPU / hệ thống, được lập trình lắp ráp và tìm hiểu tất cả về các lệnh nhị phân (và được thực hiện tốt trong tất cả các lớp đó), nhưng tôi vẫn không thể nói cho bạn biết tất cả chúng khớp với nhau như thế nào. Tôi sẽ phải nghiên cứu vi mã.
Casey Patton

@Casey: hoàn toàn có thể đó thực sự là những gì bạn đang thiếu. Đối với tôi, việc tìm hiểu về (và viết một số) microcode chính xác là nơi tôi nghĩ: OK, giờ tôi đã hiểu máy tính hoạt động như thế nào. Chắc chắn, chúng đã trở nên phức tạp đến mức bạn vẫn có thể dễ dàng gặp phải những tình huống dường như không thể hiểu được, nhưng tôi khá tin rằng bất kỳ tình huống nào cũng có thể được hiểu nếu bạn có năng lực, kiên trì và đầu tư đủ thời gian.
Michael Borgwardt

7

Ví dụ cho một giáo trình khóa học đại học CS giải thích chính xác những gì bạn đã hỏi về có thể được tìm thấy ở đây (IDC.AC.IL khóa CS101) . Nó dựa trên cuốn sách MIT Press này: " Các yếu tố của hệ thống máy tính: Xây dựng một máy tính hiện đại từ những nguyên tắc đầu tiên ".


1
+1 để đề cập đến "Các yếu tố của hệ thống máy tính". Đó là một cuốn sách tuyệt vời và nên trả lời chính xác câu hỏi "Máy tính hoạt động như thế nào?".
Cedric

bạn có phiền giải thích thêm về những tài nguyên này làm gì không và tại sao bạn lại đề xuất những tài nguyên này khi trả lời câu hỏi? "Câu trả lời chỉ liên kết" không được chào đón tại Stack Exchange
gnat


4

Tôi đánh giá rất cao Code của Charles Petzold. Cuốn sách vừa là bài học lịch sử vừa là tổng quan kỹ thuật về cách xây dựng máy tính. Bắt đầu với việc giải thích các công tắc điện báo đơn giản, cuốn sách cho thấy cách các bóng bán dẫn hoạt động, sau đó đến các cổng logic, máy tính lập trình, đến những thứ phức tạp hơn. Nó cũng được viết rất tốt và có lẽ có thể được nắm bắt bởi bất cứ ai có đủ sự tò mò.


3

Sẽ rất khó (và lâu!) Để liệt kê mọi thứ bạn có thể cần biết để có đủ hiểu biết về những gì bạn cần biết. Một cuốn sách nổi tiếng thực sự trả lời tất cả những câu hỏi này là của Andrew Tanenbaum: Tổ chức máy tính có cấu trúc .

Cuốn sách này thực sự đưa bạn từ máy tính vật lý trên bàn của bạn xuống tận cổng logic và đại số boolean, sau đó hiển thị một kiến ​​trúc ví dụ để hướng dẫn bạn cách mọi thứ thực sự xảy ra trong một hệ thống như vậy.

(Một lưu ý: rất tốn kém vì nó ~ 800 trang. Có lẽ thật tốt khi có phiên bản cũ hoặc phiên bản cũ hơn. Các khái niệm không thay đổi.)


2

Vâng, phải mất rất nhiều quả bóng để nói điều đó và hỏi tôi đoán.

Khá nhiều mã được giảm hơn nữa và tiếp tục xuống mã cấp thấp phức tạp hơn. Xuống mã cấp hội với các thanh ghi đẩy và di chuyển .. vv ...

Sau đó, phần cứng lấy mã này và hành động trên nó. Hầu hết các phần cứng sẽ thực sự có hướng dẫn riêng về cách thực hiện. Vì vậy, có thể có một hướng dẫn đơn giản như PUSH trong đó thanh ghi (vị trí bộ nhớ) có giá trị như 1 hoặc 2 hoặc bất cứ thứ gì ..

Đó chắc chắn là một câu hỏi máy tính. Và cũng là một chương trình. Một số lập trình viên lập trình phần cứng sẽ lấy mã của bạn và làm cho nó làm một cái gì đó mặc dù ở mức rất thấp. Đó cũng là một câu hỏi điện tử.


1

Có thiết bị.

Sau đó, có trình điều khiển thiết bị tương tác với các thiết bị này. Một phần được viết bằng C, một phần trong lắp ráp thông thường.

HĐH tương tác với phần mềm ứng dụng ở một đầu và trình điều khiển thiết bị ở đầu kia để giao tiếp với phần cứng thực tế.

Nếu bạn thực sự quan tâm tại sao không thực hiện hack nhân Linux để tìm hiểu thêm?


Cảm ơn bạn đã trả lời và đề nghị của bạn. Có vẻ là một ý tưởng tuyệt vời!
Rob P.

1

Cốt lõi của vấn đề này là một câu hỏi điện tử, mặc dù những điều cơ bản của điều này đáng lẽ phải được đề cập trong khóa học khảo sát cho bất kỳ bằng cấp CS nào. Tất cả các hành vi phần cứng dựa trên các cổng được lập trình vào nó ở cấp thành phần. Đây là những thao tác logic cơ bản nhất: KHÔNG, VÀ, HOẶC, XOR, NAND, NOR. Mỗi cổng có một chức năng cụ thể:

Cổng NOT lấy một giá trị đầu vào và tạo ra một giá trị đầu ra, nó nhận 0 hoặc 1 và xuất ra ngược lại.

Cổng AND nhận hai giá trị đầu vào và tạo ra một giá trị đầu ra, nó nhận bất kỳ kết hợp 0 ​​và 1 nào và đầu ra 0 cho bất kỳ kết hợp nào ngoại trừ hai kết hợp, trong đó nó tạo ra 1.

Cổng OR hoạt động giống như cổng AND, nhưng sẽ tạo ra 1 cho mọi kết hợp 0 ​​và 1, ngoại trừ hai số không, mà nó tạo ra 0.

Cổng XOR một lần nữa giống với cả cổng AND và OR, nhưng nó sẽ tạo ra 0 khi cả hai đầu vào đều giống nhau và 1 khi cả hai đầu vào đều khác nhau.

Cổng NAND là đối diện logic của cổng AND và cổng NOR là đối diện logic của cổng OR.

Nói cách khác, ở cấp độ phần cứng, tất cả đều thuộc về các biểu thức logic nhị phân cơ bản nhất. Mọi thứ khác chỉ là sự chuyển đổi từ cấp độ lập trình cao hơn sang cấp độ thấp hơn cho đến khi nó đạt đến lớp cuối cùng này.


+1 Cấp độ tiếp theo là cách thực hiện hành vi tuần tự với các cổng logic này. Thành phần chính là flip-flop . Lắp ráp các cổng logic để tạo thành ALU, một số flip-flop cho các thanh ghi, đồng hồ và bạn có CPU.
mouviciel

@mouviciel Bạn đã quên bộ ghép kênh.
starblue


1

Mặc dù tôi thấy thật đáng kinh ngạc khi ai đó có thể hoàn thành một khóa học về CS mà không hiểu phần cứng, tôi cho rằng hoàn toàn có thể là một khóa học chỉ có thể tập trung vào lý thuyết như một nhánh của toán học, thay vì các chi tiết kỹ thuật và triển khai. Các bài giảng SICP đáng kính (được phát vào những năm 1980) dường như là như thế này.

Trong khóa học CS của tôi, hai thập kỷ trước, một phiên bản trước đó của Máy tính: từ Logic đến Kiến trúc được yêu cầu đọc trong năm đầu tiên.
Một cái gì đó như thế này nên điền vào những khoảng trống.

Ngoài ra, Open Courseware của MIT nên có thứ gì đó sẽ giúp ích.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.