메모리에 바이트를 밀어 넣는 순서
일반적으로 메모리는 데이터를 바이트 단위로 저장하고 관리한다. 하지만 메모리는 데이터를 CPU로부터 바이트 단위로 받아들이지 않고, 4바이트(32비트) 혹은 8바이트(64비트)인 워드 단위로 받아들인다.
그렇기 때문에 한 주소에 1바이트씩 저장하는 메모리는 4바이트의 데이터를 4개의 주소에 저장하고, 8바이트의 데이터를 8개의 주소에 저장한다.
엔디안
엔디안이란 데이터를 메모리나 저장소에 저장할 때, 여러 바이트의 순서를 지정하는 방식이다. 나라마다 글을 읽는 순서가 다르듯, 메모리에 바이트를 밀어 넣는 순서도 다르다.
주로 빅엔디안과 리틀엔디안으로 나뉜다.
빅 엔디안
빅 엔디안은 낮은 번지의 주소에 상위 바이트부터 저장하는 방식을 의미한다. 상위 바이트는 데이터에서 가장 큰 값(MSB)을 나타내는 부분이다. 10진수 123의 가장 큰 값은 100이다. 마찬가지로 16진수 1A2B3C4D에서 가장 큰 수, 최상위 바이트는 1A이다.
예를 들어 1A 2B 3C 4D를 빅 엔디안 방식으로 저장한다면, 낮은 주소번지부터 1A, 2B, 3C, 4D 순으로 저장될 것이다.
1A - a
2B - a + 1
3C - a + 2
4D - a + 3
리틀 엔디안
리틀 엔디안이란 낮은 번지의 주소에 하위 바이트부터 저장하는 방식을 말한다. 하위 바이트는 가장 작은 값(LSB)을 의미한다.
MSB와 LSB?
MSB(Most Significant Bit)는 숫자의 크기에 가장 큰 영향을 미치는 유효 숫자, 쉽게 말해 가장 왼쪽에 있는 비트를 말한다.
반대로 LSB(Least Significant Bit)는 숫자의 크기에 가장 적은 영향을 미치는 유효 숫자, 쉽게 말해 가장 오른쪽에 있는 비트를 말한다. 예를 들어 10진수 123이 있을 때 MSB는 1이고 LSB는 3이 될 것이다.
정리하자면 빅엔디안은 중요하고 큰 데이터부터 지정해 나가는 방식이고, 리틀 엔디안은 덜 중요하고 작은 데이터부터 저장해나가는 방식으로 볼 수 있다.
마찬가지로 1A2B 3C4D를 리틀 엔디안 방식으로 저장하면 낮은 주소 번지부터 4D, 3C, 2B, 1A 순으로 저장되게 된다.
1A - a + 3
2B - a + 2
3C - a + 1
4D - a
리틀 엔디안과 빅 엔디안 장단점
빅 엔디안
- 일상적으로 읽고 쓰는 숫자 체계를 읽는 순서와 동일하기 때문에 메모리 값을 직접 읽기가 편하다.
- 디버깅에 편리하다.
리틀 엔디안
- 수치 계산(자리 올림 등)이 편하다. (128 + 133의 식을 계산 할때 일의 자리부터 시작하여 올림 계산 하는 걸로 이해하면 된다.)
- 이 점 때문에 현대 CPU나 메모리 체계에서 많이 사용되는 방식이다.
그럼 서로 다른 시스템 간에 데이터를 전송할 때는 엔디안을 고려해야 하나? 오늘날 데이터 송수신 간에 사용자가 엔디안을 고려하지 않는 이유는 네트워크 전송 시 엔디안이 빅 엔디안으로 통일되었기 때문이다.
출처
'Knowledge > 컴퓨터구조&운영체제' 카테고리의 다른 글
[컴퓨터구조] 캐시메모리 (0) | 2024.11.30 |
---|---|
[컴퓨터구조] 메모리의 논리주소와 물리주소 (1) | 2024.11.30 |
[컴퓨터구조] 메모리 - RAM (1) | 2024.11.27 |
[컴퓨터구조] 파이프라이닝을 통한 명령어 병렬 처리 (0) | 2024.11.27 |
[컴퓨터구조] CPU 성능 향상을 위한 설계 (클럭, 코어, 스레드) (0) | 2024.11.25 |