
Về cơ bản thì “máy tính” nào cũng cần có một bộ xử lý trung tâm (Central Processing Unit – CPU). Máy tính ở đây có thể là cái laptop, cái desktop bạn đang xài, có thể là cái điện thoại, tablet, TV, hay thậm chí tới cái router mạng nhà bạn xài giờ cũng có “máy tính” trong đó rồi. Nguyên lý hoạt động của chúng đều giống nhau hết.
Trước hết thì đây là sơ đồ cơ bản nhất của 1 cái máy tính, tùy theo các nhà sản xuất, các loại kiến trúc khác nhau thì sẽ có thêm nhiều thứ trung gian. Nhưng về cơ bản thì CPU, RAM, các loại ổ lưu trữ và các giao thức của tụi nó với nhau thì không đổi.
Trong bài này, chúng ta sẽ tập trung chủ yếu vào CPU, cách nó xử lý dữ liệu và trao đổi dữ liệu với các loại bộ nhớ khác trong máy tính. Trước khi đi sâu vào CPU, bạn cần biết rằng trong máy tính người ta có 2 loại bộ nhớ:
- Primary Storage, tạm gọi là bộ nhớ chính: nó cần chứa dữ liệu tạm thời để máy tính chạy và thực thi các chương trình, đây chính là RAM đấy, hoặc các loại cache (L1, L2, L3…)
- Secondary Storage, tạm gọi là bộ nhớ thứ cấp, để lưu trữ dữ liệu dài hạn. Nó có thể là HDD, SSD của chúng ta, ngày xưa thì có ổ đĩa quang CD / DVD, đĩa mềm…
Quay trở lại với CPU và các thành phần chính của nó
Control Unit
Control Unit của CPU chứa các mạch điện, nó dùng tín hiệu điện để thực thi các lệnh mà CPU được giao cho làm. Có thể xem Control Unit như một ông đội trưởng, bản thân nó không đi làm việc mà nó sẽ điều khiện việc tới đúng chỗ (là các thành phần khác trong CPU). Control Unit sẽ nói chuyện với các bộ phận tính toán khác và cả bộ nhớ nữa.
Trong một thiết kế CPU, Control Unit có thể được tách ra thành nhiều linh kiện nhỏ hơn, bao gồm đơn vị thực thi, đơn vị dự đoán cấu trúc if…then…else (branch predictor). Branch predictor cố gắng đoán xem điều kiện nào sẽ được đáp ứng để lấy tiếp dữ liệu cho các phép tính sau đó. Nếu nó đoán đúng, dữ liệu được đưa vào đúng và CPU có thể thực thi tiếp. Nếu nó đoán sai, CPU sẽ phải đi lấy dữ liệu từ các bộ nhớ khác, tạo ra một khoảng thời chờ, tức là việc tính toán bị chậm đi.
Arithmetic/Logic Unit (ALU)
Bộ phận này chứa các mạch dùng để thực thi các phép tính về logic và số học. Cục ALU này có thể làm 4 phép tính cơ bản là: phép cộng, trừ, nhân và chia. Còn các phép logic thì chủ yếu là dạng so sánh, ví dụ như so sánh lớn, bé, bằng, lớn hơn hoặc bằng, so sánh ký tự… Nếu bạn nghĩ lại thì đây cũng chính là những phép toán cơ bản nhất mà bạn được học hồi tiểu học. Sau này, dù là bạn tính toán đa thức, tính toán ma trận, vector gì đấy thì cũng quy về 4 phép tính cơ bản và các phép so sánh logic mà thôi.
Khi ALU tính toán ra kết quả, máy tính sẽ dùng kết quả đó để làm tiếp chuyện của nó. Từ việc tính toán xem 1+1 bằng mấy, cho đến việc thuật toán quyết định xem có nên hiển thị nút Lưu trong các trình biên tập văn bản hay không, hay bạn có đang tiêu tiền quá số dư trong thẻ hay không. Tất cả đều nhờ ALU.
Cấu tạo của một con chip Intel 8008 ngày xưa, khi mà chúng ta còn có thể quan sát được các bộ phận riêng lẻ của 1 nhân. Ngày nay các thành phần này đã được thu nhỏ, cực kì nhỏ rồi. Trong sơ đồ này, Instruction Decode chính là Control Unit.
Floating Point Unit (FPU)
FPU có thể bao gồm nhiều ALU trong đó, để tăng tốc độ tính toán. FPU chủ yếu thực hiện các phép tính với số thập phân. FPU bắt đầu xuất hiện trong các CPU Intel và Motorola vào thập niên 1990.
Lại một lần nữa, các phép tính số thập phân phức tạp thực ra cũng được cấu thành từ một chuỗi các phép tính đơn giản cộng trừ nhân chia đúng không nào?
Register
Đây là một bộ phận rất thú vị của CPU, mà nhiều bạn chưa biết. Register thực chất là một loại bộ nhớ, nó là loại bộ nhớ nhanh nhất trong máy tính vì nó được sinh ra trên cùng 1 đế bán dẫn với CPU. Người ta không xem register là một loại bộ nhớ chính vì nó thuộc về CPU nhiều hơn. Bạn có thể xem register như là tờ giấy, mỗi khi bạn tính toán gì thì bạn sẽ “đọc đề bài” từ từ giấy này, và bạn làm nháp, bạn ghi kết quả cũng vào tờ giấy đó.
Máy tính thường sẽ có nhiều register, ví dụ như:
- Accumulator: thu thập kết quả của các phép tính
- Address register: theo dõi các ô địa chỉ trên RAM để CPU biết mà truy cập. Trên RAM mỗi ô nhớ đều có một địa chỉ để chứa một số dữ liệu, phải vậy thì CPU mới biết cái gì nằm ở đâu, giống như bạn đi tìm đường dựa vào địa chỉ vậy đó
- Storage register: lưu trữ dữ liệu tạm
- General-purpose register: dùng cho nhiều mục đích khác nhau
Lưu ý: những thành phần chính nói trên là những thứ nằm trong 1 nhân CPU. Ngày nay chúng ta có một “CPU” với nhiều nhân bên trong, rồi con “CPU” còn có thêm cả chip đồ họa tích hợp, các loại bộ nhớ cache và nhiều linh kiện khác nữa. Nhưng về cơ bản thì cách hoạt động của nhân CPU là không thay đổi từ xưa giờ. Như hình bên dưới là sơ đồ của một CPU Intel, nó có 4 nhân, có GPU tích hợp, và có bộ nhớ cache L3 chia sẻ giữa các nhân, và các controller để điều khiển bộ nhớ, màn hình này kia.
CPU thực thi các lệnh như thế nào?
Đa số máy tính hiện nay chỉ có thể tính 1 phép tính một lúc, có điều nó làm điều đó cực nhanh. Giống như khi bạn đang tính 1+1 thì bạn không có đủ năng lực để nghĩ xem 4 x 4 bằng bao nhiêu, bạn phải làm xong phép tính đầu tiên đã rồi mới làm tiếp. Máy tính làm giống vậy nhưng hơn bạn tỉ lần 😁
Mỗi một lệnh được đưa vào CPU thì được gọi là 1 instruction. Bạn click chuột vào icon trên màn hình thì thực chất rất nhiều instruction được dịch ra và chuyển xuống cho CPU xử lý, sau đó máy tính mới biết để mà chạy phần mềm tương ứng lên cho bạn xài. Phép cộng là 1 instruction, phép trừ cũng là 1 instruction, lấy dữ liệu từ ô địa chỉ X trong RAM cũng là 1 instruction.
Một bộ các instruction mà CPU hỗ trợ (có thể hiểu được) thì gọi là Instruction Set, và CPU máy tính của chúng ta dùng Instruction Set x86, còn CPU trên điện thoại thì có bộ lệnh riêng của ARM. Ngày xưa khi Apple dùng CPU riêng của họ (PowerPC) thì nó cũng có bộ lệnh riêng, không tương thích với x86 nên ngày xưa Windows không chạy được trên các máy Mac PowerPC là thế. Sau này khi Apple chuyển sang dùng chip Intel hỗ trợ x86 thì mới có vụ chạy được Windows.
Trước khi 1 instruction được thực thi, dữ liệu để thực hiện và cách thực hiện sẽ phải được đưa vào bộ nhớ. Dữ liệu này có thể được lấy từ register, nếu register không có thì phải lấy từ cache của CPU, mà cache không có nữa thì phải vô RAM lấy. RAM không có nữa thì phải đi xuống SSD hay HDD lấy. Cứ qua 1 bước như vậy thì tốc độ lại chậm đi vì phải mất thời gian đi tìm, chưa kể tốc độ truy xuất của loại bộ nhớ cũng giảm dần theo từng bước.
Quy trình thực thi sẽ như thế này:
Trong đó bước Execute và Store thì thường được xếp chung vào bước thực thi, và thời gian thực thi này gọi là Execution Time (E-Time).
Mỗi con CPU có một bộ tạo dao động, nó sẽ tạo ra các xung nhịp với tốc độ cố định để đồng bộ tất cả các thành phần của CPU khi chúng thực thi các instruction. Mỗi lần thực thi sẽ đi qua ít nhất 1 quy trình như trên, gọi là 1 cycle. Cycle là đơn vị nhỏ nhất cho việc tính toán của CPU.
Theo như thông tin trên thì 1 cycle chỉ tính toán được 1 instruction (scalar), nhưng các vi xử lý ngày nay có thể tính toán được nhiều instruction trong một cycle nhờ việc ứng dụng cách thức song song trong mỗi nhân CPU (cách thức này gọi là superscalar). Con chip x86 đầu tiên thuộc dạng superscalar là Pentium P5, theo Wikipedia. Ngày nay các CPU Core i của Intel, Ryzen của AMD và đa số mọi CPU dùng cho thiết bị tiêu dùng đều là superscalar. Chỉ những CPU cực kì tiết kiệm điện, CPU trong các thiết bị nhúng… mới còn dùng dạng scalar.
Để biết CPU có mạnh hay không, người ta thường so sánh số instruction có thể được thực thi. Đơn vị này gọi là Instruction-Per-Cycle (IPC). Với cùng xung nhịp, một con CPU thực thi được 8 IPC thì yếu hơn so với con CPU khác chạy được 8,5 IPC. IPC cũng là cái mà AMD đang tích cực cải thiện cho kiến trúc Zen của mình (dùng trong các chip Ryzen, anh em xem thêm trong bài Giải thích vì sao AMD dạo này hot thế).
Bất kì thứ gì bạn làm trên máy tính đều được chuyển thành các instructions, và bạn sẽ không bao giờ có thể thấy được quy trình như trên vì CPU làm chuyện đó rất rất nhanh. Chưa kể hiện nay các CPU còn có nhiều nhân, nhiều luồng nên tụi nó có thể làm chuyện này nhanh hơn nữa.
Xong, tới đây bạn hiểu được cơ bản về cách CPU chạy và tính toán rồi nhé, chúc anh em vui.
Nguồn: Tinhte.vn