Почему в Килобайте не 1000, а 1024 байта

368 прочитали

Хотя приставка греческого происхождения Кило- означает кратность в 1000 или 10^3 раз данной единицы к основное, то есть данная единица содержит 1000 основных единиц. Например, в 1 килограмме 1000 грамм, 1 километре 1000 метров и т.п. Почему же тогда в 1 килобайте содержится 1024 байт вместо 1000 байт. Для ответа на этот вопрос надо вспомнить, что в современном компьютере не только счет, но и адресация ячеек памяти осуществляется в двоичной системе исчисления.

В современных компьютерах память (оперативная и постоянная) представляет массив ячеек из 8 битов, каждый может иметь два состояния: либо один либо 0.

В современных операционных системах используется сплошная адресация плоская модель памяти the flat memory model, в которой адресация ячеек памяти имеет сплошную адресацию, например, при 32 битной адресной шины младший адрес будет нулевой, а старший будет иметь адрес 2^32-1, что в десятичной будет 4 294 967 295 или в шестнадцатеричном 0xFFFF FFFF. Если все адреса будут соответствовать ячейкам оперативной памяти, то ее объем будет 4 Гб. Именно такой объем оперативной памяти выделяется каждому процессу (в том числе и запущенной вами любой программы)

Теперь, давайте вспомним что число 1024 мы получим, если два возведем в десятую степень, то есть 2^10=1024. А это значит, что в двоичной системе оно запишется как 10000000000 – единица с дестью нулями - или в шестнадцатеричной 0x0400. То есть если в килобайте 1024 байт, адрес нового килобайта будет кратным 1024 байт и сколько килобайт легко подсчитать, сдвинув адрес ячейки на 10 двоичных разрядов.

Теперь посмотрим, что было бы, если в килобайте было бы 1000 байт, как это требует метрическая система. Тогда адрес первой ячейки второго килобайта был бы в двоичной системе 11 1110 1000 или в шестнадцатеричной 0x3E8. Цифра не круглая, как в двоичной, так в шестнадцатеричной системах исчислений, что создает определенные сложности, которые можно было преодолеть либо «выводом из строя» последних 24-х ячеек памяти в каждом килобайте, либо разработкой компьютера, работающего в десятеричной, или хотя бы в пятеричной системе исчисления.

В первом случае надо было при достижении адреса 0x3E8, записывать данные не в эту ячейку, а прибавлять к адресу 24 в десятеричной системе исчисления или 0x18 в шестнадцатеричной. Что согласитесь, не совсем удобно. Если б даже он был реализован, то 2,4% адресного пространства никогда не использовалось бы, что нельзя было бы назвать оптимальным использованием адресного пространства.

Второй способ вряд ли будет реализован в ближайшее время, так как по имеющимся сведеньям у автора разработка таких компьютерных систем сейчас не ведется из-за отсутствия для них элементарной электронной базы.

Таким образом, чтобы обеспечить относительно простую сквозную адресации на сегодняшний день существует единственный способ обеспечить оптимальную сквозную адресацию, при которой границы двух блоков памяти объемов 1 Кб был бы естественный и не создавал бы каких-то дополнительных проблем – это прировнять 1 Кб не к 1000 байт, а к 1024 байта.