요 며칠째 계속 VMWare하고 Multiple Processor 스펙, 그리고 IO APIC 스펙을 함께 보며 삽질을 하고 있습니다. 그런데 아무리봐도 뭔가 이상하군요.

 Multiple Processor 스펙에 보면 MP Floating Pointer Structure의 Feature 2 정보에 IMCRP 비트가 셋팅되어있지 않으면 IMCR 레지스터가 존재하지 않는 것이고...이런 경우 기본 모드는 Virtual Wire 모드라고 되어있습니다.

 앞서 http://kkamagui.tistory.com/497 에서 설명 드렸듯이 Vritual Wire 모드는 2가지 모드가 존재하고, 테스트해본 결과 Local APIC는 다 Enable 되어있고 IO APIC의 Redirect Table이 모두 Default 값으로 Disable 되어 있으므로 Virtual Wire mode with Local APIC 라고 볼 수 있습니다(아래 그림 참조).

사용자 삽입 이미지

 그런데 웃긴건, BIOS가 MP를 초기화하고 그 정보를 저장해놓는 MP Configuration Table의 I/O Interrupt Assignment Entries 정보를 보면 IO APIC가 활성화 되어있으며 8259 컨트롤러가 IO APIC의 첫번째 pin에 연결되어 있다고 나옵니다. 나머지 타이머나 키보드 등등도 다 IO APIC에 연결된 것으로 설정되있습니다. ㅡ_ㅡa...

 만약 그렇게 연결되어있다면 IO APIC의 Redirect Table에도 동일한 설정으로 저장되어있어야 맞는 것 같은데... IO APIC의 Redirect Table에는 아무것도 안들어있으니... ㅡ_ㅡa... 이게 당체 어디가 맞는 건지 알 수가 없군요. ^^;;;; Redirect Table에 아무런 값이나 막 넣어봐도 별 에러없이 동작하던데... VMWare의 BIOS가 신경을 안쓰는 건지... 아니면 원래 그런 것인지 모르겠습니다. ㅜ_ㅜ

 그리고 Symmetric I/O는 당체 어떻게 ON 하는 것인지... ㅡ_ㅡa... 그냥 Local APIC를 다 활성화 시키고 I/O APIC의 Redirect Table에서 Destination을 손보면 되는 것인지... 이것 참... Redirect Table의 비밀이 풀려야 다음 진도를 나갈 수 있을 것 같은데... 이게 쉽지 않군요. ^^;;;;

 에혀... 죽겠습니다. 혹시 아시는 분 계시면 제보 부탁드립니다. ^^)/~
 그럼 좋은 밤 되시길~ ;)


 아아~ 요즘 집에오면 틈틈이 Multiple Processor에 대한 내용을 파고 있습니다. 스펙을 볼때마다 느끼는 것이지만, 스펙을 분석하는 과정은 퍼즐 맞추기와 굉장히 비슷하다는 생각이 듭니다. 퍼즐을 맞추기를 시작할때는 퍼즐 조각만 보입니다. 그러다 이제 퍼즐 맞추기에 힌트가 되는 면을 찾게되고 하나, 둘 끼워맞추다보면 어느새 전체적인 그림이 눈에 들어오고 얼마 남지않은 조각을 이용해서 쉽게 맞출 수 있습니다.

 지금 제가 하고있는 과정을 퍼즐 맞추기 과정에 대응시킨다면, 면을 찾는 과정쯤 되겠군요. 면을 찾아 퍼즐을 놓는 과정은 놓은 조각을 주위에 힌트로 쓸 수 있어 좋은 반면, 놓을 자리가 많아졌으니 고민할 것도 많아지는 단점이 있습니다. 지금 제 상황이 딱 그 상황인데, 조각이 맞춰져 가면 갈수록 궁금한 점이 생기더군요.

 현재 프레임워크를 사용해서 듀얼 코어 중에 나머지 하나의 코어를 동작시켰습니다. 물론 Real Mode지요. 이제 보호모드로 전환시키고 인터럽트 처리를 수행해야하는데, Symmetric Interrupt Mode로 동작하려하니 문제가 몇가지 생겼습니다.
 첫번째는 두 CPU에 Interrupt가 동시에 발생할텐데, 한쪽이 처리했을 때 나머지 한쪽은 어떻게 할 것인가 하는 문제입니다.
 두번째는 동일한 Interrupt가 계속해서 발생할 때, 두 CPU가 Interrupt를 처리하는 타이밍이 다르다면 언젠가는 한쪽에서 Interrupt가 밀리게 되는 일도 있을텐데 이를 어떻게 판단할 것인가 하는 것입니다.

 지금은 별로 퍼즐을 모은 게 없어서, 큰 그림이 보이지는 않지만 조만간 결판을 내고 구현에 들어갈 생각입니다. 하지만 그 전에 잠부터 좀 자야겠군요. 요즘은 12시만 넘으면 죽을 것 같습니다. ㅎㅎ

 그럼 다들 좋은밤 되세요 >ㅁ<)/~
 
 ps) TV에서 데이 브레이크를 봤는데, 상당히 흥미롭더군요. 잘못하면 드라마에 빠져서 작업을 안할 위험도... ^^;;


 고군분투 끝에 드디어 살짝(?) 동작시키는데 성공했습니다. '파랑새를 찾아서'란 고전에서 보면 그토록 찾아 다니던 파랑새가 자기 집에 있다는 내용이 나옵니다. 답이 먼곳에 있는 것이 아니더군요. 역시 처음에 보던 INTEL 메뉴얼에 있었습니다. ㅠ_ㅠ

 여기저기 다니긴 했지만 비슷한 내용만 반복해 언급되어있고, 실질적인 코드는 없었습니다. 프로그래머라면 백마디 말보다 한줄의 코드가 더 중요한법~!!! 한참을 뒤지다 문득 INTEL 메뉴얼에 나와있는 어셈코드가 떠올랐는데, 바로 그 코드가 핵심이었습니다. 물론 아무것도 모르는 상태로 그 코드를 봐봤자 평범한 어셈블리어 코드일 뿐입니다만, 여기저기를 뒤진 탓인지 다시보니 딱 알겠더군요. ^^;;;;

 일단 Real Mode에서 Halt 상태로 되어있는 Application Processor를 활성화시켜서 콘솔화면의 좌측 상단에 색깔을 바꿔가면서 문자를 찍도록 수정했습니다. 테스트를 하는 과정에 약간 문제가 있었지만, 그래도 잘 동작하네요. ^^)/~

사용자 삽입 이미지

 이제 Application Processor를 32bit 보호 모드로 바꾸고 실제 태스크를 할당해서 실행해볼 생각입니다. 조금만 더하면 어느정도 마무리가 되겠네요. 정리되면 또 올리겠습니다.

 다들 좋은밤 되세요 ^^)/~~



 요즘 몸이 좀 허해져서 그런지 오늘 아침에 코피가 났습니다. 어의가 없더군요. ㅡ_ㅡa 뭐 그래도 요즘 잠을 별로 안자고 있기 때문에 그럴수도 있겠다는 생각을 했습니다. ^^;;; 설마 몸에 이상이 있을라구요 ㅎㅎ

 Multiple Processor 분석 쪽은 일단 문서를 정리하고 정리된 문서를 바탕으로 실제 테스트를 해보는 방식으로 진행하고 있습니다. 문서만 주구장창 읽으니 눈에 보이는 것이 없어서 더욱 깜깜하더군요. 그래서 가상머신을 이용해서 직접 테스트를 해봤는데, 의외로 결과가 잘나옵니다. 신기하네요 @0@)/~ 물론 지금은 아주 약소한 단계의 테스트만 진행하고 있습니다. ^^;;;;

 내일 일하러 가면 이틀동안 쉬는군요. 집에 내려갈까 가지말까 심하고 고민하고 있습니다. 내려가는데 걸리는 시간도 문제지만 몸이 피곤해서... ㅜ_ㅜ... 만약 안내려간다면 주말에 MP쪽 문서에 All in할 생각입니다. 이게 빨리 끝나야 본래의 목적인 Virtualization을 볼 수 있어서 ㅎㅎㅎ

 아우~ 오늘은 좀 일찍 자야겠군요. 자기 전에 오늘 테스트한 스샷 하나 올립니다.
사용자 삽입 이미지

 그럼 좋은 밤 되세요 ^^)/~


+ Recent posts