Đây là một trong một loạt các bài viết có giá trị tìm hiểu về các thành phần tạo nên máy tính, cũng như là cách mà chúng làm việc, giao tiếp với nhau được thực hiện bởi TechSpot. TechFlow xin được lượt dịch để gởi mang đến các bạn một loạt bài viết để củng cố thêm kiến thức về phần cứng máy tính.
Tìm hiểu các công nghệ nổi bật bên trong các bộ phận của máy tính
CPU thường được gọi là bộ não máy tính và tương tự như bộ não của con người, nó bao gồm một số bộ phận hoạt động cùng nhau để xử lý thông tin. Có những phần lấy thông tin, bộ phận lưu trữ, xử lý thông tin, phần chuyển phát thông tin đầu ra, v.v. Trong phần giải thích này, chúng ta sẽ tìm hiểu các yếu tố chính tạo nên CPU và cách tất cả chúng hoạt động cùng nhau để cung cấp sức mạnh cho hệ thống máy tính của bạn.
Vì một số lý do như các bộ phận bên trong CPU rất rất nhỏ và được đóng trong một gói khép kín và cũng vì cả Intel lẫn AMD đều không công bố thiết kế bên trong CPU. Hầu hết những thiết kế CPU là bí mật của công ty, vì vậy các chủ đề trong bài viết này đại diện cho các tính năng chung mà tất cả CPU đều có.
Mỗi hệ thống kỹ thuật số cần một số hình thức của một Đơn Vị Xử Lý Trung Tâm (Central Processing Unit). Về cơ bản, một lập trình viên sẽ biên soạn một đoạn mã để thực hiện một nhiệm vụ nào đó, và sau đó CPU sẽ thực thi mã đó để cho ra kết quả như mong muốn. CPU cũng được kết nối với các bộ phận khác của hệ thống như bộ nhớ và I/O để cung cấp những dữ liệu liên quan.
Kiến trúc tập lệnh (Instruction Set Architecture – ISA)
Khi phân tích bất kỳ CPU nào, điều đầu tiên bạn sẽ phải bắt gặp đó là Kiến trúc tập lệnh (Instruction Set Architecture – ISA). Đây là kế hoạch tượng hình chi tiết cho các hoạt động của CPU và tất cả các hệ thống bên trong tương tác với nhau. Giống như có rất nhiều giống chó trong cùng một loài, có nhiều loại ISA khác nhau có thể được dùng để xây dựng nên CPU. Hai loại phổ biến nhất là x86 (phổ biến trong máy tính để bàn và máy tính xách tay) và ARM (thường được sử dụng trong các thiết bị nhúng và thiết bị di động).
Có một số kiến trúc tập lệnh khác như MIPS, RISC-V và PowerPC và chúng thường được sử dụng trong một số ứng dụng đặc biệt. Một ISA sẽ chỉ định những tập lệnh nào mà CPU sẽ xử lý, cách mà nó sẽ tương tác với bộ nhớ và bộ nhớ đệm, cũng như cách nó phân chia công việc trong nhiều giai đoạn xử lý và hơn thế nữa.
Để bao quát những phần chính của CPU, chúng ta sẽ đi theo hướng đi của một tập lệnh thực hiện khi nó được kích hoạt. Các loại chỉ dẫn khác nhau có thể dựa trên những tập lệnh khác nhau và sử dụng những thành phần khác của CPU. nhưng chúng ta sẽ khái quát ở đây để bao quát những phần lớn nhất. Chúng ta sẽ bắt với thiết kế cơ bản nhất của bộ xử lý lỗi đơn và tăng dần thêm độ phức tạp khi chúng ta hướng tới một thiết kế hiện đại hơn.
Control Unit và Datapath
Các bộ phận của CPU có thể được chia thành hai: Control Unit và Datapath. Hãy tưởng tượng một chiếc xe lửa. Động cơ là để di chuyển đoàn tàu, nhưng luôn có một người đứng phía sau thao tác trên bảng điều khiển để kiểm soát các khía cạnh khác của động cơ. CPU cũng tương tự vậy.
Datapath giống như những công cụ và như tên gọi của nó, là đường dẫn nơi mà dữ liệu đổ xuống khi đã được xử lý. Cơ sở dữ liệu nhận các chỉ thị đầu vào, xử lý và gửi chúng đến đúng nơi khi chúng đã hoàn thành. Bộ điều khiển (Control Unit) báo cho cơ sở dữ liệu cách vận hành giống như người điều khiển tàu. Tùy thuộc vào lệnh, datapath sẽ định tuyến tín hiệu đến các thành phần khác nhau, bật và tắt các thành phần khác nhau của datapath và theo dõi trạng thái CPU.
Chu Kỳ Tìm Nạp Tập Lệnh (The Instruction Cycle – Fetch)
Việc đầu tiên CPU phải làm là tìm tập lệnh nào để thực hiện tiếp theo và chuyển chúng từ bộ nhớ vào CPU. Các tập lệnh sẽ được tạo bởi một trình biên dịch và dành riêng cho ISA của CPU. ISA sẽ chia sẻ hầu hết các loại tập lệnh phổ biến như tải, lưu trữ, thêm, trừ… nhưng có nhiều loại tập lệnh đặc biệt được bổ sung chỉ cho một loại ISA cụ thể. Bộ điều khiển sẽ biết những tín hiệu nào cần định tuyến ở đâu cho từng dòng lệnh.
Chẳng hạn như khi bạn chạy một tập tin .exe trên Win dows, mã cho chương trình đó được chuyển vào bộ nhớ và CPU được cung cấp địa chỉ nơi mà lệnh đầu tiên bắt đầu. CPU luôn duy trì một thanh ghi bên trong lưu giữ vị trí bộ nhớ của lệnh tiếp theo sẽ được thực thi. Đây được gọi là Bộ đếm chương trình (Program Counter – PC)
Một khi nó biết bắt đầu từ đâu, bước đầu tiên của chu trình là lấy tập lệnh đó đó. Thao tác này sẽ chuyển lệnh từ bộ nhớ vào thanh ghi lệnh của CPU và đây được gọi là giai đoạn Tìm Nạp (Fetch). Trên thực tế, tập lệnh có khả năng đã có trong bộ nhớ đệm của CPU, nhưng chúng ta sẽ đề cập một chút đến các chi tiết đó.
Chu Kỳ Giải Mã Tập Lệnh
Khi CPU có một lệnh, nó cần phải tìm ra cụ thể loại lệnh đó là gì. Đây gọi là giai đoạn Giải Mã (Decode stage). Mỗi lệnh sẽ có một tập hợp các bit nhất định gọi là Opcode để CPU biết cách diễn giải nó. Điều này tương tự như cách các phần mở rộng tập tin khác nhau được sử dụng để cho máy tính biết cách diễn giải tệp. Ví dụ: .jpg và .png đều là các tệp hình ảnh, nhưng chúng tổ chức dữ liệu theo một cách khác nhau để máy tính cần biết loại để diễn giải chúng cho đúng.
Tùy thuộc vào mức độ phức tạp của ISA, phần giải mã lệnh của CPU có thể trở nên phức tạp. Một ISA như RISC-V có thể chỉ có vài chục tập lệnh trong khi x86 lên đến hàng nghìn. Điển hình như trên CPU x86, quá trình giải mã là một trong những thach thức lớn nhất và chiếm nhiều tài nguyên. Các loại tập lệnh phổ biến nhất mà CPU sẽ giải mã là bộ nhớ, số học hoặc tập lệnh phân nhánh.
3 Loại Tập Lệnh Chính
Một lệnh bộ nhớ (memory instruction) có thể là một cái gì đó như “đọc giá trị từ bộ nhớ tại địa chỉ 1234 thành giá trị A” hoặc “ghi giá trị B vào địa chỉ 5678 trên bộ nhớ”.
Một lệnh số học (arithmetic instruction) có thể là một cái gì đó như “thêm giá trị A vào giá trị B và lưu kết quả vào giá trị C”.
Một tập lệnh nhánh (branch instruction) có thể giống như là “thực thi mã này nếu giá trị C dương hoặc thực thi mã đó nếu giá trị C âm”.
Một chương trình thông thường có thể xâu chuỗi chúng lại với nhau để đưa ra một các gì đó như “thêm giá trị tại địa chỉ bộ nhớ 1234 vào giá trị địa chỉ 5678 và lưu nó vào địa chỉ bộ nhớ 4321 nếu kết quả là dương hoặc lưu vào địa chỉ 8765 nếu kết quả là âm”.
Trước khi bắt đầu thực hiện lệnh chúng vừa giải mã, chúng ta cần phải nói một chút về thanh ghi (registers)
Một CPU có một vài phần bộ nhớ rất nhỏ nhưng rất nhanh, được gọi là các thanh ghi. Trên một CPU 64-bit, mỗi bit sẽ chứa 64-bit và có thể chỉ có vài chục cho một nhân. Chúng được sử dụng để lưu trữ các giá trị hiện đang được sử dụng và có thể được coi như là một các gì đó giống như bộ nhớ đệm L0. Trong các ví dụ tập lệnhn ở trên, các giá trị A, B, C sẽ được lưu trữ trên các thanh ghi.
Arithmetic Log Unit (ALU)
Bây giờ, quay lại giai đoạn thực thi. Với 3 loại tập lệnh sẽ có các giai đoạn thực thi khác nhau.
Bắt đầu với loại tập lệnh số học vì chúng đơn giản để tìm hiểu. Các loại tập lệnh này được đưa vào một ALU để xử lý. ALU là một mạch thường lấy hai đầu vào với một tín hiệu điều khiển và đưa ra kết quả.
Hãy tưởng tượng một máy tính cơ bản bạn vẫn thường sử dụng để tính tiền mỗi ngày. Để thực hiện một thao tác, bạn nhập hai đầu số vào cũng như loại hoạt động bạn muốn thức hiện. Máy tính sẽ thực hiện tính toán và cho ra kết quả. Trong trường hợp ALU của CPU, loại hoạt động được xác định bởi những tập lệnh và đơn vị điều khiển sẽ gửi nó đến ALU. Ngoài số học cơ bản, ALU cũng có thể thực hiện các phép toán bitwise như AND, OR, NOT và XOR. ALU cũng sẽ xuất một số thông tin trạng thái cho đơn vị điều khiển về phép tính mà nó vừa hoàn thành. Điều này bao gồm những thứ như kết quả là dương, âm, không hoặc có dư.
Một ALU được liên kết nhiều nhất với các hoạt động số học, nhưng nó cũng có thể được sử dụng cho các tập lệnh bộ nhớ hoặc tập lệnh nhánh. Ví dụ, CPU có thể cần tính toán một địa chỉ bộ nhớ được cung cấp do kết quả của hoạt động số học trước đó. Nó cũng có thể tính toán phần bù để thêm vào bộ đếm chương trình mà một lệnh rẽ nhánh yêu cầu. Một cái gì đó như “nếu kết quả trước đó là âm tính, hãy nhảy lên trước 20 tập lệnh”.
Tập lệnh bộ nhớ và phân cấp – Memory Instructions an and Hierarchy
Để biết về tập lệnh bộ nhớ, chúng ta sẽ tìm hiểu về một khái niệm gọi là Phân Cấp Bộ Nhớ (Memory Hierarchy). Điều này thể hiện mối quan hệ giữa bộ nhớ cach, RAM và nguồn lưu trữ chính. Khi CPU nhận được một lệnh bộ nhớ cho một phần dữ liệu mà nó chưa được lưu cục bộ trong các thanh ghi của nó, nó sẽ đi xuống hệ thống phân cấp bộ nhớ và tìm cho đến khi tìm thấy lệnh bộ nhớ đó. Hầu hết các CPU hiện đại có ba cấp độ đệp: L1, L2 và L3. Nơi đầu tiên CPU sẽ kiểm tra là bộ đệm L1. Đây là mức nhỏ nhất và nhanh nhất trong ba cấp độ của bộ đệm. Bộ đệm L1 thường được chia thành một phần cho dữ liệu và một phần cho tập lệnh. Hãy nhớ rằng các tập lệnh cần phải được lấy từ bộ nhớ giống như dữ liệu.
Bộ đệm L1 thông thường có thể là vài trăm KB. Nếu CPU không thể tìm thấy thứ nó cần trong L1, nó sẽ kiểm tra ở bộ đệm L2. Điều này có thể theo tứ tự của một vài MB. Bước tiếp theo là bộ đệm L3 có thể vài chục MB. Nếu CPU vẫn không tìm thấy dữ liệu cần thiết trong bộ đệm L3, nó sẽ chuyển sang RAM và cuối cùng là nguồn lưu trữ chính. Khi chúng ta đi xuống từng nấc, không gian lưu trữ sẽ tăng lên rất nhiều, nhưng độ trể do đó cũng sẽ tăng lên do CPU sẽ phải mất thời gian để tìm kiếm.
Khi CPU tìm thấy dữ liệu, nó sẽ đưa lên cấu trúc phân cấp để CPU có thể truy xuất nhanh vào nếu nó cần trong tương lai. Có nhiều bước ở đây, nhưng nó đảm bảo rằng CPU có quyền truy cập nhanh vào dữ liệu khi cần thiết. Ví dụ: CPU có thể đọc từ các thanh ghi cục bộ của nó chỉ trong một hoặc hai chu kỳ, L1 trong một số chu kỳ, L2 trong mười hoặc hơn và L3 là vài chục. Nếu nó cần vào bộ nhớ hoặc lưu trữ chính, chúng có thể mất hàng chục nghìn hoặc thậm chí hàng triệu chu kỳ. Tùy thuộc vào hệ thống, mỗi lõi có thể sẽ có bộ đệm L1 riêng, chia sẽ bộ L2 với một lõi khác và chia L3 với tất cả các lõi còn lại.
Branch an and Jump Instructions
Loại cuối cùng trong ba loại tập lệnh chính là tập lệnh phân nhánh. Các chương trình hiện đại luôn luôn vượt cấp và CPU sẽ hiếm khi thực hiện hơn một chục lệnh liền kề mà không có nhánh. Tập lệnh nhánh đến từ các yếu tố lập trình như nếu tố “if”, “for” và “return”/ Tất cả đều được sử dụng để làm gián đoạn quá trình thực thi chương trình và chuyển sang một phần khác của mã. Ngoài ra còn có tập lệnh vượt cấp là tập lệnh nhánh luôn được thực hiện.
Các nhánh có điều kiện đặc biệt khó khăn đối với CPU vì nó có thể thực thi nhiều lệnh cùng một lúc hoặc không thể xác định kết quả của nhánh cho đến khi bắt đầu các lệnh tiếp theo.
Để hiểu đầy đủ lý do tại sao đây là một vấn đề, chúng ta cần phải chuyển hướng khác và nói về pipeline. Mỗi bước trong chu kỳ tập lệnh có thể mất một vài chu kỳ để hoàn thành. Điều đó có nghĩa là trong khi một tập lệnh được tìm nạp, ALU sẽ không hoạt động. Để tối đa hóa hiệu quả của CPU, chúng ta chia từng giai đoạn trong một quy trình gọi là pipeline.
Đơn giản để hiểu điều này là thông qua một hành động như giặt giũ. Bạn có hai bao tải cần để làm và giặt rồi sấy mỗi hoạt động mất một giờ. Bạn có thể đặt bao tải đầu tiên vào máy giặt và sau đó là sấy, sau đó bắt đầu với bao tải thứ hai. Để hoàn thành công việc với 2 bao tải bạn sẽ mất bốn giờ. Tuy nhiên, nếu bạn phân chia công việc và bắt đầu giặt lần thứ hai trong khi tải thứ nhất đang khô, bạn có thể hoàn thành cả hai tải trong ba giờ. Thang giảm một giờ với số lượng tải bạn có và số lượng máy giặt và máy sấy. Vẫn mất hai giờ để thực hiện một tải riêng lẻ, nhưng sự chồng lấp làm tăng tổng thông lượng từ 0,5 tải/giờ lên 0,75 tải/giờ.
CPU sử dụng phương pháp tương tự để cải thiện thông lượng tập lệnh. Một CPU ARM hoặc x86 hiện đại có thể có hơn 20 giai đoạn pipelining, có nghĩa là tại bất kỳ thời điểm nào, lõi đó đang xử lý hơn 20 tập lệnh khác nhau cùng một lúc. Mỗi thiết kế là độc nhất, nhưng một phân chia mẫu có thể là 4 chu kỳ để nạp, 6 chu kỳ để giải mã, 3 chu kỳ để thực thi và 7 chu kỳ để cập nhật kết quả về cho bộ nhớ.
Quay lại với nhánh tập lệnh, hy vọng bạn có thể bắt đầu thấy vấn đề. Nếu chúng ta không biết rằng một tập lệnh là một nhánh cho đến chu kỳ 10, chúng ta sẽ bắt đầu thực hiện 9 tập lệnh mới mà có thể không hợp lệ nếu nhánh đó được thực hiện. Để giải quyết vấn đề, CPU sẽ có các cấu trúc rất phức tạp gọi là bộ dự báo nhánh. Chúng sử dụng các khái niệm tương tự từ máy học thuật để thử và dự đoán xem một nhánh sẽ được thực hiện hay không. Sự phức tạp của các yếu tố dự đoán nhánh vượt ra ngoài phạm vi của bài viết này, nhưng ở mức độ cơ bản, chúng theo dõi trạng thái của các nhánh trước để tìm hiểu xem một nhánh sắp tới có khả năng được thực hiện hay không. Dự đoán nhánh hiện đại có thể có độ chính xác đến 95% hoặc cao hơn.
Khi kết quả của một nhánh được biết là chắc chắn (nó đã kết thúc giai đoạn pipelining), bộ đếm chương trình sẽ cập nhật và CPU sẽ tiếp tục thực hiện lệnh tiếp theo. Nếu nhánh bị dự đoán sai, CPU sẽ đưa ra tất cả các lệnh sau nhánh mà nó bắt đầu thực hiện sai và khởi động lại từ vị trí đúng.
Thực thi không theo thứ tự (Out-of-Order Execution)
Bây giờ, chúng ta đã biết cách thực hiện ba loại tập lệnh phổ biến nhất, hãy xem xét một số tính năng nâng cao hơn của CPU. Hầu như tất cả các bộ xử lý hiện đại không thực sự thực thi tập lệnh theo thứ tự mà chúng nhận được. Một mô hình gọi là out-of-order execution được sử dụng để giảm thiểu thời gian chết trong khi chờ các tập lệnh khác kết thúc.
Nếu CPU biết rằng một lệnh sắp tới yêu cầu dữ liệu sẽ không kịp thời sẳn sàng, nó có thể chuyển đổi thứ tự tập lệnh và đưa ra một lệnh độc lập từ sau đó trong chương trình trong khi nó chờ. Việc sắp xếp lại tập lệnh này là một công cụ cực kỳ mạnh mẽ
Một tính năng cải thiện hiệu suất khác được gọi là tìm nạp. Nếu bạn xem xét mất bao lâu để một tập lệnh ngẫu nhiên hoàn thành từ đầu đến cuối, bạn sẽ thấy rằng việc truy cập bộ nhớ chiếm rất nhiều thời gian. Trình tải trước (a prefetcher) là một đơn vị trong CPU cố gắng xem trước các tập lệnh trong tương lai và dữ liệu yêu cầu. Nếu nó nhìn thấy được một yêu cầu dữ liệu sắp tới mà CPU không có lưu trữ trong bộ đệm, nó sẽ tiếp cận với RAM và lấy dữ liệu đó vào bộ đệm. Do đó, nó được gọi là tìm nạp trước (pre-fetch)
Các Bộ Gia Tốc và Tương Lai
Một tính năng khác bắt đầu được trang bị trong các CPU đó là bộ gia tốc dành riêng cho mỗi tác vụ đặc biệt. Đây là mạch được dành cho một công việc có thể được thực thi trong một tiến trình nhanh nhất có thể. Điều này có thể bao gồm mã hóa, giải mã đa phương tiện hoặc máy học thuật.
CPU có thể tự làm những việc đó, nhưng sẽ hiệu quả hơn rất nhiều khi có một đơn vị dành riêng cho chúng. Một ví dụ tuyệt vời về điều này là so sánh giữa đồ họa tích hợp và một GPU đồ họa chuyên dụng. Chắc chắn CPU có thể thực hiện các tính toán cần thiết trong xử lý đồ họa, nhưng có một bộ phận chuyên dụng cho dựng hình cung cấp mang đến những kết quả hiển thị với hiệu suất tốt hơn. Với sự gia tăng của các bộ gia tốc, lõi thực tế của CPU chỉ có thể chiếm một phần nhỏ của chip.
Trên hình ảnh là của CPU Intel từ nhiều năm trước, hầu hết không gian được chiếm giữ bởi lõi và bộ đệm. Hình ảnh thứ hai là về chip AMD mới hơn với hầu hết không gian ở đó được nắm giữ bởi các thành phần khác đặc biệt là bộ gia tốc đồ họa ngoài lõi xử lý.
Đa nhân xử lý
Tính năng chính cuối cùng cần trình bày là làm thế nào để chúng ta có thể kết nối một loạt các CPU riêng lẻ lại với nhau để tạo thành một CPU đa nhân. Nó không đơn giản như chỉ cần đặt nhiều bản sao của một thiết kế nhân đơn mà chúng ta đã nói trước đó. Cũng như là không dễ dàng để biến một chương trình đơn luồng thành chương trình đa luồng, khái niệm này cũng được áp dụng cho phần cứng. Các vấn đề đến từ sự phụ thuộc giữa các nhân.
Ví dụ, đối với thiết kế 4 nhân, CPU cần có khả năng đưa ra các tính toán nhanh gấp 4 lần. Nó cũng cần bốn giao diện riêng biệt cho bộ nhớ. Với nhiều thực thể hoạt động trên cùng một phần dữ liệu, các vấn đề như sự gắn kết evaf tính nhất quán phải được giải quyết. Nếu hai nhân đều xử lý hai tập lệnh có cùng dữ liệu, làm thế nào để chúng biết ai là người cho kết quả đúng? Điều gì sẽ xảy ra nếu một lõi sửa đổi dữ liệu nhưng nó không đến được lõi kia kịp thời để nó thực thi? Vì chúng có bộ đệm riêng có thể lưu trữ dữ liệu chồng chéo, các thuật toán và bộ điều khiển phức tạp được phải được sử dụng để loại bỏ các xung đột này.
Dự đoán nhánh thích hợp cũng cực kỳ quan trọng khi số lượng nhân trong một CPU tăng lên. Càng nhiều lõi đang thực hiện các lệnh cùng một lúc, khả năng một trong số chúng xử lý một lệnh nhánh càng cao. Điều này có nghĩa là luồng lệnh có thể thay đổi bất kỳ lúc nào.
Thông thường, các nhân riêng biệt sẽ xử lý các luồng lệnh từ các luồng khác nhau. Điều này giúp giảm sự phụ thuộc giữa các nhân. Đó là lý do tại sao nếu bản kiểm tra Trình quản lý tác vụ (Task Manager), bạn sẽ thấy đôi khi sẽ có một nhân làm việc rất chăm chỉ trong khi những nhân khác lại rất nhàn hạ thậm chí là không làm gì cả. Nhiều chương trình không được thiết kế cho đa luồng.
Thiết kế vật lý
Hầu hết bài viết này đã tập trung vào thiết kế kiến trúc của CPU, vì đó là nơi phức tạp nhất. Tuy nhiên, tất cả điều này cần phải được tạo ra trong thế giới thực và điều đó sẽ thêm một mức độ phức tạp khác.
Để đồng bộ hóa tất cả các thành phần trong toàn bộ CPU, tốc độ xung nhịp được xử dụng. Các bộ xử lý hiện đại thường vận hành trong khoảng 3.0GHz đến 5.0GHz và điều đó dường như đã không thay đổi suốt nhiều năm qua. Ở mỗi chu kỳ này, hàng tỷ bóng bán dẫn bên trong một con chip đang bật và tắt.
Xung nhịp là rất quan trọng để đảm bảo rằng khi mỗi giai đoạn của pipeline tiến lên, tất cả các giá trị sẽ được hiển thị đúng thời điểm. Xung nhịp xác định số lượng CPU có thể xử lý mỗi giây. Tăng tần số của nó thông qua việc ép xung sẽ giúp chip xử lý nhanh hơn, nhưng cũng sẽ tăng mức tiêu thụ điện và sản sinh lượng nhiệt lớn hơn.
Nhiệt độ là kẻ thù lớn nhất của CPU. Khi các điện tích kỹ thuật số nóng lên, các bóng bán dẫn siêu nhỏ có thể bắt đầu xuống cấp. Điều này có thể dẫn đến hư hỏng trong chip nếu nhiệt độ không được loại bỏ. Đây là lý do tại sao tất cả CPU đều đi kèm với bộ tản nhiệt. Nhân silicon thực tế của CPU chỉ chiếm 20% diện tích tích của bề mặt vật lý. Mở rộng bề mặt tiếp xúc cho phép nhiệt lan tỏa đều hơn đến bộ tản nhiệt. Nó cũng cho phép nhiều mở rộng nhiều chân hơn để giao tiếp với các thành phần bên ngoài.
Các CPU hiện đại có thể có một nghìn hoặc nhiều chân (pin) đầu vào và đầu ra ở mặt sau. Một chip di động có thể chỉ có vài trăng chân mặc dù hầu hết các bộ phận điện toán điều nằm trong chip. Bất kể thiết kế là gì, khoảng một nửa trong số chúng được dành cho việc cung cấp điện năng và phần còn lại được sử dụng để truyền dữ liệu. Bao gồm giao tiếp với RAM, chipset, nguồn lưu trữ, thiết bị PCIe, v.v. Với các CPU hiệu suất cao có thể đạt hàng trăm ampe hoặc hơn khi ở trạng thái đầy tải (fulload), chúng cần hàng trăm chân để dàn trải đủ năng lượng cần thiết. Các chân thường được mạ vàng để tăng tính dẫn điện. Các nhà sản xuất khác nhau sử dụng các sắp xếp khác nhau trong nhiều sản phẩm của họ.
Kết thúc bằng một ví dụ
Để kết thúc, chúng ta sẽ xem nhanh thiết kế của CPU Intel Core 2. Đây đã là vi xử lý có mặt từ năm 2006 và có một số phần đã lỗi thời, nhưng lại là CPU có được các thông tin chi tiết nhất.
Để bắt đầu, chúng ta có bộ đệm tập lệnh và ITLB. Translation Lookaside Buffer (TLB) được sử dụng để CPU biết vị trí trong bộ nhớ để tìm tập lệnh cần thiết. Các tập lệnh đó được lưu trữ trong bộ đệm tập lệnh L1 và sau đó được gửi vào bộ giải mã trước. Kiến trúc x86 cực kỳ phức tạp và dày đặc nên có nhiều bước để giải mã. Trong khi đó, bộ dự đoán nhánh và bộ nạp trước đều đang tìm kiếm bất kỳ vấn đề tiềm ẩn có thể xẩy ra từ các tập lệnh
Từ đó, các tập lệnh được gửi vào hàng đợi lệnh. Cách thiết kế không theo thứ tự (out of order execution) cho phép CPU thực hiện các lệnh và chọn một lệnh kịp thời nhất để thực thi. Hàng đợi này chứa các tập lệnh hiện tại mà CPU đang xem xét. Một khi CPU biết lệnh nào là tốt nhất để thực thi, nó sẽ được giải mã thành các hoạt động vi mô. Mặc dù một lệnh có thể chứa một tác vụ phức tạp cho CPU, nhưng các vi lệnh là các tác vụ chi tiết được CPU giải thích dễ dàng.
Các tập lệnh này sao đó đi vào một Register Alias Table, ROB và Reservation Station. Chức năng chính của ba thành phần này hơi phức tạp, nhưng chúng được sử dụng trong quy trình không theo thứ tự để giúp quản lý các phụ thuộc giữa các tập lệnh.
Một nhân duy nhất có thể có nhiều ALU và cổng bộ nhớ. Các thao tác đến được đưa vào trạm đặt trước cho đến khi một ALU hoặc một cổng bộ nhớ khả dụng. Khi có sẳn thành phần cần thiết, tập lệnh sẽ được thực thi với sự trợ giúp từ bộ đệm dữ liệu L1. Kết quả đầu ra sẽ được lưu trữ và CPU đã sẳn sàng để bắt đầu tập lệnh tiếp theo.
Mặc dù bài viết này không hoàn toàn chính xác về cách CPU hoạt động, nhưng hy vọng nó sẽ mang đến cho bạn những cái nhìn toàn cảnh về hoạt động bên trong và sự phức tạp của chúng. Thành thật mà nói, không ai ngoài AMD và Intel thực sự biết CPU của họ hoạt động như thế nào. Mỗi phần của bài viết này đại diện cho toàn bộ lĩnh vực nghiên cứu và phát triển, vì vậy thông tin được trình bày ở đây chỉ là bề nổi của một CPU thực thụ.
nguồn tham khảo: Techspot