Endianness - Arquitetura de computadores

O que é Endianness? Como funciona a ordenação e organização dos bytes nos "data word"? Quando o Endianness interfere na migração entre plataformas?

[ Hits: 8.958 ]

Por: Carlos Henrique Y Furushima em 28/07/2014 | Blog: http://dbafurushima.com.br/index.html


Funcionamento / Interferência entre migração



Como funciona a ordenação e organização dos bytes nos "data word"?

Cada local de armazenamento na memória está associado com um índice, chamado seu endereço, que indica a sua posição. Uma data word hexadecimal "A1B2", são armazenados em endereços de memória consecutivos da seguinte forma "0A 01 0B 02", esse data word forma um conjunto de 4 bytes, que resulta em 32 bits.

O posicionamento do data word em memória principal, determina-se a ordenação e organização dos bytes. Há duas possíveis convenções de organização, são elas:
  • Big-endian: Armazena o byte mais significativo de um data word no endereço menor.
0A010B02 = 0A010B02

Os bytes são guardados por ordem decrescente do seu "peso numérico" em endereços sucessivos da memória.
Significa que o byte de ordem mais elevada do número está armazenado no endereço de memória mais baixo e de ordem mais baixa, no endereço mais elevado.


  • Little-endian: Armazena o byte menos significativo de um "data word" no endereço menor.
0A010B02 = 020B010A

Os bytes são guardados por ordem crescente do seu "peso numérico" em endereços sucessivos da memória.
Significa que o byte de ordem mais baixa do número está armazenado no endereço de memória mais baixo e de ordem mais elevada, no endereço mais elevado.

Faremos uma analogia com números decimais:
  • "A B C" em Big-endian :: significa "C B A" em Little-endian.
  • "1 2 3" em Little-endian :: significa "3 2 1" em Big-endian.

Isso mostra que é necessário um tratamento de conversão se quisermos fazer migrações entre plataformas.

Quando o Endianness interfere em migração entre plataformas?

Com base nos conteúdos anteriores, chegamos à conclusão que a forma de ordenação dos data word é a causa de incompatibilidade de programas (software) entre plataformas computacionais, ou seja, o tratamento de baixo nível do sistema computacional provoca essa situação, uma vez que as plataformas tratam a entrada e saída dos dados de forma não similares.

A solução para esse problema, muitas vezes, é a recompilação do programa computacional, ou seja, a reinstalação do software. Assim, o código escrito em uma determinada linguagem de programação em alto nível é compilado, respeitando a sintaxe do compilador e é gerado o executável em linguagem de máquina para a plataforma.

Assim, um código em linguagem de alto nível pode ser compilado para qualquer plataforma, desde que o compilador suporte a geração do executável para esta determinada plataforma.

Se o mesmo código em Linguagem C (código escrito em uma arquivo TXT) for compilado respeitando a sintaxe de cada compilador em suas plataformas, o resultado do programa será o mesmo, pois programas iguais geram resultados iguais.

Neste caso, o Endiannes não interfere, uma vez que programas iguais (código) geram resultados iguais (programa em execução).

Em caso de não existência do passo 1, ou seja, a compilação em alto nível, o Endianess é extremamente relevante, pois, como dito anteriormente, essa convenção orquestra o tratamento de baixo nível do sistema computacional, o que pode tornar a execução do programa ininteligível para o sistema computacional.


Página anterior    

Páginas do artigo
   1. Introdução
   2. Funcionamento / Interferência entre migração
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Instalando placa de captura de TV no Linux

Open Hardware: Quem topa o desafio?

Artigo número 100: AR.Drone - O robô voador com Linux embarcado

Instalando Token da OAB no Linux Mint 17.3 (Rose)

Modens PCTEL/LG/VIA sem complicação (talvez um pouquinho)

  
Comentários
[1] Comentário enviado por phoemur em 28/07/2014 - 12:40h

Muito bom.

Para saber seu endianness eu uso:

lscpu | grep -i byte

ou em python:

python -c 'import sys; print(sys.byteorder)'


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts