Sun 64비트와 32비트 어플간의 메시지큐 통신

angra의 이미지

4월 한달 잠시 알바로 여의도에 있는 모증권사에서 일하고 있습니다.
거기서 64비트 어플리케이션과 32비트 어플리케이션간의 메시지 큐로 데이터
통신을 할 일이 있어서 잠시 도와준적이 있는데, 의외로 Sun에서 호환성
문제를 잘 해결해 놨더군요. 덕분에 괜히 코딩하는 하는 사람이 메시지타입을
4바이트로 처리를 하는 바람에 2시간동안 디버깅을 했네요 ㅠㅠ

결론은 메시지큐 통신을 할때 프로그램간 아무것도 할 것이 없다입니다.
64비트 어플에서 괜히 long형이 8바이트라고 4바이트짜리 int로 변화해서
처리했었는데, 이렇게 바꿀 필요가 없다더군요. 그냥 64비트 어플에서도
long형을 쓰면 그대로 34비트 어플에서도 문제 없이 받는다입니다

덕분에 좋은 경험했습니다 ^^

vamf12의 이미지

확실히 그런 점에서 Sun의 Solaris는 대단합니다.
운영체제가 발전하면서 발생하는 호환성문제들을 부드럽게 잘 해결해주는 것에 항상 감탄하고 있습니다.

오호라의 이미지

그러니깐~ 돈주고 사지...

Hello World.

musik의 이미지

메시지큐로 주고 받는 전문 구조체의 정렬이 우연히 맞았던 것 때문일 것이라고 추측하는데... 아닌가요?

angra의 이미지

우연히 맞았다면 다른 시스템에서 난리났을겁니다. 프로그램에서 메시지 타입을 long, int, short 변환해가면서
다 테스트해봤습니다. ^^

appler의 이미지

정말 매끄러운 데요.....

-_-;;;우연이 아니라요...

언제 그런 시스템 한번 만들어보나..ㅠㅠ.


laziness, impatience, hubris


laziness, impatience, hubris

不恥下問 - 진정으로 대화를 원하면 겸손하게 모르는 것은 모른다고 말하는 용기가 필요하다.

dalili의 이미지

64비트와 32비트 통신이 불가능한 이유

1. 데이터 타입의 크기 차이 문제
2. 데이터 Alignment 문제
- 32비트에서는 4바이트로 64비트에서는 8바이트로 정렬 시킵니다. 단, __attribute__ ((packed)) 를 선언해주면 되긴 됩니다만...
3. 부동 소수점 문제
- long double 같이 소수점을 사용하고 데이터 타입 크기가 다르면 지수, 가수 이런 비트들이 안 맞아서 문제가 생깁니다

64비트에서 32비트로 long형을 보낼때 엄연히 따지면 안됩니다
little endian을 사용할 테니까, 32비트 최대값 이내의 수면 괜찮습니다
하지만 32비트 long의 최대값을 넘어서면 64비트에서는 표현이 되지만, 32비트로 넘어오면 문제가 생기겠죠

제가 알아 본 바로는 32비트와 64비트 끼리는 비효율적으로 뜯어 고치지 않는이상 통신이 힘들던데요

지리즈의 이미지

메세지 큐는 64bit일까요? 32bit일까요?

라고 쓸려고 했는데...
어차피 구조체로 넘겨버리면, void 타입이라 자료형이 무의미 해질 것 같네요.

There is no spoon. Neo from the Matrix 1999.

There is no spoon. Neo from the Matrix 1999.