O que determina o endianness

6
  1. Eu queria saber se endianness só depende da CPU?
  2. Depende de outro hardware, como memória, dispositivo de armazenamento secundário?
  3. Depende do sistema operacional? Por que em Wikipedia , isso parece ser verdade?
por Tim 08.07.2011 / 22:34

4 respostas

8

O endianness é sobre dados numéricos quando um número é grande demais para caber em um byte. Por exemplo. Texto ASCII é apenas um byte seguido, não preocupado com o endianness.

Se colocarmos um número pequeno como 42 em um inteiro de 32 bits (4 bytes), vemos que com big endian (BE) é usado apenas o último byte e com little endian (LE) apenas o primeiro byte é usado :

|    | byte[0] | byte[1] | byte[2] | byte[3] |
|----+---------+---------+---------+---------|
| BE |       0 |       0 |       0 |      42 |
| LE |      42 |       0 |       0 |       0 |

Endianness de arquitetura é o endianness da CPU. A RAM não faz matemática, por isso não importa.

Dispositivos como placas de som se importam (por exemplo, áudio de 16 bits a 44100kHz é principalmente BE), mas é responsabilidade do sistema operacional (driver de dispositivo) dizer à CPU para talvez converter o endianness antes de enviar para a placa de som. / p>

Em redes, a maior parte é big endian , portanto, o sistema operacional tem que informar processadores little endian para byte swap inteiros como pacotes de rede são construídos.

Os sistemas de arquivos vêm em ambos os endiannesses. Por exemplo. FAT32 é LE, portanto, apenas as arquiteturas BE precisam fazer byte ao usar FAT32.

Na programação de rede C, você deve se lembrar de usar htonl() e ntohl() -functions para converter entre ordem de byte host (nativa) e de rede. Quando o programa é compilado em um sistema big endian, as funções não fazem nada. Nos sistemas little endian eles trocam ordem de bytes.

Arquitetura endianness é uma coisa de nível de bytes. A ordem / numeração de bits é praticamente irrelevante quando se considera o endianness da arquitetura. MAS é sempre bom saber:)

O LSB (Least Significant Bit) primeiro é o LE do bit world e o MSB (Most Significant Bit) primeiro é o BE do mundo bit.

A maioria dos barris de CPU e de série parece ser (surpreendentemente) LSB mesmo em sistemas big endian como o SPARC. Além disso, a Ethernet é LSB, apesar de os bytes serem em grande parte endianos. Por outro lado, por exemplo PPC é big endian e MSB primeiro.

    
por 09.07.2011 / 02:26
12
  1. A CPU controla o endianness. Algumas CPUs podem alternar entre big endian e little-endian. As arquiteturas x86 / amd64 não possuem esse recurso.

  2. O endianness é uma coisa implícita com instruções load e store na CPU. Dados que não caberão em um byte (0-255) precisam ser lidos e escritos em uma série de múltiplos bytes, e obviamente esses bytes precisam ser lidos e escritos em uma ordem consistente. Os projetistas da CPU também precisam escolher uma ordem na qual os bytes dos registros sejam lidos e gravados. A ordem não é importante se os dados nunca saírem da CPU ou da RAM, mas quando você entra em coisas como gravar dados em registradores de E / S (que podem não esperar a mesma ordem) e setores de disco (onde outros sistemas podem ler os dados) ) então se torna importante e um padrão externo é necessário. Esse padrão geralmente faz parte da especificação de hardware ou de uma especificação de formato de arquivo. Qualquer programador / projeto que se preze vai projetar formatos de persistência para levar isso em conta, programação ruim ou programação que tenha assumido que as coisas sempre serão lidas em uma única arquitetura podem revelar uma falha.

  3. Um sistema operacional lida intensamente com registros de E / S e setores de disco, de modo que o nº 2 se aplica aqui. Uma área particularmente importante que precisa de um padrão comum entre todas as CPUs é a implementação de sistemas de arquivos. É por isso que existem compilações mips e mipsel separadas do Debian e quais não.

por 08.07.2011 / 23:14
3
Endianness é simples a ordem que o processador coloca os bits de um número binário. A RAM não se importa com a ordem em que os dados são salvos, nem com o disco rígido (já que eles não tomam nenhuma ação sobre o conteúdo do fluxo de dados, basta executar diretivas do processador / chipset em onde colocá-lo). Os sistemas operacionais podem ser construídos para trabalhar com ambas as capacidades (Mac OS X, por exemplo).

    
por 08.07.2011 / 22:50
2

O endianness não depende necessariamente da CPU. Por exemplo, a Ethernet e a maioria dos protocolos de baixo nível TCP / IP são big endian, independentemente da CPU e, esperamos, máquinas baseadas em x86 ainda podem se conectar à Internet. Da mesma forma, sistemas operacionais rodando em uma CPU big end irão ler FAT32, o sistema de arquivos little endian, ou usar placas PCI little endian, e assim por diante.

    
por 08.07.2011 / 23:38