요새 컴퓨터구조(Computer Archotecture)과목을 듣고 있습니다.
주로 MIPS를 가지고 수업을 하는데... 여기서 메모리 어드레스 관리를 어떻게 하는지에 대해서 듣던중
MIPS의 경우 32bit단위로 고정된 인스트럭션 크기를 가지기 때문에 메모리에 대한 관리를 어떻게 하는가에 대해
앞의 6bit은 기능을 위해 빼놓고 남은 26bit으로 관리한다고 하더군요. 이때 최대한 많은 양의 메모리에 접근할 수
있기 위해서 앞의 2bit은 과감히 생략(...)하고 뒤의 4bit역시 과감히 생략(...)하는 편법을 씁니다.
그렇기에 일단 최대한 접근할 수 있는 메모리는 32bit-2bit = 30bit에 해당하는 메모리. 즉 256MB뿐입니다.
더 많은 양을 활용하거나 해당 메모리어드레스 내에서 더 세부적으로 찾아가기 위해서는 추가적인 인스트럭션을
사용해야 하죠. ...네. 그만큼 느려진다는 겁니다. --a
인텔의 ISA-32는 인스트럭션의 크기가 정해져 있지 않기 때문에 다행히도(!) 32bit의 주소를 모두 받을 수 는 있습니다.
다만 그래봐야 한번에 받는건 32bit이 끝이며 그렇다보니 메모리 크기의 한계 역시 4GB가 됩니다. 그 이상을 받기 위해서는
추가적인 인스트럭션에 대한 CPU차원의 설계가 필수인데 만드는게 복잡한건 둘째치고 그만큼 인스트럭션을 돌리기 위한
사이클이 증가하기 때문에 성능 자체의 하락은 필연적이죠.
결국 CPU단계던 OS단계던 아키텍쳐 수준에서 어떻게던 해결하느니 그냥 64bit으로 넘어가는게 속편합니다. 64bit일 경우에는
명령어+주소+기타 잡다한 명령어를 받더라도 4GB쯤은 아무렇지도 않게 받아낼 수 있어서 겨우 저런 문제가지고 성능하락은
안생기거든요. 그렇기에 인텔이나 AMD에서도 64bit을 그렇게 활성화시키려고 노력중이며 OS개발자들 역시 이를 위해 새로이
개발된 ISA와 씨름하고 있습니다. ...만 결국 최종적으로 죽어나는건 그걸로 어플리케이션을 만들어야 할 개발자들이겠지요.
(게다가 대세는 멀티코어. 으앜ㅋㅋㅋ)
물론 64bit으로도 결국 언젠가는 용량문제 또는 다른 문제에 봉착할 가능성이 있고 이때에는 또다시 128bit으로 가느냐
마느냐의 문제가 발생하겠지만... 저때도 결국에는 128bit으로 넘어가겠지요. :(
그냥 갑자기 윈도우7이 32bit/64bit으로 나뉘어있길래 생각나서 적어봤습니다.
주로 MIPS를 가지고 수업을 하는데... 여기서 메모리 어드레스 관리를 어떻게 하는지에 대해서 듣던중
MIPS의 경우 32bit단위로 고정된 인스트럭션 크기를 가지기 때문에 메모리에 대한 관리를 어떻게 하는가에 대해
앞의 6bit은 기능을 위해 빼놓고 남은 26bit으로 관리한다고 하더군요. 이때 최대한 많은 양의 메모리에 접근할 수
있기 위해서 앞의 2bit은 과감히 생략(...)하고 뒤의 4bit역시 과감히 생략(...)하는 편법을 씁니다.
그렇기에 일단 최대한 접근할 수 있는 메모리는 32bit-2bit = 30bit에 해당하는 메모리. 즉 256MB뿐입니다.
더 많은 양을 활용하거나 해당 메모리어드레스 내에서 더 세부적으로 찾아가기 위해서는 추가적인 인스트럭션을
사용해야 하죠. ...네. 그만큼 느려진다는 겁니다. --a
인텔의 ISA-32는 인스트럭션의 크기가 정해져 있지 않기 때문에 다행히도(!) 32bit의 주소를 모두 받을 수 는 있습니다.
다만 그래봐야 한번에 받는건 32bit이 끝이며 그렇다보니 메모리 크기의 한계 역시 4GB가 됩니다. 그 이상을 받기 위해서는
추가적인 인스트럭션에 대한 CPU차원의 설계가 필수인데 만드는게 복잡한건 둘째치고 그만큼 인스트럭션을 돌리기 위한
사이클이 증가하기 때문에 성능 자체의 하락은 필연적이죠.
결국 CPU단계던 OS단계던 아키텍쳐 수준에서 어떻게던 해결하느니 그냥 64bit으로 넘어가는게 속편합니다. 64bit일 경우에는
명령어+주소+기타 잡다한 명령어를 받더라도 4GB쯤은 아무렇지도 않게 받아낼 수 있어서 겨우 저런 문제가지고 성능하락은
안생기거든요. 그렇기에 인텔이나 AMD에서도 64bit을 그렇게 활성화시키려고 노력중이며 OS개발자들 역시 이를 위해 새로이
개발된 ISA와 씨름하고 있습니다. ...만 결국 최종적으로 죽어나는건 그걸로 어플리케이션을 만들어야 할 개발자들이겠지요.
(게다가 대세는 멀티코어. 으앜ㅋㅋㅋ)
물론 64bit으로도 결국 언젠가는 용량문제 또는 다른 문제에 봉착할 가능성이 있고 이때에는 또다시 128bit으로 가느냐
마느냐의 문제가 발생하겠지만... 저때도 결국에는 128bit으로 넘어가겠지요. :(
그냥 갑자기 윈도우7이 32bit/64bit으로 나뉘어있길래 생각나서 적어봤습니다.






덧글
워풀 2009/10/28 22:57 # 답글
이미 CPU가 물리적으로 멀티플레이어로 넘어간 이상 문제는 하드웨어의 성능향상을 쫓아갈수 있는다시 말해 모두 사용하게 할만한 패러다임이 제시될것인가.....일텐데......
난 인제 기획할꺼니까 더는 관심없는 ( '')
Realkai 2009/10/28 22:58 #
기획할꺼니까 관심끄기엔 기획자가 개발을 알아야 개발자를 깔 수 있다(...)는 사소한 문제가 발생하지. ㄲㄲㄲ
긁적 2009/10/29 02:05 # 답글
뭐 아직도 1G꽃고 사는 저로서는 (..............)
Realkai 2009/10/29 06:24 #
저도 사실 아직 2GB로 버티는 중이라 -.,-
악플러 2009/10/29 08:16 # 답글
이유가 그닥 심플하지는 않네염.
Realkai 2009/10/29 21:17 #
으앜 그런가요 ㅋ
별자리점 2009/10/29 13:24 # 답글
IA-32역시 특정 메모리에 대해 1 cycle로 접근할 수 없습니다. Real mode에서야 20bit address로 1MB영역에 바로 접근 가능하지만, Protected mode에선 모든 프로세스가 가상 메모리를 사용하기 때문에 프로세스가 사용하는 가상 메모리 주소를 물리 메모리 주소로 변환하는 과정이 필요합니다. (물론 하드웨어적으로 지원해줍니다) IA-32자체도 20bit 어드레스를 사용하며 다만 페이지라는 기법을 사용하여 4GB영역에 억세스가 가능한 것입니다. 결론적으로 4GB 어드레싱을 위해서는 필수적으로 페이지와 가상 메모리 주소로부터 물리 메모리 주소를 얻어내야 한다는 것이며, 어차피 이런 구조기 때문에 약간의 트릭을 쓰면 성능하락 없이도 IA-32에서도 36bit addressing이 가능한겁니다.즉 IA-32에 기반을 두는 x64 및 EM64T인 이상 32비트 어드레싱이나 64비트 어드레싱이나 메모리 접근에 있어서 성능 차는 없습니다. 다만 Addressing Space가 4GB이냐 4^2GB이냐의 차이일 뿐이죠. (실제로는 레지스터 크기, 레지스터 갯수, 버스 폭 등등등등등의 차이가 있고, 이것이 성능 향상의 주 요인이긴 하지만, 이 글은 메모리에 대해서만 설명하고 있으므로 생략합니다)
Realkai 2009/10/29 21:18 #
좀더 심도있게 파보면 그러한 점까지 갈 수 있습니다만... 일단 최대한 심플하게 설명하려고 노력했습니다.......뭐 사실 단순히 저런 이유로만 64비트로 넘어가야 하는건 아니죠. --a
오르프네 2009/10/29 13:41 # 답글
넘어가야하긴 하는데,64bit가 나온지 거진 2~3년(맞나요?)나왔는데도 불구하고 아직까지도 100% 넘어갔다는 것이 아닌 과도기 상태라 불만이죠. 전부다 64bit쪽으로 넘어간다면 좋으련만. AGP슬롯 - > Express 슬롯으로 넘어갈때도 아마 이랬지 싶습니다. 사용자의 측면에서는 아직은 기다려야 할 시기랄까요.ㅋ;;;
Realkai 2009/10/29 21:18 #
별 수 없죠. 64bit에 맞는 사양이 대중화되려면 아직 좀 더 걸릴걸요. 당장 학교 컴퓨터실에 놓인 PC만 해도 프레스캇(!) CPU를 쓰는데요 뭐 --a
워풀 2009/10/29 18:09 # 답글
너 블로그에 괜찮은 떡밥 뿌리는 재주 있나부다??
Realkai 2009/10/29 21:19 #
한번 떡밥 뿌릴때 은근히 먹음직스러운걸 던지는 재주가 있는듯 ㅋ