기억 장치 (Computer Data Storage)
기억 장치는 컴퓨터에서 처리하려는 프로그램과 데이터를 저장하는 기능을 담당하는 장치이다. 기능과 저장장소에 따라 주기억장치와 보조기억장치로 구성된다. 기억장치를 설계할 때, 비용과 용량을 고려해 주기억장치와 보조기억장치를 구성해야 한다.
지역성의 원리 (Principle of Locality)
지역성의 원리란 프로그램이 실행될 때, 데이터와 명령어를 특정한 영역에서 집중적으로 참조하는 경향을 말한다. 이러한 지역성에는 두 가지 형태로 존재한다.
시간적 지역성(Temproal Locality)
: 어떤 내용이 한 번 참조되면, 곧바로 다시 참조되기 쉽다. 즉, 한 번 사용한 정보는 시간적으로 곧 다시 사용될 가능성이 높다는 것이다.공간적 지역성(Spatial Locality)
: 어떤 내용이 한 번 참조되면, 그 내용과 가까운 곳에 있는 내용이 참조되기 쉽다. 즉, 한 번 사용된 정보의 근처 영역이 다시 사용될 가능성이 높다는 것이다.
기억장치 계층구조 (Memory Hierarchy)
기억장치는 속도와 저장용량을 고려하여 구조를 구성하는데, 이를 "기억장치 계층구조"라고 한다. 컴퓨터의 성능은 기억장치의 접근 속도
에 의해 좌우된다. 그 이유는 기억장치의 접근 속도가 중앙처리장치의 데이터 처리 속도보다 느리기 때문이다.
기악장치 계층구조는 기억장치의 접근속도에 따라 구성되며, 상위 계층으로 갈수록 기억장치의 속도가 증가하며 동시에 가격도 비싸지게 된다. 반대로 하위 계층으로 갈수록 속도가 감소하며 가격도 저렴해진다. 따라서 속도가 빠른 기억장치를 중앙처리장치에 가장 가까운 곳에 배치한다.
다음의 그림은 기억 장치를 성능에 따라 계층적으로 분류한 기억 장치의 계층 구조이다. 레지스터, 캐시 메모리, 주기억장치, 보조기억장치 이 순서로 배치한다.

기억장치 성능평가
기억 장치의 성능을 평가하는 요소는 다음과 같습니다.
기억 용량(Capacity)
: 동일한 비용에서의 기억 장치의 용량접근 시간(Access Time)
: 기억 장치에 읽기/쓰기 요청을 한 후, 요청한 정보를 꺼내서 사용한 가능할 때까지의 시간사이클 시간(Cycle Time)
: 기억 장치에 읽기/쓰기 요청을 한 후, 다시 요청할 수 있을 때까지 기다려야 하는 시간대역폭(Bandwidth)
: 기억 장치가 단위 시간에 처리할 수 있는 정보가격(Cost)
: 기억장치의 가격은 보통 기억장치의 대역폭에 비례한다
이러한 요인들을 고려하여 컴퓨터 시스템의 성능을 평가하여 최소 비용으로 최고 효율을 내는 시스템을 설계해야 한다.
주기억 장치 (Main Memory)
주기억 장치(메인 메모리)는 외부에서 들여온 데이터를 보관할 공간을 말한다. CPU에 의해 수행될 프로그램과 데이터가 저장되는 곳이다. 주기억 장치는 크게 RAM과 ROM으로 분류된다.
RAM (Random Access Memory)
RAM(Random Access Memory)은 공급되던 전원이 꺼지면 저장된 내용이 사라지는 휘발성 메모리이다. Random Access라는 뜻에 걸맞게 메인 메모리의 어느 주소이든지 동일한 접근 속도로 접근 가능하다. RAM은 "정적 RAM"과 "동적 RAM"으로 분류된다.
정적 RAM(Static RAM)
: SRAM은 플립플랍으로 구성되며, 전원이 공급되는 동안 기억 내용이 유지된다. SRAM은 캐시 메모리로 사용된다.동적 RAM(Dynamic RAM)
: DRAM은 콘덴서로 구성되며 전원이 공급되어도 일정 시간이 지나면 전하가 방전되어 주기적인 재충전이 필요하다. DRAM은 일반적인 주기억 장치에 사용된다.
ROM (Read Only Memory)
ROM(Read Only Memory)은 전원이 제거되어도 저장된 내용이 지워지지 않는 비휘발성 메모리이다. ROM도 Random Access 특성을 가지고 있다. 그러나 RAM과 달리 전원이 제거되어도 내용이 지워지지 않는 특성을 가지고 있다. 이로 인해 ROM 내의 데이터는 오직 읽기만 가능하며 보통의 방법으로는 변경할 수 없다.
또한 "기본 입출력 시스템(BIOS)"와 컴퓨터를 부팅할 때 수행되어야 하는 "자가진단 프로그램"과 "부트스트랩 로더"를 저장한다. ROM은 저장 방식에 따라 다음과 같은 세부 종류들이 있다.
PROM
: 단 한 번만 프로그래밍할 수 있으며, 각 메모리 셀에 많은 전류를 흘릴 경우, 한 번에 끊어질 수 있다.EPROM
: 프로그래밍할 수 있으며 별도의 장치를 통해 자외선으로 프로그래밍할 수 있다.EEPROM
: EPROM과 유사하나 별도의 프로그램 장치 없이 PCB에서 직접 재프로그래밍할 수 있다.플래시 메모리
: EEPROM에 기반하여 전원이 꺼진 상태에서도 데이터가 지워지지 않는다. 데이터를 읽는 속도가 빠르고 하드디스크보다 충격에 강해 휴대용 기기에 주로 사용된다.
주기억 장치의 특징
주기억 장치는 다음과 같은 특성을 가진다.
- 컴퓨터가 프로그램을 수행하기 위해 프로그램은 주기억 장치에 있어야 한다.
- 프로세서가 직접 접근할 수 있는 유일한 대량 저장 장치이다.
- 수십만~수억의 크기를 가진 바이트 혹은 워드의 배열로 구성되어있고 각 워드는 자신의 주소를 가진다.
- CPU와의 상호 작용은 특정 기억 장치 주소에 일련의 *load(read)나 *store(wirte)명령을 통하여 수행된다.
*load: 주기억 장치로부터 CPU 내부의 레지스터로 워드를 이동시킨다.
*store: 레지스터의 내용을 주기억 장치로 이동시킨다.
보조기억 장치 (Secondary Memory)
보조기억 장치는 주기억 장치에 비해 속도는 느리지만 전원이 차단되어도 내용이 유지되는 기억장치이다. 보조기억 장치는 당장 필요하지 않지만 필요할 때 주기억장치로 옮겨서 사용할 수 있는 자료를 저장한다. 보조기억장치의 데이터 접근 방법에는 순차 접근(Sequential Access) 방식과 직접 접근(Direct Access) 방식이 있다.
순차 접근 방법
: 자료가 순차적으로 저장되기에 원하는 자료에 접근하기 위해 순차적으로 데이터를 검색하는 방법, 대표적을 자기테이프가 있다.직접 접근 방법
: 원하는 자료에 직접 접근할 수 있는 방법으로 데이터 검색이 빠르다는 특징이 있다. 대표적으로 자기디스크가 있다.
자기 디스크
자기디스크는 주기억 장치의 확장용으로 매우 큰 프로그램과 자료를 장기간 저장하는 용도로 사용된다. 디스크 방식의 기억 장치는 디스크 헤드를 원하는 트랙에 직접 위치시킬 수 있는 "직접 접근 방식(Direct Access)"이다. 디스크와 같은 직접 접근 저장 장치는 데이터를 저장하거나 재생하기 위해서는 다음의 3단계가 진행된다.
- 디스크 헤드를 적당한 트랙으로 옮긴다. (Seek Time)
- 디스크를 회전시켜 섹터를 찾는다. (Rotation Latency 또는 Rotation Delay)
- 디스크 헤드를 통해서 데이터를 전송한다. (Transfer Time)
디스크를 사용하기 위해 필요한 총 수행 시간은 다음의 합이다.
디스크 접근 시간=seek time+rotation latency+transfer time
자기 테이프
자기테이프는 초기의 보조기억 장치로 주로 사용되었으며, 거의 영구적이며 많은 양의 자료를 보관할 수 있다. 그러나 위치에 따라 접근 시간 차이가 심하고 순차적 접근만 가능하여 속도가 느리다. 예비용이나 자주 사용하지 않는 정보의 백업에 사용되거나 시스템 간의 정보 전송을 위한 매체로 사용된다. 현재는 많이 사용하지 않는 장치이다.
SSD(Solid State Disk)
기계식 하드 디스크는 디스크 헤드의 물리적 조작으로 인해 속도가 저하되고, 충격에 의한 기기 손상 가능성으로 인해 최근에는 플래시 메모리를 이용한 SSD(Solid State Disk)의 사용이 보편화되고 있다.
SSD는 내구성이 강하고 전력 소모가 적다. 다만, 재생 속도에 비해 기록 속도가 느리고, 기록과 삭제 횟수가 한정되어 기대 사용 수명이 미리 정해진다. SSD는 순차적인 읽기와 쓰기는 비슷한 성능을 가지고 랜덤한 순서로 접근할 때는 읽기가 쓰기보다 빠르다. 플래시 메모리의 근본적인 특성 때문에 이러한 차이가 생긴다.
RAID(Redundant Array of Inexpensive Disks)
RAID는 중요한 데이터를 가지고 있는 서버에 주로 사용된다. RAID는 여러 대의 하드 디스크가 있을 때 동일한 데이터를 다른 위치에 중복해서 저장하는 방법이다. 한 개의 대형 디스크를 사용하는 것보다 크기가 작은 여러 개의 디스크들을 서로 연결하여 하나의 큰 용량을 가진 디스크 배열을 구성하면 더 저렴하지만 더 큰 용량을 가진 디스크 시스템을 구성할 수 있다. 이러한 구조는 다음의 장점들이 있다.
- 데이터 분산 저장에 의한 동시 엑세스 가능
- 병렬 데이터 채널에 의한 데이터 전송 속도 향상
RAID는 운영체제에게 논리적으로 하나의 하드 디스크로 인식된다. RAID는 스트라이핑(Striping)을 통해 각 드라이브의 저장 공간을 다양한 범위로 파티션할 수 있다. RAID의 실제 구현 방법은 레벨 별로 여러 가지가 있다.
RAID-0
: 추가적인 오류교정 데이터 없이 데이터가 분산 저장되는 디스크 시스템, 스트라이프를 가지고 있지만 데이터를 중복해서 기록하지 않는다. 가장 높은 성능을 가지지만, 고장 대비 능력이 없기에 리스크가 매우 크며 비용이 가장 저렴하다.RAID-1
: 추가적인 오류교정 데이터 없이 중복저장 기법에 의하여 디스크 볼륨이 반사되는 디스크 시스템, 중복 저장된 데이터를 가진 두 개 이상의 드라이브로 구성된다. 각 드라이브를 동시에 읽을 수 있기에 읽기 성능은 향상 되고 쓰기 성능은 단일 디스크 드라이브의 경우와 같다. 거의 완전한 결함 허용도를 제공하지만, 가격이 비싸다.RAID-2
: 데이터를 비트-단위 인터리빙 방식을 사용하여 각 디스크에 비트 단위로 분산 저장하고 여러 개의 해밍코드가 저장된 디스크를 사용하여 오류를 검사한다. 다만 필요한 검사 디스크의 수가 많아 가격이 비싸다. 그럼에도 오류가 많은 환경에서 사용한다.RAID-3
: 데이터를 각 디스크에 바이트 단위로 분산 저장하고 하나의 패리티 검사 디스크를 사용한다. 병렬로 구성된 디스크에 동시 접근이 가능하고 RAID-2보다 더 경제적이다. 다만 디스크에 기록할 때마다 패리티 바이트를 계산하여 검사 디스크에 넣어야 하기에 패리티를 사용하지 않을 때보다 성능은 감소한다.RAID-4
: RAID 3레벨 디스크 시스템의 비트 단위 분산을 데이터 블록 단위의 분산으로 변화시킨 형태이다. 읽기 연산의 경우 병렬 처리가 가능하나, 쓰기 연산의 경우 병렬 처리가 불가능하다.RAID-5
: 각 디스크에 데이터와 함께 피리티 정보를 블록 단위로 분산 저장한다. 패리티 디스크의 병목 현상을 제거하여 여러 개의 디스크에 병렬 쓰기 연산이 가능하다.RAID-6
: RAID-5에 다차원 패리티 체계를 구축한 디스크 시스템으로, 높은 신뢰성을 보장하고 데이터 가용성도 높다. 그러나 쓰기 동작을 할 때마다 2개의 패리티를 계산하여 갱신해야 한다.
캐시 메모리 (Cache Memory)
캐시 메모리는 CPU(속도 빠름)와 주기억 장치(속도 느림) 사이에 위치하여 데이터 접근 효율성을 향상시키기 위한 메모리이다. 주기억 장치(메인 메모리)로부터 CPU로 로드되어 사용된 데이터를 캐시 메모리에 보관한다. 데이터를 사용할 때에는 캐시 메모리 내의 데이터를 먼저 사용하여 메인 메모리로의 접근 횟수를 줄여 속도를 향상시킬 수 있다. 캐시 메모리의 동작 방식은 다음과 같다.
- 데이터를 주기억 장치로부터 캐시로 복사한다.
- 캐시에서 데이터를 꺼내어 처리한다.
- 다음 번 데이터 요구 시 캐시를 검사하여 원하는 데이터가 있으면 꺼내온다.
- 만일 캐시에 원하는 데이터가 없으면 주기억 장치에서 꺼내온다.
- 다시 사용하는 메모리 부분을 캐시에 복사한다.
CPU가 캐시 메모리에서 원하는 데이터를 찾을 경우를 "적중(Hit)"하였다고 한다. 원하는 정보가 캐시 메모리에 존재할 확률인 "캐시 적중률(Cache Hit Rate)"은 다음과 같다.
MEMO!
캐시 적중률(H) = 캐시 적중 횟수 / 전체 기억 장치 참조 횟수
그리고 평균 기억장치 엑세스 시간(Taccess)은 다음과 같다. 이때 Tcache는 캐시 엑세스 시간, Tmemory은 주기억 장치 액세스 시간을 의미한다.
Taccess=H×Tcache+(1−H)×(Tmemory+Tcache)
캐시 메모리는 상대적으로 용량이 적어 캐시 메모리의 내용은 필요할 때마다 교체되어야 한다. 그렇기에 캐시 메모리의 교체 알고리즘은 캐시 적중률에 많은 영향을 끼친다.
최소 최근 사용(LRU) 알고리즘
: 사용되지 않은 채로 가장 오래 있었던 블록을 교체하는 방식FIFO(First In First Out) 알고리즘
: 캐시에 적재된 오래된 블록을 교체하는 방식최소 사용 빈도(LFU) 알고리즘
: 참조되었던 횟수가 가장 적은 블록을 교체하는 방식
캐시 메모리를 사용하며 캐시의 내용이 변경되었을 때, 그 내용을 주기억 장치에 갱신하는 시기와 방법을 결정해야 한다.
Write-Through
: 모든 쓰기 동작들이 캐시로 뿐만 아니라 주기억 장치로도 동시에 수행되는 방식Write-Back
: 캐시에서 데이터가 변경되어도 주기억 장치에는 갱신되지 않는 방식