'IA64'에 해당되는 글 2건

  1. 2009.08.24 Understanding IA64 6
  2. 2008.11.01 [Windows NT] IA64 misalignment exception 2
강의 및 기고2009. 8. 24. 20:38
반응형

I’ve expected the 64-bit computing world to come soon for a while, but it has taken more time than I expected even though VISTA has already been released. Anyway I am sure the 64-bit platform will be used everywhere sooner or later. Even now you can find a PC which supports x64 easily so I guess you have already had a chance to write your own 64-bit program at least x64. 

However, what about IA64? It’s not for the PC platform but for a server platform, but I think everyone should also be aware of IA64. Are you ready to write a code or debug your code on IA64? Because it has different architectural issues compared with x86 or x64, there are several things you need to know about IA64. I am about to describe the basics in this article.

...

( The following article contains more information on this topic. )




반응형
Posted by GreeMate
Windows OS2008. 11. 1. 01:59
반응형
오늘 IA64 (Windows Server 2003 for Itanium)에서 작업하다가 황당한 일을 당했다.

IA64 는 x86 계열과 달라서 메모리를 읽을 때 아무렇게나 읽으면 misalignment exception 이 발생한다. 예를 들어 다음과 같은 코드가 있다면

ULONG_PTR *pData = e0000008`8054a494;
ULONG_PTR ulValue;

ulValue = *pData;

세번째 라인이 실행될 때 data misalinment exception 이 발생하고 이것이 커널모드 드라이버라면 바로 블루스크린이 뜨고 만다.

8 바이트를 읽어서 ulValue 에 넣어주는 작업이기 때문에 pData 가 e0000008`8054a490 이나 e0000008`8054a498 이었다면 문제가 없지만 e0000008`8054a494 부터 8 바이트를 한번에 읽는 저런 작업은 허용되지 않는다.

이 사실을 알고 작업을 해 왔는데 오늘은 저런 상황에서도 블루스크린이 뜨지 않고 정상적으로 수행하는 경우를 당한것이다. 기존의 지식체제가 무너지면서 잠시동안 엄청난 혼란에 빠지고 말았다.

잠시 후 정신을 가다듬고 죽을 때와 죽지 않을 때의 차이점이 무엇인지 생각해 보니 프로세스가 64비트이냐 32비트이냐의 차이가 있다는 사실을 깨닫게 되었다. 유저모드의 프로세스가 64비트인 경우 여기서 I/O 를 요청한 것이 커널로 넘어와 저런 상황을 만들면 바로 블루스크린, 프로세스가 32비트인 경우 요청한 I/O 가 커널로 넘어와서 저런 상황을 만들면 정상 실행되는 것이다.

이렇게 되면 32비트 프로세스인경우 WOW64 가 관여한다는 점에 초점을 맞출 수 있을 것 같다. 주변 사람들과 의견을 나눠본 후 가장 유력한 가정은 32비트 프로세스가 동작하는 상황은 이미 에뮬레이션 모드이고 이 상태에서 커널에 들어오면 OS 가 misalignment exception 에 대하여 exception handling 을 해 준다는 것이었다. IA64 CPU 자체는 구조상 exception 이 발생할 수 밖에 없을테니 OS 가 핸들링을 해준다는 것은 나름대로 설득력이 있어 보인다.

한가지 문제는 왜 32비트 프로세스 환경에서만 핸들링을 해 주냐는 것이다. 64비트 프로세스 환경에서는 왜 핸들링을 안해줘서 죽게 만드는지 모르겠다. 그것도 좀 해주지. 그냥 확 내가 핸들링 해 줄까? 오... 그거 재미있겠다. 내가 예외 핸들러를 만들어 보자!


반응형
Posted by GreeMate