1 kilobyte = 1024 hay 1000 byte?

31/12/2022 random

#Mở đầu

Thời đi học chắc ai cũng được dạy là 1024byte = 1KB, 1024KB = 1MB, 1024MB = 1GB… cứ như thế mỗi đơn vị lớn gấp 1024 lần đơn vị nhỏ liền kề. Nhưng đã bao giờ bạn bắt gặp ở đâu đó tỉ lệ quy đổi là 1000 thay vì 1024 chưa? meme_erm

Google convert Kilobyte sang Byte

#Tại sao?

Các đơn vị ban đầu là bit và byte. Tuy nhiên theo thời gian con số ngày càng lớn hơn, việc này yêu cầu cần có những đơn vị mới để việc biểu thị được ngắn gọn. Người ta tạo ra các đơn vị mới bằng cách thêm tiền tố vào bitbyte. Lịch sử của các tiền tố này khá là dài, nó bắt đầu từ những năm 1790. Tuy nhiên mình chỉ tìm hiểu qua một số lần tiêu biểu sau.

Năm 1964, IMB sử dụng ký tự K trong một tài liệu về IBM System/360, với 1K = 1024. Con số 1024 được lựa chọn vì máy tính làm việc với hệ nhị phân. Việc biểu thị và tính toán đối với máy tính sẽ có lợi khi làm việc với 100000000002 (102410) thay vì 11111010002 (100010). Trong tài liệu chỉ nhắc đến 1K = 1024, như một kiểu viết ngắn gọn giống ta hay gọi 1K là 1 nghìn, không liên quan đến đơn vị gì. Không rõ vì lý do gì mà sau đó người ta gọi 1K byte1 Kilobyte. Mình đọc được một bài viết có nói rằng cách viết 60K bytes đã khiến một số người hiểu nhầm chữ K là lấy từ tiền tố của Hệ thống đơn vị đo lường quốc tế (SI), nên đã đọc thành 60 Kilobytes. Thực tế thì kilo trong SI viết tắt là k thường.

1K = 1024

Các tiền tố M (mega), G (giga) từ đó cũng tiếp tục được lấy từ hệ thống SI, và vẫn sử dụng với tỉ lệ là 1024.

Tuy nhiên về sau cách dùng này dễ gây hiểu nhầm vì nhiều người đã quen thuộc với hệ thống tiền tố của SI (kilo = 103, mega = 106, giga = 109). Điều này dẫn đến năm 1998, IEC phải đưa ra một định nghĩa mới:

Specific units of IEC 60027-2 A.2 and ISO/IEC 80000:13-2008

Các đơn vị mới (chuẩn IEC) sẽ là kibibyte (KiB), mebibyte (MiB), gibibyte (GiB)…. Các đơn vị (chuẩn SI) kilobyte (kB), megabyte (MB), gigabyte (GB)… sử dụng tỉ lệ 1000.

Cho đến hiện tại phần nhiều sẽ sử dụng chuẩn SI cho dung lượng ổ cứng và băng thông mạng, còn dung lượng RAM sẽ sử dụng chuẩn IEC. Mặc dù vậy, người ta vẫn chưa hoàn toàn thống nhất cách sử dụng này. Mình có thử kiểm tra properties của file trên Windows 10 thì vẫn thấy sử dụng đơn vị cũ là 1KB = 1024 byte (theo một số nguồn thì thuộc chuẩn JEDEC). Trong khi đó Ubuntu đã sử dụng chuẩn SI cho file size, và chuẩn IEC cho RAM.

Ubuntu cũng viết hẳn một page về Units policy. Tuy nhiên không phải app nào cũng tuân theo. App System Monitor thì hiển thị RAM usage theo chuẩn SI, trong khi đó top hiển thị theo chuẩn IEC. Suy cho cùng thì nó cũng chỉ là giá trị hiển thị, ông hiển thị sao cho đúng đơn vị là được. cat_ok

#TL;DR

Mình xin tóm lược lại là với quy ước mới của IEC thì:

  • 1 kilobyte (kB) = 1000 byte
  • 1 kibibyte (KiB) = 1024 byte

Theo đơn vị cũ mà Windows vẫn còn sử dụng:

  • 1 kilobyte (KB) = 1024 byte

Cho nên tùy hoàn cảnh ta sẽ quy đổi cho đúng. meme_awkward


#Tài liệu tham khảo

  1. https://en.wikipedia.org/wiki/Binary_prefix
  2. https://en.wikipedia.org/wiki/Timeline_of_binary_prefixes
  3. https://wiki.ubuntu.com/UnitsPolicy