C, PHP, VB, .NET

Дневникът на Филип Петров


* Килобайт, кибибайт и други мерни единици за информация

Публикувано на 07 октомври 2020 в раздел Информатика.

Случвало ли Ви се е да си купите твърд диск или мобилен телефон, които са рекламирани с един капацитет на паметта, но реално да ви излиза, че е по-малък? Вижте например следната картинка – това е твърд диск, който е рекламиран като „4TB“, но в операционната система Windows се показва като 3,63:

В тази статия ще обясня защо се получава така (TLDR: проблемът е в Microsoft, но не само).

Първо нека започнем с представката „кило“. В магазина например всеки ден мерим КИЛОграми. Вникнете в същината на самата дума: кило (1000) и грами (грама). Същото е и с КИЛОметър – 1000 метра. Когато кажете КИЛОнещо, все едно казвате „1000 от нещото“. Тоест може спокойно да приемете, че „кило“ означава „хиляда“. Това всъщност идва от системата SI (метричната система), при която част от основните единици (които ни засягат) са:

  • Кило – 1 000 (хиляда);
  • Мега – 1 000 000 (милион);
  • Гига – 1 000 000 000 (милиард);
  • Тера – 1 000 000 000 000 (трилион).

Естесвено има и други. При компютрите нещата са малко по-различни. Вече съм описвал подробно как се съхраняват цели числа, числа с плаваща запетая и други. Най-основното от гледна точка на тази статия обаче е, че компютрите работят с двоична бройна система – тоест с битове, всеки от който може да приема максимум две стойности: 0 и 1. И именно тук се корени проблемът – представете си, че имаме 10 бита от информация. Проста сметка показва, че с тях може да се съхранят 210 различни възможни стойности. Това не е „кило различни стойности“, защото не са 1000, а са 1024 на брой!

В миналото, когато компютърната техника е била в зората си, учените не са имали утвърдена мерна единица за бинарна (двоична) информация. Тогава обемите памет са били много малки и тази разлика е можело да се приеме за пренебрежима. Така през повече от половин век хората са казвали „килобайт“ за 1024 байта, „мегабайт“ за 1024 килобайта, и т.н. Всъщност това се е вкоренило много дълбоко в ежедневието на компютърните специалисти и изобилства във всякаква литература от миналия век. Операционната система Windows и до днес (версия 10 с обновяване 2004) описва единиците си за информация точно така.

В един момент обемите от информация започнаха да растат значително, а от там растеше и обемът на грешката (в байтове). Първи се усетиха производителите на твърди дискове, които решиха да се възползват. Започнаха да продават дискове с „мегабайти“ и „гигабайти“, но реалният обем не беше този, който един компютърен специалист очакваше, защото употребяваха метричната система. Не можеха да бъдат обвинявани за този маркетингов трик, защото дефакто нямаше утвърден стандарт и не са излъгали никой. И именно заради това изведнъж се оказа, че ни продават 4TB, а то всъщност в Windows ни излиза като 3,63TB – би трябвало да сме ядосани от този факт. Това течение на производителите на твърди дискове както се казва „повлече крак“ и започна да се пренася и към други носители на информация. За да е още по-конфузно, подобно нещо не се случи при оперативните памети (запазиха си двоичното броене), а за капак на всичко честотите на процесорите пък никога не са мерени бинарно, а само метрично (4Ghz винаги си е било четири милиарда херца). Изобщо към края на 90-те вече се виждаше, че започва да настъпва голямо объркване.

Именно заради това през 1998 г. IEC и други регулаторни органи се обединиха, за да въведат нови мерни единици, които да се употребяват като стандарт за мерене на бинарна информация. Така се създадоха следните префикси:

  • Киби – 210 = 1024
  • Меби – 220 = 1 048 576
  • Гиби – 230 = 1 073 741 824
  • Теби – 240 = 1 099 511 627 776

Старите названия пък беше прието от тогава нататък да се приемат по метричната система, т.е. кратни на 1000. Ако разликата между „килобайт“ и „кибибайт“ е едва 2,4%, с нарастване на обема тя се увеличава значително – между „терабайт“ и „тебибайт“ е близо до 10%.

За съжаление производителите на хардуер, а от там свързано с тях и разработчиците на най-популярната дотогава операционна система не прегърнаха идеята с огромна радост, защото тази прозрачност и честност към потребителите нарушаваше наложени техни традиции за мамене на масовия незнаещ какво се случва човек. Образователните системи също не се впуснаха да си осъвременят учебниците, а когато това най-накрая се случи, част от учителската гилдия започна да се възпротивява, защото вероятно се нарушаваше комфортът, който по-старите учители са си изградили с времето (разработени техни учебни материали, навици, рутина, нежелание за промяна). Именно затова и до днес масово хората говорят за „мегабайти“, а повечето от тях (тези извън средите на компютърните разработчици) дори не са чували за „мебибайти“.

За щастие обновените учебни програми по Информационни Технологии за 6 клас в България включват тази тема и се очаква (при съвестно подхождане от страна на учителите) новите поколения лека полека да добият тези нови знания. Подобна реформа се случва и в много други държави. Вярвам, че това в дългосрочен план ще спомогне историческата грешка да бъде изчистена. До тогава децата просто трябва да знаят, че в Windows се изписва KB, MB и TB, но всъщност се има предвид KiB, MiB и TiB. Кога Microsoft ще вмъкнат въпросното „i“ (или ще започнат да мерят метрично като Apple Macintosh) не е ясно, но почти всички други операционни системи отдавна станаха честни към потребителите си. Едва ли Windows скоро ще спре да бъде най-популярната ОС за персонален компютър, но нека поне бъдещите деца да знаят как да четат първоначално странно изглеждащите числа от следната картинка:

Но почакайте, има и още! Нагоре казах няколко думи за съкращенията, но не ги обясних. При големите е лесно и просто:

  • MB – мегабайт
  • MiB – мебибайт
  • GB – гигабайт
  • GiB – гибибайт
  • TB – терабайт
  • TiB – тебибайт

Ако обаче се върнем към „кило“ и „киби“, нещата започват да загрубяват още повече, защото ще видите три вариации – kB, KiB и KB. Какво се случва с тази главна и малка буква? Тук объркването е още по-голямо, защото в метричната система главното K всъщност означава „келвин“ (единица за температура) и поради това за „кило“ се употребява малко k. Именно затова е еднозначно ясно, че:

  • kB – килобайт

Употребата на KB за метрична система би звучала като „келвин байта“, което е абсурдно. За съжаление за пореден път от Microsoft не мислят по този начин и там под KB имат предвид „кибибайт“:

По новият стандарт за бинарна информация обаче няма проблем и там следва да се използва главната буква, т.е.:

  • KiB – кибибайт

Използването на новите означения не е някаква излишна педантичност (да бъдем т.нар. „grammar nazi“) – то е просто начин като кажем нещо, да няма двузначност и да е пределно ясно какво имаме предвид. Силно препоръчвам на всеки да започне да употребява мерните единици правилно. Може да звучите странно пред хората като им говорите за „гибибайти“, но ще е правилно, а и ще ги научите на нещо ново. Всъщност не е ли една приятна „nerd“ тема на разговор?

Задача за любознателните: погледнете картинките отгоре и проучете защо има разлика между реалния размер на файла (Size) и пространството, което заема физически на диска (Size on disk).

Ще завърша с педагогическият аспект на темата. Често в социалните мрежи се наблюдават спорове по темата и хората традиционно се разделят на лагери:

  • Едни казват „едно време си учихме, че килобайт е 1024 байта и всичко си беше наред – тези новите са ненужни“. Това естествено е погрешна позиция. Може да е чисто лингвистичен проблем, но той не е маловажен. И нагоре в статията мисля, че достатъчно добре съм обяснил защо. Ще дам и още един пример, който може да се използва за илюстрация защо това да си говорим на ясен език е важно – НАСА е загубила Mars Climate Orbiter в края на 90-те поради това, че разработчици на софтуер са използвали грешни мерни единици (newton-seconds вместо pound-force seconds);
  • Други казват „компютрите използват двоична бройна система и е редно да се използват само и единствено степени на двойката – неправилно е да се използва метричната система“. Драги учители, това щеше да е вярно ако обучавахте компютри. Вие обаче обучавате хора. В практиката виждаме много ясно, че и двете системи се ползват от хората – някои с маркетингова цел, други погрешно, трети по традиция. Ваше задължение е да направите учениците знаещи хора, които да се ориентират в тази ситуация;
  • Трети се възмущават, че метричната система се въвежда в IV клас, а информатичната в VI клас – казват „веднъж ги учим на едно, а после на друго и така ги объркваме“. И те не са прави. Нормално е знанията да се трупат постепенно и да се надграждат. Също е нормално да се започне от по-лесното и да се върви към по-сложното. Понеже хората използват масово в практиката си десетична бройна система (и решават задачите по математика в училище с нея), съвсем естествено е, че сметките с добавяне и умножение по 10, 100, 1000, т.н. да е много по-лесно, отколкото по 16, 32, 1024, и т.н. Именно затова метричните единици се въвеждат в четвърти клас – там децата все още се учат да извършват сложни сметки, – а „ибитата“ се въвеждат в шести клас – тогава учениците вече са „на ти“ с аритметиката;
  • Накрая някои твърдят, че „ученето на тези неща е безсмислено, защото децата се объркват и им е трудно“. Драги учители, много неща в този живот са трудни. Да, ученето е едно от тях. Споменатото твърдение е все едно да кажем, че ученето на ирационални числа е безсмислено, защото е трудно за децата – да си останат хората със знания само за рационалните. А може ли да го сведем до крайност и да ги оставим да работят само с цели? Момент, да махнем и отрицателните. И тази нула също пречи. Изобщо защо да се учи въобще? Този тип мислене е абсурдно. Ако вашите ученици изпитват затруднения в усвояването на даден материал, първо се запитайте какво вие не сте направили както трябва, за да го адаптирате добре за тяхното ниво и съответно направете промяна така, че да го преподавате на достъпен за тях език и го илюстрирайте с разбираеми примери. Положете усилия!

Тоест заключението ми е, че и двете трябва да се учат, а в учебните програми на МОН са въведени правилно.

Бонус факт 1: Добре познатите от миналото (за щастие вече останали дълбоко в историята) 3,5 инчови флопи дискове бяха рекламирани с капацитет от „1.44 MB“, но това няма нищо общо нито с 1,44 мегабайта, нито с 1,44 мебибайта. Техният реален размер беше 1,474560 MB или днешните 1.40625 MiB. Начинът на мерене беше „1,44 × 1000 × 1024 байта“, тоест някаква странна комбинация между метрична и бинарна система. Те бяха и първият ми досег с темата някъде в средата на 90-те – веднъж се опитах да разделя един голям файл на няколко дискети и се оказа, че 1,44M(i)B не се побира на една дискета, както е рекламирано. Когато видях, че и 1,43M(i)B не се побират, започнах да се интересувам какво се случва и… мисля, че за първи път направих сам свое собствено откритие. После естествено разбрах, че съм открил топлата вода.

Бонус факт 2: Компакт дисковете (CD) са с мерни единици MiB, но все още се изписват погрешно като MB. DVD и Blueray дисковете използват метрична система и правилно се мерят в GB. Производителите на флаш памети също използват метрична система и изписват числата правилно в GB, подобно на твърдите дискове. При оперативните памети (RAM) обаче нещата не стоят така – те все още се продават брандирани в мерни единици GB, зад които всъщност стои мерене в GiB.

Бонус факт 3: А откъде идва това „киби“ – защо се казва по точно този начин? Това всъщност идва от „КИлоБинарно“ (съответно МЕгаБИнарно и т.н.). Сега звучи много по-ясно, нали?

 



Добави коментар

Адресът на електронната поща няма да се публикува


*