(SLR클럽에 쓴거, 클리앙에도 같이 올립니다 ^^)
포럼에서 답글을 하나 올리고 이왕 하는거 강좌나 쓰자 하고 이렇게 강좌란을 열었습니다..ㅎㅎㅎ
은근 심심치않게 포럼 게시판에 올라오는 질문중 하나가..
"메모리카드 X기가짜리 / 하드디스크 XXX기가 짜리를 샀는데 윈도우에선 실제보다 훨씬 적게 나와요..저 사기당했나요? 왜이런거죠?"
이런 질문입니다...
많은 유저분들은 "그냥 원래 그래요" 라고 그러시던가, "그게 정상입니다", 라고 답변을 하시는데, 실제 그게 왜 그런건지 이해하시는분들이 많지 않은것 같아 이 강좌를 쓰게 되었습니다.
자, 제 1GB짜리 산디스크 CF메모리카드를 예를 들어 설명하겠습니다.
보무도 당당하게 1.0GB라고 써있습니다.
근데 이 메모리를 메모리카드 리더기에 때려박고 내컴퓨터에 가서 등록정보를 보면...
윈도우는 이놈이 970메가정도 밖에 안된다고 얘기를 합니다..
놀란가슴을 누르고 포럼에 글을 올려보면 나오는 답변들은..
1. 원래그래요
2. 메모리카드에서 원래 안쓰는 용량이 몇메가 됩니다
3. 메모리 관리상 사용자가 쓸수없는 용량이 꽤 됩니다
4. 어..저도 그러네요..이거 짜가인가..교환할까요? (-_-)
정도 됩니다.
하지만..실제로....위의 세가지 답변은 엄밀히 말해서 올바른 답변이 아닙니다.
3번의 경우는 간혹 특정 브랜드 메모리는 그렇게 될 수도 있습니다만, 이것역시 약간 빗나간 답변입니다.
써있는 용량의 차이와 윈도우에서의 차이는, 좋게말하면 제조회사의 마케팅과 컴퓨터 공학의 차이에서 오는 혼란 정도로 설명할 수 있습니다.
그럼 제일 먼저, 제조사가 어떤 메모리를 몇 기가라고 표시하는 기준이 뭔질 알아야겠지요?
하드나 메모리카드 제조회사들은, KB/MB/GB 등의 용량을 1000단위로 나누는 국제표준 SI방식의 표기법을 사용합니다. 바로 우리 생활과 과학분야에 널리 쓰이는 미터법이죠..
길이나 무게 주파수 등 여러 분야에 쓰이며, 1000이 넘어갈때마다 단위 명칭이 하나씩 바뀝니다.
단위 명칭은 라틴어쪽에서 나온걸로 기억하는데 확실하진 않군요..
1000 = Kilo (킬로)
1,000,000 = Mega (메가)
1,000,000,000 = Giga (기가)
1,000,000,000,000 = Tera (테라)
예를들어 1000미터는 1킬로미터, 1000그램은 1킬로그램, 1000Mhz는 1Ghz 이런식이죠.
제조회사들은 바로 이 방식을 컴퓨터 용량에 적용합니다.
즉, 제조회사에서 말하는 1.0GB(기가바이트)는 1,000,000,000 바이트인것이죠.
자..이제 아까 위의 그림을 다시한번 유심히 봅니다..
파란색 부분의 바이트 숫자를 보시면, 1,023,628,168 바이트라는것을 확인할 수 있습니다.
이것을 1000단위로 끊으면, 1.023 GB 라는 숫자가 나오게됩니다.
반내림하면 1.0GB, 즉 메모리 껍데기에 있는 1.0GB가 "정확한" 것이 됩니다.
하.지.만! 워우! 잠깐!
컴퓨터라는놈은 0과 1의 2진법으로 동작하는놈이며, 따라서 컴퓨터 안에서 쓰이는 숫자들은 우리가 생활에서 편하게 쓰는 10,100,1000같이 깨끗이 나누어 떨어지고 그러지 않습니다.
쉬운 예를 들어 컴퓨터의 메인 메모리 (RAM)의 용량이 500메가, 1000메가 이렇게 떨어지지 않고 128메가, 256메가, 512메가 - 이런 식으로 2의 승수들로 구성됩니다.
따라서, 컴퓨터의 용량 표기에서 사용되는 킬로, 메가, 기가 라는 단위는 이름만 같을뿐, 실제 숫자는 1000단위로 끊는 SI방식이 아닌 각 단위별로 1024씩 나누어지거나 곱해지는 방식을 사용합니다.
컴퓨터라는 기계장치의 원래 특성입니다.
실제 컴퓨터공학에서 쓰이는, 그리고 따라서 윈도우 에서 사용하는 표기 방식은 1000이 아닌 1024(1024는 2의 10승이지요..)를 기준으로 합니다.
그리하야 아래와 같은 표가 나오게 됩니다.
1,024B = 1KB (킬로바이트)
1,024KB = 1MB (메가바이트)
1,024MB = 1GB (기가바이트)
1,024GB = 1TB (테라바이트)
각 단위는 1024로 쉽게 끊어지는듯하게 보일지 모르나, 실제로 계산하게되면 1024의 승수가 되어 단위가 커질수록 SI표기법의 1000단위 끊기보다 수가 점점 커지게 됩니다.
따라서, 컴퓨터 내부상에서 정확히 "1GB"로 인식되려면, 1024 * 1024 * 1024 = 1,073,741,824 바이트가 필요합니다.
제조회사에서 쓰는 1GB 와는 무려 73,741,824바이트라는 차이가 나는것입니다.
많은 사람들이 일반적으로 생각하는 "1000MB"는 사실 정확히 말하자면 1GB보다 약간 모자른 상태인것입니다.
그러면 다시한번 위 그림을 살펴보겠습니다..
윈도우는 카드의 용량을 1,023,628,168 바이트라고 정확히 인식했습니다.
그러면 이제 윈도우는 이걸가지고 잽싸게 보기편한 MB단위로 변환을 시작합니다..
1,023,628,168바이트 / 1024 = 999,636.8828125 킬로바이트
-> 999,636.8828125 / 1024 = 976.207 메가바이트
자, 바로 여기서 의아하게 보였던 976이라는 숫자가 나옵니다.
메모리카드가 짜가라든지, 내가 사기를 당한거라든지 그게 아니고...
윈도우는 컴퓨터공학 정통의 방식으로 메가바이트 변환을 처리했고, 그 결과 실제보다 약간 작은듯해 보이는 976이라는 숫자가 나온것입니다.
따라서 제조사에서 선전하는 1.0GB 메모리카드의 "실제 컴퓨터공학적 용량" 은 976메가, 또는 0.953GB인것입니다.
그럼 이거뭐야! 제조사의 농간아냐? 이거 결국은 사기아냐? 라고 질문하실지 모르겠지만...
제조사는 분명 1,023,628,168 바이트짜리 메모리카드를 제작했고, 저 메모리카드 안에는 정확히 1,023,628,168 바이트의 데이터를 저장할 수 있습니다.
즉 실제보다 적게 쓰는게 아니고 제조사가 만든 용량 그대로 정확히 쓰는것입니다.
처음엔 이게 좀 이해 안가실 수 있는데, 곰곰히 생각해보시면 이름을 뭐라 부르냐에 따라 차이일뿐 실제적인 용량은 그대로인것입니다..
1,023,628,168 바이트라는 숫자를 제조사 기준으로는 1GB, 컴퓨터 기준으로는 0.953GB가 되는것입니다.
1기가 2기가 이런 단위에선 이게 크지 않아보이는데, 몇백 기가단위의 하드디스크용량을 비교하게되면 이게 엄청나게 차이가 나서 사람들이 곧잘 혼란스러워하곤 합니다.
예를들어 500기가짜리 하드를 샀다고 가정해봅시다.
제조사가 선전하는 500GB짜리 하드는, 내컴퓨터로 열어서 "바이트"용량을 보면 500,000,000,000 바이트에 무척 근접한 숫자가 나옵니다. (정확히 000으로 떨어지진 않지만 아무튼 맨앞 세자리는 500으로 시작합니다.) 제조사는 분명 제조사 기준으로 500기가짜리 하드를 만들어 판 것입니다.
그러나, 등록정보 창의 바이트 숫자옆에 뜨는 GB단위는 500,000,000,000 / (1024 * 1024 * 1024) = 약 465GB 라고 뜨는 것입니다.
이 사실을 모르는 많은 사용자들이 하드디스크가 무려 35기가바이트의 용량을 낭비한다고 잘못 생각합니다.
윈도우의 메모리 관리 어쩌고 하며 낭비되는 용량이 있다는 소리를 잘못 이해하여 윈도우가 35기가를 그냥 버린다고 생각합니다..
35기가를 버리는게 아니라, 변환법상 35만큼의 숫자가 줄어들게 되는것입니다
하드디스크는 여전히 그대로이고, 바이트로 정확히 500,000,000,000바이트에 해당하는 용량을 저장할 수 있게 되는것입니다. 윈도우의 파일시스템 구조상 약간 낭비되거나 못쓰는 공간이 있는것은 사실입니다만, 그것은 잘해야 몇 메가를 넘기지 않습니다. 35기가씩 실제로 버린다면 그건 엄청난 용량과 자원의 낭비겠지요..
그렇다면 질문! 도데체 왜! 이노무 제조회사는 사람 헷갈리게 그런 표기법을 쓰고 난리인가!
이래저래 소비자를 농간하는 사기 아닌가! 하실지도 모르겠습니다...
제조회사가 쓰는 1000단위의 표기법은 엄밀히 말해 틀린 법이 아닙니다.
사실, 정확한 의미에서 킬로, 메가, 기가 등은 1000단위로 끊어질때 쓰이는 표현입니다.
즉 제조회사들은 법적으로는 "정확한" 표현을 쓰고 있는것입니다.
오히려 말하면 컴퓨터공학에서 킬로/메가/기가등의 단위를 잘못 사용하고 있다고도 말할 수 있습니다.
이런 현상이 일어나는 이유는, 제조 회사는 실제 컴퓨터에서는 적게 표시될지 모르지만 자기들의 방식을 사용할경우 똑같은 용량을 더 큰 용량으로 표기하여 팔 수 있기 때문입니다.
똑같은 500,000,000,000 짜리 하드를 465기가짜리라고 파는것보다, 500기가짜리라고 하는게 더 많아보이고 더 잘 판매할 수 있겠죠?
이런 혼란을 피하기 위해 새로운 컴퓨터공학적 용량 표기법이 사용되고 있습니다.
기존 KB/MB/GB 등 단위 사이에 i를 하나 넣어서, KiB, MiB, GiB라고 표기하는것이지요.
Binary Byte라는 호칭을 도입한 것인데요, 덕분에 읽는것도 웃기게 변합니다..
킬로바이트가 아닌 "키비바이트", 메가바이트는 "메비바이트", 기가바이트는 "기비바이트"가 됩니다.
(참조: Wikipedia)
1024 B = 1 KiB 키비바이트 (Kilo Binary Byte)
1024 KiB = 1 MiB 메비바이트 (Mega Binary Byte)
1024 MiB = 1 GiB 기비바이트 (Giga Binary Byte)
1024 GiB = 1TiB 테비바이트 (Tera Binary Byte)
이렇게 나가는 방식입니다..
엄밀히 말해 1GB는 1,000,000,000 바이트가 맞습니다.
킬로, 기가, 메가 등의 표현을 쓰는 모든 다른 단위들이 1000씩 끊어 쓰는 방식이기 때문이죠.
하지만 컴퓨터 내부적으론 기계/전자공학적 구조상 1,073,741,824바이트가 있어야 1GB가 되게됩니다.
따라서 정확한 표기를 위해, 컴퓨터 문서나 정확한 컴퓨터공학적 용량이 필요한경우 기가는 기가이되 GB가 아닌 GiB (또는 MiB등등) 을 쓰게 되는것입니다.
그러나 아쉽게도 제조회사들은 그다지 적용하고싶은 생각이 없는 단위들이며 여전히 하드나 메모리 용량은 SI 표기법을 따라 1000단위로 끊어 표시됩니다..
또한 많은 사람들이 익숙한 메가, 기가 등을 컴퓨터에도 똑같이 적용하기 떄문에, 그것을 굳이 바꾸려 하지 않는것이기도 하지요...
여러분이 구입한 메모리나 하드, 짜가이거나 속아 산게 아닙니다..
아 다르고 어 다른, 컴퓨터 세상의 표기법 차이에서 온 혼란인것입니다..
1000과 1024를 차별화 없이 뭉뚱그려 한번에 쓰던것에서 비롯된것이죠..
변변치 않은 제 글을 읽어주신 모든 여러분들께 감사의 마음을 전합니다.
글이 지루해져서 읽기 힘드셨을지도 모르겠습니다만, 제 글을 통해 또 조그만 지식을 얻으실 수 있었다면 저는 무척 기쁘겠습니다 ^^
기가바이트는 원칙적으론 1,000,000,000바이트가 맞거든요..
컴퓨터에서 쓰는 용량 명칭이나 계산법과 확실히 구분 안하고 쓰여서 그런것이죠..
어디가 맞다 하는건 입장차이라고 봅니다
메가 기가라는건 사실 10^6, 10^9 아니겠습니까
하지만 컴공에서는 컴의 특성때문에 기가는 2^30 로 정의되어있습니다
2^10 는 킬로 2^20 은 메가, 등등..
베이스가 10이냐 2이냐 차이때문에 그런거지요..
기비바이트나 메비바이트는 아직 많이 활성화 되지 못했구요..
어쨌든 저 불일치 때문에 엄청 불편하죠
그래서 전 파일들카피할때 항상 \'Properties\' 를 열어 바이트 크기를 봅니다..
안그러면 꼭 카피하다가 멈추더라구요 공간없다고.. ㅡㅡ;
예를 들어보지요. 원래 10개가 한다스라고 불리는 곳에서... 연필을 수출하려고 했습니다.
그곳은 편의상 미국이라고 하지요.
그런데 우리나라는 12개가 한다스 입니다.
그러면 미국에서 우리나라로 수출을 할때는 12개로 재 포장해서 가격도 다시 책정해야하지 않을까요?
단지 그걸 미국에서는 10개가 한다스입니다. 라고 무조건 할 따름인가요?
약간 문제가 붉어지는 예시이기는 하지만..
두눈 밖이 세상에서 외눈박이는 다른 사람들과 다른것이죠.
이 부분은 나중을 위해서라도 빨리 시정되어야 하는 부분입니다.
이제는 바뀌어질때가 되었다고 보는 거죠.
조금이라도 용량 늘려서 받으려고 1024로 계산해야하는 것을 1000 으로 계산하는 것이라니 -_-;;;
그런데 같은 용량의 메모리의 경우라도 제조사별로 용량이 차이가 나는건 어떻게 이해를 해야 할까요?
컴에선 기가가 2^30인 것을 뻔히 다 알고있음에도..
표기용량을 늘리기 위해 컴에서 쓰는 용량단위(?)가 아니라 일반적인 단위로 쓴다는 건..
분명히 속이는거죠.
만약 디카 보면서 저거 메모리 몇짜리야? 976메가 짜리
이러면 오히려 불편할 것 같은데요
이진법을 알려주면서 1024 머 이런식으로 설명 보다는
메모리 메뉴얼등에 실제용량은 몇입니다 이게 낫지 않을까요?
심지어 lot에 따라서도 용량이 차이나구요...
그래서 NOR 같은메모리는 정확히 용량이 맞구요..
하드는 1000:1024 때문이지만요...
그래서 Nand 의 수율은 99%이상이죠~;
똑같은 메모리회사의 메모리카드라도 수십메가 정도 차이는 납니당~
어찌돼었든 근데 1000단위로 끊어서 보면 제조사에서 표기한 용량이 맞게되고..
그쪽입장에서는 된거죠 그렇게만 되면..
mineroller님 글대로 마케팅과 컴퓨터 공학과의 차이라기 보단 제조사에선 그냥 처음에 사용한 nand flash hardware의 용량을 적은 거 같네요... 보통 mp3 회사에서도 NAND에 firmware를 넣고도 그 용량을 빼고 쓰진 않죠...
한국어 링크는 http://ko.wikipedia.org/wiki/%EA%B8%B0%EA%B0%80%EB%B0%94%EC%9D%B4%ED%8A%B8 target=_blank>http://ko.wikipedia.org/wiki/%EA%B8%B0%EA%B0%80%EB%B0%94%EC%9D%B4%ED%8A%B8
좀더 자세한 설명은 http://en.wikipedia.org/wiki/Gigabyte target=_blank>http://en.wikipedia.org/wiki/Gigabyte 의 소비자의 혼란 혹은 consumer confusion 부분을 참조하세요
flash drive의 경우에는 보통 \"powers of two\" multiples of decimal megabytes를 사용한다고 써 있네요...그럼 1GB는 1024*1,000,000 byte가 되는 거고 mineroller님 글에서 쓰인 976MB = 1,023,623,168과 wear leveling을 고려하면 얼추 맞는거 같네요...자세한 사항은 http://en.wikipedia.org/wiki/Binary_prefix#Flash_drives target=_blank>http://en.wikipedia.org/wiki/Binary_prefix#Flash_drives 참조하세요
근데 정말 같은 메모리라도 몇메가씩 용량차이는 있더군요~~ 이것도 뽑기?
Disclaimer 링크를 보면 제조사는 1MB 를 1,000,000 바이트라고 정의한다고 써있습니다
그래서 64MB 플래시를 샀는데 컴에서 열어보면 60.9 MB밖에 없는겁니다..
64MB 짜리라고 파는데 실제는 더 모자른 거죠..
제조사의 정의와 컴퓨터 세상(?)의 정의가 틀려서 그런거죠..
첨에 CS에서 2\'s power로 \"편의대로\" 쓰다보니.....그 혼동을 막으려고 역으로 디바이스별로 쓰이는 단위가 달라지도록 한게 아닐지요.
iec나 ieee 나 ... decimal/binary prefix만 정확하게 써주면....오히려 혼란을 더 줄일 수 있겠죠.
리눅스 커널에서는 벌써부터 binary prefix 표준을 잘 따라 쓰던데요.