Chapter 06. 메모리와 캐시메모리
06-1 RAM의 특징과 종류
RAM의 특징
RAM | 보조기억장치 |
---|
휘발성 저장장치 | 비휘발성 저장장치 |
'실행할 대상' 저장 | '보관할 대상' 저장 |
- CPU는 보조기억장치에 직접 접근하지 못한다.
- CPU가 실행하고 싶은 프로그램이 보조기억장치에 있다면 이를 RAM으로 복사하여 저장한 뒤 실행한다.
RAM의 용량과 성능
- CPU가 실행하고 싶은 프로그램이 보조기억장치에 있다면 이를 RAM으로 가져와야 할텐데, RAM 용량이 적다면 보조기억장치에서 실행할 프로그램을 가져오는 일이 잦아 실행 시간이 길어진다.
- RAM의 용량이 충분히 크다면 보조기억장치에서 많은 데이터를 가져와 미리 RAM에 저장할 수 있기 때문에 많은 프로그램을 동시에 실행하는데 유리하다.
- RAM 용량이 커지면 프로그램 실행 속도가 어느 정도 증가하는 것은 맞지만, 용량이 필요 이상으로 커졌을 때 속도가 그에 비례하여 증가하지는 않는다.
RAM의 종류
| 1. DRAM | 2. SRAM |
---|
재충전 | 필요함 | 필요 없음 |
속도 | 느림 | 빠름 |
가격 | 저렴함 | 비쌈 |
직접도 | 높음 | 낮음 |
소비전력 | 적음 | 높음 |
사용 용도 | 주기억장치 | 캐시 메모리 |
- SDRAM(Synchronous Dynamic RAM)
- 클럭에 맞춰 동작하면 클럭마다 CPU와 정보를 주고받을 수 있는 DRAM이다.
- DDR SDRAM
- 대역폭을 넓혀 속도를 빠르게 만든 SDRAM이다. 여기서 대역폭 이란 '데이터를 주고 받는 길의 너비'를 의미한다.
06-2 메모리의 주소 공간
물리 주소와 논리 주소
메모리에 저장된 정보는 시시각각 변하기 때문에 CPU와 실행 중인 프로그램은 현재 메모리 몇 번지에 무엇이 저장되어 있는 다 알지 못한다.
물리 주소
- 메모리 입장에서 바라본 주소
- 말 그대로 정보가 실제로 저장된 하드웨어상의 주소
논리 주소
- CPU와 실행 중인 프로그램 입장에서 바라본 주소
- 실행 중인 프로그램 각각에게 부여된 0번지부터 시작하는 주소
- 프로그램마다 같은 논리 주소가 얼마든지 있을 수 있다.
즉, 메모리가 사용하는 주소는 하드웨어상의 실제 주소인 물리 주소이고, CPU와 실행 중인 프로그램이 사용하는 주소는 각각의 프로그램이 부여된 논리 주소이다.
CPU가 메모리와 상호작용하려면 논리 주소와 물리 주소 간의 변환이 이루어져야 한다. 논리 주소와 물리 주소 간에 어떠한 변환도 이루어지지 않는다면 CPU와 메모리는 서로 이해할 수 없는 주소 체계를 가지고 각자 다른 이야기만 할 뿐 결코 상호작용 할 수 없기 때문이다.
논리 주소와 물리 주소의 변환
- 논리 주소와 물리 주소 간의 변환은 CPU와 주소 버스 사이에 위치한 메모리 관리 장치(Memory Management Unit, MMU)라는 하드웨어에 의해 수행된다.
- MMU는 논리 주소와 베이스 레지스터(기준 주소) 값을 더하여 논리 주소를 물리 주소로 변환한다.
- 베이스 레지스터는 프로그램의 가장 작은 물리 주소, 즉 프로그램의 첫 물리 주소를 저장하는 셈이고, 논리 주소는 프로그램의 시작점으로부터 떨어진 거리인 셈이다.
메모리 보호 기법
한계 레지스터
- 프로그램의 영역을 침범할 수 있는 명령어의 실행을 막음
- 베이스 레지스터가 실행 중인 프로그램의 가장 작은 물리 주소를 저장한다면, 한계 레지스터는 논리 주소의 최대 크기를 저장
- 베이스 레지스터 값 <= 프로그램의 물리 주소 범위 < 베이스 레지스터 + 한계 레지스터 값
06-3 캐시 메모리
저장 장치 계층 구조
저장 장치는 일반적으로 아래와 같은 명제를 따른다.
- CPU와 가까운 저장 장치는 빠르고, 멀리 있는 저장 장치는 느리다.
- 속도가 빠른 저장 장치는 저장 용량이 작고, 가격이 비싸다.
컴퓨터가 사용하는 저장 장치들은 'CPU에 얼마나 가까운가'를 기준으로 계층적으로 나타낼 수 있다. 이를 저장 장치 계층 구조라고 한다.
위 계층으로 올라갈수록 CPU와 가깝고 용량은 작지만 빠른 저장 장치이다. 그리고 아래 계층으로 내려갈수록 CPU와 멀고 용량은 크지만 느린 저장 장치이다. 가격 또한 위 계층으로 올라갈수록 비싸고, 아래 계층으로 내려갈수록 저렴하다.
캐시 메모리
- 캐시 메모리는 CPU와 메모리 사이에 위치하고, 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장 장치이다.
- 캐시 메모리는 CPU의 연산 속도와 메모리 접근 속도의 차이를 조금이나마 줄이기 위해 탄생했다.
- 우리가 사용하는 컴퓨터 내부에는 여러 개의 캐시 메모리가 있다. 그리고 이 캐시 메모리들은 CPU(코어)와 가까운 순서대로 계층을 구성한다. 코어와 가장 가까운 캐시 메모리를 L1 캐시, 그 다음은 L2 캐시, 그 다음은 L3 캐시라고 부른다. (일반적으로 L1, L2 캐시는 코어 내부에, L3 캐시는 코어 외부에 위치해 있다.)
- 캐시 메모리의 용량은 L1, L2, L3 순으로 커지고, 속도는 L3, L2, L1 순으로 빨라진다. 가격은 일반적으로 L3, L2, L1 순으로 비싸진다.
- CPU가 메모리 내에 데이터가 필요하다고 판단하면 우선 L1 캐시에 해당 데이터가 있는지를 알아보고, 없다면 L2, L3 캐시 순으로 데이터를 검색한다.
참조 지역성 원리
- 보조기억장치는 전원이 꺼져도 기억할 대상을 저장하고, 메모리는 실행 중인 대상을 저장한다면 캐시 메모리는 CPU가 사용할 법한 대상을 예측하여 저장한다.
- 이때 자주 사용될 것으로 예측한 데이터가 실제로 들어맞아 캐시 메모리 내 데이터가 CPU에서 활용될 경우를 캐시 히트라고 한다. 그 반대의 경우를 캐시 미스라 하고 자주 발생하면 성능이 떨어진다.
- 캐시 적중률이란 캐시가 히트되는 비율을 말하며 다음과 같이 계산한다.
캐시 히트 횟수/ (캐시 히트 횟수 + 캐시 미스 횟수)
캐시 메모리는 한 가지 원칙에 따라 메모리로부터 가져올 데이터를 결정한다. 바로 참조 지역성의 원리이다.
- CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다. (시간 지역성)
- CPU는 변수가 저장된 메모리 공간을 언제든 다시 참조할 수 있다.
- 즉, CPU는 최근에 접근했던 (변수가 저장된) 메모리 공간을 여러 번 다시 접근할 수 있다.
- CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다. (공간 지역성)
- CPU가 실행하려는 프로그램은 보통 한데 모여있다.
- 하나의 프로그램 내에서도 관련 있는 데이터들은 모여서 저장된다.
Chapter 07. 보조기억장치
07-1 다양한 보조기억장치
하드 디스크
-
하드 디스크는 자기적인 방식으로 데이터를 저장하는 보조기억장치이다.
-
하드 디스크에서 실질적으로 데이터가 저장되는 곳은 동그란 원판이다. 이를 플래터라고 한다.
-
플래터를 회전시키는 구성 요소를 스핀들이라고 한다. 스핀들이 플래터를 돌리는 속도는 분당 회전수를 나타내는 RPM이라는 단위로 표현된다.
-
플래터를 대상을 데이터를 읽고 쓰는 구성 요소는 헤드이다. 헤드는 플래터 위에서 미세하게 떠 있는 채로 데이터를 읽고 쓰는, 마치 바늘같이 생긴 부품이다. 그리고 헤드는 원하는 위치로 헤드를 이동시키는 디스크 암에 부착되어 있다.
-
플래터는 트랙과 섹터라는 단위로 데이터를 저장한다.
-
여러 겹의 플래터 상에서 같은 트랙이 위치한 곳을 모아 연결한 논리적 단위를 실린더라고 부른다. 쉽게 말해 한 플래터를 동심원으로 나눈 공간은 트랙, 같은 트랙끼리 연결한 원통 모양의 공간은 실린더이다.
하드 디스크가 저장된 데이터에 접근하는 시간은 크게 탐색 시간, 회전 지연, 전송 시간 으로 나뉜다.
- 탐색 시간은 접근하려는 데이터가 지정된 트랙까지 헤드를 이동시키는 시간을 의미한다.
- 회전 지연은 헤드가 있는 곳으로 플래터를 회전시키는 시간을 의미한다.
- 전송 시간은 하드 디스크와 컴퓨터 간에 데이터를 전송하는 시간을 의미한다.
하드 디스크 작동 참고 영상
https://www.youtube.com/watch?v=3owqvmMf6No
플래시 메모리
플래시 메모리는 전기적으로 데이터를 읽고 쓸 수 있는 반도체 기반의 저장 장치이며, 우리가 흔히 사용하는 USB 메모리, SD 카드, SSD가 모두 플래시 메모리 기반의 보조기억장치이다. 주기억장치 중 하나인 ROM에도 사용되고, 우리가 일상적으로 접하는 거의 모든 전자제품 안에 플래시 메모리가 내장되어 있다고 봐도 무방하다.
-
플래시 메모리에는 셀이라는 단위가 있다. 셀이란 플래시 메모리에서 데이터를 저장하는 가장 작은 단위이다. 이 셀이 모이고 모여 MB, GB, TB 용량을 갖는 저장 장치가 되는 것이다.
-
한 셀에 1비트를 저장할 수 있는 플래시 메모리를 SLC타입, 한 셀에 2비트를 저장할 수 있는 플래시 메모리를 MLC타입, 한 셀에 3비트를 저장할 수 있는 플래시 메모리를 TLC타입이라고 한다. 사람 한 명을 비트, 셀을 집에 비유하면 SLC타입은 한 집에 한명, MLC 타입은 한 집에 두명, TLC 타입은 세 명이 사는 구조로 비유할 수 있다.
- SLC타입 : 다른 타입에 비해 빠른 입출력이 가능하고 수명도 길다. 하지만 용량 대비 가격이 높다. 그렇기에 데이터를 읽고 쓰기가 매우 반복되며 고성능의 빠른 저장 장치가 필요한 경우에 SLC 타입을 사용한다.
- MLC타입 : SLC 타입보다 일반적으로 속도와 수명은 떨어지지만, 한 셀에 두 비트씩 저장할 수 있다는 점에서 대용화하기 유리하다. 시중에서 많이 사용되는 플래시 메모리 저장 장치들이 MLC 타입으로 만들어진다.
- TLC타입 : 한 셀당 3비트씩 저장할 수 있는 TLC 타입은 한 셀로 여덟 개의 정보를 표현할 수 있다. 그렇기에 대용화 하기가 유리하다. 일반적으로 SLC와 MLC 타입보다 수명과 속도가 떨어지지만 용량 대비 가격도 저렴하다.
구분 | SLC | MLC | TLC |
---|
셀당 bit | 1bit | 2bit | 3bit |
수명 | 길다 | 보통 | 짧다 |
읽기/쓰기 속도 | 빠르다 | 보통 | 느리다 |
용량 대비 가격 | 높다 | 보통 | 낮다 |
이제 플래시 메모리의 가장 작은 단위인 셀보다 더 큰 단위를 알아보자.
셀들이 모여 만들어진 단위를 페이지, 그리고 그 페이지가 모여 만들어진 단위를 블록이라고 한다. 블록이 모여 플레인, 플레인이 모여 다이가 된다.
플래시 메모리에서 읽기와 쓰기는 페이지 단위로 이루어진다. 하지만 삭제는 페이지보다 큰 블록 단위로 이루어진다. 읽기/쓰기 단위와 삭제 단위가 다르다는 것이 플래시 메모리의 가장 큰 특징 중 하나이다. 이 때 페이지는 세 개의 상태를 가질 수 있다. 이는 각각 Free, Valid, Invalid 상태이다.
-
Free 상태 : 어떠한 데이터도 저장하고 있지 않아 새로운 데이터를 저장할 수 있는 상태
-
Valid 상태 : 이미 유효한 데이터를 저장하고 있는 상태
-
Invalid 상태 : 쓰레기값이라 부르는 유효하지 않은 데이터를 저장하고 있는 상태
-
쓰레기값을 저장하고 있는 공간은 사용하지 않을 공간인데도 불구하고 용량을 차지하고 있다. 이는 엄연한 용량 낭비이다. 앞서 언급했듯 플래시 메모리에서 삭제는 블록 단위로 수행되기 때문에 SSD를 비롯한 플래시 메모리는 이런 쓰레기값을 정리하기 위해 가비지 컬렉션 기능을 제공한다.
- 가비지 컬렉션은 1. 유효한 페이지들만 새로운 블록으로 복사한 뒤, 2. 기존의 블록을 삭제하는 기능이다. 즉, 블록 X의 유효한 페이지를 새로운 블록 Y로 옮기고 블록 X를 삭제하는 것이다.
07-2 RAID의 정의와 종류
RAID의 정의
RAID(Redundant Array of Independent Disks)는 주로 하드 디스크와 SSD를 사용하는 기술로, 데이터의 안전성 혹은 높은 성능을 위해 여러 개의 물리적 보조기억장치를 마치 하나의 논리적 보조장치처럼 사용하는 기술을 의미한다.
RAID의 종류
RAID 구성 방법을 RAID 레벨이라 표현하는데, RAID 레벨에는 대표적으로 RAID 0, RAID 1, RAID 2, RAID 3, RAID 4, RAID5, RAID6이 있고, 그로 부터 파생된 RAID 10, RAID 50 등이 있다.
RAID 0
- 여러 개의 보조기억장치에서 데이터를 단순히 나누어 저장하는 구성 방식
- 마치 줄무늬처럼 분산되어 저장되는 데이터를 스트라입이라 하고, 분산하여 저장하는 것은 스트라이핑이라고 한다.
- 스트라이핑되면 저장된 데이터를 읽고 쓰는 속도가 빨라진다. 하나의 대용량 저장 장치를 이용했더라면 여러 번에 걸쳐 읽고 썼을 데이터를 동시에 읽고 쓸 수 있기 때문이다.
- 단점으로는 저장된 정보가 안전하지 않다. 하드 디스크 중 하나에 문제가 생긴다면 다른 모든 하드 디스크의 정보를 읽는 데 문제가 생길 수 있기 때문이다. 그래서 등장한 것이 RAID 1 이다.
RAID 1
- RAID 1은 복사본을 만드는방식이다. 미러링이라고도 부른다.
- RAID 1에 어떠한 데이터를 쓸 때는 원본과 복사본 두 군데에 쓴다. 그렇기에 쓰기 속도는 RAID 0 보다 느리다.
- RAID 1 방식은 복구가 매우 간단하다는 장점이 있지만, 복사본이 만들어지는 용량만큼 사용자가 사용하지 못하기 때문에 많은 양의 하드 디스크가 필요하게 되고, 비용이 증가한다는 단점이 있다.
RAID 4
- RAID 1처럼 완전한 복사본을 만드는 대신 오류를 검출하고 복구하기 위한 정보(패리티 비트)를 저장한 장치를 두는 구성 방식이다.
- RAID 4는 RAID 1보다 적은 하드 디스크로도 데이터를 안전하게 보관할 수 있다.
- 패리티 비트 : 본래 오류 검출용 정보지만, RAID에서는 오류 복구도 가능하다.
RAID 5
- RAID 4에서는 어떤 새로운 데이터가 저장될 때마다 패리티를 저장하는 디스크에도 데이터를 쓰게 되므로 패리티를 저장하는 장치에 병목 현상이 발생한다는 문제가 있다.
- RAID 5는 패리티 정보를 분산하여 저장하는 방식으로 병목 현상을 해소한다.
RAID 6
- 구성은 기본적으로 RAID 5와 같으나, 서로 다른 두 개의 패리티를 두는 방식이다. 이는 오류를 검출하고 복구할 수 있는 수단이 두 개가 생긴 셈이다. 따라서 RAID 6는 RAID 4나 RAID 5보다 안전한 구성이라 볼 수 있다.
- 다만 새로운 정보를 저장할 때마다 함께 저장할 패리티가 두 개이므로, 쓰기 속도는 RAID 5보다 느리다.
- 따라서 RAID 6는 데이터 저장 속도를 조금 희생하더라도 데이터를 더욱 안전하게 보관하고 싶을 때 사용하는 방식이다.
Chapter 08. 입출력 장치
08-1 장치 컨트롤러와 장치 드라이버
장치 컨트롤러와 장치 드라이버라는 개념을 통해 어떻게 다양한 외부 장치가 컴퓨터 내부와 연결되고 소통되는지 알아보자.
장치 컨트롤러
입출력 장치를 다루기 까다로운 이유
-
입출력장치에는 종류가 너무나도 많다. 따라서 다양한 입출력장치와 정보를 주고 받는 방식을 규격화하기가 어렵다.
-
일반적으로 CPU와 메모리의 데이터 전송률은 높지만 입출력장치의 데이터 전송률은 낮다.
이와 같은 이유로 입출력장치는 컴퓨터에 직접 연결되지 않고 장치 컨트롤러라는 하드웨어를 통해 연결한다.
장치 컨트롤러는 대표적으로 다음과 같은 역할을 통해 앞에서 언급한 문제를 해결한다.
- CPU와 입출력장치 간의 통신 중개와 오류 검출
- 입출력장치 종류가 많아 정보 규격화가 어려웠던 문제는 장치 컨트롤러가 일종의 번역가 역할을 함으로써 해결할 수 있다. 그 과정에서 장치 컨트롤러는 자신과 연결된 입출력장치에 문제는 없는지 오류를 검출하기도 한다.
- 데이터 버퍼링
- 버퍼링이란 전송률이 높은 장치와 낮은 장치 사이에 주고받는 데이터를 버퍼라는 임시 저장 공간에 저장하여 전송률을 비슷하게 맞추는 방법이다.
장치 컨트롤러의 간략화된 내부 구조
- 데이터 레지스터 : CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터, 버퍼 역할을 한다.
- 상태 레지스터 : 입출력장치가 입출력 장치를 할 준비가 되었는지, 입출력 작업이 완료되었는지, 입출력장치에 오류는 없는지 등의 상태 정보가 저장된다.
- 제어 레지스터 : 입출력장치가 수행할 내용에 대한 제어 정보와 명령을 저장한다.
장치 드라이버
- 장치 드라이버란 장치 컨트롤러의 동작을 감지하고 제어함으로써 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 프로그램이다.
- 장치 컨트롤러가 입출력장치를 연결하기 위한 하드웨어적 통로라면, 장치 드라이버는 입출력장치를 연결하기 위한 소프트웨어적인 통로이다.
08-2 다양한 입출력 방법
입출력 작업을 수행하기 위해 CPU와 장치 컨트롤러는 정보를 주고 받아야 하는데 여기에는 크게 세 가지 방법이 있다.
프로그램 입출력
- 프로그램 입출력은 기본적으로 프로그램 속 명령어로 입출력장치를 제어하는 방법이다.
- CPU가 프로그램 속 명령어를 실행하는 과정에서 입출력 명령어를 만나면 CPU는 입출력장치에 연결된 장치 컨트롤러와 상호작업을 하며 입출력 작업을 수행한다.
인터럽트 기반 입출력
- 입출력장치에 의한 하드웨어 인터럽트는 정확히 말하자면 입출력장치가 아닌 장치 컨트롤러에 의해 발생한다.
- CPU는 장치 컨트롤러에 입출력 작업을 명령하고, 장치 컨트롤러가 입출력장치를 제어하며 입출력을 수행하는 동안 CPU는 다른 일을 할 수 있다.
- 장치 컨트롤러가 입출력 작업을 끝낸 뒤 CPU에게 인터럽트 요청 신호를 보내면 CPU는 하던 일을 잠시 백업하고 인터럽트 서비스 루틴을 실행한다.
DMA 입출력
- 입출력장치와 메모리가 CPU를 거치지 않고도 상호작용할 수 있는 입출력 방식이다.
- DMA 입출력을 하기 위해서는 시스템 버스에 연결된 DMA 컨트롤러라는 하드웨어가 필요하다.
DMA 입출력 과정
- CPU는 DMA 컨트롤러에 입출력장치의 주소, 수행할 연산, 읽거나 쓸 메모리의 주소 등과 같은 정보로 입출력 정보를 명령한다.
- DMA 컨트롤러는 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업을 수행한다. 이때 DMA 컨트롤러는 필요한 경우 메모리에 직접 접근하여 정보를 읽거나 쓴다.
- 입출력 작업이 끝나면 DMA 컨트롤러는 CPU에 인터럽트를 걸어 작업이 끝났음을 알린다.
📌기본 미션: p.185의 확인 문제 3번, P.205의 확인 문제 1번 풀고 인증하기
정보 감사합니다.