본문 바로가기
컴퓨터 일반/용어

Little Endian 과 Big Endian

by 호군 2010. 11. 17.
반응형

출처 : http://cronos.tistory.com/15




Endian이란 메모리에 데이터를 저장할 때의 비트의 배열을 말한다.

  위의 그림에서 보듯이 Little Endian(이하 LE)는 0번째 비트가 먼저 저장이 되고 뒤에 상위 비트들이 저장되는 형식이고 Big Endian(이하 BE)는 15번째 비트가 먼저 저장되고 뒤에 하위 비트들이 저장되는 형식이다.
  흔히 CPU를 구분할 때 CISC와 RISC를 많이 쓴다. 대역폭을 나타내는 8비트, 16비트, 32비트 그리고 최신의 64비트로도 구분된다. 하지만 이 Endian도 관과해서는 안 되는 문제가 있다.
  실제적으로 하나의 CPU를 사용하여 제어하는 시스템에는 별다른 문제가 없다. 처음부터 CPU와 맞는 형식에 일관하면 되기 때문이다. 그러나 외부 장치를 장착하거나 통신(TCP 등)으로 들어가면 문제가 달라진다.
  Endian의 대립은 인텔과 모토롤라로 나누어진다. 초창기 시작부터 인텔의 CPU는 LE로 시작을 하였고 모토롤라는 BE로 시작을 했다. 두가지 모두 장단점을 가지고 있다.
  우선 LE는 쉽게 말해 컴퓨터가 알아보기 쉬운 비트이다. 데이터 저장이나 전송시 하위 비트(낮은 비트)가 먼저 전송이 되고 상위비트들이 전송되기 때문이다. 어떻게 보면 당연한 것이다.
  그에 반해 BE는 상위 비트가 먼저 전송된다. 이것은 사람이 보기에 편한 구조가 된다.

예를 들어보자..
  0x12 라는 헥사값을 보자. 우리가 보는 2진수는 '00010010'이 되는 것이다. LE에서는 '01001000'으로 전송을 하게 되고 BE에서는 '00010010'이라고 전송이 된다. 이러한 두가지 형식이 존재하기에 LE를 지원하는 CPU와 BE를 지원하는 외부 디바이스의 통신시 문제가 되는 것이다.

  실제로 본인은 ARM7 보드를 제작하면서 외부 오디오 코덱을 사용할 때 문제가 발생한 적이 있다. 다행히 소프트웨어적으로 IO비트의 순서를 바꿔서 해결했지만 그만큼 퍼포먼스는 떨어지게 된다.

왜 이렇게 만들었고 또한 호환을 시키지 못하는가? 이유는 새로운 CPU가 나올때마다 예전의 소프트웨어의 호환성 때문이다.
  인텔은 x86시절부터 LE를 사용해 왔기 때문에 버릴수 없다.(인텔이 도스모드를 버릴수 없어서 현재 윈도우에도 가상적인 x86모드가 존재한다)
서로의 문제에 가엾은 엔지니어가 생겨난다.
본인이 이런 글을 쓴 동기는 IDE에 있다.
하드 디스크나 CDROM을 달수 있는 규격인 IDE는 LE로써 동작을 한다.
그러나 사용되는 메인프로세서는 PowerPC 시리즈(BE)여서 문제가 발생하게 되었다.
비록 하드웨어적으로 지원이 된다하여 퍼포먼스도 거의 떨어지지 않지만 한번쯤 생각하게 하는 성가신 존재가 되는 것이다.
PC에서 쓴 규격 중에 문제가 되는 것은 많다.
RS232통신은 LE, TCP/IP는 BE..... 짜증나는 일이다. 여러 CPU를 만져본 사람이라면 더 신경쓰일 것이다.
자신의 CPU가 LE인지 BE인지 알아내는 간단한 소스를 소개한다.
아주 쉽지만 이것도 생각하는 데 오랜 시간이 걸렸을 것이다. 귀찮다~


<소스 출처 : www.joinc.co.kr>

#include <stdio.h>
#include <conio.h>

void main(void)
{
    int i = 0x00000001;
    if( (char*)&i)
        printf("Little Endian\n");
    else
        printf("Big Endian\n");
    getch();
}
//'1'을 넣어서 저장되는 값이 1이면 LE, 0이면 BE

 

반응형