HTG giải thích: CPU thực sự hoạt động như thế nào?

Mục lục:

HTG giải thích: CPU thực sự hoạt động như thế nào?
HTG giải thích: CPU thực sự hoạt động như thế nào?

Video: HTG giải thích: CPU thực sự hoạt động như thế nào?

Video: HTG giải thích: CPU thực sự hoạt động như thế nào?
Video: (ngoài lề) - Phần biệt sóng wifi 2.4 ghz và 5 ghz. Lưu ý khi cài đặt camera wifi - YouTube 2024, Tháng Ba
Anonim
Hầu hết mọi thứ trong máy tính tương đối đơn giản để hiểu: RAM, bộ nhớ, thiết bị ngoại vi và phần mềm đều hoạt động cùng nhau để tạo ra chức năng máy tính. Nhưng trái tim của hệ thống của bạn, CPU, có vẻ như ma thuật ngay cả với nhiều người công nghệ. Ở đây, chúng tôi sẽ cố hết sức để phá vỡ nó.
Hầu hết mọi thứ trong máy tính tương đối đơn giản để hiểu: RAM, bộ nhớ, thiết bị ngoại vi và phần mềm đều hoạt động cùng nhau để tạo ra chức năng máy tính. Nhưng trái tim của hệ thống của bạn, CPU, có vẻ như ma thuật ngay cả với nhiều người công nghệ. Ở đây, chúng tôi sẽ cố hết sức để phá vỡ nó.

Hầu hết các nghiên cứu cho bài viết này đến từ “Nhưng làm thế nào để nó biết?” Của J. Clark Scott. Đó là một bài đọc tuyệt vời, đi sâu hơn nhiều so với bài viết này, và cũng xứng đáng với vài đô la trên Amazon.

Một lưu ý trước khi chúng tôi bắt đầu: CPU hiện đại là các đơn đặt hàng có độ phức tạp hơn so với những gì chúng tôi phác thảo ở đây. Nó gần như không thể cho một người để hiểu mọi sắc thái của một con chip với hơn một tỷ bóng bán dẫn. Tuy nhiên, các nguyên tắc cơ bản về cách tất cả chúng phù hợp với nhau vẫn như cũ, và sự hiểu biết cơ bản sẽ giúp bạn hiểu rõ hơn về các hệ thống hiện đại.

Bắt đầu từ nhỏ

Máy tính hoạt động ở dạng nhị phân. Họ chỉ hiểu hai trạng thái: và tắt. Để thực hiện các phép tính theo dạng nhị phân, chúng sử dụng thứ được gọi là transistor. Transistor chỉ cho phép dòng nguồn truyền qua nó tới cống nếu có dòng điện qua cổng. Về cơ bản, điều này tạo thành một công tắc nhị phân, mà cắt dây ra tùy thuộc vào tín hiệu đầu vào thứ hai.
Máy tính hoạt động ở dạng nhị phân. Họ chỉ hiểu hai trạng thái: và tắt. Để thực hiện các phép tính theo dạng nhị phân, chúng sử dụng thứ được gọi là transistor. Transistor chỉ cho phép dòng nguồn truyền qua nó tới cống nếu có dòng điện qua cổng. Về cơ bản, điều này tạo thành một công tắc nhị phân, mà cắt dây ra tùy thuộc vào tín hiệu đầu vào thứ hai.

Máy tính hiện đại sử dụng hàng tỷ bóng bán dẫn để thực hiện các phép tính, nhưng ở mức thấp nhất, bạn chỉ cần một số ít để tạo thành các thành phần cơ bản nhất, được gọi là cổng.

Cổng logic

Ngăn xếp một vài bóng bán dẫn đúng cách và bạn có cái được gọi là cổng logic. Các cổng logic lấy hai đầu vào nhị phân, thực hiện một thao tác trên chúng và trả về một đầu ra. Ví dụ, cổng OR trả về true nếu một trong hai đầu vào là true. Cổng AND kiểm tra nếu cả hai đầu vào là đúng, XOR sẽ kiểm tra xem chỉ có một trong các đầu vào là đúng hay không, và các biến thể N (NOR, NAND và XNOR) là các phiên bản ngược của các cổng cơ sở của chúng.
Ngăn xếp một vài bóng bán dẫn đúng cách và bạn có cái được gọi là cổng logic. Các cổng logic lấy hai đầu vào nhị phân, thực hiện một thao tác trên chúng và trả về một đầu ra. Ví dụ, cổng OR trả về true nếu một trong hai đầu vào là true. Cổng AND kiểm tra nếu cả hai đầu vào là đúng, XOR sẽ kiểm tra xem chỉ có một trong các đầu vào là đúng hay không, và các biến thể N (NOR, NAND và XNOR) là các phiên bản ngược của các cổng cơ sở của chúng.

Làm toán với Gates

Chỉ với hai cổng, bạn có thể thực hiện bổ sung nhị phân cơ bản. Sơ đồ trên cho thấy một nửa adder, được tạo ra bằng cách sử dụng Logicly, một sân chơi trực tuyến miễn phí cho các cổng logic. Cổng XOR ở đây sẽ bật nếu chỉ một trong các đầu vào được bật, nhưng không phải cả hai. Cổng AND sẽ bật nếu cả hai đầu vào đều bật nhưng hãy tắt nếu không có đầu vào. Vì vậy, nếu cả hai đang bật, XOR vẫn tắt, và cổng AND bật, đến với câu trả lời đúng của hai:
Chỉ với hai cổng, bạn có thể thực hiện bổ sung nhị phân cơ bản. Sơ đồ trên cho thấy một nửa adder, được tạo ra bằng cách sử dụng Logicly, một sân chơi trực tuyến miễn phí cho các cổng logic. Cổng XOR ở đây sẽ bật nếu chỉ một trong các đầu vào được bật, nhưng không phải cả hai. Cổng AND sẽ bật nếu cả hai đầu vào đều bật nhưng hãy tắt nếu không có đầu vào. Vì vậy, nếu cả hai đang bật, XOR vẫn tắt, và cổng AND bật, đến với câu trả lời đúng của hai:
Điều này cho chúng ta một thiết lập đơn giản với ba đầu ra riêng biệt: 0, 1 và 2. Nhưng một chút không thể lưu trữ bất kỳ thứ gì cao hơn 1 và máy này không hữu ích vì nó chỉ giải quyết được một trong những vấn đề toán học đơn giản nhất có thể. Nhưng đây chỉ là một nửa adder, và nếu bạn kết nối hai người trong số họ với một đầu vào, bạn sẽ có được một adder đầy đủ:
Điều này cho chúng ta một thiết lập đơn giản với ba đầu ra riêng biệt: 0, 1 và 2. Nhưng một chút không thể lưu trữ bất kỳ thứ gì cao hơn 1 và máy này không hữu ích vì nó chỉ giải quyết được một trong những vấn đề toán học đơn giản nhất có thể. Nhưng đây chỉ là một nửa adder, và nếu bạn kết nối hai người trong số họ với một đầu vào, bạn sẽ có được một adder đầy đủ:
Trình bổ sung đầy đủ có ba đầu vào - hai số cần thêm và “mang”. Việc mang theo được sử dụng khi số cuối cùng vượt quá số có thể được lưu trữ trong một bit. Người bổ sung đầy đủ sẽ được liên kết trong một chuỗi và việc thực hiện được chuyển từ một trình bổ sung sang bộ tiếp theo. Việc mang được thêm vào kết quả của cổng XOR trong bộ cộng một nửa đầu tiên và có thêm một cổng OR để xử lý cả hai trường hợp khi cần.
Trình bổ sung đầy đủ có ba đầu vào - hai số cần thêm và “mang”. Việc mang theo được sử dụng khi số cuối cùng vượt quá số có thể được lưu trữ trong một bit. Người bổ sung đầy đủ sẽ được liên kết trong một chuỗi và việc thực hiện được chuyển từ một trình bổ sung sang bộ tiếp theo. Việc mang được thêm vào kết quả của cổng XOR trong bộ cộng một nửa đầu tiên và có thêm một cổng OR để xử lý cả hai trường hợp khi cần.

Khi cả hai đầu vào được bật, nút mang sẽ bật và gửi nó đến bộ cộng đầy đủ tiếp theo trong chuỗi:

Và điều này là phức tạp như bổ sung được. Di chuyển lên đến bit hơn về cơ bản chỉ có nghĩa là người bổ sung đầy đủ hơn trong một chuỗi dài hơn.
Và điều này là phức tạp như bổ sung được. Di chuyển lên đến bit hơn về cơ bản chỉ có nghĩa là người bổ sung đầy đủ hơn trong một chuỗi dài hơn.

Hầu hết các hoạt động toán học khác có thể được thực hiện với phần bổ sung; phép nhân chỉ là lặp đi lặp lại cộng, phép trừ có thể được thực hiện với một số đảo ngược bit ưa thích, và phân chia chỉ là phép trừ lặp đi lặp lại. Và trong khi tất cả các máy tính hiện đại có các giải pháp dựa trên phần cứng để tăng tốc độ hoạt động phức tạp hơn, bạn có thể làm tất cả về mặt kỹ thuật với trình bổ sung đầy đủ.

Xe buýt và bộ nhớ

Image
Image

Ngay bây giờ, máy tính của chúng tôi không có gì hơn một máy tính xấu. Điều này là bởi vì nó không thể nhớ bất cứ điều gì, và không có gì với kết quả đầu ra của nó. Hiển thị ở trên là một ô nhớ, có thể thực hiện tất cả điều đó. Dưới mui xe, nó sử dụng rất nhiều cổng NAND, và trong cuộc sống thực có thể khá khác nhau tùy thuộc vào kỹ thuật lưu trữ, nhưng chức năng của nó là như nhau. Bạn cung cấp cho nó một số đầu vào, bật bit ‘write’ và nó sẽ lưu trữ các đầu vào bên trong ô. Đây không chỉ là một ô nhớ, vì chúng ta cũng cần một cách để đọc thông tin từ nó. Điều này được thực hiện với một enabler, là một tập hợp các cổng AND cho mỗi bit trong bộ nhớ, tất cả được gắn với một đầu vào khác, bit “đọc”. Các bit ghi và đọc thường được gọi là "set" và "enable".

Toàn bộ gói này được bao bọc thành những gì được gọi là đăng ký. Các thanh ghi này được kết nối với bus, là một bó dây chạy quanh toàn bộ hệ thống, được kết nối với mọi thành phần. Ngay cả các máy tính hiện đại cũng có một chiếc xe buýt, mặc dù họ có thể có nhiều xe buýt để cải thiện hiệu suất đa nhiệm.

Mỗi thanh ghi vẫn có một bit ghi và đọc, nhưng trong thiết lập này, đầu vào và đầu ra cũng giống nhau. Điều này thực sự tốt. Ví dụ. Nếu bạn muốn sao chép nội dung của R1 vào R2, bạn sẽ bật bit đọc cho R1, điều này sẽ đẩy nội dung của R1 lên xe buýt. Khi bit đọc được bật, bạn sẽ bật bit ghi cho R2, sẽ sao chép nội dung của xe buýt vào R2.
Mỗi thanh ghi vẫn có một bit ghi và đọc, nhưng trong thiết lập này, đầu vào và đầu ra cũng giống nhau. Điều này thực sự tốt. Ví dụ. Nếu bạn muốn sao chép nội dung của R1 vào R2, bạn sẽ bật bit đọc cho R1, điều này sẽ đẩy nội dung của R1 lên xe buýt. Khi bit đọc được bật, bạn sẽ bật bit ghi cho R2, sẽ sao chép nội dung của xe buýt vào R2.

Các thanh ghi cũng được sử dụng để tạo RAM. RAM thường được bố trí trong một mạng lưới, với dây dẫn theo hai hướng:

Bộ giải mã lấy đầu vào nhị phân và bật dây số tương ứng. Ví dụ, "11" là 3 trong nhị phân, số 2 bit cao nhất, do đó bộ giải mã sẽ bật dây cao nhất. Tại mỗi giao lộ, có một thanh ghi. Tất cả những điều này được kết nối với xe buýt trung tâm, và đến một đầu ghi trung tâm và đọc đầu vào. Cả đầu vào đọc và ghi sẽ chỉ bật nếu hai dây giao nhau qua thanh ghi cũng được bật, cho phép bạn chọn sổ đăng ký để viết và đọc. Một lần nữa, RAM hiện đại phức tạp hơn nhiều, nhưng thiết lập này vẫn hoạt động.
Bộ giải mã lấy đầu vào nhị phân và bật dây số tương ứng. Ví dụ, "11" là 3 trong nhị phân, số 2 bit cao nhất, do đó bộ giải mã sẽ bật dây cao nhất. Tại mỗi giao lộ, có một thanh ghi. Tất cả những điều này được kết nối với xe buýt trung tâm, và đến một đầu ghi trung tâm và đọc đầu vào. Cả đầu vào đọc và ghi sẽ chỉ bật nếu hai dây giao nhau qua thanh ghi cũng được bật, cho phép bạn chọn sổ đăng ký để viết và đọc. Một lần nữa, RAM hiện đại phức tạp hơn nhiều, nhưng thiết lập này vẫn hoạt động.

Đồng hồ, Stepper và bộ giải mã

Các thanh ghi được sử dụng ở khắp mọi nơi và là công cụ cơ bản để di chuyển dữ liệu xung quanh và lưu trữ thông tin trong CPU. Vậy điều gì bảo họ di chuyển mọi thứ xung quanh?

Đồng hồ là thành phần đầu tiên trong lõi của CPU và sẽ tắt và bật tại một khoảng thời gian định sẵn, được đo bằng hertz hoặc chu kỳ mỗi giây. Đây là tốc độ bạn thấy được quảng cáo cùng với CPU; một chip 5 GHz có thể thực hiện 5 tỷ chu kỳ mỗi giây. Tốc độ đồng hồ thường là một chỉ số rất tốt cho CPU nhanh như thế nào.

Đồng hồ có ba trạng thái khác nhau: đồng hồ cơ bản, đồng hồ bật và đồng hồ đã đặt. Đồng hồ cơ sở sẽ được bật trong nửa chu kỳ và tắt cho nửa còn lại. Đồng hồ bật được sử dụng để bật đăng ký và sẽ cần phải bật lâu hơn để đảm bảo rằng dữ liệu được bật. Đồng hồ cài đặt luôn cần được bật cùng lúc với đồng hồ bật hoặc nếu không dữ liệu không chính xác khác có thể được ghi.
Đồng hồ có ba trạng thái khác nhau: đồng hồ cơ bản, đồng hồ bật và đồng hồ đã đặt. Đồng hồ cơ sở sẽ được bật trong nửa chu kỳ và tắt cho nửa còn lại. Đồng hồ bật được sử dụng để bật đăng ký và sẽ cần phải bật lâu hơn để đảm bảo rằng dữ liệu được bật. Đồng hồ cài đặt luôn cần được bật cùng lúc với đồng hồ bật hoặc nếu không dữ liệu không chính xác khác có thể được ghi.

Đồng hồ được kết nối với bộ tạo bước, sẽ được tính từ bước này đến bước tối đa và đặt lại chính nó trở lại khi nó được thực hiện. Đồng hồ cũng được kết nối với các cổng AND cho mỗi thanh ghi mà CPU có thể ghi vào:

Các cổng AND này cũng được kết nối với đầu ra của một thành phần khác, bộ giải mã lệnh. Bộ giải mã lệnh có một lệnh như “SET R2 TO R1” và giải mã nó thành một thứ mà CPU có thể hiểu được. Nó có thanh ghi bên trong riêng của nó, được gọi là "Hướng dẫn đăng ký", là nơi lưu trữ hoạt động hiện tại. Làm thế nào chính xác nó đi xuống đến hệ thống bạn đang chạy trên, nhưng một khi nó được giải mã, nó sẽ bật đúng thiết lập và kích hoạt bit cho các thanh ghi chính xác, mà sẽ bắn ra theo đồng hồ.
Các cổng AND này cũng được kết nối với đầu ra của một thành phần khác, bộ giải mã lệnh. Bộ giải mã lệnh có một lệnh như “SET R2 TO R1” và giải mã nó thành một thứ mà CPU có thể hiểu được. Nó có thanh ghi bên trong riêng của nó, được gọi là "Hướng dẫn đăng ký", là nơi lưu trữ hoạt động hiện tại. Làm thế nào chính xác nó đi xuống đến hệ thống bạn đang chạy trên, nhưng một khi nó được giải mã, nó sẽ bật đúng thiết lập và kích hoạt bit cho các thanh ghi chính xác, mà sẽ bắn ra theo đồng hồ.

Hướng dẫn chương trình được lưu trữ trong RAM (hoặc cache L1 trên các hệ thống hiện đại, gần CPU hơn). Kể từ khi dữ liệu chương trình được lưu trữ trong sổ đăng ký, giống như mọi biến khác, nó có thể được thao tác trên bay để nhảy xung quanh chương trình. Đây là cách các chương trình lấy cấu trúc của chúng, với các vòng lặp và các câu lệnh if. Hướng dẫn nhảy đặt vị trí hiện tại trong bộ nhớ mà bộ giải mã lệnh đang đọc từ một vị trí khác.

Làm thế nào nó tất cả đi kèm với nhau

Bây giờ, quá trình tổng hợp quá mức của chúng tôi về cách hoạt động của CPU hoàn tất. Xe buýt chính kéo dài toàn bộ hệ thống và kết nối với tất cả các thanh ghi. Các trình bổ sung đầy đủ, cùng với một loạt các hoạt động khác, được đóng gói vào Đơn vị logic số học hoặc ALU. ALU này sẽ có kết nối với bus và cũng sẽ có các thanh ghi riêng để lưu trữ số thứ hai mà nó đang hoạt động.
Bây giờ, quá trình tổng hợp quá mức của chúng tôi về cách hoạt động của CPU hoàn tất. Xe buýt chính kéo dài toàn bộ hệ thống và kết nối với tất cả các thanh ghi. Các trình bổ sung đầy đủ, cùng với một loạt các hoạt động khác, được đóng gói vào Đơn vị logic số học hoặc ALU. ALU này sẽ có kết nối với bus và cũng sẽ có các thanh ghi riêng để lưu trữ số thứ hai mà nó đang hoạt động.

Để thực hiện một phép tính, dữ liệu chương trình được nạp từ RAM hệ thống vào phần điều khiển. Phần điều khiển đọc hai số từ RAM, nạp số đầu tiên vào thanh ghi chỉ dẫn của ALU, sau đó tải số thứ hai lên xe buýt. Trong khi đó, nó sẽ gửi cho ALU một mã hướng dẫn cho biết phải làm gì. Sau đó ALU thực hiện tất cả các phép tính và lưu trữ kết quả trong một thanh ghi khác, mà CPU có thể đọc từ và sau đó tiếp tục quá trình.

Đề xuất: