Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Potoczne, mylące, niepoprawne: Ile bajtów ma kilobajt?

Wprowadzenie

W tej serii będę opisywał różne pojęcia jakie wykształciły się w informatyce, lecz nie są zbyt poprawne i jednoznaczne, jednak powszechnie potocznie używane. Przez lata rozwoju komputerów wielkie korporacje sprzeczały się kto ma rację, jedni gonili drugich i powstał chaos w m.in. nazewnictwach, symbolach. Jednym z takich niedomówień są z pewnością jednostki pamięci i ich przedrostki, które dla wielu było zagadką, omówię w tym wpisie ten problem.

- Jaką masz prędkość internetu?
- 30 mb/s

Trzydzieści czego? Tu zaczynają się schody o których niewielu zdaje sobie sprawę, a problem nasila się wraz ze wzrostem pojemności i szybkości. Dlaczego kupując dysk 1TB w systemie pisze że ma on 0,9TB, a pendrive 4GB ma 3.75GB? Zaokrąglenia?

Geneza przedrostków i problemu

Przedrostki SI wymyślono dla wygody, by matematycy i fizycy nie musieli używać masakrycznej ilości zer w równaniach i dokumentach, artykułach, tylko np. zamiast 1 000 000N (milion newtonów) napisać 1MN (jeden meganewton). Przedrostki te są uniwersalne do wszystkich jednostek (megawat, kilometr, miliamper), więc i w informatyce z nich skorzystano do wyznaczania ilości danych (MB, GB), częstotliwości pracy (np. MHz, GHz; to akurat niezbyt ściśle związane z samą informatyką) itd. Jednak czy poprawnie użyte?

Zdecydowana większość jednak jest przekonana że "kilobajt" ma nie 1000, a 1024 bajty, a 1 bajt 8 bitów. Tak do końca nie jest. Dawno temu wielkości danych zaczęto dzielić przez 1024 (2^10) zamiast przez 1000 dla wygody komputerów i (błędnie) użyto do tego przedrostków SI (kilo, mega, tera itd). Powszechnie uznano że "kilo w informatyce znaczy 1024" co wywołało spore oburzenie matematyków i fizyków, podobnie jak odwrócenie w pionie układu współrzędnych (rosnący y w dół). Powstało wiele żartów na ten temat jak np. "Zwykły człowiek myśli że kilobajt to 1000 bajtów, a informatyk że 1 kilometr to 1024 metry".

Software vs Hardware?

Producenci sprzętu jednak w większości olali sposób zapisu systemów operacyjnych i używali jednostek SI do których naukowcy są przyzwyczajeni od dziecka do wyznaczania np. pojemności. Słynna dyskietka 3,5” HD była podpisana 1,44MB, ale Windows pokazywał 1,37MB. Dysk twardy 10GB miał ich 9,5. O co chodzi? Mi to kiedyś wytłumaczył "znawca" że ten ubytek jest przeznaczony na działanie tej dyskietki, czy dysku twardego. W rzeczywistości producenci używali przedrostków SI opartych o system dziesiętny, a systemy operacyjne przedrostków opartych o system dwójkowy, czyli wielokrotności 1024(2^10) zamiast 1000, jednak używali (i dalej w większości to robią) literek z przedrostków SI.

Dobra, z tego wynika rozdzielenie: software używa przedrostków dwójkowych (binarnych), czyli wielokrotności 1024, a hardware przedrostków dziesiętnych (wielokrotności 1000). To czemu 2x 512MB RAMu to 1GB? Nazwano to standardem JEDEC, który używa wielokrotności 1024, ale nazw przedrostków identycznych co SI, co uczyniło te dwa standardy przedrostków nie do rozróżnienia w zapisie.

Można to zrozumieć: producenci tworzyli pamięci powiększając je zawsze o 2 razy, elektronika bazuje w końcu na systemie dwójkowym. Końcową pojemność musieli jakoś podać, a jako że nie było wtedy innych przedrostków, podawano z przedrostkiem SI, ale o mnożniku 1024, zamiast 1000, stwierdzili że te 24 nie robi wielkiej różnicy.

Co dziwniejsze, w danych technicznych gdzie podawana jest np. przepustowość, wielokrotności magicznie zmniejsza ją się do 1000 i 1kb znaczy 1000b...

Standard zapisu IEC: Koniec problemów?

IEC = International Electrotechnical Commission, Międzynarodowa Kommisja Elektrotechniczna, organizacja non-profit zajmująca się m.in. wyznaczaniem standardów w dziedzinach elektrotechniki (w tym i informatyki).

W celu pozbycia się tego niedomówienia w 1999 roku (a więc dość późno, gdyż już w świadomości użytkowników się zakodowało że 1kB=1024B) IEC stworzył nowy standard zapisu przedrostków binarnych, który prowadza nowe i jednoznaczne nazewnictwo przedrostków, bo przecież jak “kilo” znaczy 1000, to czemu jakiejś dziedzinie miałby znaczyć 1024?

Przedrostki binarne IEC brzmią i zapisuje się podobnie jak SI:
- Kibi [Ki]
- Mebi [Mi]
- Gibi [Gi]
- Tebi [Ti]
- itd...
Dodawana jest literka "i" po przedrostku przed jednostką (jednostka pozostaje ta sama: bajt, czyli duże B i bit, czyli małe b), a więc przykładowo 120KiB znaczy jednoznacznie 122880B, a nie zastanawiać się czy przypadkiem to nie jest 120000B. Ponadto przedrostki zawsze zaczynają się wielką literą, w przypadku SI "k" piszemy zawsze małe, duże jest błędem. Duże samo "K" (w informatyce) mogło sugerować że chodzi o przedrostek binarny, jednak często nieświadomi użytkownicy używali dużego i małego "k" na zmianę. W przypadku wyższych przedrostków nie dało się już rozróżnić, bo wszystkie pisze się dużą literą.

Większość oprogramowania podaje nadal w mylących przedrostkach SI z wielokrotnościami 1024, natomiast pamięci trwałe typu HDD, FDD, SDD, karty pamięci, pendrive’y używają prawidłowo jednostek SI. Pojemność płyty CD znów używa wielokrotności 1024 (~703MiB), ale już płyty DVD 1000 (4.7GB, czyli ~4.37GiB). Płyty Blu-Ray również używają poprawnych jednostek SI.

Zatem jak rozumieć podawane pojemności/prędkości?

Wracając do prędkości z początku wpisu: ile to 30mb/s? Małe ‘b’ sugeruje bity, zatem mamy 3,75mB/s. A małe ‘m’? Mili? Jedna tysięczna? Załóżmy już że chodzi o ‘M’, ale teraz jaki przedrostek: prawidłowy SI, czy JEDEC? W przypadku pierwszego mamy 3,75MB/s, a w przypadku drugiego ok. 3,58MiB/s.

Różnica niewielka? Przy mega/mebibajtach może niewielka, ale przy tera/tebi wynosi ponad 9% i wraz z kolejnymi “poziomami” różnica ta rośnie.

Skutki zamieszania

Skutki nie są tragiczne, głównie rozczarowanie tych, którzy kupili np. dysk 1TB, a na nim jedynie 901GiB, albo na swój pendrive 4GB nie mogli wrzucić pliku 3.8GiB, a ci którzy stworzyli ładny album zdjęć i filmów pamiątkowych na DVD zajmujący 4.6GiB musieli albo ten album zmniejszyć, albo użyć dwuwarstwowej płytki DVD. Skutki te odczuł zapewne każdy domowy użytkownik.

Oczywiście tu dopisałem tą literkę "i", ale wiele programów nadal nie używa tej literki.

Nieświadomość użytkowników

Długo wierzyłem że 0,7GB z mojego pierwszego dysku twardego 10GB było przeznaczone na działanie samego dysku i systemu, w końcu obie wartości miały takie same jednostki. Wiele lat później dowiedziałem się skąd ta różnica i w tym momencie zaczynałem zadawać sobie pytanie: jak rozróżniać te przedrostki? Trzeba po prostu zdać się na intuicję jeśli ma się do czynienia z zapisem "1MB", ale zapis "1MiB" nie pozostawia żadnych wątpliwości. Pierwszy raz z zapisem KiB, MiB spotkałem się o ile dobrze pamiętam w programie FileZilla.

Problem ten był już omawiany na łamach dobreprogramy.pl (link), okazało się że wielu w ogóle nie widzi różnicy, ani potrzeby rozdzielania i sensu zlikwidowania tego problemu. Wiele lat uczono tak właśnie w szkołach i tak jest nawet dziś na egzaminach zawodowych i maturach z informatyki. Jak już wspomniałem "znawcy", a nawet i nauczyciele niektórzy nie potrafią właściwie wyjaśnić tajemniczego ubytku pamięci w dyskach twardych i pendrive’ach tłumacząc się że "zagubiona" pojemność przeznaczona jest na działanie, albo po prostu wartość jest zaokrąglana..

Zdaniem niektórych w komentarzach “Canonical chce wywołać chaos”. Nie prawda: Canonical w ten właśnie sposób chciał się pozbyć obecnego chaosu dając czasem pewność że chodzi o wielokrotności 1024, a nie 1000. Porządek w jednostkach panuje już w większości dystrybucji Linuksa i ich podstawowych programach, systemach Mac OSX (od Snow Leopard), natomiast Microsoft i wielu innych komercyjnych wydawców oprogramowania prawdopodobnie nadal nie chce wystawić swoich użytkowników na szok wprowadzając literkę “i” między przedrostek i jednostkę, albo zmienić wielokrotności z 1024 na 1000.

Podsumowanie

Mamy dwa sposoby zapisywania objętości danych: z użyciem przedrostków binarnych (IEC) i dziesiętnych (SI). Większość programów używających przedrostków o nazewnictwie z SI używa w rzeczywistości przedrostków binarnych (przedrostki kilo, mega itd. wielokrotności 1024). Jako że "kilo" w SI znaczy 1000, w informatyce powinno być TAK SAMO! Do zapisu jednostek z przedrostkami o wielokrotności 1024 należy używać standardu IEC: kibibajty, mebibajty, tebibajty itd. Widząc zapis "164MB" powinno chodzić o Mega o mnożnik 1000^2, czyli równy milion, lecz nie zawsze tak jest. Zapis "164MiB" daje 100% pewność że chodzi o Mebi z mnożnikiem 1024^2 (1048576) i nie ma mowy o pomyłce.

Powinno się zatem stosować przedrostki IEC tam gdzie chodzi o wielokrotności 1024.
Kilka przydatnych linków:Kilobajt wg. wiki O przedrostu dwójkowym na wikiKonwerter między SI<>IEC (pierwsza kolumna z przedrostkami dzies... 

Komentarze

0 nowych
djgrzenio   9 #1 17.11.2011 18:52

Dobry wpis. :) jednak jednostka czestotliwosci w informatyce jest bardzo scisle zwiazana:) (cpu, szyna, pamieci,...)

Razi   5 #2 17.11.2011 19:03

Ale jednostka częstotliwości znana jest od wieków jako ilość cykli/operacji/zdarzeń w ciągu sekundy, natomiast ilość informacji, czyli bajt/bit jest już ściśle związana z informatyką,

skrzypek   13 #3 17.11.2011 20:54

Toś mi wytłumaczył :)

DjLeo MODERATOR BLOGA  18 #4 17.11.2011 20:56

Znam lepszy kawał:

- informatyk do informatyka
- pożyczysz mi 1000zł?
- nie ma sprawy ale pożyczę Ci okrągłe 1024 :)

Fajny wpis.

Kpc21   10 #5 17.11.2011 21:19

> - Jaką masz prędkość internetu?
> - 30 mb/s
>
> Trzydzieści czego?
Milibitów na sekundę :)

M@ster   17 #6 17.11.2011 21:51

Dobry wpis, awatarek też niczego sobie ;)

walker13150   4 #7 17.11.2011 21:55

Wreszcie się ktoś podjął. Ale narodowi głupiemu do łba tego nie wbijesz :D. Producenci zawsze będą złodziejami, no bo "ja płacę za 16GB a to coś ma tylko 14,9, oszuści!". Potrzeba pokoleń żeby to wyplenić.

Jaahquubel_   13 #8 17.11.2011 23:15

Coś mi się zdaje, że gdzieś spotkałem się z taką rachubą, że 1MB=1000kB, gdzie kB to 1024B, więc 1MB to 1.024.000B. I to dopiero jest odlot.

avak   1 #9 18.11.2011 01:25

obawiam się, że już sprawy związane z poruszanych tematem zaszły tak daleko w świecie, że ciężko będzie przyzwyczaić nowych użyszkodników do wprowadzania standaryzacji w tej kwestii.. ale bądźmy dobrej myśli. Swoją drogę ogrom "straconych" bajtów zauważyłem dopiero po kupnie pendrive'a 4GB..
Czasem producenci na opakowaniach piszą, że 1k = 1000b, 1M = 1000 kB, itd.

"na swój pendrive 4GB nie mogli wrzucić pliku 3.8GiB"
jeżeli ktoś rzeczywiście rozczarował się zaistniałą sytuacją to jest sam sobie winien - zawsze należy wziąć pod uwagę różne "niewiadome" czynniki i zostawić na zapas trochę wolnego miejsca, tak na zdrowy rozsądek (oczywiście bez urazy dla kogokolwiek).

Saskatchewan   8 #10 18.11.2011 09:36

To jak to jest ostatecznie z prędkością internetu? Czy 1Mb jest równy 1000kb, czy 1024kb, czy jak kto lubi?
> "Zdecydowana większość jednak jest przekonana że (...) 1 bajt [ma] 8 bitów. Tak do końca nie jest."
Tego mitu nie obaliłeś ;).

GL1zdA   12 #11 18.11.2011 10:08

Jej, nigdy nie rozumiałem w czym problem. Od zawsze wiadomo że w przypadku HDD 1 kB = 1024 B, 1 MB = 1024 kB, RAMu 1kb = 1024 b, a w sieciach 1kb = 1000 b. A jak chcą wprowadzić nowe jednostki, to niech zrobią je dla tych, co nie potrafią tego ogarnąć, a nie chcą ukarać tych co używają jednostek zgodnie z wieloletnią praktyką. Niech oni sobie liczą w jakichś "debil'o'bajtach" np. 1 megadebil'o'bajt = 1000 kilodebil'o'bajtów = 1000000 debil'o'bajtów. Ja tam nie zamierzam używać jakichś kibi-sribi-bajtów.

  #12 18.11.2011 10:55

Popieram GL1zdA :)

  #13 18.11.2011 12:20

najlepsze jak ludzie myślą, że internet 1 "mega" to dosłownie ściąga im się z prędkością 1 MB/s i późniejsze pretensje niedoinformowanych, że maksymalnie tylko ~130KB/s, a wytłumaczyć sobie nie da, że bit to nie bajt :D

Jaahquubel_   13 #14 18.11.2011 14:11

Teraz może i tak (chociaż ciężko mi w to uwierzyć). Ale zdecydowana większość ludzi skończyła 4. klasę zanim o tym zaczęto uczyć.

Razi   5 #15 18.11.2011 19:00

@GL1zdA: Jest chaos, sam napisałeś i to jeszcze z błędami. W HDD 1kB=1000B, w systemie (windows oczywiście) dopiero 1kB = 1024B.

Mnie jeszcze uczyli (i jak napisałem: jest na egzaminach i wielu programach) że 1kB=1024B i tak jest przekonana spora część użyszkodników, ba, nawet nie widzą różnicy. Dopóki w Windowsie 1kB=1024B, ludzie dalej będą się mieszać i mylić.

Co do internetu to sam nie wiem. Niby powinno być poprawnie w SI, ale trudno mówić o stałej prędkości, ona zawsze oscyluje. O ile przy kB/s było 128, 256 i 2^x, to przy MB/s są już 1, 2, 3, 6, 10, 20. Limity te i tak są nakładane sztucznie.

  #16 18.11.2011 23:43

a jak to jest kodekami ? one podają niekiedy wielkość streamu na sekundę np. video: 998kb/s , audio 131kb/s ?

natus08   7 #17 19.11.2011 09:37

Pierwszy raz o prawidłowym nazewnictwie dowiedziałem się z użytkowania linuksa. Na początku myślałem, że to oni sobie tak wymyślili. Ale sprawdziłem na necie i od tamtej pory staram się używać prawidłowych nazw.

mgr.inz.Player   6 #18 21.11.2011 00:00

Najlepiej to podawać wszystko w "bajtach" lub "bitach", czyli bez "B" oraz "b". Bez przedrostków typu Ki Mi Gi Ti oraz k M G T.

- Jaką masz prędkość internetu?
- 3750000 Bajtów / sek

mgr.inz.Player   6 #19 21.11.2011 00:04

BTW. rozwaliło mnie to 125B na obrazku :)

97,65625% z 128 daje 125 :P

97,65625% z 1024 daje 1000

Razi   5 #20 21.11.2011 01:00

125B jest poprawną odpowiedzią dla przedrostków SI: 1kb*1000/8b=125B

St4rKiller070   6 #21 21.11.2011 19:52

Bardzo dobry artykuł i mówiąc szczerze jeden z niewielu na którym zatrzymałem się dłużej. Oby takich więcej!!!

PLI52KA   4 #22 23.12.2011 14:52

Dzięki za wpis, tak jak użytkownika St4rKiller070 mnie też wciągnął. W zasadzie to pierwszy raz usłyszałem o nazewnictwach - Mebi [Mi] - Gibi [Gi].

Krakoo   4 #23 24.12.2011 14:38

Jakiś błąd Ci się wkradł. 164 MB czy MiB nie daje okrągłego miliona, albo 1048576... Chyba Chodziło Ci o 1MB i 1 MiB ;)

  #24 22.07.2016 16:28

jak w explorerze zmienić wyświetlanie rozmairu plików z kilobajtów na bajty?

aztekium   1 #25 27.10.2016 08:37

Fajny przelicznik do tego:
http://Aztekium.pl/megabajty