2024. 12. 13. 16:33ㆍNetwork
읽기 전, 꼭 알아야 할 지식
1. cpu가 명령어와 데이터를 처리 하기 위해 프로세스 및 스레드가 메모리에 적재되야 함.
2. cpu가 한번에 처리할 수 있는 데이터 최대 크기를 워드(word)라고 함.
-> 1 워드는 32 bit를 한꺼번에 처리함
-> 현재 cpu가 한번에 다루는 데이터 크기는 64 bit 즉, 2word임.
3. 메모리에 담긴 데이터들이 메모리의 어느 위치에 담겼는지 알아야 하니 각 메모리는 주소값을 사용해 접근 가능
MSB, LSB
Binary Representation: 11010101
Bit Positions:
MSB -> Position 7: 1
Bit 6: 1
Bit 5: 0
Bit 4: 1
Bit 3: 0
Bit 2: 1
Bit 1: 0
LSB -> Position 0: 1
- MSB : 가장 왼쪽에 위치한 bit를 나타내는 말, 최상위 비트이므로 가장 큰 값을 가진다는 특징도 존재함
- LSB : 가장 오른쪽에 위치한 bit를 나타내는 말, 최하위 비트이므로 가장 작은 값을 가진다는 특징도 존재함
* MSB, LSB의 위치는 고정이고 MSB를 사용하면, 숫자 크기를 결정하는데 도움을 주지만 LSB를 사용하면, 전체 숫자에 큰 영향을 주지는 않지만 홀수, 짝수 구분과 같은 경우에 사용함.
엔디안 방식
- cpu가 메모리에 데이터를 저장하고 처리하는 방식은 'byte order' 즉 바이트 순서에 따라 달라짐.
Big endian
- 메모리의 주소 값의 가장 낮은 주소 값부터 차례대로 가장 큰 바이트부터 저장하는 방식
-> MSB부터 차례대로 메모리에 적재됨
- 0x12345678 이면
메모리 주소 | 0x1000 | 0x1001 | 0x1002 | 0x1003 |
저장된 값 | 0x12 | 0x34 | 0x56 | 0x78 |
Little endian
- 메모리의 주소 값의 가장 낮은 주소 값부터 차례대로 가장 작은 바이트부터 저장하는 방식
-> LSB부터 차례대로 메모리에 적재됨
- 0x12345678 이면
메모리 주소 | 0x1000 | 0x1001 | 0x1002 | 0x1003 |
저장된 값 | 0x12 | 0x34 | 0x56 | 0x78 |
언뜻 보면 빅 엔디언에서 메모리에 적재된 순서를 뒤집기만 하면 되는거 아닌가? 라는 생각을 할 수 있음
하지만 정해진 규칙에 맞게 하나의 데이터의 크기만큼 뒤집는 것임.
예)
1 byte = 8bit로 뒤집는다면, 바이트 하나씩 뒤집는 것.
2 byte = 16bit로 뒤집는다면, 2 바이트씩 뒤집는 것.