메모리란 무엇일까?
메모리란 저장이라는 뜻이다.
컴퓨터에는 크게 2가지의 저장 개념이 있다.
하나는 오래 저장하는 것이고, 또 다른 하나는 잠깐 저장하는 것이다.
오래 저장하는 것은 파일이라는 형태로 디스크에 저장이 되며, 잠깐 저장되는 것은 메모리에 저장된다.
메모리가 왜 컴퓨터의 전체 성능을 좌우할까?
CPU가 일을 하려면 일의 내용이 CPU로 전달되어야 한다.
이 일의 내용은 하드 디스크의 파일에 일부로 담겨있는데, CPU로 전달되기 위해선 데이터가 BUS를 타야한다.
이 BUS의 속도가 상대적으로 느리기 때문에 메모리에 CPU가 할 일을 임시적으로 저장하여 전달한다.
메모리는 디스크보다 훨씬 속도가 빠르기 때문에 빠른 속도로 CPU에게 전달이 가능하다.
여기서 메모리는, 한정된 공간이므로 프로그램의 일부가 올라가는 것
따라서, 메모리의 공간이 클수록 더 많은 프로그램이 올라갈 수 있고 더 많은 양을 CPU에게 전달이 가능하다.
물론 CPU의 속도가 빨라야 전달받은걸 빨리 처리하고 얼른 또 일을 전달 받을 수 있다.
그래서 CPU의 속도와 메모리의 공간이 컴퓨터의 성능을 결정짓는 것이다.
메모리의 속도는 메모리가 CPU와 데이터를 주고 받는 시간을 말한다. ==> 엑세스
<메모리의 동작 원리>
컴퓨터에 있는 메모리는 기억소자 즉, 반도체를 의미한다.
반도체는 특성상 전류를 흐르게도 하고 흐르지 않게도 하는 특징이 있다.
이를 이용해서 임시적인 내용을 기억하게 만드는 것이다.
컴퓨터는 0과 1의 이진법으로 데이터를 저장하기 때문에 기억 소자는 상태의 ON/ OFF에 따라 데이터를 기억하게 된다.
메모리가 다른 저장장치와의 가장 큰 차별성은 휘발성이라는 특징이 있다는 것이다.
시스템이 활성화된 상태에서 그 값을 기억하고 있다가, 시스템의 셧다운과 함께 지워진다.
그리고 저장/읽기 속도가 굉장히 빠르다는 특징도 있다.
메모리는 1과 0을 이용하여 데이터를 저장하는데, 이 데이터를 유지하기 위해서는 전기적으로 연속으로 재충전이 되어야한다. ==> 이를 메모리 리프래시(메모리 타이밍) 이라고 한다.
일정 시간마다 재충전을 해주어야 정보가 사라지지 않는다.
메모리는 바둑판과 같이 행렬 구조에 주소를 가지고 있다.
프로세서가 메모리에 있는 정보를 읽거나 기록할 때
먼저 가로줄(RAS)에 신호를 보내고 나서 세로줄(CAS)에 신호를 보내어 주소를 확인한다.
어떤 주소의 데이터 존재 여부는 CAS가 담당하며, CAS가 사리자면 새로운 정보를 저장한다.
메모리의 동작과정)
CPU가 메인보드 칩셋에 데이터를 요청하면
1. 메인보드 칩셋은 그 데이터가 있는 곳의 행 주소를 메모리에 전송
2. 메모리로 들어온 행 주소를 센스 앰프를 사용해 그 행에 있는 모든 셀을 읽음(RAS)
3. 열 주소를 메모리에 전송 => 데이터의 정확한 열울 찾아냄(CAS)
4. 해당 메모리 셀에 있는 내용이 출력 버퍼로 옮겨짐
5. 메인보드 칩셋이 출력 버퍼의 내용을 읽고 CPU로 전달
<메모리 분류>
메모리는 자료 저장 방식, 형태별, 사용처에 따라서 분류할 수 있다.
여기서는 자료 저장 방식에 따른 분류만 살펴볼 것이다.
==> 정적인 방식 VS 동적인 방식이 있다.
- 정적인 방식 - 플리플롭을 이용한 방식 / 재충전 필요X (SRAM)
- 동적인 방식 - 캐패시터에 전하를 충전하는 방식/ 주기적인 재충전 필요 (DRAM)
<캐시 메모리>
캐시 메모리
- 메인 메모리와 CPU간의 데이터 속도 향상을 위한 중간 버퍼 역할을 하는 메모리
- 실제 메모리와 CPU 사이에서 빠른 전달을 위해서 미리 데이터들을 저장해두는 좀 더 빠른 메모리
- 속도가 빠른 장치와 느린 장치간의 속도 차에 따른 병목현상을 줄이기 위한 범용 메모리
- 메모리 계층 구조에서 가장 빠른 소자이며, 처리속도가 거의 CPU의 속도와 비슷할 정도
- 캐시메모리를 사용하면 주 기억장치를 접근하는 횟수가 줄어들어 컴퓨터의 처리속도 UP
캐시 메모리는 메인 메모리의 일정 블록 사이즈의 데이터를 담아 두었다가 CPU에 전송한다.
CPU와 메인 메모리 사이에 존재한다고 말할 수 있는데, CPU내에 존재할 수도 있고 역할이나 성능에 따라서는 CPU 밖에 존재할 수도 있다.
네트워크에서 캐시는 로컬에 파일을 미리 받아놓고, 그 내용을 보거나 웹서버에서도 매번 로딩을 해야 하는 파일들을 미리 로딩해두고, 응답을 주기도 한다.
캐시 메모리는 빠른 속도라는 장점도 있지만, 언제든 지워질 수 있다는 단점도 존재한다.
쓰기정책)
CPU에서 읽기 요청을 하게 되면, 먼저 캐시에 해당 데이터가 있는지 확인한다.
만약, 해당 데이터가 있는 경우 => HIT
HIT하기 위해서는, 언제 어떠한 방식으로 어떤 데이터를 캐시 메모리에 적재해둘 것인가가 HIT율을 좌우
==> Write Throught, Write Back 정책이 주로 사용됨
Write Throught 정책
- 메모리에 쓰기 요청을 할 때마다 캐시의 내용과 메인 메모리의 내용을 같이 바꾸는 방식
- 단순한 구조
- 데이터에 대한 쓰기 요청을 할 때마다 항상 메인 메모리에 접근해야 하므로 쓰기 시의 접근 시간은 주 메모리의 접근 시간과 같게 되는 단점 존재
- 실제 프로그램에서 메모리 참조 시 쓰기에 대한 작업은 크지 않고, 메모리와 캐시의 데이터를 간편하게 동일하게 유지가능하여 많이 사용되는 방식
Write Back 정책
- CPU에서 메모리에 대한 쓰기 작업 요청 시 캐시에서만 쓰기 작업을 하고 그 변경 사실을 확인할 수 있는 표시를 하여 놓은 후 캐시로부터 해당 블록의 내용이 제거될 때 그 블록을 메인 메모리에 복사함으로써 메인 메모리와 캐시의 내용을 동일하게 유지하는 방식(갱신)
- 복잡한 구조
- 동일한 블록 내에 여러 번 쓰기를 실행하는 경우 캐시에만 여러 번 쓰기를 하고 메인 메모리에는 한 번만 쓰게 되므로 매우 효율적
캐시 메모리는 실제 메인 메모리에 비해 크기가 매우 작으므로 메인 메모리와 1:1 매칭되는 동일한 주소 체계를 갖을 수 X
==> 직접 매핑 / 어소시에이티브 매핑 / 셋 어소시에이티브 매핑 방법 사용
캐시 메모리의 매핑 프로세스(Mapping Process)
매핑 프로세스란 주기억장치로부터 캐시 메모리로 데이터를 전송하는 방법 (3가지 존재)
- 직접 매핑(direct Mapping)
- 주기억장치의 블록들이 지정된 한 개의 캐시 라인으로만 사상될 수 있는 매핑 방법
- 간단, 비용이 적게드는 장점이 있지만 적중률이 낮아질 수 있다는 단점
- 어소시에이티브 매핑(Associative Mapping)
- 직접 매핑 방식의 단점을 보완한 방식
- 모든 태그들을 병렬로 검사하기 때문에 복잡하고 비용이 높다 => 거의 사용하지X
- 세트-어소시에이티브 매핑(Set-Associative Mapping)
- 직접 매핑과 연관 매핑의 장점만을 취한 방식
- 주로 사용됨
캐시 메모리의 교체 알고리즘
: 캐시에 빈 공간이 없는 상태에서 새로운 내용이 메인 메모리 -> 캐시 메모리 복사가 필요하다면?
=> 기존 적재되어 있던 데이터 중 어떤 것을 버릴까에 대한 결정 필요
=> 교체 알고리즘 사용 - 종류) FIFO / LRU / LFU 존재
- FIFO: 먼저 저장되어 있던 블록이 먼저 나감
- LRU(Least Recently Used): 사용되지 않은 채로 가장 오래 있었던 블록이 나감
- LFU(Least Frequently Used): 각 슬롯에 카운터를 설치 -> 사용 빈도수가 가장 적은 블록이 나감
<캐시의 지역성>
- 캐시가 효율적으로 동작하기 위해서는 적중율(Hit-rate)를 극대화 시켜야 한다.
- 캐시에 저장할 데이터가 지역성(Locality)을 가져야 한다.
- 지역성이란, 데이터 접근이 시간적, 혹은 공간적으로 가깝게 일어나는 것을 의미한다.
- 지역성의 전제 조건으로 프로그램은 모든 코드나 데이터를 균등하게 Access하지 않는다는 특성을 기본으로 한다.
- 즉, 지역성(Locality)이란
- 기억장치 내의 정보를 균일하게 Access하는 것이 아닌 어느 한 순간에 특정 부분을 집중적으로 참조하는 특성이다.
- 종류 - 캐시 메모리의 성질을 이해하기 위해서는 배열을 생각해보면 된다.
- 공간적 지역성: 한 번 참조한 메모리의 옆에 있는 메모리를 다시 참조하게 되는 성질
- 시간적 지역성: 한 번 참조된 주소의 내용은 곧 다음에 다시 참조되는 성질
<가상 메모리>
- 컴퓨터 시스템의 메모리에는 한계 존재 => 극복 시도: 가상 메모리
- 물리적 메모리보다 많은 메모리를 사용할 수 있도록 디스크의 일부를 메모리처럼 사용하는 논리적 메모리
- 사용자에게 주기억장치보다 더 큰 용량의 가상기억공간을 제공하는 기억장치관리기법
- 가상 주소(논리적 주소) 필요(가상 메모리를 가리키는 주소)
- 물리적 주소와 논리적 주소 사이에 상호 변환이 가능해야 함
- => 운영체제가 변환 테이블 제공
- 캐시 메모리와 비슷한 개념
- 캐시의 경우 접근 단위를 블록 또는 프레임으로 표현 BUT 가상 메모리는 페이지
- 페이징 기법
- 가상 기억 장치 분할 기법
- 메모리의 효율적 사용을 위한 방안
- 프로그램을 메모리에 적재할 때 균일하게 나눠서 페이지 단위로 올리는 방식
- 메모리는 지역성 특성을 갖기 때문에 프로그램의 일부를 올리면 메모리에서 효과적으로 사용
- 각각의 페이지 블록을 페이지 프레임(Page Frame) 이라고 함
- 메모리 블록 하나가 디스크로부터 얼마만큼의 데이터를 읽어들여서 저장할 것인지를 결정하는 요소
- => 이 크기에 따라 디스크의 접근 횟수가 결정되므로 페이징 기법의 효율성을 결정
- 실제 메모리와 프로그램의 일부인 데이터를 연결 시켜주는 페이지 테이블 사용
- 세그먼트 기법 (가변 분할 기법)
- 프로그램과 데이터를 여러 개의 의미를 갖는 세그먼트로 나누어 처리하는 방식
- 세그먼트의 크기는 각기 다를 수 있음
- 동적 기억 장치 할당 방법
- 외부 단편화 현상이 발생될 수 있음
- 남아있는 총 메모리 공간이 요청한 메모리 공간보다 크지만, 남아있는 공간이 연속적이지 않아 발생하는 현상
- 메모리 재배치를 통해서 해결
- 세그멘트와 페이징 기법의 병합
- 페이징 기법의 장점과 세그먼트의 장점을 결합하여 보완하는 방법
- 세그먼트로 구성되어 있는 프로그램을 페이지로 나눠서 메모리에 적재하는 방식
- 세그먼트의 의미적인 데이터 연결을 살리면서 크기를 페이징 처리함으로서 보완
추가)
위 글에는 외부 단편화 현상만 설명되어 있어 내부 단편화 현상도 함께 설명해보도록 하겠다.
내부 단편화
- 주기억장치 내 사용자 영역이 실행 프로그램보다 커서 프로그램의 사용 공간을 할당 후 사용되지 않고 남게 되는 현상
- 잔여 메모리(20MB)가 발생해 해당 메모리를 사용할 수 X
'IT 기술노트' 카테고리의 다른 글
IT기술노트 1. 컴퓨터의 시작 - 1.4 운영체제의 핵심, 커널(1) (0) | 2023.01.19 |
---|---|
IT기술노트 1. 컴퓨터의 시작 - 1.3 디스크 (0) | 2023.01.18 |
IT기술노트 1. 컴퓨터의 시작 - 1.1 컴퓨터를 구성하는 요소 (0) | 2023.01.17 |