'Little Endian'에 해당되는 글 1건

  1. 2008.09.11 little endian과 big endian
Computing2008. 9. 11. 11:48
[ Endian ]
가장 중요한 비트(또는 바이트)가 처음으로 오는 이진 데이터의 전송 또는 저장의 방식을 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
--------------------------------------------------------
| high-order byte | low-order byte |
--------------------------------------------------------
↑ ↑
addr A+1 addr A

여기서 오른편에서 왼편으로 주소가 증가한다.
낮은 주소가 낮은 바이트라는 논리이다.

Big endian byte order
---------------------------------------------------------
| high-order byte | low-order byte |
---------------------------------------------------------
↑ ↑
addr A addr A+1

여기서는 왼편에 있는 것이 오른편보다 낮은 주소이다

예를들어... "NAVER"라는 단어가 메모리에 저장된다면,
빅 엔디안의경우
100번지 --- "N"
101번지 --- "A"
102번지 --- "V"
103번지 --- "E"
104번지 --- "R"
의 순서로 저장이 되며,

리틀 엔디안의 경우
100번지 --- "R"
101번지 --- "E"
102번지 --- "V"
103번지 --- "A"
104번지 --- "N"
의 순서로 저장이 됩니다.

이것은 개념적인 예시이며,
실제로는 바이트와 비트로 저장되므로(01100111 이런식으로) 좀더 복잡하다.


현재 컴퓨터 시스템에서 많이 쓰이고 있는 바이트 순서는 다음과 같다.
-----------------------------------------------------------------------------
| big endian : sparc, IBM 370, Motorola 68000, Pyramid |
-----------------------------------------------------------------------------
| little endian : Intel 80x86(IBM PC), DEC VAX, DED PDP-11 |
-----------------------------------------------------------------------------

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)의 방식을 채택하고 있기 때문에 훨씬 더 쉽게 전환될 수 있다는 점이다.

ps) 출처 페이지가 폐쇄되어 안타깝습니다.
Posted by 버터백통