Kiến trúc máy tính (tiếng Anh computer architecture)có thể được định nghĩa là việc lựa chọn và kết nối các thành phần phần cứng một cách khoa học và nghệ thuật, nhằm tạo nên các máy tính đáp ứng được yêu cầu về chức năng, hiệu suất và giá thành. Định nghĩa một cách chi tiết hơn thì kiến trúc máy tính liên quan đến thiết kế kiến trúc tập lệnh (instruction set architecture - ISA), thiết kế vi kiến trúc bộ xử lý (microarchitecture), thiết kế ở mức luận lý (logic design) và hiện thực (implementation).
Thiết kế kiến trúc một máy tính liên quan đến ba công việc cụ thể sau:
- Thiết kế kiến trúc tập lệnh của máy tính.
- Thiết kế vi kiến trúc bộ xử lý.
- Thiết kế hệ thống máy tính (system design).
Kiến trúc tập lệnh[sửa]
Kiến trúc tập lệnh là một tập hợp các lệnh ở dạng mã máy (machine code) mà bộ xử lý có thể đọc, hiểu và thực thi các tác vụ được yêu cầu trong lệnh đó. Kiến trúc tập lệnh được xem như một lớp trung gian giao tiếp giữa phần mềm và phần cứng; là nơi phân chia giữa khoa học máy tính và kỹ thuật máy tính. Kiến trúc tập lệnh đóng vai trò rất quan trọng trong việc thiết kế, hiện thực bộ xử lý bên dưới và thiết kế, hiện thực các phần mềm hoạt động trên nền bộ xử lý. Có hai hướng thiết kế kiến trúc tập lệnh là kiến trúc CISC (Complex Instruction Set Computer) và RISC (Reduced Instruction Set Computer).
Cùng với sự phát triển của phần cứng máy tính, một trong những sự phát triển khác dễ dàng được nhận thấy là các ngôn ngữ lập trình. Ngày càng có nhiều các ngôn ngữ lập trình mạnh và phức tạp được phát triển. Các ngôn ngữ lập trình này giúp cho các lập trình viên phát triển ứng dụng dễ dàng hơn, chính xác hơn và có thể đi sâu vào chi tiết hơn. Tuy nhiên, điều này làm nảy sinh một khoảng cách ngữ nghĩa (semantic gap) giữa những tác vụ được cung cấp bởi ngôn ngữ lập trình cấp cao và những tác vụ được cung cấp bởi kiến trúc của một máy tính. Biểu hiện rõ nhất của khoảng cách này là sự thực thi không hiệu quả của các ngôn ngữ cấp cao, kích thước chương trình tăng, độ phức tạp của các trình biên dịch cũng tăng theo. Do vậy, nhiều kỹ sư thiết kế phần cứng có khuynh hướng giải quyết vấn đề này bằng cách xây dựng những kiến trúc máy tính hỗ trợ một số lượng lớn các loại lệnh phức tạp với nhiều phương pháp tính toán địa chỉ khác nhau, và nhiều lệnh của ngôn ngữ cấp cao sẽ được hiện thực hoàn toàn bằng phần cứng. Mục tiêu chính của hướng tiếp cận này là:
- Làm giảm độ phức tạp của trình biên dịch;
- Cải tiến thời gian thực thi vì các tác vụ phức tạp có thể được hiện thực bằng phần cứng;
- Hoàn thành tác vụ với ít số lượng lệnh hợp ngữ.
Đây chính là hướng tiếp cận theo kiến trúc CISC. Một kiến trúc tập lệnh kiểu CISC thông thường có khoảng từ 120 đến 350 lệnh sử dụng nhiều loại định dạng lệnh và dữ liệu khác nhau. Tuy nhiên, số lượng các thanh ghi trong các kiến trúc CISC thường khá ít khi chỉ có khoảng từ 8 đến 24 thanh ghi đa dụng (general-purpose registers - GPRs). Các kiến trúc CISC thực hiện phần lớn các tác vụ tham khảo bộ nhớ thông qua rất nhiều phương pháp tính toán địa chỉ khác nhau.
Tuy vậy, các kiến trúc CISC thường không đạt hiệu suất sử dụng phần cứng cao cũng như các mục tiêu của kiến trúc CISC nêu trên thường không đạt được. Các nhà khoa học máy tính nhận thấy rằng, chỉ khoảng 25% các lệnh phức tạp được sử dụng ở mức 95% thời gian; tức là có đến 75% phần cứng hỗ trợ các lệnh phức tạp không thường được sử dụng. Do đó, tài nguyên phần cứng thường bị lãng phí trong kiến trúc CISC. Mục tiêu giảm độ phức tạp của các trình biên dịch thường cũng khó đạt được do các trình biên dịch thường khó khăn trong việc tìm kiếm các lệnh phức tạp trong một ứng dụng nào đó sao cho hoàn toàn phù hợp với kiến trúc phần cứng đã định sẵn. Ngoài ra, việc định thời và đặc biệt là tổ chức thực thi các lệnh theo cơ chế xử lý ống (pipeline) là khá khó khăn cho các lệnh phức tạp. Ngày nay, khi mà giá thành các bộ nhớ ngày càng giảm thì mục tiêu giảm số lượng lệnh hợp ngữ cũng không phải là quá quan trong.
Các kiến trúc sư phần cứng máy tính do đó chuyển sang hướng tiếp cận theo kiến trúc RISC. Mặc dù được định nghĩa và được thiết kế khác nhau giữa các nhóm nghiên cứu cũng như các công ty sản xuất bộ xử lý, đặc điểm chung và nổi bật của các bộ xử lý được thiết kế theo kiến trúc RISC là:
- Bao gồm nhiều thanh ghi đa dụng;
- Tập lệnh đơn giản và giới hạn;
- Tập trung vào cơ chế xử lý ống.
Một bộ xử lý được thiết kế theo kiến trúc RISC thường bao gồm ít hơn 100 lệnh với kích thước cố định (thường là 32 bit). Các lệnh thường hoạt động dựa trên các thanh ghi trong khi bộ nhớ được truy xuất chỉ thông qua các lệnh đọc/ghi (load/store). Hầu hết các lệnh trong kiến trúc RISC được hoàn thành trong một chu kỳ xung nhịp, do đó việc xử lý theo cơ chế ống là khả thi. Các đặc tính này dẫn đến kết quả là bộ xử lý có thể hoạt động ở tần số xung nhịp cao hơn và CPI (cycles per instruction) thấp hơn, do đó hiệu suất đạt được sẽ cao hơn. Ngoài ra, tài nguyên phần cứng cần thiết cho bộ xử lý kiến trúc RISC cũng thường thấp hơn so với kiến trúc CISC do phần cứng chỉ hỗ trợ những lệnh đơn giản.
Thiết kế vi kiến trúc[sửa]
Thiết kế vi kiến trúc là quá trình xây dựng nên một bộ xử lý cụ thể dựa trên một kiến trúc tập lệnh sao cho các lệnh trong kiến trúc tập lệnh có thể được xử lý tự động bởi bộ xử lý. Thiết kế vi kiến trúc một bộ xử lý là một quá trình phức tạp đòi hỏi nhiều công sức. Mục tiêu của thiết kế vi kiến trúc không những phải bảo đảm rằng tất cả các lệnh đã được thiết kế trong kiến trúc tập lệnh phải được thực thi chính xác mà còn là việc tối ưu sự thực thi sao cho đạt được hiệu suất cao nhất, ít tốn tài nguyên phần cứng và năng lượng tiêu thụ ít nhất.
Việc thực thi các lệnh trong các bộ xử lý thường trải qua năm bước là: đọc lệnh (instruction fetch – IF), giải mã lệnh (instruction decode – ID), thực thi (execute – EX), truy xuất bộ nhớ dữ liệu (memory access – MEM) và cập nhật kết quả (write back – WB). Quá trình thiết kế vi kiến trúc của bộ xử lý thường cũng sẽ đi theo các giai đoạn này. Ở mỗi giai đoạn sẽ cần những khối chức năng (functional units) khác nhau như bộ nhớ chương trình, tập thanh ghi, khối luận lý số học,… Các khối này phải được lựa chọn (chức năng, kích thước các ngõ vào ra,…) và kết nối với nhau một cách khoa học và nghệ thuật nhằm đảm bảo các yêu cầu vừa nêu.
Thông thường các bộ xử lý được thiết kế để hoạt động dựa trên mô hình xử lý ống (pipeline) nhằm làm tăng hiệu suất xử lý. Hình 2 minh họa một kiến trúc bộ xử lý MIPS theo mô hình xử lý ống năm giai đoạn.
Mô hình xử lý ống (pipeline) của bộ xử lý MIPS 5 giai đoạn
Thiết kế hệ thống máy tính[sửa]
Thiết kế hệ thống máy tính là công việc xây dựng một hệ thống máy chính hoàn chỉnh bao gồm thiết kế các bộ nhớ phân cấp, thiết kế các thiết bị ngoại vi… Trong đó, thiết kế bộ nhớ phân cấp chủ yếu tập trung vào tối ưu hoá việc tổ chức bộ nhớ đệm theo các kỹ thuật khác nhau như: ánh xạ trực tiếp (direct mapped), ánh xạ kết hợp (n-way set associative) và ánh xạ toàn phần (fully associative). Bộ nhớ đệm trong một hệ thống bộ nhớ phân cấp của một hệ thống máy tính có vai trò rất quan trọng trong hoạt động của bộ xử lý nói riêng và của cả hệ thống máy tính nói chung. Tổ chức bộ nhớ phân cấp ảnh hưởng trực tiếp đến hiệu suất của máy tính bởi vì mỗi truy xuất ở cấp bộ nhớ thấp hơn sẽ tốn rất nhiều thời gian (có thể gấp hang trăm chu kỳ so với truy xuất ở cấp cao hơn). Việc lựa chọn các thiết bị ngoại vi cũng sẽ ảnh hưởng lớn đến hiệu suất của cả hệ thống máy tính vì thời gian đáp ứng ngoại vi ảnh hưởng đến thời gian xử lý ứng dụng của bộ xử lý.
Tài liệu tham khảo[sửa]
- Phạm Quốc Cường, Kiến trúc Máy tính, Nhà xuất bản Đại học Quốc gia TPHCM, 2017
- John L. Hennessy and David A. Patterson; Computer Architecture: A Quantitative Approach, Morgan Kaufmann Publishers, 2012
- Michel Dubois, Murali Annavaram, and Per Stenstroem, Parallel Computer Organization and Design, Cambrige University Press, 2014