Elmélkedés a bináris egységekről

Ezt a blogbejegyzést eredetileg egy zárt fórumon postoltam, de úgy gondoltam, másokat is érdekelhet, úgyhogy bemásoltam ide is.

Alcím: Avagy hogyan változik a 400 gigás winchester 372 gigássá?

Sokan nincsenek teljesen tisztában a Giga-, Mega- stb jelentésével. Azt megtanultuk mindannyian az iskolában, hogy a "kilogramm" 1000 g-ot jelent, és a "kilométer" 1000 m-t, a "Gigajoule" 1000000 Joule-t, stb. Azt is elmondták, hogy ezek SI mértékegységek, a kilo-, giga- stb pedig SI prefixek (előtagok) és ezret valamint milliót jelentenek. Ezeket ugyebár tudjuk.

1 KB = 1024 B?

Számítástechnika órán azt is elmondták, hogy anno, amikor a számítástechnikában elkezdték mérni az adatokat, akkor a Byte-hoz is be kellett vezetni hasonló váltószámokat. Így megtanították, hogy létezik Kilobyte, Megabyte, újabban Terabyte és ehhez hasonló mértékegységek, amik a Byte sokszorosai. És sose felejtették elmondani, hogy a számítástechnikában a kilo- és a mega- nem 1000-t és 1000000-t, hanem 1024-et és 1048576 (1024x1024)-et jelent, azért, mert a számítógépek alapvetően kettes számrendszerben számolnak, és 210=1024 és nem 1000. Tehát jól megtanultuk, hogy 1 KByte = 1024 B és nem 1000.

Aztán levizsgáztunk, dolgozatot írtunk és megkaptuk a jelest.

Most pedig bemegyünk a boltba, veszünk egy "400 GB" kapacitású winchestert, hazavisszük és meglátjuk, hogy ez csak 372 GB-os. Vakarjuk a fejünket (esetleg a haladóbbak elmormolnak egy "hülye windows" frázist, aztán vállat vonnak). Aztán betesszük a 4.7 GB kapacitású DVD-lemezt, hogy ráírjunk egy 4.55 GB méretű filmet és nem értjük, hogy miért nem fér rá. Most akkor 4.55 > 4.7 ??

Mi ment tönkre a világban?

Nos, valójában semmi. Csak azt felejtették elmondani nekünk informatikaórákon (és felejtik el azóta is), hogy amit megtanítottak, az jól hangzik, csak nem igazánúgy van, ahogy... 1986-ban még szabány mondta ki, hogy a számítástechnikában a kilo- az 210-et jelöl. De 1986 már nagyon régen volt.

Az alapvető probléma az, hogy a tudomány világában jól jár az ember, ha szabványos mértékegységeket használ. Így pl. ha azt mondom valamiről, hogy ennek a tömege 1 kg, akkor nem gondol senki arra, hogy ez 1024 g lenne, mindenki tisztában van azzal, hogy amiről beszélek, az 1000 g tömegű.

A számítástechnikában azonban nem így volt: amikor valamiről azt mondtam hogy 1 KB, akkor azt vágtuk rá, hogy az 1 Kilobyte 1024 Byte, a tudatalatti viszont megszólalhatott, hogy valójában a kilo- SI-előtag és 1000-t jelöl.. Akkor hogy is van ez?

Bináris prefixek

Azért, hogy ezt az ellentmondást feloldják, a '90-es évek közepén új szabvány kidolgozásába fogtak, mígnem 1999 januárjában az IEC új szabványt publikált a bináris előtagokról. Így a 2 hatványainak lett saját nevük, ezzel egyértelművé téve, hogy pontosan mekkora méretekről beszélünk. Nagyon egyszerűen meg lehet őket jegyezni, mert ahogy a k jelöli a kilo-t, azaz az 1000-t, a Ki (kilobináris vagy röviden kibi) pedig az 1024-et. Hasonlóan az SI szerint az m jelöli az 1000x1000-t, itt az Mi az 1024x1024-et (megabináris vagy mebi).

Tehát az 1024 B (bájt) az új szabány szerint 1 KiB, azaz 1 "kibibájt" (kilobináris bájt). Ez ugyan elsőre furcsának tűnhet, de manapság egyre több programban (főleg nyílt forráskódúakban) találkozhattok vele, így pl. a DC++ fájlcserélő program is KiB/MiB, stb mértékegységeket használ méret- és sebességmegjelölésekre.

Az alábbiakban találhattok egy kisebb táblázatot néhány példával:

Néhány példa a decimális és bináris előtagokra
PéldaKiolvasása
1 KB = 1000 B egy kilobájt, ezer bájt
1 KiB = 1024 B egy kibibájt, ezerhuszonnégy bájt
1 MB = 1000 KB egy megabájt, ezer kilobájt
1 MiB = 1024 KiB egy mebibájt, ezerhuszonnégy kibibájt
1 TiB = 1024 GiB egy tebibájt, ezerhuszonnégy gibibájt

Mi ennek a gyakorlati haszna?

Az átlagos felhasználónak azért érdemes tisztában lenni az immáron több, mint tíz éve szabányos előtagokkal, mert hozzá tartozna az alapvető számítástechnikai műveltséghez. Másrészt pedig így nem tudnak átvágni. A fentiek ismeretében ugyanis könnyen megválaszolhatjuk, hogy miért nem fér rá a 4.7 GB-os lemezre a 4.55 GB-os fájlunk, vagy hogy a 400 GB-os merevlemez miért csak 372 GB-os...

Vegyük a winchester példáját. Bemegyünk a boltba, kérünk egy 400 GB kapacitású merevlemezt. A lemez az SI-előtagoknak megfelelően (többé-kevésbé) pontosan 400000000000 bájtot tartalmaz. Osztogassuk ezt vissza 1024-gyel! Az alábbi eredményt kapjuk:

  1. 400000000000 B / 1024 = 390625000 KiB
  2. 390625000 KiB / 1024 = 381469 MiB
  3. 381469 MiB / 1024 = 372 GiB

Meg is van! 400 GB = 372 GiB. Az egyetlen probléma az, hogy a Windows sajnos nem használja a bináris előtagokat a fájl- és memóriaméretek megjelölésekor (vélhetően azért, hogy ne kavarja meg azokat a felhasználókat, akiknek az is gondot okoz, ha a Sajátgép ikonján két képpontot megvariálnak). Így a Windows azt írja, hogy "372 GB", miközben arra gondol, hogy "372 GiB".

Ugyanez az oka a DVD-lemezeknél jelentkező anomáliának. A Windows azt írja a fájlunkra, hogy a mérete 4.55 GB, de "arra gondol", hogy 4.55 GiB.. Ha ezt visszaszorozzuk 1024-esével, akkor megkapjuk, hogy a fájlunk mérete 4885525299 B. Viszont a DVD-lemez borítójára az van írva, hogy a kapcitása "4.7 GB". Nos, ők már arra gondoltak, amit leírtak, vagyis az SI szerint arra, hogy a lemez kapacitása 4.7 Gigabyte, tehát 4700000000. Márpedig a 4700000000 kisebb, mint a 4885525299. tehát a fájlunk nem fog ráférni a lemezre. Így nem arra a következtetésre jutunk, hogy 4.55 GB > 4.7 GB, hanem arra, hogy 4.55 GiB > 4.7 GB!

Csináljunk harmadik megabyte-ot is!

Régen olyan sokat másolgattam lemezre, hogy fejből megtanultam, hogy a 3.5"-os kisfloppy formázott kapacitása 1457664 B. Nem csaltam, ezt most is fejből írtam le! Az egyetlen probléma ezzel az, hogy ezt akárhogy osztogatom, nem jön ki az 1.44, pedig a lemezre az volt írva, hogy 1.44 MB. A titkok kulcsa ott van, hogy a floppylemezen egy harmadik fajta megabyte-ot használtak, ami nem 1000x1000 volt és nem is 1024x1024, hanem 1000x1024! Így számolva máris megkapjuk a helyes eredményt:

1.44 x 1000 x 1024 = 1474560 B

A különbség az énáltalam felidézett szám és a kiszámolt eredmény között, azaz 1474560-1457664=16896 B onnan adódik, hogy a floppy-lemezek által használt FAT-12 fájlrendszer első 33 szektora (0-32-ig) volt a boot szektor, a FAT tábla és a főkönyvtár. Ezt a 33 szektort nem használhattad fel fájlok tárolására. Egy szektor 512 Byte hosszúságú volt, a 33x512 pedig pontosan 16896 B.

Comments

CyB's picture

Ez egy nagyon jó leírás. Bár én nem igazán blogba raktam volna, hanem komolyabb helyre az oldalon.

Mindenképp érdemes volna minden felhasználónak tisztában lennie a mértékegységekkel akkor, amikor nem telik el olyan nap (vagy nagyon kevés), hogy ne üljünk le a számítógép elé.

fleetcommand's picture

Arra gondoltam, hogy postolhatnánk tájékoztató jellegű, számítástechnikával, informatikával, internettel kapcsolatos témákat többen is (bárki csatlakozhat, akár sima felhasználók is). Aztán ha elég ilyen összegyűlik, betesszük őket egy központi helyről elérhető oldalra (pl. a Leírások menübe)

CyB's picture

Ez jó ötlet.

In the spirit of Digital Freedom you can use and quote any content found here for no cost but by mentioning the source and the url for this site. With all of this, the maintainers of the homepage keep their copyright for the materials here. [Contact us]
© Elite Hub, 2002-2012 - Powered by Drupal - Valid XHTML