[컴퓨팅이노베이션] #02 - 기억 소자에 대하여
01. 컴퓨팅 기술 이노베이션에 관한 첫 글 (부제: 공대생이 힘든 이유)
위 글에 이어 계속해서 컴퓨터 기술의 과거와 현재, 그리고 미래를 그려보려고 합니다.
지난 글에서는 폰노이만 옹께서 예언하신 컴퓨터의 구조에 대해서 살펴보았습니다.
대략의 내용은 이러합니다.
생각은 정보의 기억과, 정보의 처리 이 두 가지로 나눌 수 있습니다.
폰노이만은 이 두 가지 기능을 위한 두 개의 장치를 분리하되,
두 장치가 서로 원활히 소통할 수 있는 계층적 구조를 제안합니다.
중앙처리장치 (CPU)는 명제논리 처리와 숫자의 연산을 주로 다루고,
비싸고 빠르고 용량이 작은 1차 메모리(Primary Memory)는 CPU가 필요로 하는 정보를 주고 받습니다.
값싸고 느리고 용량이 큰 2차 메모리(Secondary Memory)에는 1차메모리에서 당장 필요하지 않은 정보를 담아 둡니다.
앞서 말씀드렸듯이 폰노이만이 위대한 이유는,
각 구성요소 장치들이 발명되지 않았거나, 성능이 매우 제한적일 때 위 구조를 제안했다는 점입니다.
그리고 그의 꿈은 이루어집니다.
오늘의 글은 그가 제안한 컴퓨터 구조를 가능하게 한 몇몇 소자 장치들, 특히 정보의 저장을 담당하는 메모리 소자를 살펴보는 것을 목표로 합니다. 컴퓨터의 과거와 미래에 대한 전반적인 이해를 도모하는 것이 이 시리즈의 목표인만큼, 잔가지를 치고 핵심적인 내용에 집중해 볼 생각입니다. 다음에 기회가 되면 각 기술의 디테일한 내용들, 흥미로운 물리학적 원리들도 다뤄보고 싶네요 :)
정보의 기억
우선 정보를 저장하는 장치를 상상해봅시다.
음성, 이미지, 영상, 혹은 각종 사상을 우리가 다른 이들에게 전달하고자 할 때, 그 전달하려는 내용을 우리는 정보라고 합니다.
하지만 그 정보가 가리키는 실물 자체를 전달할 수는 없기 때문에, 사람들은 지시체계, 상징체계를 활용하죠. 인류사를 깔끔하게 정리한 <사피엔스>에서 저자 유발 하라리는 인류의 번영이 상징 체계 덕분에 가능했다고 합니다. 작물을 관리하는 방법이나 각 병사들의 임무를 짧은 말이나 글 몇 마디로 전달할 수 있어야, 이를 오래도록 기억하고 다른 사회구성원에 쉽게 전달하여 사회가 유기적으로 동작할 수 있기 때문입니다. 우리가 '고양이', '책상'이라는 단어를 사용하는 순간, 우리는 아보가드로 숫자(6.0 × 10^23 )를 간단히 뛰어넘는 숫자의 원자 집합체를 떠올리고 오해없이 의사소통을 할 수 있게 됩니다. 엄청난 압축능력이 아닐 수 없습니다. 한편, 이 단어들이 모이면 '고양이가 책상 위에 올라갔다'라는 상황까지도 전달할 수 있고, 다른 단어들을 이어 붙여 책을 만들수도 있습니다. 대단한 확장 능력이죠. 상징/지시체계로서의 언어와 문자는 정보압축과 확장, 모든 방면에 있어 강력한 힘을 발휘합니다.
문자에 대해서 좀 더 생각 해볼까요. 한글은 24개, 영어는 26개의 유한한 자모로 이루어져 있지만, 그 조합을 통해 무한에 가까운 표현 능력을 발휘합니다. 표현하고 싶은 사물이 복잡하면, 표현을 덧붙이거나 글자 하나를 바꾸면 그만입니다.
알파벳 한 글자는 26개의 사물이나 사상을, 알파벳 두 글자 단어는 676가지 의미를, 세 글자 단어는 17576가지 의미를 전달하는데 사용할 수 있습니다. 그리고 이 문자의 엄청난 '표현역량' (Representational capability)은 아주 간단한 수학원리에 기반 합니다. 작은 숫자를 여러번 곱하면 말그대로 기하 급수적으로 증가하는 지수의 법칙이 그것입니다. 극단적인 예를 들어볼까요. '있다'와 '없다'라는 2개의 문자로만 구성된 문자체계를 생각해 봅시다. 선택 가능한 문자의 수가 2개로 제한되는 만큼 표현할 수 있는 의미의 가짓수는 줄어들 것 같지만, 사실 '있다/없다/없다/있다/없다/있다/없다/있다/없다/있다/없다/있다/없다/있다/없다/없다' 이렇게 이 16번 문자들을 나열하면 6만 가지가 넘는 의미를 우겨 넣을 수도 있는 것처럼 단순 반복을 통해 무한한 의미확장이 가능합니다. 이쯤 되니, '있다'와 '없다'라는 복잡한 표현도 사실 필요 없을 듯 합니다. '0'과 '1'로 바꿔서 위 문장을 다시 적어보면 '1001010101010100' 이 되겠네요. 길이도 많이 줄었고, 타이핑 하는데 드는 시간도 훨씬 줄었습니다. 사용해야하는 문자의 갯수도 2개 뿐이라 적기도 수월합니다. 이 2 글자 뿐인 문자체계의 이름은 그 이름도 유명한 '이진법' 입니다. 이진법은 일견 복잡해 보이는 사상과 각종 정보들을 효율적으로 압축, 전달할 수 있는 훌륭한 문자체계인 것입니다.
기억 소자 (메모리 디바이스)
이제 그 정보를 담기 위한 장치의 형태를 생각 해볼까요? 어떤 장치가 0과 1같은 2진법 문자에 대응되는 상태를 가질 수 있어서 1) 외부의 명령에 따라 2) 0 또는 1로 그 상태를 전환하고 3) 저장할 수 있어야 합니다. 위 문장을 그림으로 그려볼게요.
'정보를 입력하고, 저장하고, 읽어낸다'는 단순한 구조로부터 우리는 메모리 소자의 형태에 대한 중요한 팁을 얻을 수 있습니다. 하나의 메모리소자(Memory Device)가 위 세가지 기능을 동시에 수행해야 한다면, 그 소자는 세 개의 구성요소를 가지고 있어야 합니다. 1) 입출력부, 2) 제어부, 그리고 3) 저장부, 이렇게요. 어떤 장치가 이 세가지 각 구성요소를 제대로 갖추고 있어서 잘 동작한다면, 게다가 싸고 작고 빠르다면 우리는 이를 좋은 메모리라고 볼 수 있겠네요.
아래에 메모리로 사용되는 대표적인 디지털 소자들을 가져와봤습니다.
S-RAM(Static-Random Access Memory), D-RAM(Dynamic-Random Access Memory), Magnetic HDD(Hard Disk Drive), NAND-Flash 메모리 모두 최근에 사용되는 대표적인 메모리들입니다. 갑작스레 이상한 기호들이 튀어 나왔지만, 그림 속 모든 메모리 소자는 앞서 논의한 '정보저장의 3요소'를 포함하고 있어 쉽게 이해할 수 있습니다.
1. 메모리소자계의 페라리, S-RAM
왼쪽의 S-RAM은 가운데 있는 '트랜지스터'라고 불리는 전기적 스위치를 제어하여, 우측의 저장부에 담긴 전기적 상태를 왼쪽의 입출력부에 전달하는 메모리입니다. 우측의 저장부는 4~6개의 스위치를 엇갈리게 연결한 스위치들의 집합인데, 저장부 내부에 있는 특정 스위치가 '열려있는가? 닫혀있는가?'를 가지고 0과 1을 판단합니다. ('트랜지스터'는 아주 아주 중요한 녀석이라서 다음 글에서 자세히 다뤄볼 생각입니다. 지금은 전기 신호를 전달하거나 차단할 수 잇는 장치 정도로 생각하면 좋을듯 합니다.)
이진법 문자를 저장하고 읽어 들이는 과정은 대략 이렇습니다. 1) 저장부에 내부에 있는 스위치들을 켜거나 꺼서 0과 1을 기록합니다. 한번 기록된 상태는 각 스위치들이 상호 의존적으로 연결된 덕에, 전기에너지가 들어오는 한 계속 유지됩니다. 즉 한번 켜진 스위치는 계속 켜져 있고, 꺼져있는 스위치는 계쏙 꺼져 있게 됩니다. 그래서 영어 이름에 Static 이라는 수식어가 붙었습니다. 2) 저장부와 출력부를 제어하는 스위치를 열어서 저장부에 저장된 전기적 상태를 출력부 전선으로 전달합니다. 3) 출력부 전선에 전달된 전기적 신호는 신호 측정기를 통해 저장부의 데이터를 읽어들입니다. 한마디로,
S-RAM은 '스위치를 켜거나 꺼서 0/1을 저장한 후, 필요할 때 스위치 상태를 읽을 수 있는 장치'입니다.
S-RAM은 6개의 트랜지스터로 구성되어 있는 메모리인 만큼 비싼 편입니다. (D-RAM은 하나면 됩니다.) 각 트랜지스터들의 동작상태를 유지하는데 전력이 소모되는 관계로 에너지적으로도 비싼 메모리구요. 한 가지 무지하게 좋은 점은, 그 속도가 엄청나게 빠르다는 것입니다. 1초에 10억번 상태를 바꿀 수 있는 트랜지스터로만 이뤄져있는 메모리인만큼 무지하게 빠릅니다. 한마디로 비싸고 빠른 소자로서, 자동차로 치면 페라리 같은 녀석이랄까요. 앞서 소개한 폰노이만 구조를 보면, CPU 내부에는 ‘레지스터’라고 불리는 고속 메모리가 필요합니다. 빠른 속도로 진행되는 연산 과정을 일시적으로 저장하는 메모리인데, 이 레지스터가 몇 개인지에 따라 32비트 컴퓨터, 64비트 컴퓨터 등을 구분할 수 있습니다. 레지스터는 아주 빨라야 하지만, 수억 수천만개 필요하지 않은만큼 그 값이 비싸거나 크기가 커도 괜찮아서 비싸고 빠른 S-RAM을 사용합니다.
2. 팔방미인 D-RAM
D-RAM은 훨씬 간단합니다. 저장부에 해당하는 축전기(전자를 담을 수 있는 그릇)에 전자를 담아 뒀다가, 데이터를 읽고 싶으면 가운데 스위치를 열어서 전자가 몇 개 저장 되어 있는지 확인하는 장치입니다. 저장부에 전자가 많으면 1, 적으면 0으로 읽습니다. 입출력부 전선에 높은 전압(전자의 공급 정도)을 입력한채로 스위치를 열면 전자들이 축전기로 쏙 들어가 1상태로 전환되고, 전선에 낮은 전압을 입력해 스위치를 열면 0 상태로 바뀌게 됩니다. 우리가 흑연연필로 종이에 글을 쓰고, 종이 위에 남겨진 흑연 가루가 진한부분을 보고 글자를 확인하는 것과 같은 원리죠. Dynamic RAM 이라고 불리는 이유는 축전기에 저장된 전자들이 시간이 지나면 스르르 빠져나가기 때문에, 특정 시간 (1/100~1/10초 정도)에 한번씩 메모리에 저장된 내용을 다시 적어줘야 합니다. 이를 메모리를 리프레시(Refresh) 한다고 합니다.
“Less is More”
원리가 단순하다고 성능이 안 좋은 것은 아닙니다. 오히려 장점이 많죠. 단순한 구조, 즉 트랜지스터 한개 축전기 하나로 이루어진 만큼 그 설계도 매우 단순해서, 좁은 공간에 많은 소자를 넣을 수 있고 결과적으로 저렴한 가격의 메모리를 만들 수 있습니다. 레지스터로 쓰이는 S-RAM보다는 1/10 정도 느린데, 이는 축전기 내부에 전자를 담거나 뽑아내는데 시간이 걸리기 때문입니다. S-RAM 대비 상대적으로 느리기는 하지만, 여전히 1억분의 1초에 한번씩 쓰고 지울 수 있는 빠른 속도 덕에 컴퓨터 구조상 1차 메모리(Primary Memory)의 역할을 담당할 수 있습니다. 다시 말해, 중앙연산장치에 직접 연결되어 데이터를 주고 받는 메모리로 쓰일 수 있는 것입니다. 요즘의 랩탑이나 데스크탑의 ‘메모리용량’이라고 하면 보통 이 DRAM의 용량을 말하며, 4~32GB 정도가 개인용 컴퓨터에 주로 사용되는 용량입니다.
3. 자석으로 만든 메모리, Magnetic HDD
메모리 구조 그림 가운데 오른쪽 위에 있는 메모리는 자석의 원리를 이용해서, 데이터를 쓰고 지우는 Magnetic HDD입니다. 우리가 하드디스크로 알고 있는 아래 사진이 그 일반적 형태입니다.
이 메모리는 원판 위에 아주 작은 자석들을 일렬로 배열한 뒤, 뾰족한 전자석을 이용해서 그 자석들을 하나씩 N극 또는 S극으로 변환하여 0과 1을 기록합니다. 데이터를 저장하는 원리는 아주 간단하지만, 각 자석의 자성을 읽어들이는 방식이 조금 복잡해서 다음에 설명해 볼 생각입니다. 일단, ‘거대 자기 저항 현상(Giant-magnet resistance, GMR)이라고 하는 원리로 인해, 각 자성의 자성 방향에 따라 전기적 저항이 달라진다’ 정도로 이해하면 좋을 것 같습니다. 참고로 거대자기현상을 발견한 물리학자들은 하드디스크의 기본 원리로서 산업발전에 기여한 공을 인정받아 2007년 노벨상을 수상한 바 있습니다.
Magnetic HDD 메모리는 읽거나 쓰기 위해서는 뾰족한 전자석을 읽고자 하는 메모리 위로 위치시켜야 합니다. 이 때문에, 앞서 설명한 S-RAM이나 D-RAM 대비 엄청나게 느린 속도를 갖고 있습니다. 한편, 값싼 철 합금으로 만들어진 원형 디스크 전체를 데이터 저장 공간으로 사용할 수 있기 때문에 저렴한 비용으로 거대한 데이터를 저장할 수 있습니다. 이런 메모리는 폰노이만 구조에서 2차 메모리(Secondaray Memory)로 활용되기에 좋습니다. 느려도 좋으니, 많이만 저장해다오~ 라는 요구를 만족시키니까요.
그리고 한 가지 더 강조하고 싶은 특성은 바로 데이터의 비휘발성입니다. S-RAM과 D-RAM은 전기 신호 자체가 0과 1을 구분하는데 사용되기 때문에, 전력 공급이 중단되면 더 이상 데이터가 날아가 버립니다. 휘발성이 높은 메모리죠. 반면, 자성 하드디스크의 자석들은 한 번 N극, S극이 정해지면 오랜 시간동안 그 성질을 유지하기 때문에 컴퓨터가 꺼져도 데이터를 그대로 유지할 수 있습니다. 정보를 저장해야하는 메모리에 있어 매우 중요한 기능이겠죠? 컴퓨터가 꺼질 때마다 여태 썼던 글이 다 날아간다고 생각하면 끔찍하네요 ;;
4. 하드디스크 시대를 끝낼 2차 메모리 소자, NAND-플래시 메모리 (Flash Memory)
이제 마지막으로 주변에서 쉽게 볼수 있는 NAND 플래시 메모리에 대해서 알아보겠습니다. 플래시 메모리는 USB나 SSD 등에서 데이터를 저장하는 용도로 사용되고 있는데, 그 값이 점점 싸져서 어느새 하드디스크의 자리를 위협하고 있습니다.
플래시 메모리의 원리는 D-RAM과 약간 유사합니다. 메모리에 데이터를 입력하고 싶으면 트랜지스터의 제어부에 아주 높은 전압을 걸어서, 트랜지스터의 일부 부위에 전자들을 콕! 하고 박아 넣습니다. 그러면 트랜지스터 내부에 박혀 있는 전자들은 주변의 전자들을 바깥으로 밀어내는 척력을 만들어서, 트랜지스터에 흐르는 전류의 양을 줄여버립니다. 결국, 전자가 박혀있느냐(0) 박혀있지 않느냐(1)에 따라 달라지는 전류를 측정하여 메모리의 저장값을 읽을 수 있습니다.
하지만, 트랜지스터가 아닌 축전기에 전자를 저장하는 D-RAM과 달리 플래시 메모리는 트랜지스터 자체에 전자를 주입시키는 형태입니다. 트랜지스터 외의 다른 구조물이 필요하지 않기 때문에, 같은 면적에 훨씬 더 많은 소자를 찍어낼 수 있어 대용량 메모리를 저렴하게 찍어낼 수 있습니다. 속도 면에서도 D-RAM보다는 많이 느리지만, 물리적인 전자석을 이동 시켜야 하는 자성 하드디스크보다는 훨씬 빠릅니다. 2차 메모리라도 속도가 빠르면 당연히 더 경쟁력 있겠죠.
아직은 하드디스크와 플래시 메모리가 경쟁 중에 있지만, 반도체 기술혁신 덕에 플래시가 점점 우위를 점해가는 형국입니다.
컴퓨터 구조와 메모리 계층
위 테이블에 레지스터, 1차 메모리, 2차 메모리로 구분되는 메모리의 계층을 속도, 비용 등의 성능을 기준으로 구분해보았습니다. S-RAM, D-RAM 과 같이 비싸고 빠르고 휘발성이 높은 메모리는 중앙처리장치에 가까이 배치하고, HDD나 Flash 메모리 같이 느리고 값싼 비휘발성 메모리는 큰 데이터를 오래도록 저장하는데 주로 사용됩니다.
여태까지 메모리 세계의 전반적인 그림을 살펴보았습니다. 앞서 이야기한대로, 컴퓨터가 추구하는 ‘생각’이라는 기능은 결국 ‘정보의 저장, 전달, 변경’인 만큼, 그 정보를 저장하는 메모리는 매우 중요한 요소입니다. 앞으로 기회를 보아 스킵해버린 메모리의 물리적 원리들도 전달할 수 있도록 해보겠습니다.
다음 글은, 메모리 얘기를 하면서 은근 슬쩍 넘어가버린 전기적 스위치. 트랜지스터의 원리와 그 역사에 대해서 살펴보겠습니다~ 컴퓨터의 역사에 트랜지스터는 너무너무너무 중요한 요소라서요. 그리고, 중앙처리 장치의 설명을 위해서도 알아두면 도움이 되는 내용이라 먼저 소개하는 것이 좋을 것 같습니다.
다 적고 나니 생각보다 스크롤 압박이 있네요..;;;
주절 주절 길면서도 부족한 글 읽어주셔서 감사합니다 ^^
블록체인에 특화된 기억 소자도 존재할 수 있을지 궁금하네요. :)
@홍보해
사용하고자 하는 소프트웨어의 알고리즘에 따라서 메모리 구조를 다르게 만드는 것이 최근의 트렌드입니다.
제 생각에는 블록체인에 특화된 메모리도 가능할 것 같아요. ㅎㅎㅎ
예를 들자면... 블록체인용 전용 메모리는, 블록체인의 원리와 맞도록,
"절대 지울수 없는 메모리"를 활용하면 좋을 것 같습니다.
메모리의 삭제기능을 빼면 물리적으로 얻을 수 있는 이익이 많이 있거든요 ㅎㅎㅎ
절대 지울수 없는 메모리인 만큼, 전자보다는 원자를 정보저장 매체로 쓰면 좋을 것 같구요.
나중에 다룰 '뉴메모리'에서 좀 더 이야기 해볼게요ㅎㅎ
그리구 홍보해 감사합니다 ^^
오랜만에 정보처리기능사했을때 생각나네요! 팔로우하고 갑니다.
정보처리기사라니 훌륭하시네요~ 아마 관련된 내용을 계속 다루지 않을까 싶습니다 ^^ 팔로우 감사합니다~
좋은 내용이군요. 읽은만 합니다. 조금 부탁드리자면 60년대 페셉트론 과 연관된 지금의 머신러닝과 관련된 스토리도 앞으로 시간이 나시면 발굴하셔 들려주셨으면 합니다.
안녕하세요~
지금 제가 접해본 범위에서 '컴퓨터의 역사와 미래'를 주제로 글을 연재하고 있는 중입니다.
따라서 말씀하신 '60년대 페셉트론 과 연관된 지금의 머신러닝'은 당연히 짚고 넘어가야할 주제라고 생각합니다. 더 빠르고 강력한 머신러닝을 위해 다양한 방향으로 컴퓨터가 변화하고 있어서요 ㅎㅎ
기대에 걸맞는 글 쓰도록 노력하겠습니다~ 좋은 조언 감사합니다:)
와!! 감사합니다!! 보팅덕에 힘이 나서 얼른 다음글을 올리고 싶습니다 :)
하드디스크는 일단 자체적으로도 벽에 부딪혀서 결국 자리를 내주지않을까싶네요.
네. 물리적인 데이터 접근한다는 것 자체가 전자식 컨트롤러를 가진 플래시 대비 너무 느린 기술이기도 하고, 최근의 소자 직접 정도가 정말 대단한 것 같습니다. 말씀하신대로 하드디스크는 곧 저물 것 같습니다 ㅎㅎ
메모리에 대한 좋은 소개 감사드립니다. 개인적으로 관심이 있는 부분 중 하나는 과연 메모리의 특정 위치를 어떻게 하면 빨리 읽고 쓰느냐 - 일종의 제어에 관심이 있습니다. 그리고 플래시 메모리에서 새롭게 쓰기보다 지우기가 더 느리다고 알고 있는데 맞는지도 궁금합니다. :)
플래시 메모리가 갑자기 HDD와 경쟁할 수 있는 수준으로 기술이 좋아진 배경에는 플래시메모리의 제어를 담당하는 컨트롤러 기술 덕분인 것으로 알고 있습니다. 이런 이유로 지난 2012년에 SK hynix에서 메모리 컨트롤러 전용 회사를 2500억 정도에 매입했던 사건도 있었구요.ㅎㅎ
플래시 메모리는 말씀하신대로 쓰는것보다 지우는 것이 훨씬 느립니다. 10~100배정도 차이가 나죠. 쓰기에 걸리는 시간이 100,000분의 1초라면, 지우는데는 1,000분의 1초정도가 되니까요. 그 물리적인 원리는 생각보다 간단합니다. 물통에 물을 담기 위해선 물을 물통에 담가 버리면 되지만, 물통의 물을 깨끗이 비우기 위해선 여러 번 털어줘야 하죠. 마찬가지로 플래시 메모리의 전자포획층에 담긴 전자를 깨끗이 떨궈 내기 위해선, 높은 전압을 여러번 가해줘야 합니다.
한가지 다행인 점이 있다면, 플래시 메모리의 지우기 동작은 한꺼번에 여러 소자를 동시에 지우는 방식이란 겁니다. 위 메모리 종류 그림의 우측 하단의 플래시메모리 그림을 보면, 가로의 긴 줄로 나란히 연결된 전선에 높은 전압을 걸어서 그 줄에 있는 모든 데이터를 한번에 지우거든요. 지우는 것이 1000배정도 느린데, 한번에 100개의 소자를 지울수 있다면 10배 정도만 느린 셈이니 어느정도 쓸만하겠죠?
여기서 다시 제어가 중요해집니다. 한번에 몇개의 소자를 지울 것인가? 소수의 기억만을 제외하고 나머지 데이터를 모두 지우고 싶을 때는 어떻게 할까? 정전기 등의 외부충격으로 인해 몇 개의 소자 데이터가 지워질 땐 어떻게 오류를 수정할까 등등..
메모리 종류 하나만 놓고 보더라도 재미있는 이야기들이 많이 있습니다. 기회가 되면 디테일한 내용도 다뤄보고 싶습니다 :) 그리고, 응원이 되는 댓글 감사합니다~
트랜지스터 하니 바딘이 생각나는군요 ㅎㅎ
오! 제가 가장 존경하는 분이예요. 물리학적 이론 연구에도 뛰어남과 동시에 공학적인 발명에도 기여한 그 발자취를 따르고 싶네요. 초전도체와 반도체 두 분야에서 노벨상을 탄 그 넘사벽 능력을 따라갈 수야 없겠지만, 저도 과학과 기술의 다양한 측면에서 조금이라도 기여하고 싶은 생각입니다 :)