4 MBit! = 512 kB?

8

Estou trabalhando com um microcontrolador Fujitsu e acho que estou um pouco enferrujado nos seguintes detalhes, é por isso que estou fazendo essa pergunta. Eu tenho as seguintes especificações:

  • Memória flash de 4M bits
  • Produto incorporado: MB90F345E (S), MB90F345CE (S)
  • volume: 512 Kbytes / 256 Kwords
  • Configuração do setor: 64K × 6 + 32K × 2 + 16K × 2 + 8 K × 4
  • Banco alocado: banco F8H para FFH

Eles parecem criar magicamente 12K bytes de memória ROM extra? Que peculiaridade estou perdendo aqui?

Evert
fonte
7
512 Kbytes = 512 * 8 Kbits = 4096 Kbits = 4 Mbits
John Dvorak
Pesquisando: "512 kb em megabit" fornece 512 kb = 4,096 Mbits. E isso está sendo arredondado para 4 Mbits?
Evert
4
Tente pesquisar "512 kib para mibit" no Google.
Fev
3
No contexto técnico, Kbytes e M-bit geralmente se referem ao que é para evitar ambigüidade referido como kibibytes e Mebibits
njzk2
3
Observe também que, em um contexto técnico, há uma grande diferença entre Be b. O que o título diz é realmente "4 megabit! = 512 kilobit?", O que obviamente não faz sentido. O que você queria é o 4 Mbit != 512 KB?que faz mais sentido, dependendo de você estar usando prefixos binários ou decimais.
a CVn

Respostas:

16

Se você olhar para o mapa de memória, existem 524.288 bytes de ROM, que são 512K (onde 'K' se refere a 1024, e não 1000) - btw, consegui subtrair o endereço inicial 0xF8000 do endereço final 0xFFFFFF e adicionar 1.

http://pdf1.alldatasheet.com/datasheet-pdf/view/202599/FUJITSU/MB90F345CE/+Q035-AVDyppuuX+SHGNxD.hOS+/datasheet.pdf

Isso é 4M (onde 'M' é 1024 * 1024 = 1.048.576, não 106 = 1.000.000).

Geralmente, é bastante claro o que está acontecendo no contexto, então isso raramente causa confusão (especialmente quando parece haver mais memória do que o esperado), no entanto, a capacidade da unidade de disco do consumidor é um exemplo notório do uso de unidades de 'marketing' que fazem o produto parecer mais favorável em cerca de 5-10%.

Edit: Como vários prescritivistas aqui mencionaram, existem unidades "oficiais" como o MiB que devem se livrar da ambiguidade, no entanto, como praticamente ninguém as usa, acho que provavelmente causaria mais confusão na maioria dos casos (e, obviamente, os autores das folhas de dados sentiram dessa maneira). A questão é interpretar corretamente o que foi escrito em uma folha de dados, e não a terminologia que você deve usar ao escrever uma folha de dados.

Spehro Pefhany
fonte
2
+1, sempre observe o mapa da memória (ou encontre uma estatística sem "k" ou "M") se precisar saber exatamente o que está acontecendo (as opções de memória não têm tamanho de 10% de diferença, mas sim por fatores de 2). "60k" em muitos micros não é 60 * 1024, mas geralmente entre 60000 e 61440, porque alguns desses 1440 são usados ​​pelos registros HW.
Nick T
@ NickT Sim, e às vezes pode haver um "buraco" onde há E / S, RAM ou outra coisa mapeada na memória.
Spehro Pefhany
14

Os primeiros engenheiros de computação optaram por adotar e adaptar unidades de prefixo SI às suas contagens de dados. Esses são os mesmos prefixos, mas contando usando binário em vez de métrico. Como 2 ^ 10 é próximo de 10 ^ 3, então cada prefixo do SI normalmente aumenta uma quantidade em 10 ^ 3, em vez disso, refere-se a um aumento de 2 ^ 10:

Prefix  Metric prefix        Binary prefix       Difference
k kilo  10^3=1,000           2^10=1,024           2.4%
M mega  10^6=1,000,000       2^20=1,048,576       4.9%
G giga  10^9=1,000,000,000   2^30=1,073,741,824   7.4%
T tera  10^12                2^40                10.0%
P peta  10^15                2^50                12.6%

Estes foram adotados como parte dos padrões JEDEC.

Isso tem vários benefícios, já que muito trabalho nesse campo ocorre em potências de 2. No entanto, como você pode ver, eles divergem da métrica e, agora, estamos lidando com grandes quantidades de armazenamento, onde a diferença entre as duas diverge significativamente. O problema foi tratado pela IEC e pelo NIST. Eles diferenciam os dois sistemas alterando o prefixo binário:

Prefix  Binary prefix
ki kibi  2^10
Mi mebi  2^20
Gi gibi  2^30
Ti tebi  2^40
Pi pebi  2^50

Eles foram padronizados pela primeira vez em 1998 e adotados no Sistema Internacional de Quantidades em 2008, mas a adoção é lenta e ainda existem empresas criando novos documentos usando o antigo padrão. Onde as empresas mudaram, eles encontraram usuários confusos e alguns voltaram ao estilo antigo.

Assim, usando o padrão mais antigo, 4Mb são 4 * 2 ^ 20 bits, o que equivale a 512 * 2 ^ 10 bytes.

Representado no padrão mais recente, seria 4Mib = 512 kiB, assumindo que 'b' são bits e 'B' são bytes.

Adam Davis
fonte
De acordo com este , que foi padronizada em 1998.
glglgl
1
Pode ser um padrão, mas todo mundo gosta. Como observado, há uma abundância de documentação mais antiga que, em teoria, as empresas devem mudar (você pode comparar isso com o custo da conversão dos EUA no sistema Metric). Esta pergunta e respostas tornam-se um bom lembrete de que terminologia devemos usar.
Alan Campbell
@glglgl O IEC e os outros os definiram em 1998, mas somente em 2008 os prefixos do IEC foram incorporados ao Sistema Internacional de Quantidades. Atualizei a resposta um pouco.
Adam Davis
10

No contexto das capacidades de memória, MB geralmente significa 1024 KB (em vez de 1000 KB). Você pode usar o MiB para evitar ambiguidade.

Coalhada
fonte
Dito isto, eu ouvi alguns fabricantes de discos rígidos usam 1000. É realmente lamacenta às vezes, mas realmente deve ser 1024.
DKNguyen
1

Os poderes antiquíssimos de 2 vs os poderes de 10 debatem. As empresas perderam milhões em processos por causa disso. Prefixos binários vs decimais, fazendo com que você perca 24 bits por quilo, somam-se realmente em giga bits e bytes. É por isso que meu disco rígido de 120 gb (classificação do fabricante) possui apenas 115,8 gb (tela do computador)

http://en.m.wikipedia.org/wiki/Binary_prefix tem uma explicação completa.

Transeunte
fonte
2
Não se esqueça dos disquetes antigos "1,44 MB". Que eram 1,44 vezes 1000 vezes 1024 bytes (1.474.560 bytes). Dupla confusão!
a CVn
1

Ao falar sobre RAM, ROM ou qualquer coisa conectada de alguma forma aos barramentos de uma CPU:

  • Um kilobit é 1024 bits.

  • Um megabit é 1024 kilobits.

  • 4 megabits são 4096 kilobits.

  • 4096 kilobits é 4194304 bits.

  • Um byte é de 8 bits.

  • 4194304 bits são 524288 bytes

  • Um kilobyte é 1024 bytes

  • 524288 bytes são 512 kilobytes.

É tudo por causa de 2n.

Majenko
fonte
2
Googling "4 megabits em kbit" me dá 4000 kilobits? Eu acho que esta página wiki explica a ambiguidade: en.wikipedia.org/wiki/Binary_prefix
Evert
5
A diferença decorre dos fabricantes de discos rígidos que usam 1000 por quilo / mega etc (para fazer com que as unidades pareçam maiores), enquanto todo o resto do armazenamento digital usa 1024. É apenas para combater essa confusão que o Mibibyte etc (MIllion BInary BYTEs) foi inventado.
Majenko 14/11
2
-1: estritamente falando, eu não diria até o momento em que "um kilobyte é 1024 bytes" - também pode ser 1000 bytes (ISO / IEC80000 é um dos contextos) ou 1024 bytes (uso comum, SI binário ); portanto, não posso concordar com esta resposta, a menos que você inclua as informações do seu comentário (kibibyte etc.) na própria resposta. Além disso, 1000 por quilo não é de OEMs de HD (embora seja mais comum para eles) - é da tabela de prefixos SI, que antecede o CS e os computadores de hoje em pelo menos meio século (ca. 1950-1960)
3
@ vaxquis: Meio século é um eufemismo. 'Quilo' deriva da palavra grega antiga para milhares, anterior a SI em milênios.
Marcks Thomas
3
O @vaxquis SI não define nem um byte nem um pouco, portanto, o uso de quilo com eles não é definido por ele. Em vez disso, é definido pelo padrão JEDEC 100B.01.
Ruslan
1

Infelizmente, a indústria de computadores usa os prefixos de quilo e mega inconsistentemente.

A memória semicondutora tende a ter dois tamanhos, porque simplifica o mapeamento de endereços. 1024 é próximo de 1000, então aqueles que trabalham com memória semicondutora começaram a usar quilo para significar 1024. À medida que os tamanhos de memória aumentavam, eles também começaram a usar mega para significar 1024 2 = 1048576 giga para significar 1024 3 = 1073741824 e assim por diante.

Sob essas definições de kilobyte e megabyte, a instrução do fabricante corresponde. 4 megabits binários equivalem a 4096 kilobits binários iguais a 512 kilobytes binários.


No entanto, outras partes da indústria de computadores, em particular os fabricantes de discos rígidos e os designers de interfaces de comunicação, usaram os prefixos de SI em seus significados originais. Os fabricantes de mídia flash do tipo disco também tendem a seguir esta convenção.

Algumas partes da indústria até misturaram as duas, por exemplo, um "disquete de 1,44 MB" é na verdade 1,44 * 1000 * 1024 = 1474560 bytes

O IEC tentou consertar a bagunça em 1998 introduzindo nomes e simbologia específicos para os prefixos binários. Os nomes são formados pegando as duas primeiras letras do nome da unidade SI e acrescentando "bi", para que o quilo se torne kibi, o mega se torne mebi e assim por diante. Para os símbolos, um "i" é adicionado para que k se torne ki, M se torne Mi e assim por diante.

No entanto, apenas porque uma organização de padrões introduz a terminologia não significa que as pessoas realmente a usam. Pelo menos na minha experiência, ainda é muito mais comum ver quilos, mega etc usados ​​em sentido binário do que ver kibi, mebi etc.

Peter Green
fonte
1

Como todo mundo já explicou, provavelmente você está sofrendo de uma halfcentury-old corte por IEC et al, que continua a gerar confusão enorme. Em vez de introduzir uma nova unidade da mesma dimensionalidade (ou prefixo), eles redefiniram o significado de outra unidade amplamente usada (prefixo), ao mesmo tempo em que não conseguiam estabelecer claramente qual definição se aplica em que contexto.

No caso de seu problema específico, basta inspecionar os mapas de memória conforme mencionado.


No entanto, peço a vocês que reconheçam um problema muito mais geral.
O problema é que dizer 123 kBnão leva a um entendimento claro e claro do lado do destinatário.

Este é um legado linguístico e uma grande deficiência de API do vocabulário de CS.

O que podemos fazer para resolver isso?

Bem, adivinhe: use prefixos binários .
O significado de 123 kiBé 100% claro e cristalino.
Significado de 123 kiB (126.0 kB)é ainda melhor.
Você não precisa ser um historiador de CS apenas para transmitir grandes números a alguém.
Ninguém se importa com empresas, discos rígidos, organismos de padronização, declarações de depreciação e assim por diante.
Não vale a pena. Basta usar os mebibytes binários. Eles não são ambíguos.

quem diga com sucesso 32 kibihertzem 2002. Eles foram ouvidos. Surpreendentemente conveniente, hein?

Finalmente, se você se recusar a adotar prefixos binários - você piorará o problema.
A única estratégia com a qual todos podemos cooperar para desescalar e corrigir esse maldito erro lingüístico é depreciar a ambiguidade e passar para kibi ... segundos (por que não?) E outras bi-unidades.

ulidtko
fonte
1
Uau! I deve lembrar-se de uso kibihertz mais!
pipe