Addressing and Byte Ordering 이게 2단원 제목인데 정확히 뭘 얘기하는건가요???
시스템프로그래밍 책이 없어서 그런데 Addressing and Byte
추노꾼(121.152)
2014-09-10 13:10
추천 0
댓글 7
다른 게시글
-
c언어 메인함수선언시 [5]익명(122.32) | 14.09.10추천 0
-
아이 워치는 어찌 되는거냐?사장(182.211) | 14.09.10추천 0
-
추석 내내 여친이랑 격하게 쎾쓰를 했더니 [3]사장(182.211) | 14.09.10추천 0
-
프갤 일일 속담 4글(112.159) | 14.09.10추천 0
-
근데........ [3]0디스(twit12) | 14.09.10추천 0
-
대체휴일 킹왕짱 [1]관노(39.119) | 14.09.10추천 0
-
[cmd]제어판 실행 명령어 control0디스(twit12) | 14.09.10추천 0
-
프밍으로 이 사람 없앨 수 없냐? [2]0디스(twit12) | 14.09.10추천 0
-
gof 디자인 패턴 책 추천좀 ㅜㅜ [3]1(112.222) | 14.09.10추천 0
-
누가 애플상황 요약좀 [4]ㅇ(110.70) | 14.09.10추천 0
ㅂㅅ들아 답변좀 해주고가;;
메모리 주소
addressing 은 하드웨어적으로 어떻게 address 하는가에 대한 얘기. 즉.32비트시스템에서 1003 번지라고 어드레싱하면 메모리 1003번지에 접근할거 같지만, 보통 1000번지에 접근해서 4바이트를 읽어와. 그리고 그중 1 ~ 4바이트를 필요한 만큼만 추출해내지.예로 C에서 char 포인터로 어드레싱하면 그중 한바이트만 추출하고, short 포인터로 어드레싱하면 그중 두바이트만 추출해냄.
byte ordering 은 adressing과 관련된건데, 32비트에서는 메모리 입출력단위가 system word라는 단위로 입출력됨(바이트단위가 아님. 바이트를 저장하기 위해서는 기존에 존재하는 4바이트 값 과 저장하려는 바이트값을 연산해서 4바이트를 덮어씀). . 따라서 4바이트를 저장할때 ,예를 들어 0x12345678 을 저장한다면 0x78이 낮은 번지에 위치하는지, 높은 주소에 위치하는지에 대한 얘기로, 전자는 x86 계열(보통 우리가 쓰는 IBM 호환 PC) 에서 사용하는 방법이고, 후자는 68000 (예전 맥계열) 계열에서 사용하는 방법임.
32비트 시스템에서 system word는 보통 4바이트이고, 정확한 의미는 해당 시스템에서 메모리로 입출력하는 크기를 말함. 64비트 시스템에서 system word는 8바이트(64비트)이고, 1바이트를 입출력하더라도 실제로는 8바이트를 입출력하게 됨
윗댓글에서 전자를 little endian 시스템이라고 하고, 후자를 big endian system 이라함. byte ordering 문제가 되는경우로 예를 들면, 32비트 시스템A 에서 0x12345678 값을 소켓으로 전송해서 다른 PC B 에서 받아 저장했는 , byte ordering 이 다르다면, B에는 0x78563212형태로 저장되서 데이터가 깨져버림. 이를 위해 통신에서는 보통 network ordering 이라고 정의해서 big endian을 표준으로 함. 따라서 4바이트나 8바이트를 보낼때는 little endian system 에서는 big endian으로 byte ordering을 변경해서 보내고, 받을때도 비슷하게 변경해서 받아야함. 이런 어려움때문에 은행권등에서 통신을 할때는..
정수를 보내지 않고, 모두 문자열로 바꾸어서 보냄. 문자열로 보내면 이런문제가 생기지 않음. 온라인 게임같은경우 지들서버에서 지들 클라이언트로 지지고 볶으니, 정수를 사용함.