Linux использует двоичный или десятичный префикс?
Как Linux работает с модулями? Использует ли он десятичный или двоичный код?
Decimal Prefix
name base 10 exp base 1000 exp digits
kilo 10^3 1000^1 1000
mega 10^6 1000^2 1000000
giga 10^9 1000^3 1000000000
Binary Prefix
name base 2 exp base 1024 exp digits
kibi 2^10 1024^1 1024
mibi 2^20 1024^2 1048576
gibi 2^30 1024^3 1073741824
Теперь, если вы посмотрите на две команды, например, du
а также fdisk
Вы могли видеть разницу:
Вот пример для внешнего жесткого диска емкостью 1 ТБ:
$ du -sh
956G .
Во время бега fdisk
:
$ sudo fdisk -l
Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes
- Итак, какие приложения используют десятичную, а какие - двоичную?
- Как применить один метод ко всей системе и приложениям внутри?
1 ответ
В документации ядра не сказано ни слова о префиксах SI. Где префиксы появляются в документации, они появляются без глупых i
(k
, M
и т. д. вместо ki
, Mi
) (увидеть man 5 proc
, например). Так как инструменты GNU не получили поддержки префиксов SI до того момента, как Linux был выпущен, и Линус не похож на того, кто изменяет код ядра просто потому, что организация стандартов предпочитает разные префиксы, я предполагаю, что Linux, когда он использует эти префиксы, использует бинарные префиксы.
Однако man-страницы, разработанные как часть документации ядра, обсуждают это. Увидеть man 7 units
:
Thus, today, MB = 1000000B and MiB = 1048576B.
In the free software world programs are slowly being changed to con‐
form. When the Linux kernel boots and says
hda: 120064896 sectors (61473 MB) w/2048KiB Cache
the MB are megabytes and the KiB are kibibytes.
Википедия ссылается на это, а сообщения в списке рассылки ESR (он же Эрик С. Рэймонд, известный разработчик ядра) ( [1], [2], [3], [4]) показывают, что патч меняется kB
в KiB
и т. д. в одной части документации, была принята, но часть продолжала использовать более старые варианты. Таким образом, префиксы являются двоичными (или предназначены для двоичного использования).