2008. 12. 20. 21:29
     

지금 A20 Gate에 대한 내용을 정리하고 있습니다. 뭐 예제로 보는 것이 가장 확실해서 간단한 예제를 하나 만들어 제 PC에 동작시켜 봤는데... 일반적인 상황이라면 분명히 죽어야 하는 예제인데 이상하게 버젓이 살아서 동작하는 겁니다. @0@... 혹시나 해서 이것 저것 테스트 해봤습니다만, A20 Gate 쪽이 완전히 동작하지 않는 것 같았습니다. 이제 XT 시절에 쓰던 프로그램을 다시 돌릴 일이 없으니, 무의미하긴 하지만.... 없으니 뭔가 좀 허전하더군요. 에러를 발생시키기 위해서 A20 Gate를 비활성화 했음에도 불구하고 잘 동작하는 것 보면 작동 안 한다고 보는 것이 맞겠지요. ㅎㅎ

혹시나 해서 후배 PC에 돌려봤는데, 일단 후배 PC는 자동으로 A20 Gate가 켜지는 건 아닌 것 같았습니다. A20 Gate를 끄고 OS를 부팅했을 때는 계속 리부팅 되더라구요. ^^;;; 그런데 이상한 점은 64bit 모드로 전환되지 않는 다는 것이었습니다. 정상적인 상황이라면 64bit로 전환되어 커널이 실행되어야 함에도 불구하고 64bit로 전환하는 곳에서 멈춰 있었습니다. ㅡ_ㅡa...

원인은 좀 더 살펴봐야 알겠지만... 살짝 골치가 아프네요. ㅎㅎ 이거 원... 프로세서가 64bit를 지원하는 것 만으로는 안되는 것이 있나 봅니다. ㅠㅠ 어흑... 머리야...


ps) A20 게이트와 주소 공간에 대해서는 따로 정리를 한번 했습니다. ;)

http://kkamagui.tistory.com/619


Android App

Posted by 호기심 많은 kkamagui(까마귀, 한승훈)

댓글을 달아 주세요

  1. dbdan 2008.12.21 08:56  댓글주소  수정/삭제  댓글쓰기

    Fast A20 Gate를 읽어 보세요.
    요즘 NetBurst FSB 기반의 Intel Processor들은
    아예 "A20M"이라는 pin이 있던데요.

    http://wiki.osdev.org/A20_Line#Fast_A20_Gate
    대충 보니 APM이나 ACPI랑 관계있거나
    Pentium Processor의 전력 설정과 관계된
    io port 92h를 사용하는 것인가봐요.

    • Favicon of http://kkamagui.tistory.com BlogIcon kkamagui 2008.12.21 13:31  댓글주소  수정/삭제

      아... 제가 보던 책의 내용이 인터넷에도 정리되어 있군요.

      IO Port 0x92 번은 시스템 포트로써 BIOS가 사용하는 포트입니다. ^^;;;

      Fast A20 Gate는 그냥 예전에 Keyboard Controller를 통해 연결했던 A20 Line을 시스템 포트로 직접 연결한것 뿐이지요. ㅎㅎ

      Keyboard Controller를 통해 제어하려면 Keyboard 버퍼가 빌때까지 기다리고 다시 Command 버퍼가 빌때까지 기다리고 하는 시간이 꽤나 길어서 이걸 좀 더 빠르고 간편하게 하기위해 나온 방법입니다.

      가만히 보면 Keyboard Controller에 연결되어있던 Reset 도 시스템 포트에 연결해 놓은 것을 알 수 있습니다. 그냥 뭐... Keyboard Controller의 대체품 정도라고 보면 될 것 같습니다.

      다 테스트 해봤었는데, 제 PC의 증상은 이것과는 무관한 것 같더군요. ;)

      그나저나 굉장히 오래간만이시군요. ;) 반갑습니다. ㅎㅎ

  2. Favicon of http://blog.naver.com/charsyam BlogIcon CharSyam 2008.12.27 16:27  댓글주소  수정/삭제  댓글쓰기

    A20 게이트의 경우 메모리 어드레싱을 홀수 MB 만 막습니다. 그러므로 보호모드로 들어간 이후에 A20이 활성화가 되지 않아도 4G 까지 메모리 영역대가 충분히 사용이 가능하다라는 얘기가 됩니다. 혹시나 PC마다 메모리 영역대가 초기화 된 값에 따라서 뻗을 수도 아닐수도 있지 않을까요? http://charsyam.tistory.com/

    • Favicon of http://kkamagui.tistory.com BlogIcon kkamagui 2008.12.27 23:38  댓글주소  수정/삭제

      오~ 맞는 말씀이십니다. ㅎㅎ
      어드레스 라인의 20bit가 무조건 0으로 셋팅되니까 짝수 Mbyte만 접근되지요.

      따라서 A20 게이트를 활성화 하지 않은 상태에서1Mbyte 영역부터 6Mbyte 영역까지 모두 0으로 초기화하면

      0~1Mbyte, 2~3Mbyte, 4~5Mbyte 영역이 모두 0으로 초기화되니 1Mbyte 이하에서 실행되고 있는 커널의 경우 예외(Exception)이 발생해서 멈추는 것이 맞습니다.

      그런데 제 PC 같은 경우는 A20 게이트를 활성화하지 않은 상태에서도 떡~!! 하니 잘 실행되더군요. ㅡ_ㅡa.. A20 게이트를 Off 시켜도 계속 On 상태를 유지하면서 말이지요. ㅎㅎ 이게 어찌된 영문인지...

      지금 생각하고 있는 점은 보호 모드로 전환했을 때, 강제로 A20 게이트를 활성화하는 기능이 어디엔가 들어있지 않을까 하는 것입니다. 뭐 이건 확인된 바가 아직 없어서 잘 모르겠습니다. ㅎㅎ

      좀 더 확인해봐야 할 것 같네요. 좋은 의견 감사합니다. ^^)-b

  3. Favicon of http://blog.naver.com/charsyam BlogIcon CharSyam 2008.12.28 03:11  댓글주소  수정/삭제  댓글쓰기

    0~1MB 영역은 안죽는게 맞을듯 합니다.
    A20 off 시 0~1MB 영역과 1~2MB 영역에 쓰는게 동일하게 돕니다. 상위 1MB 이상이 1MB 이하로 매핑되니 반대로 1MB에 매핑되는건 0MB로 매핑 3MB에 쓰는것이 2MB로 매핑 1MB씩 빠진 상태로 매핑되니 흐음, 그쪽 부분에서 메모리 영역의 쓰레기 값에 따라서 문제가 발생하지 않는 것이 아닐까요? 흐음...

    • Favicon of https://kkamagui.tistory.com BlogIcon 호기심 많은 kkamagui(까마귀, 한승훈) 2008.12.28 17:18 신고  댓글주소  수정/삭제

      헛... 1Mbyte 씩 빠진게 맞으니까, 1Mbyte ~ 2Mbyte에 쓰는 데이터가 0Mbyte ~ 1Mbyte에 맵핑되므로 죽는게 맞습니다.
      현재 보호 모드 커널 코드가 0x10000(64Kbyte)에 위치해 있으므로, 0x110000 영역을 밀기 시작하는 순간부터 문제가 발생합니다.
      살짝 헷갈리시는 것 같아서 http://kkamagui.tistory.com/619 에 따로 내용을 첨부했습니다.