Thành viên:1stpangu/Endian

Bách khoa toàn thư mở Wikipedia

Endian đề cập đến trật tự của các byte được biểu diễn trong bộ nhớ máy tính hay được truyền dưới dạng số. Endian là chủ đề được quan tâm trong khoa học máy tính do việc sử dụng hai định dạng phổ biến không tương thích và xung đột với nhau: một từ nhớ (word) có thể được biểu diễn theo định dạng big-endian hoặc little-endian phụ thuộc vào việc sắp xếp các bit hoặc byte hoặc các thành phần khác bắt đầu từ đầu lớn (bit quan trọng nhất) hoặc đầu nhỏ (bit ít quan trọng nhất).

Trong định dạng big-endian, khi xảy ra việc đánh địa chỉ bộ nhớ hoặc gửi/lưu từ nhớ theo từng byte, byte quan trọng nhất - byte chứa bit quan trọng nhất - được lưu đầu tiên (ở địa chỉ thấp nhất) hoặc gửi trước tiên, sau đó các byte tiếp theo được lưu hoặc gửi theo thứ tự độ quan trọng giảm dần và byte ít quan trọng nhất - chứa bit quan trọng nhất - được lưu cuối cùng (ở địa chỉ cao nhất) hoặc gửi cuối cùng.

Định dạng little-endian đảo ngược thứ tự trên: việc đánh địa chỉ bộ nhớ hoặc gửi/lưu thực hiện từ byte ít quan trọng nhất (địa chỉ thấp nhất) đến cuối là byte quan trọng nhất (địa chỉ cao nhất). Hầu hết hệ thống mày tính đều chọn một trong hai định dạng trên cho tất cả dữ liệu của nó; việc sử dụng định dạng gốc của hệ thống là tự động. Nhưng việc đọc hoặc nhận dữ liệu được truyền từ một hệ thống máy tính khác thường yêu cầu xử lý và biến đổi dữ liệu giữa các hệ thống ưu tiên định dạng gốc sang định dạng còn lại.

Thứ tự của các bit trong một byte hoặc từ nhớ cũng có thể có endian (thảo luận sau); tuy nhiên, một byte thường được xử lý như giá trị số học hoặc ký tự đơn, do đó thứ tự bit có thể bị lược bỏ.

Cả big và little endian đều được sử dụng rộng rãi trong điện tử kỹ thuật số. Việc lựa chọn endian cho thiết kế mới thường là tùy ý, nhưng các bản tu chỉnh công nghệ và cập nhật sau đó kéo dài endian hiện có và nhiều thuộc tính thiết kế khác để duy trì tính tương thích ngược. Ví dụ, hệ thống máy tính lớn (mainframe) kiến trúc z của IBM và dòng Motorola 68000 sử dụng big-endian trong khi bộ vi xử lý Intel x86 sử dụng little-endian. Các nhà thiết kế của System/360, dòng tổ tiên của kiến trúc z, đã quyết định endian trong những năm 1960; các nhà thiết kế của Motorola 68000Intel 8086, các kiến trúc đầu tiên trong các dòng 68000 và x86, đã chọn endian của chúng trong những năm 1970.

Big-endian là định dạng phổ biến nhất trong mạng dữ liệu; các trường trong cá giao thức của bộ giao thức Internet, chẳng hạn như IPv4, IPv6, TCPUDP, được truyền theo thứ tự big-endian. Vì lý do này, thứ tự byte big-endian cũng được gọi là thứ tự byte trên mạng. Việc lưu định dạng little-endian rất phổ biến trong các bộ vi xử lý, một phần do ảnh hưởng đáng kể trong việc thiết kế vi xử lý của Tập đoàn Intel. Hình thức hỗn hợp cũng tồn tại; ví dụ trong số chấm động VAX, thứ tự các byte trong một từ 16 bit khác với thứ tự của các từ 16 bit trong một từ 32 bit. Các trường hợp như vậy đôi khi được gọi là mixed-endian hoặc middle-endian. Ngoài ra còn có các một số bộ vi xử lý bi-endian có khả năng hoạt động ở cả hai chế độ big hoặc little endian.

Minh họa[sửa | sửa mã nguồn]

Big-Endian
Big-Endian
Little-Endian
Little-Endian

Hai minh họa sau đây giả định một quy ước đọc và viết bình thường là từ trái sang phải, trong đó chữ số hoặc ký tự bên trái nhất tương ứng với dữ liệu được "gửi" (hoặc "nhận") đầu tiên hoặc ở địa chỉ thấp nhất trong bộ nhớ, và chữ số hoặc ký tự bên phải nhất tương ứng với dữ liệu được gửi hoặc nhận cuối cùng hoặc đang ở địa chỉ cao nhất trong bộ nhớ.

Có thể biếu diễn big-endian bằng cách viết một số thập phân ví dụ như một trăm hai mươi ba trên giấy theo khái niệm vị trí thông dụng được người đọc số hiểu: 123. Các chữ số được viết bắt đầu từ trái sang phải, với chữ số quan trọng nhất là 1 được viết trước. Điều này tương tự việc trước nhất sử dụng địa chỉ bộ nhớ thấp nhất. Đây là một ví dụ về một quy ước big-endian trong cuộc sống hằng ngày.

Dạng viết little-endian của cùng một số, một trăm hai mươi ba, sẽ đặt chữ số hàng trăm 1 ở vị trí bên phải nhất: 321. Một người tuân theo thứ tự giá trị big-endian một cách cứng nhắc, những người không nhận thức được thứ tự đặc biệt này, sẽ hiểu thành một số khác: ba trăm hai mươi mốt. Endian trong tính toán là tương tự nhưng thường được áp dụng cho thứ tự các byte mà không phải là thứ tự của các chữ số.

Các hình minh họa ở bên phải, trong đó a là địa chỉ bộ nhớ, hiển thị dạng lưu trữ big và little-endian trong bộ nhớ.

Nguồn gốc từ ngữ[sửa | sửa mã nguồn]

Danny Cohen giới thiệu các khái niệm Little-Endian và Big-Endian cho thứ tự byte trong một bài báo từ năm 1980.[1][2] Trong quá trình kiểm tra kỹ thuật và chính trij của vấn đề thứ tự byte, danh từ "endian" được lấy từ lời châm biến của Jonathan Swift năm 1726 trong cuốn Gulliver's Travels, trong đó cuộc nội chiến nổ ra do tranh cãi về việc đầu lớn hay đầu nhỏ của quả trứng luộc là đầu để mở ra hợp lý nhất, điều này tương tự với việc đếm từ đầu có chứa bit quan trọng nhất hay là từ đầu có bit ít quan trọng nhất.[3][4]

Phần cứng[sửa | sửa mã nguồn]

Lịch sử[sửa | sửa mã nguồn]

Các kiến trúc hiện tại[sửa | sửa mã nguồn]

Bi-endian[sửa | sửa mã nguồn]

Số chấm động[sửa | sửa mã nguồn]

Tối ưu hóa[sửa | sửa mã nguồn]

Trật tự tính toán[sửa | sửa mã nguồn]

Ánh xạ giá trị nhị phân nhiều byte vào bộ nhớ[sửa | sửa mã nguồn]

Ví dụ[sửa | sửa mã nguồn]

Phần này cung cấp các bố cục ví dụ về một số 32 bit 0A0B0C0Dh trong các biến thể endian phổ biến nhất. Có một số bộ xử lý kỹ thuật số sử dụng các định dạng khác. Điều đó đúng với các hệ thống nhúng điển hình cũng như cho các CPU máy tính nói chung. Hầu hết các bộ xử lý được sử dụng với vai trò không phải CPU trong các máy tính điển hình (trong thiết bị lưu trữ, thiết bị ngoại vi, vv) cũng sử dụng một trong hai định dạng cơ bản này, mặc dù không phải lúc nào cũng 32 bit.

Các ví dụ sau tham chiếu đến việc lưu trữ giá trị trong bộ nhớ máy tính. Đồng thời sử dụng ký hiệu thập lục phân.

Big-endian[sửa | sửa mã nguồn]

Phần tử nguyên kích thước 8-bit[sửa | sửa mã nguồn]

địa chỉ tăng từng byte (hoặc octet)
địa chỉ tăng  →
0Ah 0Bh 0Ch 0Dh

Giá trị của byte quan trọng nhất (MSB), 0Ah, nằm ở địa chỉ thấp nhất. Các byte khác theo thứ tự giảm dần độ quan trọng. Điều này giống như đọc từ trái sang phải trong hệ thập lục phân.

Phần tử nguyên kích thước 16-bit[sửa | sửa mã nguồn]

địa chỉ tăng  →
0A0Bh 0C0Dh

Phần tử nguyên quan trọng nhất lưu giá trị 0A0Bh theo sau là 0C0Dh.

Little-endian[sửa | sửa mã nguồn]

Phần tử nguyên kích thước 8-bit[sửa | sửa mã nguồn]

địa chỉ tăng từng byte (octet)
địa chỉ tăng  →
0Dh 0Ch 0Bh 0Ah

Giá trị của byte ít quan trọng nhất (LSB) 0Dh nằm ở địa chỉ thấp nhất. Các byte khác theo thứ tự độ quan trọng tăng dần. Điều này giống như đọc từ phải sang trái trong hệ thập lục phân.

Phần tử nguyên kích thước 16-bit[sửa | sửa mã nguồn]

địa chỉ tăng  →
0C0Dh 0A0Bh

Đơn vị 16 bit ít quan trọng nhất lưu giá trị 0C0Dh tiếp theo là 0A0Bh. Lưu ý rằng 0C0Dh0A0Bh đại diện cho số nguyên chứ không phải bố cục bit.[cần giải thích]

Sắp xếp theo địa chỉ byte[sửa | sửa mã nguồn]

Mạng[sửa | sửa mã nguồn]

Endian của bit[sửa | sửa mã nguồn]

Tham khảo[sửa | sửa mã nguồn]

  1. ^ Danny Cohen (1980-04-01). On Holy Wars and a Plea for Peace. IETF. IEN 137. http://www.ietf.org/rfc/ien/ien137.txt. "…which bit should travel first, the bit from the little end of the word, or the bit from the big end of the word? The followers of the former approach are called the Little-Endians, and the followers of the latter are called the Big-Endians."  Also published at IEEE Computer, October 1981 issue.
  2. ^ “Internet Hall of Fame Pioneer”. Internet Hall of Fame. The Internet Society.
  3. ^ Jonathan Swift (1726). Gulliver's Travels.
  4. ^ David Cary. “Endian FAQ”. Truy cập ngày 11 tháng 10 năm 2010.

Đọc thêm[sửa | sửa mã nguồn]

Liên kết ngoài[sửa | sửa mã nguồn]

Bài viết này dựa trên nguồn lấy từ Từ điển trực tuyến miễn phí về máy tính trước ngày 1 tháng 11 năm 2008 và được hợp nhất theo các điều khoản "cấp lại giấy phép" của GFDL, phiên bản 1.3 hoặc mới hơn.

[[Thể loại:Bộ nhớ máy tính]] [[Thể loại:Truyền dữ liệu]] [[Thể loại:Ẩn dụ]]