1kb = 1024 Byte - sinnlose Definition?
e7
- sonstiges
0 Sven Rautenberg0 e70 dbenzhuser0 e70 Henryk Plötz0 e70 Peter0 dbenzhuser0 e7
0 Vinzenz
Hi,
http://www.b-c-s.de/html/wissen/kibibits.html
Heute hab ich die gerade verlinkte Seite gesehen, und dass da mal wieder was von Kibibytes etc. erwähnt wird... Kibibyte = 1000 Byte im Gegensatz zu Kilobyte = 1024 Bytes...
Natürlich macht man sich da so seine Gedanken, und meine Gedanken dazu waren: Warum hat man eigentlich 1 KB mit 1.024 Bytes definiert? Als weitläufige Erklärung liest man überall, dass 1.024 eine Potenz von 2 ist und solche Sachen, aber: Für was soll das gut sein? Dateisysteme, Betriebssysteme arbeiten (bzw. "könnten arbeiten") intern eh mit Bytes, ich kann mir nicht wirklich vorstellen, dass in einer FAT was von Dateigröße = 400 MB stehen soll, dann doch wohl eher die Byte-Angabe, oder, genauer ausgedrückt: Dem Computer bzw. der Software kann es doch eigentlich egal sein, ob ein Megabyte jetzt 1000 oder 1024 Kilobyte hat - diese Informationen werden doch beispielsweise vom Explorer so angezeigt (4,5 MB oder so was), intern werden ja eh Bytes verwendet. Warum ist denn dann bitteschön 1 KB = 1024 Bytes? Wo ist da dann der Vorteil? Ich versteh' das irgendwie nicht, kann sein, dass ich auf dem Schlauch stehe, aber ich freue mich schon, wenn ihr mir da runter helft ;)
E7
Moin!
Heute hab ich die gerade verlinkte Seite gesehen, und dass da mal wieder was von Kibibytes etc. erwähnt wird... Kibibyte = 1000 Byte im Gegensatz zu Kilobyte = 1024 Bytes...
Das ist genau falsch herum. 1000 Byte sind ein Kilobyte (kB), 1024 Byte sind ein kibibyte (kiB).
Natürlich macht man sich da so seine Gedanken, und meine Gedanken dazu waren: Warum hat man eigentlich 1 KB mit 1.024 Bytes definiert?
Weil man auch im Binärbereich irgendwann man soviele Bytes hatte, dass eine Zusammenfassung mit Kilo und Mega sinnvoll war.
Und die Definition mit 1024 (bzw. 2^10) war einfach naheliegend von den Zahlenwerten her (1000 ist ungefähr 1024), und von der zugrundeliegenden Technik her - denn die RAM-Bausteine enthielten tatsächlich nur "runde Zweierpotenzen" als Anzahl der adressierbaren Bits, weil das die Adressierung von mehreren Speicherbausteinen wesentlich einfacher machte.
Wenn aber nun in einem RAM-Baustein genau ein Kilobit = 1024 Bit drinstecken, und man sich keine so großen Gedanken über das SI-Einheitensystem macht (da sind die Amis ja nicht so firm drin, die rechnen ja noch mit Fuß, Inch, Gallonen etc.), kann es durchaus sein, dass man die Namensdoppelbelegung einfach in Kauf nimmt.
Als weitläufige Erklärung liest man überall, dass 1.024 eine Potenz von 2 ist und solche Sachen, aber: Für was soll das gut sein?
Für die RAM-Adressierung.
RAM-Bausteine müssen ja von der CPU angesprochen werden können, damit die an die Daten rankommt. Aus der CPU kommen diverse Daten- und Adressleitungen heraus, die über diverse Mechanismen (heutzutage sehr komplex, früher sehr simpel) an die RAM-Chips angeschlossen sind.
Was aber, wenn man mehr RAM braucht, als in einen Chip reingehen? Richtig: Anstückeln. Und das geht eben wesentlich einfacher, wenn die Adressenbereiche im Binärsystem sauber getrennt werden können, damit sie auf einzelne RAM-Chips verteilt werden können.
- Sven Rautenberg
Hi,
erst mal danke für deine Antwort.
Was aber, wenn man mehr RAM braucht, als in einen Chip reingehen? Richtig: Anstückeln. Und das geht eben wesentlich einfacher, wenn die Adressenbereiche im Binärsystem sauber getrennt werden können, damit sie auf einzelne RAM-Chips verteilt werden können.
Und das wird mit KB bzw. MB gemacht? Addressiert der Rechner normalerweise nicht einfach mit Bytes?
E7
N'Obend
Und das wird mit KB bzw. MB gemacht? Addressiert der Rechner normalerweise nicht einfach mit Bytes?
Naja, du hast eine bestimmte Anzahl an Adressleitungen. Bei 10 Leitungen, jeweils 0 oder 1 macht das genau 1024 verschiedene Kombinationen. Ich kann also 1024 verschiedene Speicherzellen ansprechen. Nun ist man eben so faul das ganze Kilo zu nennen. Man hätte natürlich auch auf die 24 überschüssigen Möglichkeiten verzichten können - aber warum?
Ab dann wird eben einfach weitergezählt 2^20 (1024*1024 = 1048576) entspricht dem Megabyte.
Bei 32 Datenleitungen von heute (halbgestern) also 2^32 ist dann bei 4GB Schluss mit Speicher adressieren. Ich könnte natürlich auch sagen bei 4,294967296GB aber wer will das schon?
Tschö,
dbenzhuser
Hi,
Bei 32 Datenleitungen von heute (halbgestern) also 2^32 ist dann bei 4GB Schluss mit Speicher adressieren. Ich könnte natürlich auch sagen bei 4,294967296GB aber wer will das schon?
Das ist das, was ich meinte, als ich schrieb, die MB/GB-Angaben sind nur Kosmetik für den Nutzer... Ich kann mir nämlich nicht vorstellen, dass ein Rechner sagt: Gib mir doch mal den Wert von Position 5 MB, 8 KB, 4 Bytes, sondern einfach: Position 12345678 - und aus diesem Grunde ist die Umrechnung in MB/GB/TB oder was auch immer nur für den "dummen Nutzer"...
E7
Moin,
Das ist das, was ich meinte, als ich schrieb, die MB/GB-Angaben sind nur Kosmetik für den Nutzer... Ich kann mir nämlich nicht vorstellen, dass ein Rechner sagt: Gib mir doch mal den Wert von Position 5 MB, 8 KB, 4 Bytes, sondern einfach: Position 12345678 - und aus diesem Grunde ist die Umrechnung in MB/GB/TB oder was auch immer nur für den "dummen Nutzer"...
Und das passiert eben grade nicht. Handelsübliche Computer arbeiten binär und nicht dezimal. Es geht also nicht um Position 1234 - dann würden Grenzen zu Tausendern, Millionen, etc. wirklich Sinn machen - sondern um 10011010010b - und da ist es halt einfacher und sinnvoller Grenzen bei ganzen Zweierpotenzen (bzw. bei Vielfachen von Zweierpotenzen) zu legen.
Zum Beispiel kann man im Addressdecoder sparen da der ggbf. nur ein paar Addressleitungen ansehen muß anstatt alle. Einfaches (und künstlich kleines) Beispiel: Wenn man 16 Speicherbausteine zu je 16 Byte hat, dann muß man sich nur die ersten 4 Bit der Addresse ansehen um zu erkennen zu welchem Speicherbaustein das jetzt gehört. Also 0b bis 1111b zum ersten, 10000b bis 11111b zum zweiten, 100000b bis 101111b zum dritten, 110000b bis 111111b zum vierten Baustein, und so weiter.
Würde man 26 Bausteine zu 10 Byte verwenden (mit ähnlich viel Gesamtspeicher), müsste der Decoder entscheiden ob die Addresse zwischen 0b und 1001b liegt (erster Baustein), dann zwischen 1010b und 10011b (zweiter Baustein), dann zwischen 10100b und 11101b, etc.[1] Dabei wäre die größte mögliche Addresse 100000011b, d.h. man bräuchte 9 Leitungen - eine mehr als in dem binären Beispiel. Gut, man könnte auch nur 25 Bausteine nehmen, dann ist die größte Addresse 11111001b, aber dann hat man 6 Addressen verschenkt die gar nie auf einen Baustein passen.
Um auf dein anfängliches Beispiel zurückzukommen: Doch, genau das passiert (irgendwie). Das Byte bei 5 MiB, 8 KiB und 4 Bytes hat die Addresse
33 2222222222 1111111111 0000000000
Bit-Nummer 10 9876543210 9876543210 9876543210
Addresse: 00 0000000101 0000001000 0000000100b
Ich hab das schon mal passend aufgetrennt (_diese_ Auftrennung ist nun natürlich nur zum Verständnis für 'den "dummen Nutzer"') und wenn du hinsiehst siehst du in der hinteren Gruppe die 4 (als 100b), in der vorletzten Gruppe die 8 (als 1000b) und davor die 5 (als 101b) und die Gruppen stehen für die Bytes, die Kibibytes, die Mebibytes und die Gibibytes.
[1] Der aufmerksame Beobachter erkennt: Das letzte Bit ist irrelevant für die Entscheidung und muß nicht dekodiert werden. Die Bits davor sind Vielfache von 101b.
PS: Falls es nicht aufgefallen ist: Alle Zahlen ohne Suffix sind Dezimalzahlen, alle Zahlen mit einem b hintendran sind in Binärdarstellung.
Hi,
Wenn man 16 Speicherbausteine zu je 16 Byte hat, dann muß man sich nur die ersten 4 Bit der Addresse ansehen um zu erkennen zu welchem Speicherbaustein das jetzt gehört.
Kann man ja immer, egal ob nun MB = 1024 oder MB = 1000, in der binären Variante vertauschen ja deswegen immer noch keine 0/1 die Position???
Würde man 26 Bausteine zu 10 Byte verwenden (mit ähnlich viel Gesamtspeicher),
Die Byte-Zahl kann ja ruhig in 2-Potenzen sein, dagegen spricht ja nix
Bit-Nummer 10 9876543210 9876543210 9876543210
Addresse: 00 0000000101 0000001000 0000000100b
Hier wird IMMER NOCH mit Bytes bzw. Bits adressiert, irgendwie immer noch kein Grund zur Megabyte-Regelung?!?!?!?
Naja, erst mal danke ich dir für deine Erklärung, aber so ganz versteh ich jetzt die Sache immer noch nicht. Haltet mich bitte nicht für blöd, aber anscheinend hab ich Probleme, mein Anliegen rüberzubrigen ;( - Ich versuch's nochmal: Im Grunde ist es ja egal (zumindest für die MB-Festlegung), ob der RAM jetzt intern mit Zweierpotenzen arbeitet oder nicht, da der Rechner sowieso nur mit 10101010101 umgehen kann, und da ist es definitiv wurscht (IMHO), ob nun MB = 1024 oder nicht. Der Rechner denkt und arbeitet hier ja weiterhin in Bytes/Bits (In C++ kann man ja auch nicht wirklich eine Variable 'int i' nehmen und dann 'i = "10 MB"' zuweisen, man muss hier ja auch die Größe in Bytes zuweisen - auch der Prozessor versteht doch nur 32-Bit-Zahlen?), die MB-Angabe ist hier wirklich nur für den Nutzer, da dieser mit einem 100.000.000.000-Byte-RAM-Modul (einfache Umrechnung MB=1000) nicht viel anfangen kann...
E7
Hi,
Im Grunde ist es ja egal (zumindest für die MB-Festlegung), ob der RAM jetzt intern mit Zweierpotenzen arbeitet oder nicht, da der Rechner sowieso nur mit 10101010101 umgehen kann, und da ist es definitiv wurscht (IMHO), ob nun MB = 1024 oder nicht. Der Rechner denkt und arbeitet hier ja weiterhin in Bytes/Bits
Es ist aus Performancegründen nicht egal, ob ein Rechner mit Zweierpotenzen arbeitet oder nicht: Multiplikationen und Divisionen mit Zweierpotenzen lassen sich intern einfach durch Hinzufügen bzw. Abschneiden (shift-operation) von rechtsseitigen Stellen (Bits) realisieren (wie im Dezimalsystem Multiplikationen/Divisionen mit/durch Zehnerpotenzen)
Beispiel : 100000b * 1000b = 100000000b (32*8=256) (Also einfach 3 Nullen rangehängen statt umständlich zu Multiplizieren)
Gruß
Peter
Moin
Kilo als 1024 aufzufassen ist natürlich in der Tat nur eine Konvention und nicht gottgegeben.
Es macht halt einfach nur Sinn, weil der Computer mit 10er-Potenzen eh nichts anfangen kann. Du wirst nie einen Speicherbaustein mit 1000Byte bekommen, weil das nichts als Verschwendung wäre.
Genauso blöd ware es Kilo im 10er-System als 1057 aufzufassen - du müsstest die ganze Zeit wild in der Gegend rum rechnen. Kilo, Mega, Giga, usw. sind eh nur Hilfen zur vereinfachung, wenn du es exakt wissen willst, dann sagst du tausen, million etc.
Vergleiche:
Belade den Laster mit 3,5t Steinen
Belade den Laster mit 3.500.000 Gramm Steinen
Ist das das gleiche? Natürlich nicht.
Außerdem können die HD-Hersteller mit verschiedenen Mega-Regelungen wunderbar bescheißen :)
Das will ihnen doch keiner wegnehmen.
Hi,
Kilo, Mega, Giga, usw. sind eh nur Hilfen zur vereinfachung, wenn du es exakt wissen willst, dann sagst du tausen, million etc.
Außerdem können die HD-Hersteller mit verschiedenen Mega-Regelungen wunderbar bescheißen :)
Das will ihnen doch keiner wegnehmen.
Genau das frag ich mich ja die ganze Zeit - außer zur Vereinfachung bzw. zum Bescheißen ist die 1.024-Regelung eine Regelung, die es nicht gebraucht hätte... Heutzutage kauf ich mir halt einen 256-MB-Ram-Baustein, und das klingt gut, weil ich es gewohnt bin - hätte man was mit 1000 gemacht, hätten sich die Nutzer eben an 244 gewöhnt. Was der Rechner intern mit den Bytes macht, bei denen die Umrechung ja eh flach fällt, ist ja egal...
E7
Hallo Sven,
Heute hab ich die gerade verlinkte Seite gesehen, und dass da mal wieder was von Kibibytes etc. erwähnt wird... Kibibyte = 1000 Byte im Gegensatz zu Kilobyte = 1024 Bytes...
Das ist genau falsch herum. 1000 Byte sind ein Kilobyte (kB), 1024 Byte sind ein kibibyte (kiB).
Nur als Hinweis: Die zitierte Seite schreibt es richtig. Sie ist ausserdem recht informativ, auch wenn sie den Hintergrund, den Du sehr schön beschreibst, leider weglässt. Somit fehlt der Seite gerade die Motivation, warum so viele Menschen gerne von einem Megabyte sprechen, wenn sie 10^20 Byte meinen. Tu ich übrigens auch.
Noch nicht mal Marketingstrategen kommen darauf, einen Rechner mit 536,870912 Megabyte anzupreisen. Die reden alle bestenfalls von 512 MB. B ist auch nicht die SI-Abkürzung für Byte :-)
Freundliche Grüsse,
Vinzenz
Hallo,
B ist auch nicht die SI-Abkürzung für Byte :-)
Nicht? Welche ist es dann?
Im Übrigen sollte, wenn schon mal begonnen wird die Maßeinheiten der Informationsverarbeitung neu durchzunormen, auch gleich das Byte wirklich definiert werden oder konsequent von Octets gesprochen werden. Ein Byte ist nämlich nirgends eindeutig als Octet of Bits definiert. Je nach System könnten deshalb 1 KiByte, mit 1 Byte = 7 Bit, gleich 1024 * 7 Bit und 1 KiByte, mit 1 Byte = 8 Bit, gleich 1024 * 8 Bit sein. Das sieht dann so aus:
Wenn
1 KiByte = 1 KiByte
und
1 KiByte = 1024 * 7 Bit
1 KiByte = 1024 * 8 Bit
dann ist
1024 * 7 Bit = 1024 * 8 Bit
und
7 = 8
Naja, ich wusste schon immer, dass irgendwie alle Zahlen gleich groß sind.
viele Grüße
Axel
PS: Solange man einen Kredit aufnehmen muss, um SI-Normen lesen zu dürfen, sind sie für mich ohnehin nur bedingt verbindlich.
Moin,
Im Übrigen sollte, wenn schon mal begonnen wird die Maßeinheiten der Informationsverarbeitung neu durchzunormen, auch gleich das Byte wirklich definiert werden oder konsequent von Octets gesprochen werden.
Also, in Frankreich z.B. sagt man durchgängig /nur/ "octet". "Byte" kommt im Sprachgebrauch so gut wie gar nicht vor.
Allerdings finde ich das nicht gut -- meist meint man nämlich das Byte, selten nur das Oktet, das auf den heutigen Home-PCs nun einmal das selbe wie ein Byte ist.
Zum Rechnen sollte man allerdings wirklich lieber das Oktet verwenden. Hmm.
Gruß,
KonRad -