IT/프로그래밍 관련
가장 중요한 비트(또는 바이트)가 처음으로 오는 이진 데이터의 전송 또는 저장의 방식을 Big-Endian이고 이와 반대되는 방식을little-endian이라 부른다.
endian이란 데이터의 저장 및 전송 방식을 구분할 때 사용되어 지는 것으로 컴퓨터가 여러 바이트로 된 데이타의 저장시 같은 바이트 순서를 따르지 않는다. 8-비트 바이트를 사용하지 않는 컴퓨터들은 점차 사라져 가고 있지만 이러한 바이트의 순서에 대해서는 명확한 표준이 없으므로 문제점으로 남아 있는 것이다. 2바이트로 이루어진 16-비트 정수의 경우를 예로 들어 보면 이것의 저장 방법에는 하위 바이트를 먼저 두는것 (이를 little endian이라고 한다)과 상위 바이트를 먼저 두는 것(이를 big endian이라고한다)이 있다.
◐ 데이타의 저장 형식
여러 바이트가 하나의 데이타를 저장할 때 - little endian: 낮은 주소에 하위 바이트를 저장 - big endian: 낮은 주소에 상위 바이트를 저장
◐ big endian
- high-order byte low-order byte address a address a+1 - IBM370, Motorola 68000, Pyramid
◐ little endian - Intel 80x86, DEC VAX, DEC PDP-11
첫번째의 경우는 다음과 같다.
Little endian byte order
여기서 오른편에서 왼편으로 주소가 증가한다. 낮은 주소가 낮은 바이트라는 논리이다.
Big endian byte order
여기서는 왼편에 있는 것이 오른편보다 낮은 주소이다
현재 컴퓨터 시스템에서 많이 쓰이고 있는 바이트 순서는 다음과 같다.
32 비트 정수의 경우에는 이런 현상이 더욱 심각한데요 시스템에 따라 16 비트 부분이 서로 바뀌어 있다. 전산망 규약에서 이 문제에 대한 해결 방법은 망 바이트의 순서를 확정짓는 것이다. TCP/IP, XNS, SNA 규약들은 규약 머릿부에 쓰이는 16-비트 정수와 32-비트 정수에 모두 big endian을 사용한다. (실수 데이타 부분에 대해서는 차이가 심하지만 다행이 규약에서는 정수 영역만 다룬다)
현재의 대다수 상용UNIX가 돌아가는 RISC프로세서의 경우에는 Big-Endian(주 참조)방식을 사용하는데 반하여 Intel프로세서 및 이에 돌아가는 SCO의UnixWare는 Little-Endian방식을 사용하고 있다. 따라서 서로 다른 환경을 하나로 통합하는 데에는 많은 노력이 들며 이에 따른 시스템의 성능저하가 예상되므로 결코 쉬운 문제가 아니다.
2-3년전 HP가 IA-64에 대한 지원계획을 발표하며 실제로 SCO와 공동으로 IA-64용 UNIX의 개발을 시도했었는데 양사는 얼마가지 않아서 'Endian'문제에 부닥쳤고 양사의 입장차이로 인하여 HP와 SCO의 공동개발 관계는 파경을 맞이하였던 것이다.
MOTOROLA, IBM등은 Big-Endian 환경에서 개발되었다. AIX 역시 Big-Endian 환경하에서 개발되었고 이의 환경에 익숙해져 있다. 그러나 결정적인 차이는 AIX는 개발 초기부터 다양한 아키텍처의 플랫폼을 지원할 수 있도록 AIX 코드의 많은 부분이 '엔디안 중립'(Endian Netural)의 방식을 채택하고 있기 때문에 훨씬 더 쉽게 전환될 수 있다는 점이다.