-
[혼자 공부하는 컴퓨터구조 + 운영체제] 2회독 정리_2개발서적 2024. 5. 15. 16:02728x90
05. CPU 성능 향상 기법
5-1 빠른 CPU를 위한 설계 기법
클럭 (Clock)
컴퓨터의 모든 부품을 일사불란하게 움직 일 수 있게하는 시간 단위라고 했다.
클럭 신호가 빠르게 반복되면 CPU를 비롯한 컴퓨터 부품들을 그만큼 빠른 박자에 맞춰 움직인다. 클럭 속도가 높을 수록 CPU의 명령어 사이클은 더 빠르게 반복하고 동작한다.
실제로 클럭 속도가 높은 CPU가 일반적으로 성능이 좋다. 그래서 클럭 속도는 CPU 속도 단위로 간주되기도 한다.
클럭 속도는 Hz 단위로 측정한다. 1Hz 1초에 1번, 100Hz는 1초에 100번 반복됨을 의미한다.
그렇다면 현대 CPU의 클럭 속도는 얼마일가?
Base : 2.5GHz Max : 4.9GHz
1초에 클럭이 기본적으로 25억 (2.5 x 10^9)번, 순간적으로 최대 49억(4.9 x 10^9)번 반복됨을 의미한다.네이버에서 가장 먼저 검색되는 제품은 아래와 같다. (Intel CPU i7 14세대)
그렇다면 클럭 속도를 무지막지하게 높이면 CPU가 무조건 빨라질까? -> No
클럭 속도가 무작정 높아지면 발열 문제가 심각해진다. 클럭 속도를 높이면 분명 CPU를 빠르게 만들 수는 있다. 하지만 클럭 속도만으로는 CPU 성능을 올리느데 한계가 있다.
코어와 멀티코어
클럭 속도 이외에 CPU 성능을 높이는 방법은 대표적으로 CPU의 코어와 스레드 수를 늘리는 방법이 있다.
그렇다면 코어는 무엇인가?
지금까지의 CPU는 명령어를 실행하는 부품으로 이해했다.
하지만 오늘날의 CPU는 CPU 내부에 명령어를 실행하는 부품을 얼마든지 만들 수 있게 발전했다.
코어 (Core) : 명령어를 실행하는 부품
CPU : 명령어를 실행하는 부품을 여러개 포함하는 부품으로 범위가 확장되었다. 즉, 코어를 여러개 포함하는 부품.
아래 이미지를 참고하면 오늘날의 CPU는 내부에 20개의 코어를 가지고 있다. 스레드는 아래에서 추가설명하겠다.
이처럼 코어를 여러개 포함하고 있는 CPU를 멀티코어 CPU or 멀티코어 프로세서라고 부른다.
이는 CPU 내부에 명령어를 처리하는 일꾼이 20명 있는 것 과 동일하다.
가령 클럭 속도가 2.4GHz 단일코어 VS 클럭 속더가 1.9GHz인 듀얼 코어를 비교하면 후자가 성능이 더 좋다.
CPU 안에 코어가 몇 개인가에 따라 싱글, 듀얼, 쿼드, 옥타, 데카코어 등으로 부른다.
그렇다면 코어를 100개까지 늘리면 CPU 성능이 100배로 빨라질까??? -> No
코어마다 처리할 연산이 적절히 분배되지 안흐면 코어 수에 비례하여 연산 속도가 증가하지 않는다.
또한 작업량보다 코어 수가 지나치게 많아도 성능에는 크게 영향이 없다.
100인분 도시락을 1명의 요리사가 만드는것보다는 10명의 요리사가 만드는게 빠르다.
하지만, 4인분의 도시락을 10명의 요리가사 만다는게 5명의 요리사가 만드는 것보다 특별히 더 빠르지 않는 것과 비슷하다.
중요한 것은 코어마다 처리할 명령어를 얼마나 적절하게 분배하느냐에 따라 연산 속도는 크게 달라진다.
스레드와 멀티스레드
많은 사람이 암기하듯 외우는 스레드는 "실행 흐름의 단위"이다.
하지만 CPU에서 사용되는 스레드와 프로그래밍에서 사용되는 스레드는 의미가 다르다.앞으로 스레드는 아래와 같이 기억하자.
- CPU에서 사용되는 하드웨어적 스레드
- 프로그램에서 사용되는 소프트웨어적 스레드
하드웨어적 스레드 (논리 프로세서)
하드웨어적 스레드를 정의하면 하나의 코어가 동시에 처리하는 명령어 단위이다.
지금까지 알고 있던 CPU는 1코어 1스레드 CPU였다. 즉, 코어가 하나이고, 한번에 하나씩 명령어를 실행하는 CPU라고 생각했다.
(뒤에서도 설명하겠지만, 실행 흐름의 단위라고만 암기한다면 1코어 1스레드 CPU가 여러 스레드로 만들어진 프로그램을 실행할 수 있다는 말을 이해하기 어려워질 수 있다.)하지만, 여러 스레드를 지원하는 CPU는 하나의 코어로도 여러 개의 명령어를 동시에 실행할 수 있다.
보통 8코어 16스레드는 하나의 코어당 2개의 스레드를 처리한다는 뜻이다.
위 이미지의 20코어 28스레드는 명령어를 실행하는 부품이 20개 이고, 1번의 28개의 명령어를 처리할 수 있는 CPU를 의미한다.
그렇다면 20코어 28스레드는 어떻게 설명이 가능한가?
이는 CPU 제조사에서 비대칭적 스레드 분배를 통해 CPU를 제조했기 때문이다.
일부 코어는 두 개의 스레드를 처리할 수 있고, 나머지 코어는 하나의 스레드만 처리할 수 있습니다. 예를 들어, 20코어 중 14개의 코어가 하이퍼스레딩을 지원하고, 나머지 6개 코어는 단일 스레드만 처리할 수 있습니다. 이렇게 되면 14*2 + 6 = 28스레드가 된다.
여기서 하이퍼스레딩이란 인텔의 멀티스레드 기술을 의미한다.
이처럼 하나의 코어로 여러 명령어를 동시에 처리하는 CPU를 멀티스레드 CPU or 멀티스레드 프로세서라고 부른다.
소프트웨어적 스레드
하나의 프로그램에서 독립적으로 실행되는 단위를 의미한다.
프로그래밍 언어나 운영체제를 학습할때 접하는 스레드는 보통 소프트웨어적 스레드를 의미한다.
대표적인 예시로 워드 프로세서 프로그램에서 입력을 받은 내용을 화면에 보여주는 기능, 맞춤법을 검사하는 기능, 입력한 내용을 수시로 저장하는 기능을 각각의 스레드로 만들면 동시에 실행 할 수 있다.
정리
- CPU에서 사용되는 하드웨어적 스레드
- 하나의 코어가 동시에 처리하는 명령어 단위.
- 프로그램에서 사용되는 소프트웨어적 스레드
- 하나의 프로그램에서 독립적으로 실행되는 단위.
- 명령어를 실행할 수 있는 하드웨어 부품이 CPU 안에 2개 이상 들어있는 CPU 멀티코어 프로세서
- 하나의 코어로 여러개의 명령어를 동시에 실행할 수 있는 CPU 멀티스레드 프로세서
- 실행 흐름의 단위라고만 암기한다면 1코어 1스레드 CPU가 여러 스레드로 만들어진 프로그램을 실행할 수 있다는 말을 이해하기 어려워질 수 있다. 따라서 하드웨어적 스레드와 소프트웨어적 스레드를 구분하여 기억하는 것이 좋다.
멀티스레드 프로세서
하나의 코어로 명령어를 동시에 처리하는 CPU.
이를 가능케하는 핵심 이유는 레지스터이다.
프로그램 카운터가 2개이면 가져올 명령어 주소를 2개 저장할 수 있고, 스택 포인터가 2개이면 2개의 스택을 관리할 수 있게 된다.
하나의 명령어를 실행하기 위해 레지스터 세트가 하나 필요하다고 가정하면
레지스터 세트가 2개면 2개의 명령어를 동시에 실행할 수 있게 된다.
하드웨어적 스레드를 이용하면 하나의 코어로 여러 명령어를 동시에 처리할 수 있다고 했다. 그러나 메모리 입장에서 보면 하드웨어적 스레드는 마치 한번에 하나의 명령어를 처리하는 CPU나 다름없다.
즉 2코어 4스레드 CPU는 한번에 4개의 명령어를 처리할 수 있는데 프로그램 입장에서 봤을때는 한 번에 하나의 명령어를 처리하는 CPU가 4개 있는것 처럼 보인다는 것이다. 따라서 하드웨어 스레드를 논리적 프로세서라고 부르기도 한다.
5-2 명령어 병렬 처리 기법
빠른 CPU를 만들기 위해 클럭 속도, 멀티 코어, 멀티 스레드를 지원하는 CPU를 만드는 것도 중요하지만, CPU가 놀지 않고 시간을 알뜰하게 쓰면서 작동하게 만드는 것도 중요하다.
명령어를 동시에 처리하여 CPU를 한시도 쉬지 않고 작동시키는 방법을 명령어 병렬 처리 기법이라 부른다.
명령어 병렬 처리 기법에는 대표적으로 아래 3가지 방법이 존재한다.
- 명령어 파이프 라이닝
- 슈퍼스칼라
- 비순차적 명령어 처리
명렁어 파이프 라이닝
명령어를 처리하는 과정을 클럭 단위로 나누어 보면 일반적으로 아래와 같이 나눌 수 있다.
- 명령어 인출
- 명령어 해석
- 명령어 실행
- 결과 저장
여기서 중요한점은 같은 단계가 겹치지만 않는다면 CPU는 각 단계를 동시에 실행할 수 있다는 것이다
CPU는 명령어를 인출하는 동안에 다른 명령어를 실행할 수 있고 한 명령어가 실행되는 동안에 연산 결과를 저장할 수 있다.
마치 공장 생산라인과 같이 명령어들을 명령어 파이프라인에 넣고 동시에 처리하는 기법을 명령어 파이프라이닝이라 한다.
이는 높은 성능 가져다 주긴 하지만, 성능 향상에 시래하는 파이프라인 위험이란 상황이 존재한다.
파이프라인 위험에는 크게 3가지가 존재한다.
- 데이터 위험
- 명령어 간의 데이터 의존성에 의해 발생.
- 제어 위험
- 프로그램 카운터의 갑작스러운 변화에 의해 발생.
- 구조적 위험
- 명령어를 실행하는 과정에서 서로 다른 명령어가 동시에 ALU, 레지스트 등과 같은 CPU 부품을 사용하려고 할때 발생.
슈퍼스칼라
CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조를 슈퍼스칼라라고 한다.
공장 생산 라인을 여러개 두는 것을 의미한다.
슈퍼스칼라 구조로 명령어 처리가 가능한 CPU를 슈퍼스칼라 CPU or 슈퍼스칼라 프로세서라고 부른다.
이 방식을 차용한 CPU는 파이프라인 위험을 방지하기 위해 고도로 설계되어야 한다. 파이프라인이 늘어날 수록 파이프라인 위험이 증가하기 때문이다.
비순차적 명령어 처리
명령어 파이프라이닝, 슈프스칼라는 모두 명령어의 순차적인 처리를 상정한 방법이다.
아래 이미지를 참고해보자.
3번 명령어는 1번 2번 명령어에 대한 의존성이 있다. 즉 1 2번 명령어 실행이 끝날때까지 기다려야한다.
이처럼 3번 명령어 와 같이 뒤의 명령어 순서를 바꾸어 실행해도 크게 문제될 것이 없는 명령어 실행을 뒤로 미룬다면?
이처럼 명령어를 순차적으로 실행하지 않고 순서를 바꿔도 실행해도 무방한 명령어를 먼저 실행하여 명령어 파이프라인이 멈추는 것을 방지하는 기법을 비순차적 명령어 처리라고 한다.
5-3 CISC와 RISC (현대 CPU의 주요 설계 방식 CISC -> RISC)
명렁어 파이프라이닝과 슈퍼스칼라가 적용된 CPU는 명령어가 이 구조에 최적화 되어있어한다.
즉, 이러한 기법을 효과적으로 사용하려면 CPU가 인출하고 실행하는 명령어가 파이프라이닝 하기 쉬어야 한다는 것이다.
명령어 집합
CPU는 명령어를 실행한다. 하지만 모든 CPU가 이해하고 실행하는 명령어는 다 똑같이 생기지 않았다. 제소사 별로 규격 기능 만듦새가 다 다르기 때문이다.
CPU마다 명령어의 생김새 연산, 주소 지정 방식 등 차이가 있는데 CPU가 이해할 수 있는 명령어들의 모음을 명령어 집합 or 명령어 집합 구조 ISA라고 부른다. 즉, CPU마다 ISA가 다를 수 있다. (인텔 CPU 컴퓨터에서 만든 실행 파일을 아이폰에 옮기면 특별한 설정 없이 바로 실행할 수 없다)
명령어를 읽기 편한 현태로 표현한 언어를 어셈블리어라고 했다. ISA가 다르다는건 CPU가 이해할 수 있는 명령어가 다르다는 뜻이고 명령어가 달라지면 어셈블리어도 달라진다. 다시 말해 같은 소스 코드로 만든 프로그램이라 할지라도 ISA가 다르면 CPU가 이해할 수 있는 명령어도 어셈블리어도 달라진다는 뜻이다. (동일한 소스코드를 윈도우 환경으로 패키징하면 MAC OS에서 실행 시킬 수 없는 이유)
ISA는 CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속이다.
CISC (Complex Instruction Set Computer)
복잡한 명령어 집합을 활용하는 컴퓨터를 의미한다
명령어의 형태와 크기가 다양한 가변 길이 명령어를 활용한다.
메모리를 아끼며 개발하는 시기에 유행했으나, 명령어의 크기와 실행되기까지의 시간이 일정하지 않는다는 단점이있다. 따라서 효율적으로 파이프라인을 이용한 명령어를 처리할 수 없었다.
명령어의 규격화가 어려워 파이프라이닝에 적합하지 않았다.
RISC (Reduced Instruction Set Computer)
CISC의 단점을 보완한 상위 호환의 개념이다.
CISC오 달리 짧고 규격화된 명령어를 1클럭 내외로 실행되는 명령어를 지향한다는 의미를 가지고 있다.
고정 길이 명령어를 활용한다.
명령어가 규격화 되어있고 하나의 명령어가 1클럭 내외로 실행된다. RISC는 메모리 접근을 단순화, 최소화하는 대신 레지스터를 적극적으로 활용한다.
CISC보다 레지스터 연산이 많고 범용 레지스터의 갯수가 많다. 다만 명령어가 적기 때문에 CISC보다 많은 명령으로 프로그램을 작동 시킨다.
즉, RISC는 짧고 규격화된 고정 길이 명령어 집합을 사용하여 파이프라이닝 하기 쉬운 이점이 있다.
06. 메모리와 캐시 메모리
6-1 RAM의 특징과 종류
RAM
RAM에는 실행할 프로그램의 명령어와 데이터가 저장된다.
RAM은 전원을 끄면 명령어와 데이터가 모두 날아가버리는 휘발성 저장 장치이다.
반대로 HDD SSD 같은 보조기억장치가 비휘발성 저장 장치이다.
CPU는 보조기억장치에 직접 접근하지 못한다. 일반적으로 보조 기억 장치에는 보관할 대상을 저장하고 RAM에는 실행할 대상을 저장한다.
RAM의 용량와 성능
RAM의 용량이 적다면 CPU가 실행하고자하는 프로그램을 보조기억장치에서 꺼내오는 작업이 필요하고, 이게 잦다면 당연히 성능이 느려질 것이다.
따라서 일반적으로 RAM의 용량이 크면 많은 프로그램을 동시에 실행하는데 유리하다.
만약, RAM의 용량이 무지막지하게 크다면? 프로그램 실행 속도도 그와 비례하여 빨라질까? -> No
용량이 커짐에 따라 실행속도가 빨라지긴 하지만, 필요 이상으로 커졌을땐 속도가 이에 비례하여 증가하지 않는다.
이에 대한 예시로 책에 빗대어 생각해볼 수 있다.
보조기억장치가 책이 꽂혀있는 책장이라면, RAM은 책을 읽을 수 있는 책상과 같다.
책 100권 이상 올려놓을 수 있는 책상에서 책을 읽든, 1000권 이상 올려놓을 수 있는 책상에서 책을 읽든 간에 책장을 오고가는 시간에는 큰 차이가 없는 것과 비슷하다.
RAM의 종류
RAM의 종류는 크게 아래 4가지이다.
- DARM (Dynamic RAM)
- SRAM (Static RAM)
- SDRAM (Synchronous Dynamic RAM)
- DDR SDRAM (Double Data SDRAM)
DRAM
동적 램이란 의미로, 저장된 데이터가 동작으로 변하는(사라지는) RAM을 말한다.
DRAM은 시간이 지나면 저장된 데이터가 점차 사라지는 RAM이다. 이에 데이터 소멸을 막기 위해 일정 주기로 데이터를 재활성(다시 저장)해야 한다.
이러한 단점에도 불구하고 일반적인 메모리는 DRAM이다. 소비 전력이 상대적으로 낮고, 저렴하며 집적도가 높기 때문에 대용량으로 설계하기 용이하기 때문이다. (집적도 === 더 작고 뺵빽하게 만들 수 있다)
SRAM
정적 램이란 의미로, 저장된 데이터가 변하지 않는 RAM을 말한다.
일반적으로 데이터 재활성화 단계가 필요하지 않으므로 DRAM보다 속도가 더 빠르다.
정적 램이라고 해도 전원이 공급되지 않으면 저장된 데이터가 날라간다.
SRAM은 집적도가 낮고, 소비전력도 크며, 가격이 더 비싸다.
따라서 대용량으로 만들어 질 필요는 없지만 속도가 빨라야하는 저장 장치, 가령 캐시 메모리 등에 사용이 된다.
SDRAM
DRAM과 SRAM의 합성어가 아니다.
클럭 신호와 동기화된 발전된 DRAM이다.
클럭 신호와 동기화 되어있다는 의미는 클럭 타이밍에 맞춰 CPU와 정보를 주고 받을 수 있음을 의미한다.
DDR SDRAM
최근 가장 널리 사용되는 RAM으로 대역폭을 넓혀 속도를 빠르게 만든 SDRAM이다.
대역폭(Data Rate)란, 데이터를 주고 받는 길의 너비를 의미한다.
흔히, 자동차 도로에 비유를 하는데, CPU와 한 클럭에 하나씩 정보를 주고받는 SDRAM과 비교했을때
한 클럭에 2개씩, 한 클럭에 4개씩... 16개씩 주고 받는 길이 확장된다고 이해하면 된다.
DDR2 RAM, DDR3 RAM, DDR4 RAM, DDR5 RAM... 등이 있다.
6-2 메모리의 주소 공간
물리 주소와 논리 주소
CPU와 실행중인 프로그램은 현재 메모리 몇 번지에 무엇이 저장되어 있는지 다 알고 있을까? -> No
그 이유는 메모리에 저장된 정보는 시시각각 변하기 때문이다.
같은 프로그램을 실행하다고 해도 적재되는 메모리주소는 달라 질 수 있으며, 실행되지 않는 프로그램은 언제든지 삭제될 수 있기 때문이다.
그렇다면 CPU와 실행중인 프로그램이 이해하는 주소는 무엇일까?
물리 주소 - 정보가 실제로 저장된 하드웨어상의 주소.
논리 주소 - CPU와 실행 중인 프로그램이 사용하는 주소로 실행 중인 프로그램 각각에게 부여된 0번지부터 시작되는 주소를 의미.
우리 일일이 모든 사람이 IP 번호를 외울 수 없어 사용하는 도메인 주소나 도로명주소를 사용하는 이유와 비슷하다.
결국에는 CPU와 메모리가 상호작용하기 위해선 논리 주소와 물리 주소 간의 변환이 이루어져야 한다. 따로 국밥이 될 수 는 없으니까 말이다.
이러한 변환은 CPU와 주소 버스 사이에 위치한 메모리 관리 장치 (MMU, Memory Management Unit)이라는 하드웨어에 의해 수행된다.
MMU는 CPU가 발생시킨 논리 주소에 베이스 레지스터 값을 더해 논리 주소를 물리 주소로 변환하다.
베이스 레지스터는 프로그램의 가장 작은 물리 주소, 즉 프록램의 첫 물리 주소를 저장하며
논리 주소는 프로그램의 시작점으로부터 떨어진 거리를 의미하기도 한다.메모리 보호 기법
아래 명령어와 같이 프로그램의 논리 주소 영역을 벗어난 명령은 실행되어서는 안된다.
메모장 명령어가 브라우저에 값을 저장하고 삭제하는 일은 일어나서는 안되는 명령이다.
이런 명령를 보호하는 역할은 한계 레지스터가 담당한다.
CPU는 메모리에 접근하기 전에 접근하고자하는 논리 주소가 한계 레지스터 보다 작은지를 항상 검사한다.
만약 CPU가 한계 레지스터보다 높은 논리 주소에 접근하려고 하면 인터럽트(트랩)을 발생시켜 실행을 중단한다.
이러한 방식으로 실행 중인 프로그램의 독립적인 실행 공간을 확보하고 하나의 프로그램이 다른 프로그램을 침범하지 못하게 보호할 수 있다.
6-3 캐시 메모리
CPU는 프로그램을 실행하면서 메모리에 저장된 데이터를 빈번하게 사용한다. 하지만 CPU가 메모리에 접근하는 시간은 CPU의 연산속도보다 느리다. (CPU 메모리 접근 시간 >> CPU 연산속도)
CPU의 연산속도가 아무리 빠르다해도 메모리에 접근하는 시간이 느리면 이점이 없다. 이를 극복하기 위해 나온 저장 장치가 캐시 메모리이다.
저장 장치 계층 구조
모든 사용자들은 빠르고 동시에 용량이 큰 저장 장치를 원한다. 하지만 양립하기 어렵다.
저장 장치는 일반적으로 아래 명제를 따른다.
CPU와 가까운 저장 장치는 빠르고, 멀리 있는 저장 장치는 느리다.
속도가 빠른 저장 장치는 저장 용량이 적고, 가격이 비싸다.저장 장치들을 CPU에 얼마나 가까운가를 기준으로 아래 계층으로 나눌 수 있는데, 이를 저장 장치 계층 구조라 한다.
캐시 메모리
CPU가 메모리에 접근하느 속도는 레지스터에 접근하는 속도 보다 느리다. 그럼에도 CPU는 빈번하게 메모리에 접근해야만 한다.
이러한 배경으로 등장한 캐시 메모리는 CPU와 메모리 사이에 위치하고, 레지스터 보다 용량이 크고 메모리보다 빠른 SRAM 기반 저장 장치이다.
CPU === 집, 메모리는 === 대형 마트, 캐시 메모리 === 편의점 으로 예시를 들 수 있다.
편의점에 물건이 있으면 집에서 가까운 곳에서도 물건을 구할 수 있는 것이고, 편의점에 없으면 이 보다 먼 대형마트에서 물건을 구하는 경우와 비슷하다.
이러한 캐시 메모리들은 CPU와 가까운 순서대로 계층을 구성하는데, 가장 가까운 캐시 메모리는 L1, (level 1) L2, L3 캐시가 있다.
일반적으로 L1, L2 캐시는 CPU 내부에 L3 캐시는 CPU(여기선 코어) 외부에 위치 해있다.
L1, L2 캐시는 각각의 코어 마다 고유한 캐시 메모리로 할당이 되고, L3는 여러 코어가 공유하는 형태로 사용이 된다.
위 저장 장치 계층 구조를 확장하면 아래와 같이 표현할 수 도 있다.
참조 지역성의 원리
캐시 메모리는 당연히! 메모리보다 용량이 작다. 그렇기에 메모리에 있는 모든 내용을 저장할 수 없다.
메모리가 보조 기억장치의 일부를 복사하여 저장하고 있는 것처럼
캐시 메모리도 메모리의 일부를 복사하여 저장한다.
그럼 캐시 메모리는 무엇을 저장할까?
보조 기억 장치는 기억할 대상을 저장하고
메모리는 실행 중인 대상을 저장하고
캐시 메모리는 CPU가 사용할 법한 대상을 예측하여 저장한다.
이때 실제로 캐시 메모리에 저장된 데이터를 CPU가 활용하는 경우를 캐시 히트
이 반대의 경우를 캐시 미스라고 한다. 당연히, 캐시 미스가 많이 발생할 수록 성능은 떨어진다.
캐시가 히트되는 비율을 캐시 적중률이라고 하며 아래와 같이 계산한다
캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)
우리가 보통 사용하는 컴퓨터의 캐시 적중률은 85~ 95% 이상이라고 한다.
그러면 캐시 메모리는 CPU가 사용할 법한 데이터를 어떻게 알 수 있을까?
캐시 메모리는 한가지 원칙에 의해 메모리로부터 가져올 데이터를 결정한다.
참조 지역성의 원리 - CPU가 메모리에 접근할 때 주된 경향을 바탕으로 만들어진 원리
CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다(시간 지역성)
CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다 (공간 지역성)
07. 보조 기억 장치
7-1 다양한 보조 기억 장치
대표적인 보조 기억 장치로는 하드 디스크와 플래시 메모리가 있다.
USB, SSD, SD 카드 간은 저장 장치를 플래시 메모리라 한다.
하드 디스크
자기적인 방식으로 데이터를 저장하는 보조 기억 장치
플래터, 스핀들, 헤드, 디스크 암으로 구성되어있다.
하드 디스크가 저장된 데이터에 접근하는 시간
- 탐색 시간
- 회전 지연
- 전송 시간
구글의 천재 엔지니어 중 한사람인 제프 딘은 과저 프로그래머가 꼭 알아야할 컴퓨터 시간들을 공개한 바가 있는데 아래는 일부를 발췌한 자료이다.
2011년 자료이며, 하드 디스크 성능이 많이 향상되었겠지만 생각보다 많은 시간이 걸린다는 것을 알 수 있다.
플래시 메모리
전기적 데이터를 읽고 쓸 수 있는 반도체 기반의 저장 장치이다.
크게 NAND 플래시 메모리와 NOR 플래시 메모리가 존재한다.
이 중 대용량 저장장치로 사용되는 플래시 메모리는 NAND 플래시 메모리이다.
플래시 메모리는 셀 Cell 이라는 플래시 메모리에서 데이터를 저장하는 가장 단위가 있다.
셀이 모여 MB, GB TB 용량을 갖는 저장 장치가 되는 것이다.
메모리에도 수명이 있는가?
플래시 메모리 뿐만 아니라 하드 디스크 또한 수명이 있다.
한 셀에 일정 횟수 이상 데이터를 쓰고 지우면 그 셀은 더이상 데이터를 저장할 수 없어지기 때문이다.
7-2 RAID의 정의와 종류
1TB 하드 디스크 4개와 4TB 하드 디스크 1개를 사용하는게 더 나을까?
결론적으로 1TB 하드 디스크 4개를 RAID로 구성하면 4TB 하드 디스크 1개의 성능과 안정성을 능가할 수 있다.
RAID의 정의
구글, 아마존과 같은 글로벌 IT 기업의 서버를 관리한다고 생각해보자.
엄청난 양의 데이터가 서버로 쏟아지고 개인 정보, 결제 정보 등 절대 잃어버리면 안되는 민감한 정보들도 쏟아지고 있다.
어떻게 이러한 정보를 안전하게 관리할 것인가?
이때 사용할 수 있는 방법 중 하나가 RAID (Redundant Array of Independent Disks)
하드 디스크와 SSD를 사용하는 기술로 데이터의 안정성, 높은 성능을 위해 여러개의 물리적인 보조기억장치를 마치 하나의 논리적 보조기억장치처럼 사용하는 기술이다.RAID의 종류
RAID 구성 방법을 RAID 레벨이라 표현하는데, 관련 용어만 정리하고 RAID를 각각 어떻게 구성하는지는 책을 참고해보자.
책에 있는 이미지와 어떠한 문제로 인해 탄생했는지 배경을 이해하면 이해하기 수월하다.
스트라이핑 (Striping)
데이터를 분산하여 저장함
저장된 데이터를 일고 쓰는 속도가 빨라진다.
패리티 비트 (Parity Bit)
오류를 복구하기 위한 정보
오류를 검출하는 패리티 비트
원래 패리티 비트는 오류 검출만 가능할 뿐 오류 복구는 불가능하다.
하지만 RAID에서는 패리티 값으로 오류 수정도 가능하다.구체적인 방법보다는 아래 2가지를 기억하자.
RAID4 에서는 패리티 정보를 저장한 장치로서 나머지 장치들의 오류를 검출 복구한다.
패리티 비트는 본래 오류 검출용 정보지만, RAID에서는 오류 복구도 가능하다. ( 더 중요 )
[출처 : 혼공컴운 (저자: 강민철)_한빛 미디어 ]
728x90'개발서적' 카테고리의 다른 글
[혼자 공부하는 컴퓨터구조 + 운영체제] 2회독 정리_3 (0) 2024.05.19 [혼자 공부하는 컴퓨터구조 + 운영체제] 2회독 정리 (1) 2024.05.06