Endereçável por palavra ou byte? Terminologia correta

9

Aparentemente, um byte se estabeleceu como 8 bits (isso está correto?). Normalmente, a RAM e o NOR-flash podem ser acessados ​​em um nível bastante granular, mas cabe à arquitetura do sistema determinar se a menor unidade endereçável é 8 bits, 16 bits ou qualquer outra potência de número de dois bits. A terminologia correta seria chamar essa palavra de endereçável? Ou, perguntando de forma diferente, uma palavra é do tamanho da menor unidade endereçável? Ou existe algum outro termo para descrever isso?

O mabye nibble, byte, word, double word são todos variáveis ​​em tamanho de bit e definidos apenas pela arquitetura? E, portanto, é apenas coincidência que um byte seja sempre 8 bits? Por exemplo, alguém poderia criar um novo tipo de CPU e memória e definir seu byte como 16 bits?

Pergunta principal: Qual é o termo exato para o menor bloco de memória endereçável?

Pergunta secundária: Qual é o antônimo dessa palavra que estou procurando (por exemplo, usada no flash NAND)? Endereçável por página, endereçável por bloco? Ambos estão corretos ou é um impreciso?

Franz Kafka
fonte

Respostas:

9

Do ponto de vista da arquitetura de computadores, e com a ressalva de que a nomenclatura às vezes varia, especialmente quando há uma família de arquiteturas relacionadas que evoluiu por um longo tempo ou quando o departamento de marketing decide que os termos usuais devem ser usados ​​em outra maneira (para destacar melhor o produto usando um número maior ou ter um número simples para diferenciar mais ou menos produtos relacionados).

Uma palavra tem o tamanho normalmente usado para operações de número inteiro (geralmente expresso como tamanho do número inteiro ou dos registros de uso geral, ou seja, não endereço ou dados, barramentos internos ou externos, não registros de endereço nem registros de índice). Um problema comum é que, quando uma arquitetura é uma evolução de uma anterior, muitas vezes mantemos o termo word para o tamanho inicial e usamos "double word" ou "quad word" para o que é uma palavra, se você olhar para a arquitetura em isolamento. Historicamente, as palavras nem sempre são poder de dois (eu sei dos tamanhos: 12, 16, 18, 24, 32, 36, 60, 64 e não acho que meu conhecimento seja exaustivo).

Palavra endereçável significa que a memória é considerada como uma matriz de palavras e, portanto, nenhuma unidade menor possui endereços individuais.

Um byte tem várias definições. O termo foi introduzido para significar a unidade usada na codificação de caracteres em um momento em que a codificação de vários bytes não existia. É frequentemente usado como a menor unidade endereçável para máquina que não é endereçável por palavras (e desde que não seja um bit). Eu não acho que essas duas definições tenham dado um tamanho diferente. (nem um tamanho diferente de 6 ou 8 bits). Para máquinas endereçáveis ​​por palavras, geralmente significa alguma unidade menor do que uma palavra que a máquina possui suporte (por exemplo, o PDP-10 - um computador endereçável por palavras de 36 bits - tinha instruções de bytes que podiam manipular qualquer tamanho de 1 a 35 ou 36 bits). Hoje em dia também costuma ter 8 bits. Muitas vezes, várias dessas definições são praticamente equivalentes.

Byte endereçável caracteriza máquinas em que a memória é considerada como matrizes de bytes em um dos significados acima.

A mordidela AFAIK foi usada apenas para quantidades de 4 bits.

Por exemplo, alguém poderia criar um novo tipo de CPU e memória e definir seu byte como 16 bits?

Sim, mas não tenho certeza se faria muito sentido se mantivermos o uso da CA para usar byte para algo menor que a palavra. Ter um processador de 16 bits endereçável por palavras, sem suporte para algo menor que uma palavra, pode ser uma boa opção para um processador para fins especiais.

Secundariamente, qual é o antônimo dessa palavra que estou procurando? Endereçável por página, endereçável por bloco?

Endereçamento de bits, endereçamento de bytes e endereçamento de palavras são os únicos termos que eu já vi usar. Não faz muito sentido abordar apenas unidades maiores que a palavra no nível arquitetural. Atualmente, o endereçamento de palavras é usado apenas para processadores para fins especiais, como DSP. Eu não acho que o endereçamento de bits tenha sido usado para outra coisa que não a finalidade especial, exceto o IBM Stretch.

Sobre sua nova pergunta principal

Qual é o termo exato para o menor bloco de memória endereçável?

Não conheço nenhum usado em Arquitetura de Computadores ( byte foi usado para algo menor em máquinas endereçáveis ​​por palavras), mas é a definição usada por C para byte .

AProgrammer
fonte
Obrigado pela resposta elaborada. Ao reler minha pergunta, notei que era um pouco vago; portanto, ainda estou procurando uma resposta definitiva que talvez você possa adicionar à sua resposta: Qual é o termo exato para o menor bloco de memória endereçável? Ou não existe? Além disso, mudei a frase que você citou. Muito obrigado.
Franz Kafka
1
As regiões de bandas de bits em alguns ISAs de microcontroladores podem contar como endereçamento de bits. Uma parte do espaço de endereço converte endereços de palavras (pelo menos no ARM Cortex-M) em endereços de bits. Obviamente, isso suporta apenas o endereçamento de bits para uma pequena parte do espaço total de endereços (apenas 2MiB de 4GiB para o Cortex-M3). Além disso, a capacidade de endereçamento do conjunto de instruções é diferente da capacidade de endereçamento do hardware (por exemplo, o flash NAND é endereçável por página, a DRAM geralmente é endereçável na granularidade do bloco de cache, o cache L1 geralmente é o tamanho máximo de carga endereçável [com gravações menores, o ECC requer RMW].)
Paul A. Clayton
@ PaulA.Clayton Eu não conhecia o termo bit banding, mas sabia do 8051 que também o fornece. Eu não consideraria um ISA que o fornece como endereçável por bits, assim como eu considero o PDP-10 como endereçado por byte, parece muito distinto do caminho de dados usual.
APROGRAMmer
@ AProgrammer Não sei ao certo como definiria a capacidade de endereçamento ISA. Definir isso de acordo com a menor unidade de endereçamento externo suportada em uma única instrução fornece uma resposta diferente da definição de acordo com a unidade de endereçamento de um "endereço / ponteiro comum" (que exclui a faixa de bits e o endereço / ponteiro e melhor) mecanismos de compensação de grãos). O último (que você escolheu) parece mais natural em alguns contextos, mas o primeiro pode fazer sentido em outros contextos. A atomicidade (interrupções wrt ou coerência do cache wrt) também pode ser considerada (as instruções podem ser não atômicas).
Paul A. Clayton
1
@ PaulA.Clayton, tentei manter o que parecia uma prática estabelecida no campo, mas é um campo que ama estados intermediários e não tenho nem o talento nem a cultura de Andy Glew para poder fornecer uma descrição exaustiva, mas compreensível.
AProgrammer
1

O Burroughs B1700 era endereçável por bits (na verdade, o endereço referente ao espaço entre os bits dos quais era possível ler para frente ou para trás um número arbitrário de bits). (Portanto, não foi apenas o Stretch da IBM, que foi um fracasso.)

O B1700 foi projetado para ser a máquina mais flexível. Os aplicativos não deveriam ser escritos no nível de bit, mas diferentes ambientes criados para diferentes estilos de aplicativos. Esses ambientes foram programados em microcódigo, fornecendo os mecanismos das máquinas virtuais. Cada tempo de execução de idioma (SDL de sistemas para OS, COBOL para negócios, FORTRAN para COBOL) foi gravado como um ambiente microcodificado separado. Assim, a arquitetura pode ser adaptada a qualquer estilo de aplicativo futuro.

Wayne Wilner, um dos designers, afirmou que outras máquinas da época obrigavam os programadores a se deitarem no leito procrusteano de bytes e palavras de tamanho fixo. Realmente, o que cada ambiente de tempo de execução exigia eram estruturas de dados adequadas ao aplicativo. Infelizmente, a maioria das arquiteturas de máquinas atuais ainda é procrusteana (e, portanto, programada em linguagens como C que expõem essa estrutura de máquina, em vez de suportar estruturas orientadas a problemas).

Leituras adicionais sobre esta máquina fascinante e sua filosofia estão disponíveis em:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.590.2624&rep=rep1&type=pdf

e com mais detalhes:

http://ianjoyner.name/Files/Wilner.pdf

Então, por que o B1700 não é mais fabricado?

Burroughs tinha três faixas principais de computadores: os grandes sistemas B5000-B7000 (arquitetura ALGOL), os sistemas médios B2000-B4000 (arquitetura COBOL) e os pequenos sistemas B1000 (arquitetura do tipo que você quiser).

Os grandes sistemas eram realmente caros, até o B5900, que foi microcodificado em um processador barato para fornecer a pilha ALGOL. Jack Allweis, o designer do B5900, apontou que a grande arquitetura do sistema foi reduzida a computadores pequenos, mas o B1700 foi projetado para ser barato e não se expandir.

Assim, o B1700 a B1900, embora com muito sucesso na época, morreu por razões comerciais.

Os grandes sistemas Burroughs ainda estão disponíveis como Unisys ClearPath MCP e são executados no seu PC como uma emulação.

Como outra nota de rodapé, o IPC no B1700 foi uma dor entre diferentes máquinas virtuais, mas muito seguro (como os microkernels de hoje). Todos os grandes sistemas executavam processos no mesmo ambiente em que os dados podiam ser compartilhados de maneira segura, mas o IPC era direto. Isso ocorre entre arquiteturas de microkernel (Mach) e não-kernel (Linux). No entanto, o B5000 é uma máquina muito segura, mas também apresenta um bom desempenho.

A segurança é o maior problema da indústria atualmente, e realmente essas máquinas devem ser revividas e estudadas para mostrar o caminho a seguir.

user3717661
fonte
1

Pergunta principal: Qual é o termo exato para o menor bloco de memória endereçável?

Vou adicionar outra resposta para resolver isso de uma maneira diferente. Em hardware eletrônico, chamamos de dígito binário. Essa é uma entidade que pode representar dois valores. Geralmente pensamos em termos de 0 e 1, mas pode ser 3 ou 4, 365 ou 266, -3 ou -4, até 25 ou 37.

Qualquer sistema de sinalização pode ser usado para representar esses valores - sinalizador para cima, sinalizador para baixo, olhos abertos, olhos fechados, + 5v, -5v. Isso não é importante.

O importante é que filosoficamente estamos representando a menor quantidade distintiva de informações. Isso pode estar ativado, desativado ou verdadeiro, falso ou ativado, desativado ou 0, 1 - qualquer coisa que distinga dois estados separados. Podemos mapear esses valores para qualquer um dos sistemas de sinalização acima e muitos outros.

Agora, a pergunta é: como podemos testar e definir uma quantidade tão pequena de informações individualmente? Como eu disse na resposta anterior, o B1700 optou por abordar diretamente a menor quantidade de informações.

No entanto, a maioria das máquinas decidiu abordar apenas quantidades maiores de informações. Vamos considerar um grupo de quatro bits com um único endereço. Portanto, se obtivermos o valor de 1011 em nossa localização, como testamos o segundo bit da esquerda. Usamos uma máscara: testes 1011 e 0100 apenas no segundo bit. Então, como definimos o segundo bit como 1? Um pouco de aritmética da CPU diz que o valor será 15 ou 1111, de modo que quatro bits inteiros são gravados de volta na memória, mesmo que tenhamos realmente definido apenas um bit.

Agora isso não é útil para a maioria dos aplicativos. A maioria dos aplicativos representa dados ou informações, ativada, desativada, verdadeira, falsa, aberta, fechada.

Queremos dizer coisas como:

se aberto então ... else ... end

ou, mais provavelmente, aplicar isso a uma entidade maior:

se a porta estiver aberta então - provavelmente 'door.open' ... else ... end

'porta está aberta' ilustra endereçamento hierárquico. O endereçamento do sistema principal fornece à entidade a porta, e a porta possui seu próprio endereçamento, que dá acesso à abertura (e talvez outros atributos).

A maioria dos conjuntos também possui mais de dois valores possíveis (um conjunto com um valor nunca muda e, portanto, nem precisa de representação, portanto, zero bits). Para estes, enumeramos conjuntos, como (amarelo, verde, azul, roxo e nebuloso, vermelho). Eles definem conjuntos e tipos e o número exato de bits necessário é fornecido pelo número de valores (log2 (número de valores)).

Portanto, o endereçamento ideal depende realmente do tamanho da entidade usada no aplicativo - talvez até mesmo de entidades de tamanho variável. Mas na maioria dos hardwares, esses endereços devem ser traduzidos para o tamanho fixo definido pelo hardware. É claro que isso pode custar em termos de tempo. Também deve ser algo que um tradutor automático faz (compilador ou intérprete), não um programador, assim como esse sistema geraria código para testar e definir bits como acima (se os bits não forem diretamente endereçáveis).

Um ponto importante aqui não é pensar em termos de eletrônica - a eletrônica é apenas uma maneira muito boa e rápida de processar cálculos. Não há nada mágico na computação eletrônica que torne possível fazer cálculos que você não poderia fazer de outra maneira. A mágica está apenas na velocidade. É por isso que abstrações de baixo nível, como mecanismos de endereçamento de bits, bytes, palavras ou hardware (ponteiros) não são realmente tão úteis.

user3717661
fonte
-2

Nosso sistema de computador usado por padrão, memória endereçável de bytes. Sua única célula está apontando para informações de 8 bits. E o tamanho da célula não depende do comprimento do processador. Na memória endereçável por palavras, uma célula está apontando para uma informação de palavra, mas o tamanho da palavra depende do comprimento do processador. Quando usamos palavras endereçáveis, a memória cria uma ambiguidade. Portanto, nosso computador usa, por padrão, memória endereçável de bytes.

Mayank Jain
fonte
Bem-vindo ao site, mas não vejo como isso responde à pergunta.
David Richerby