분류
- 하위항목 : /표기 용량과 실제
1. 개요
메모리란 컴퓨터의 기억장치를 일컫는다. 큰 틀에서 설명하면, CPU는 계산을 담당하고, 메모리는 기억을 담당한다. 공장에 비유를 하자면 CPU는 일꾼이고, 메모리는 작업장이며, 보조기억장치는 창고라 할 수 있겠다. 작업장의 크기가 곧 메모리의 크기로, 작업장이 클수록 창고에서 물건을 많이 가져다 놓고 일할수 있게 된다. 어디까지나 쉽게 설명하기 위한 비유이므로 자세한 것은 아래 항목을 참고하자.
CPU에서 계산한 결과가 메모리에 저장이 되는 것이다. 하드디스크 같은 보조기억장치에 저장되는 것이 아니다. 그러니까 컴퓨터가 켜지면서부터 프로그램이 실행되면 그것들은 몽땅 메모리에 올라오게 된다. 이때문에 메모리의 크기가 중요하지만 옛날엔 이 메모리의 가격이 비쌌기 때문에 메모리를 절약하기 위해 페이지니 스와핑이니 하는 온갖 방법이 탄생했다. 또한 이 메모리에도 용도별로 여러 종류가 존재하며 가격에 따라 그 크기와 용도가 결정되기도 한다. 요즘은 메모리의 중요성이나 존재조차 모르는 사람들이 많이 있다.
1.1. CPU와 메모리간의 접근성에 따른 분류
CPU에 가까운 순서대로 레지스터(CPU) - (캐시 메모리) - 주 기억 장치 - (캐시 메모리) - 보조 기억 장치로 나눌 수 있다. 일반적으로 용량이 작을수록 동작속도가 빠르며, 용량이 클수록 동작속도가 느리다. 반면 속도가 빠를수록 용량 대비 가격이 비싸지고, 느릴수록 싸진다. 즉, 빠른 속도가 요구되지만 많은 용량이 필요하지 않은 CPU내의 레지스터에는 고속, 고가의 기억장치를 사용하게 되고, 대용량의 자료를 영구적으로 보관하기 위해서는 저속, 저가, 대용량의 기억장치를 사용하게 된다.
간단히 레지스터에 있는 데이터를 읽는 것은 머릿속에 있는 기억을 떠올리는 행동으로, 주기억장치에 있는 데이터를 읽는 것은 책장에 꽂혀 있는 책에서 특정한 책을 찾아 내용을 읽는 행동으로, 보조기억장치에 있는 데이터를 읽는 것은 지구를 한 바퀴 돌아서 특정한 내용을 찾아오는 것으로 비유하곤 한다.
저장 비트당의 가격과 용량, 그리고 속도에 따라 계층을 구분하면 피라미드형 구조를 이루게 된다. 더 자세한 내용은 메모리 계층 구조 참조.
간단히 레지스터에 있는 데이터를 읽는 것은 머릿속에 있는 기억을 떠올리는 행동으로, 주기억장치에 있는 데이터를 읽는 것은 책장에 꽂혀 있는 책에서 특정한 책을 찾아 내용을 읽는 행동으로, 보조기억장치에 있는 데이터를 읽는 것은 지구를 한 바퀴 돌아서 특정한 내용을 찾아오는 것으로 비유하곤 한다.
저장 비트당의 가격과 용량, 그리고 속도에 따라 계층을 구분하면 피라미드형 구조를 이루게 된다. 더 자세한 내용은 메모리 계층 구조 참조.
레지스터
| ||||||||
캐시 메모리
| ||||||||
주 기억 장치
| ||||||||
버퍼(디스크 캐시)
| ||||||||
보조 기억 장치
| ||||||||
- 주 기억 장치(Main Memory)
CPU에서 직접 접근이 가능한 메모리. 이 뜻은 '주기억장치 100번지의 내용을 레지스터 1번에 저장하라', 혹은 '레지스터 1번의 내용을 주기억장치 100번에 덮어써라'와 같은 명령이 가능하다는 뜻이다. 직접 접근이 가능하지만 상수를 쓰는 것 이외의 연산은 CPU에서 바로 수행할 수 없으며, 메모리의 값을 레지스터로 로드, 연산, 연산 결과 적용의 단계를 거쳐야 한다.[4] CISC CPU에서는 메모리의 값을 직접 변경하는 명령어를 제공하는것처럼 보이지만 내부적으로는 위 단계를 거친다.
- 보조 기억 장치
CPU에서 직접 접근이 불가능한 메모리. 접근하려면 디바이스 드라이버와 시스템 콜을 통하여 기억장치의 특정 위치의 내용을 주기억장치로 로드(Load)한 뒤 읽어야 한다. 예를 들어 '0번 디스크 8번 트랙 12번 섹터 16번지의 값을 레지스터 1번에 저장하라'와 같은 명령이 불가능하다. 해당 내용을 읽으려면 '0번 디스크 8번 트랙 12번 섹터를 주기억장치 1024번지에 로드하라'는 시스템 콜을 먼저 호출한 후 메모리에서 '1024+16번지의 값을 레지스터 1번에 저장하라'와 같은 형태로 접근해야만 한다. CPU의 입장에서 보자면 보조기억장치는 여러 종류의 주변장치 중 하나이며 그 중 '저장 기능'을 지니고 있는 장치일 뿐이다.
1.2. 접근 방식에 따른 분류
1.3. 저장 방식에 따른 분류
주기억장치로도 사용 가능한 메모리는 ☆, 보조기억장치로만 사용이 가능한 메모리는 ★ 표시한다.
임의 접근이 가능한 메모리는 ※, 순차 접근만이 가능한 메모리는 → 표시한다.
임의 접근이 가능한 메모리는 ※, 순차 접근만이 가능한 메모리는 → 표시한다.
1.3.1. 반도체※
-
- 램디스크★
-
1.3.2. 자기장(Magnetic)을 이용한 방식
저장 매체(Media) 위에 자기장에 반응하는 물질을 발라두고 헤드(Head)를 이용해 특정 위치의 값을 읽어오는 장치.
* 자기코어 기억장치: 자기코어(Magnetic Core)는 페라이트(Ferrite) 자성 물질을 작은 고리 모양으로 만든 링에 도체를 끼운 후, 도체에 흐르는 전류의 방향에 따라 데이터를 기억시키거나 읽을 수 있는 기억장치이다. 자기코어는 초창기의 컴퓨터에 사용된 기억장치로 현재에는 사용되지 않고 있다. 하나의 자기코어에는 오직 하나의 상태, 즉 1비트의 데이터가 기억된다. 따라서 원하는 크기의 기억 용량을 갖도록 하기 위해서는 많은 개수의 자기코어가 필요하다. 또한 속도가 매우 느린 기억장치이다. 자기코어는 한번 자화되면 전원이 끊어져도 해당 상태를 유지하기 때문에 비휘발성 메모리이다. 자기코어에서 데이터를 읽어낸 후에는 저장된 데이터가 사라지게 된다. 따라서 계속 데이터를 유지하기 위해서는 읽어낸 후에 다시 데이터를 저장시키기 위한 방법이 필요하다. 요즘에는 쓰기는 커녕 보기도 힘든 물건이지만 교과서에는 나온다.
* 자기코어 기억장치: 자기코어(Magnetic Core)는 페라이트(Ferrite) 자성 물질을 작은 고리 모양으로 만든 링에 도체를 끼운 후, 도체에 흐르는 전류의 방향에 따라 데이터를 기억시키거나 읽을 수 있는 기억장치이다. 자기코어는 초창기의 컴퓨터에 사용된 기억장치로 현재에는 사용되지 않고 있다. 하나의 자기코어에는 오직 하나의 상태, 즉 1비트의 데이터가 기억된다. 따라서 원하는 크기의 기억 용량을 갖도록 하기 위해서는 많은 개수의 자기코어가 필요하다. 또한 속도가 매우 느린 기억장치이다. 자기코어는 한번 자화되면 전원이 끊어져도 해당 상태를 유지하기 때문에 비휘발성 메모리이다. 자기코어에서 데이터를 읽어낸 후에는 저장된 데이터가 사라지게 된다. 따라서 계속 데이터를 유지하기 위해서는 읽어낸 후에 다시 데이터를 저장시키기 위한 방법이 필요하다. 요즘에는 쓰기는 커녕 보기도 힘든 물건이지만 교과서에는 나온다.
- 기록방법: 자기코어에는 1과 0의 두 가지 상태 중의 하나를 기억시킬 수 있다. 즉, 다음 그림과 같이 전류가 흐르는 방향에 따라 1이나 0의 상태를 갖게 된다.
- 읽기방법: 자기코어에 기억된 내용을 읽을 때에는 자기코어에 0을 기억시킬 때와 같은 방향으로 전류를 흐르게 한 후에 읽기 위한 선에 전류가 흐르게 되면 1, 흐르지 않으면 0으로 판단한다.
- 아폴로 우주선의 컴퓨터에는 이 자기코어 메모리 장치가 사용되었다. 수작업으로 만드는 수공업품이며, 현대의 메모리처럼 모듈식으로 제작되었지만 부피는 상당히 크다.
- 자기 디스크★※→: 매체로 원반을 이용한다. 원반의 특정 트랙으로는 임의 접근이 가능하지만 원하는 섹터를 읽을 때까지는 순차 접근만이 가능하다. 이를 하이브리드 접근이라고 한다.
-
- ZIP 드라이브 등
- 자기 드럼☆※→파일:external/upload.wikimedia.org/ERA_Magnetic_Drum,_US,_c._1951_-_Computer_History_Museum_-_Mountain_View,_California.jpg
매체로 원통(Cylinder)의 바깥쪽을 이용한다. 실린더의 바깥쪽에 자성물질을 발라두고 실린더를 회전시키거나, 실린더 표면을 읽는 헤드를 여러 개 두어 특정 위치의 값을 읽는다. 반도체 메모리를 컴퓨터에 기억장치로 도입하기 전에는 자기 드럼을 주기억장치로 활용하였다. 이후 반도체 메모리가 주기억장치의 대세가 되면서 현재는 시장에서 퇴출된 상태이다. 자기 드럼이 주기억장치로 활용될 때에는 CPU에서 특정 명령을 수행한 뒤 다음 명령을 읽어와야 할 때 드럼 헤드의 위치에 바로 다음 명령어가 위치하도록 드럼의 회전 속도와 명령의 수행 시간을 계산하는 최적화를 사람이 손으로 직접 하기도 하였다. 당시에는 자기 드럼이 자기 디스크보다 빨랐기에 주기억장치로 활용될 수 있었다. - 자기테이프★→: 가격 대비 저장용량의 끝판왕.
1.3.3. 광학(Optical) 방식
1.4. 관습에 따른 분류
램디스크를 보면 알겠지만, 기술의 발전 및 대세였던 기억장치들의 발전사에 따라 이름 불리다보니 이름과 실제가 다른 것들이 많다. 영어로 쓰여 있지만, 미국인 영국인이 쓰지 않는 콩글리시도 많다.
- 매우 빠른 메모리
- 빠른 메모리
- 느리지만 보존되는 메모리
-
- SD카드(안드로이드): microSD카드가 아닌, 내부 플래시 메모리(eMMC) 저장소를 지칭한다. 슬롯에 꽂아 쓰는 그 microSD카드는 external sdcard라고 한다. 그렇다고 안드로이드 뚜껑을 따면 내부에 SD카드가 심어져 있는 것은 아니다. 내부 메모리는 사용자가 터치할 수 없는 안드로이드 운영체제 전용 메모리를 지칭한다. 이렇게 된 이유는 안드로이드가 개발될 당시 내부 메모리 가격이 비싸서 MB단위의 적은 용량의 칩을 사용할 수밖에 없었기 때문이다. 내장 메모리를 운영체제용(필수)으로 이용하고, SDcard를 삽입시켜 사용자 데이터 저장용(선택)으로 쓰도록 했던 것. 이후 메모리 가격이 내려가면서 SDcard라 이름 붙은 영역이 내장 메모리의 파티션으로 들어갔다가, 그 이후에는 폴더로 전환되는 과정에서 이름과 실제가 달라지게 되었다.
-
- 이동식 메모리
2. 기억장치의 성능
기억장치의 성능은 기억장치의 용량, 접근 시간, 데이터 전송률 등으로 평가할 수 있다.
2.1. 용량(Storage Capacity)
큰 용량을 나타낼 때에는 SI 접두어에서 따온 단위를 앞에 붙인다.
1Bit(비트) = 가장 작은 용량 단위
1Byte(바이트) = 8Bit
1kB(킬로바이트) = 2의 10제곱 Byte = 1024 Byte
1MB(메가바이트) = 2의 20제곱 Byte = 1024 KB
1GB(기가바이트) = 2의 30제곱 Byte = 1024 MB
1TB(테라바이트) = 2의 40제곱 Byte = 1024 GB
1PB(페타바이트) = 2의 50제곱 Byte = 1024 TB
1EB(엑사바이트) = 2의 60제곱 Byte = 1024 PB
1ZB(제타바이트) = 2의 70제곱 Byte = 1024 EB
1YB(요타바이트) = 2의 80제곱 Byte = 1024 ZB
컴퓨터의 기억장치는 주기억장치, 즉 램의 용량이 커질수록 컴퓨터의 연산 속도가 빨라질 수 있다. 그러나 경제적인 면이나 효율적인 면을 고려하여 적절한 용량을 선택하는 것이 좋다.
참고로 위 용량 표기는 실제로는 정확하지 않다. 자기디스크 기억장치, 반도체 보조기억장치가 그렇다. 여기에 대해서는 아래 항목 참조.
여담으로, 2017년에 전 세계의 모든 인터넷 정보를 다 모으면 44ZB가 된다고 한다.(다른 뉴스에서 나옴) 차후 44ZB보다 정확한 용량을 알게된다면 내용 수정 바람.(2018/12/10수정됨)
1Bit(비트) = 가장 작은 용량 단위
1Byte(바이트) = 8Bit
1kB(킬로바이트) = 2의 10제곱 Byte = 1024 Byte
1MB(메가바이트) = 2의 20제곱 Byte = 1024 KB
1GB(기가바이트) = 2의 30제곱 Byte = 1024 MB
1TB(테라바이트) = 2의 40제곱 Byte = 1024 GB
1PB(페타바이트) = 2의 50제곱 Byte = 1024 TB
1EB(엑사바이트) = 2의 60제곱 Byte = 1024 PB
1ZB(제타바이트) = 2의 70제곱 Byte = 1024 EB
1YB(요타바이트) = 2의 80제곱 Byte = 1024 ZB
컴퓨터의 기억장치는 주기억장치, 즉 램의 용량이 커질수록 컴퓨터의 연산 속도가 빨라질 수 있다. 그러나 경제적인 면이나 효율적인 면을 고려하여 적절한 용량을 선택하는 것이 좋다.
참고로 위 용량 표기는 실제로는 정확하지 않다. 자기디스크 기억장치, 반도체 보조기억장치가 그렇다. 여기에 대해서는 아래 항목 참조.
여담으로, 2017년에 전 세계의 모든 인터넷 정보를 다 모으면 44ZB가 된다고 한다.(다른 뉴스에서 나옴) 차후 44ZB보다 정확한 용량을 알게된다면 내용 수정 바람.(2018/12/10수정됨)
2.2. 접근 시간(Access Time)
접근 시간은 기억장치에 기억되어 있는 데이터를 읽거나 기억장치에 데이터를 기록하는데 소요되는 시간을 말한다,
램의 접근 시간은 기억시킬 메모리의 주소를 메모리 주소 레지스터(MAR)에 전달한 후, 메모리 버퍼 레지스터(MBR)에서 기억시킬 데이터를 수신할 때까지 걸리는 시간을 의미한다.
램의 접근 시간은 기억시킬 메모리의 주소를 메모리 주소 레지스터(MAR)에 전달한 후, 메모리 버퍼 레지스터(MBR)에서 기억시킬 데이터를 수신할 때까지 걸리는 시간을 의미한다.
2.3. 데이터 전송률(Data Transfer Rate)
3. 기타
MS에서는 느린 보조 기억장치인 HDD를 보완하기 위해서 USB 메모리 등을 이용하여 일종의 보조 캐시 처럼 사용하는 ReadyBoost라는 기술을 선보인 적이 있다. 다만, 이는 느린 HDD일 때나 효과가 있고, SSD 나 고속 HDD에서는 기능 자체가 동작하지 않는다. SSD가 널리 보급됨에 따라 같이 사장되어 버린 기술.
[1] 시스템의 비트를 따라간다. 즉, 32비트 시스템이라면 32비트 정수, 64비트 시스템이라면 64비트 정수.[2] 시스템의 비트를 따라간다. 즉, 32비트 시스템이라면 32비트 정수, 64비트 시스템이라면 64비트 정수.[3] 이는 CPU의 작동 단계인 Fetch-Decode-Execute-Write Back(Store)와 일치한다.[4] 이는 CPU의 작동 단계인 Fetch-Decode-Execute-Write Back(Store)와 일치한다.[5] 정확히 따지면 초창기인 2000~2001년 사이에는 인텔이 매우 비싼 가격의 RDRAM으로 밀어주는 바람에 DDR SDRAM을 사용할 수 있는 메인보드가 많지 않았고, 설령 찾았더라도 당시 DDR SDRAM이 기존 SDRAM보다 더 비싼 가격을 헝성하는 등 접근성이 중요한 일반 사용자 입장으로썬 매리트가 떨어졌기 때문에 여전히 SDRAM을 지칭하는 경우가 더 많았다. 인텔이 RDRAM을 포기하고 펜티엄 4 노스우드 세대인 2002년이 되어서야 DDR SDRAM으로 정착되었다.[6] 정확히 따지면 초창기인 2000~2001년 사이에는 인텔이 매우 비싼 가격의 RDRAM으로 밀어주는 바람에 DDR SDRAM을 사용할 수 있는 메인보드가 많지 않았고, 설령 찾았더라도 당시 DDR SDRAM이 기존 SDRAM보다 더 비싼 가격을 헝성하는 등 접근성이 중요한 일반 사용자 입장으로썬 매리트가 떨어졌기 때문에 여전히 SDRAM을 지칭하는 경우가 더 많았다. 인텔이 RDRAM을 포기하고 펜티엄 4 노스우드 세대인 2002년이 되어서야 DDR SDRAM으로 정착되었다.[7] 정확히 따지면 초창기인 2000~2001년 사이에는 인텔이 매우 비싼 가격의 RDRAM으로 밀어주는 바람에 DDR SDRAM을 사용할 수 있는 메인보드가 많지 않았고, 설령 찾았더라도 당시 DDR SDRAM이 기존 SDRAM보다 더 비싼 가격을 헝성하는 등 접근성이 중요한 일반 사용자 입장으로썬 매리트가 떨어졌기 때문에 여전히 SDRAM을 지칭하는 경우가 더 많았다. 인텔이 RDRAM을 포기하고 펜티엄 4 노스우드 세대인 2002년이 되어서야 DDR SDRAM으로 정착되었다.[8] 1바이트는 8비트이므로, 초당 바이트로 환산하려면 8로 나눠야 한다.