Bài đăng nổi bật

Redo log, undo log và binary log

Đây là ba loại log mà bạn đã từng nghe khi tiếp cận mysql. Trong các cơ sở dữ liệu quan hệ (RDBMS) khác, cũng sẽ có các thành phần có vai tr...

Thứ Năm, 14 tháng 1, 2016

x86, x64 nghĩa là gì ?

Đây là thông số rất quen thuộc. Trong phần lớn các gói phần mềm bạn tải về sẽ thường có ký hiệu x86 hoặc x64. Một số bản phân phối windows cũng được đánh dấu x86 hoặc x64. Vậy thì ý nghĩa của các ký hiệu này là gì ?

x86 và x64

x86 là tên một tập lệnh chỉ dẫn của CPU. Tập lệnh này được sử dụng lần đầu cho các dòng CPU 8086, các CPU kế nhiệm 8086 cũng vẫn giữ đuôi 86. Đây là lý do lịch sử khiến tập lệnh này có tên là x86. Tập lệnh này áp dụng cho các CPU 32 bits. Đối thủ của x86 là ARMv7.

x64 cũng là phiên bản 64 bits của tập lệnh x86 kể trên. Tập lệnh này còn có nhiều tên gọi khác nhau như x86_64 trong apple , amd64 trong các hệ thống nhân linux, ia-32e hay EMT64 trong intel. Đối thủ của x64 là ARMv8.

Vậy một câu hỏi đào sâu nữa lại xuất hiện 32 bits và 64 bits là gì ?

Thực tế, 32 bits hay 64 bits có thể được dùng để áp dụng cho CPU hoặc phần mềm.

CPU 32 bits và CPU 64 bits

CPU 32 bits hay 64 bits nghĩa là CPU đó được thiết kế với độ dài thanh ghi là 32 bits hay 64 bits. Để hiểu rõ hơn, chúng ta sẽ xem xét sơ lược kiến trúc CPU.

Kiến trúc CPU

Dưới đây là một kiến trúc CPU đã được giản lược:


Trên hình vẽ, chúng ta sẽ thấy processor chính là CPU có ba khối cơ bản chính: Control unit sẽ phát ra các tín hiệu read hoặc write đến memory nhằm thông báo cho memory biết CPU muốn lấy data hay ghi data. ALU là khối tính toán cơ bản. ALU sẽ thực hiện các phép tính số học, logic... Register dùng để lưu trữ data phép toán phục vụ cho ALU. Register có nhiều loại, có loại để lưu data, có loại để lưu địa chỉ, có loại dùng để lưu cả data và địa chỉ. Chính vì vậy, trên hình vẽ, bạn thấy từ register có đường address bus và data bus chạy đến memory. Con đường này có thể hai chiều với data bus (Khi đọc thì data từ memory chuyển vào register của CPU. Khi ghi thì data từ register sẽ chuyển vào memory) hoặc một chiều với address bus. CPU sẽ ra lệnh cho memory gửi data có địa chỉ mà CPU đó muốn qua address bus hoặc thông báo cho memory chuẩn bị sẵn một ô nhớ có địa chỉ xác định mà CPU chỉ định để ghi data vào đó. Register là một thanh nhớ nằm trong CPU, có tốc độ xử lý nhanh gần hoặc bằng CPU. Chính vì không có đồng bộ về tốc độ giữa các thành phần lưu trữ register với memory với disk nên sẽ có một số khoảng thời gian chết khi mà memory bận không đáp ứng kịp đòi hỏi của CPU. Đây là một sự lãng phí. Hạn chế về công nghệ không cho phép các thiết bị lưu trữ ngoài CPU đạt được tốc độ nhanh bằng CPU nên các kỹ sư đã phải khắc phục bằng cách bổ sung cho CPU các bộ nhớ cache. Bộ nhớ cache sẽ lưu các data thường được sử dụng, CPU sẽ thay vì phải đợi memory cung cấp sẽ tận dụng data trong cache trước.

Ý nghĩa của CPU với hoạt động máy tính

Đây là thành phần cực kỳ quan trọng. Bản chất mọi thao tác trên máy tính đều là một chuỗi tính toán được thực hiện bởi CPU. Bất cứ khi nào bạn hiển thị một hình ảnh, máy tính đều cần thực hiện vô vàn các tính toán để xác định tọa độ các điểm ảnh, vị trí kích thước ảnh, sắc độ ảnh. Bất cứ khi nào bạn gõ một phím, phím đó cũng được chuyển dịch chuỗi nhị phân phức tạp để tính toán hiển thị ra chữ cái. Có thể thấy mọi hoạt động của máy tính đều cần năng lực tính toán của CPU.

Phần mềm 32 bits và 64 bits

Phần mềm 32 bits hay 64 bits là phần mềm sử dụng tập lệnh chỉ dẫn x86 hay x64 lên CPU. Hệ điều hành cũng là một phần mềm. Bạn có thể thấy các phiên bản Ubuntu 32 bits hoặc 64 bits được release. Tất nhiên CPU phải có kiến trúc 64 bits thì bạn mới cài được hệ điều hành x64. Các application khi cài đặt lên hệ điều hành cũng phải có kiến trúc tương ứng. Một application 32 bits vẫn có thể chạy trong hệ điều hành 64 bits nhưng application 64 bits thì không thể chạy trong một hệ điều hành 32 bits. (Tôi sẽ giải thích lý do trong đoạn viết về bất lợi khi gia tăng độ dài thanh ghi từ 32 bits lên 64 bits)

Để xem kiến trúc CPU cũng như hệ điều hành trong Ubuntu bạn dùng:
lscpu
Architecture:          i686 -> Hệ điều hành 32 bits
CPU op-mode(s):        32-bit, 64-bit -> CPU hỗ trợ cả 32 bits và 64 bits, suy ra CPU có độ dài register phải là 64 bits.

Gia tăng độ dài register từ 32 bits lên 64 bits sẽ có được một số lợi ích như sau
  • Độ dài register lớn hơn cho phép lưu được nhiều data hơn nên thực hiện các phép toán số lớn nhanh hơn. Ví dụ một thanh ghi có độ dài 1, thì chỉ lưu được 1 số nên với phép toán 12 + 34 nó sẽ phải thực hiện hai phép toán 1+2 và 3+4 sau đó ghép kết quả, nhưng với thanh ghi có độ dài 2 thì nó sẽ chỉ cần một phép toán trực tiếp là xong. Số phép toán sẽ giảm đi nên tăng tốc độ thực hiện thuật toán lên.
  • Như đã nói, register cũng dùng để lưu địa chỉ memory. Với register 32 bits thì CPU sẽ chỉ truy xuất được dải gồm 2^32 địa chỉ, tương đương khoảng 4GB. Vô hình chung, một máy tính có CPU 32 bits đã hạn chế lượng memory mà máy tính này có thể sử dụng. Nhưng với register 64 bits thì CPU sẽ không còn hạn chế này vì 2^64 là một con số cực kỳ lớn.
  • Đồng thời với tăng độ dài register, số register và số chỉ dẫn trong tập lệnh cũng tăng theo. Có nhiều register cho phép CPU có thể lưu lại kết quả của phép toán trước đó để phục vụ cho phép toán sau đó. Ví dụ CPU có hai register, sau khi tính toán xong, CPU sẽ xóa data một register để lưu kết quả phép toán nhưng khi CPU có ba register, CPU sẽ không cần phải thực hiện hành động thừa thãi là xóa nữa. Số thao tác giảm đi nên tăng tốc thực hiện thuật toán.
  • Số chỉ dẫn tăng lên cho phép CPU thực hiện các phép toán phức tạp hơn. Ví dụ trước kia để thực hiện 2*3 thì CPU sẽ thực hiện 2+2+2 nhưng giờ CPU có thể thực hiện trực tiếp phép toán CPU do đã được bổ sung chỉ dẫn trong tập lệnh.

Vậy bất lợi khi gia tăng độ dài register từ 32 bits lên 64 bits là gì ?
  • Thay đổi lại kiến trúc CPU. Viết lại tập lệnh chỉ dẫn để tận dụng tối đa độ dài 64 bits.
  • Các phần mềm 32 bits có thể hoạt động tốt trên CPU 64 bits tuy không tận dụng được hiệu năng nhưng các phần mềm 64 bits lại không thể hoạt động trên CPU 32 bits. Do tập lệnh chỉ dẫn sử dụng khác biệt. Quay lại ví dụ 12+34, register có độ dài là 2 thì vẫn có thể chấp nhận CPU thực hiện 2 phép toán 1+3 và 2+4 nhưng register có độ dài là 1 thì không thể chấp nhận CPU thực hiện chỉ 1 phép toán 12+34.
  • Hiện tại vẫn có một số lượng lớn các máy tính có CPU 32 bits đang được sử dụng. Việc chuyển đổi không thể diễn ra ngay lập tức. Trong quãng thời gian này, developer muốn tận dụng lợi thế 64 bits phải viết thêm phiên bản application dành riêng cho kiến trúc này. 

Trên các dòng CPU hiện nay, thông tin về bộ chỉ thị CPU sử dụng và độ dài thanh ghi của CPU thường được biểu hiển bởi thông số Instruction Set.

Ví dụ:
http://ark.intel.com/products/75794/Intel-Xeon-Processor-E5-4607-v2-15M-Cache-2_60-GHz

có Instruction Set: 64 bits chứng tỏ đây là CPU có thanh ghi 64 bits và hỗ trợ bộ chỉ thị x64.

Tham khảo

Bài viết được dựa chủ yếu trên tinh thần của bài:
 https://tinhte.vn/threads/vi-xu-li-64-bit-la-gi-va-no-giup-ich-nhu-the-nao-cho-cac-thiet-bi-dien-toan.2173158/

Không có nhận xét nào:

Đăng nhận xét