cs일지

cs 전공지식 #27 운영체제 - 메모리

리동구 2022. 12. 9. 17:39

2022/12/08

  • 학습내용

1. 메모리

 

메모리 계층은 레지스터, 캐시,  주기억장치(메인 메모리, RAM), 하드 디스크(저장장치)로 구성되어 있다.

이 구조로 봤을 때

ALU(산술 논리 연산 장치)가 요구하는 데이터가 만약 하드디스크에 있다면 데이터를 가져오기 위해서는 L1 캐시부터

하드디스크까지 모든 계층을 거쳐야 하고 다시 하드디스크에서 L1 캐시까지 거쳐서 데이터를 가져오게 된다.

 

이렇게 계층을 거져서 가져오는 이유는 지역적 특성때문이다.

프로그램 실행이 산발적이라면 메모리 계층구조를 통하는 것이 부담스러울 것이지만 프로그램의 실행은 "지역적 특성"을 띄고 있기 때문에 계층적으로 메모리를 두었을 때 더 성능이 좋아진다는 것이다.

 

 

1) 레지스터

CPU가 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 기억장치이다.

프로세서에 위치한 고속 메모리로, 프로세스가 바로 사용할 수 있는 데이터(소량의 데이터, 처리 중인 중간 결과 등)를 담고 있는 영역이다.

 

CPU 내부 레지스터 종류

프로그램 계수기
(PC, Program Counter)
다음에 실행할 명령어(instruction)의 주소를
가지고 있는 레지스터
누산기
(AC, ACcumulator)
연산 결과 데이터를 일시적으로 저장하는 레지스터
명령어 레지스터
(IR, Instruction Register)
현재 수행 중인 명령어를 가지고 있는 레지스터
상태 레지스터
(SR, Status Register)
현재 CPU의 상태를 가지고 있는 레지스터
메모리 주소 레지스터
(MAR, Memory Address Register)
메모리로부터 읽어오거나 메모리에 쓰기 위한
주소를 가지고 있는 레지스터
메모리 버퍼 레지스터
(MBR, Memory Buffer Register)
메모리로부터 읽어온 데이터 또는
메모리에 써야할 데이터를 가지고 있는 레지스터
입출력 주소 레지스터
(I/O AR, I/O Address Register)
입출력 장치에 따른 입출력 모듈의 주소를
가지고 있는 레지스터
입출력 버퍼 레지스터
(I/O BR, I/O Buffer Register)
입출력 모듈과 프로세서 간의 데이터 교환을 위해
사용되는 레지스터

 

2) 캐시

데이터나 값을 미리 복사해 놓는 임시 장소시스템의 효율성을 위해 사용한다.

캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우

값을 다시 계산하는 시간을 절약하고 싶은 경우

속도가 빠른 장치와 느린 장치 사이에서 속도차에 따른 병목 현상을 완화하기 위한 범용 메모리이다.

 

캐싱(Caching) : 캐시(Cache)라고 하는 좀 더 빠른 메모리 영역으로 데이터를 가져와서 접근하는 방식

 

※ 캐시의 종류

CPU에는 캐시 메모리가 2~3개 정도 사용된다. 물론 사양에 따라 다 다르다.

이 메모리들을 L1, L2, L3라고 부른다.

여기서 L은 Level을 의미한다.

이는 속도와 크기에 따라 분류한 것으로,

L1 캐시는 일반적으로 CPU 칩안에 내장되어 데이터 사용/참조에 가장 먼저 사용된다.

L1 캐시는 보통 8~64KB 정도의 용량으로 CPU가 가장 빠르게 접근하게 되며,

여기서 데이터를 찾지 못하면, 이제 L2 캐시 메모리로 넘어간다.

L1 캐시

L1 캐시는 1차 캐시 메모리라고도 해석된다.

캐시 메모리가 작동되면 L1캐시에서 먼저 데이터를 찾는다.

 

L2 캐시

L2 캐시 메모리는 용도와 역할은 L1 캐시와 비슷하지만 속도는 그보다 느리다.

L2 캐시는 CPU 회로판에 별도의 칩으로 내장된다.

앞서 말한대로 L1 캐시를 먼저 뒤지고, L2 캐시를 뒤져 데이터를 찾는다.

역시 L2 캐시는 L1 캐시보다 느리지만, 일반 메모리(RAM)보다는 빠르다.

 

L3 캐시

L3 캐시 메모리도 동일한 원리로 작동한다.

웬만한 프로세서에서는 L3 캐시 메모리를 달고있지 않다.

L2 캐시로 충분히 커버할 수 있기 때문이다.

intel core2 duo나 quad에는 L3 캐시가 없지만, 코어 i7에는 8MB를 달아뒀다.

L1/L2 캐시 메모리 정도만 CPU 성능에 직접적인 영향을 미치기에 L3 캐시는 크게 신경쓰지 않는것이 일반적인 추세다.

L3 캐시는 CPU가 아닌 메인보드에 내장되는 경우가 더 많다.

 

3) 주기억장치

ROM (Read Only Memory)

ROM은 오직 기억된 데이터를 읽기만 가능한 장치를 말한다.

따라서 제조 단계에서 시스템에 기억시키고 변화시키면 안 되는 BIOS와 같은 데이터가 이 장치에 저장됩니다.

ROM은 비휘발성 장치로, 장치에 존재하는 데이터는 컴퓨터의 전원이 꺼져도 사라지지 않고 그대로 유지된다.

 

RAM (Random Access Memory)

RAM은 하드디스크로부터 일정량의 데이터를 복사해서 임시 저장하고 이를 필요 시마다 CPU에 빠르게 전달하는 역할을 한다.

 

 

4) 지역성의 원리

캐시 계층을 두는 것 말고 캐시를 직접 설정할 때는 어떻게 해야 할까?

자주 사용하는 데이터를 기반으로 설정해야 한다.

그 데이터에 대한 근거가 되는 것이 지역성이다.

 

 

시간 지역성

최근 사용한 데이터에 다시 접근하려는 특성을 말한다.

 

특정 데이터가 한번 접근되었을 경우, 가까운 미래에 또 한번 데이터에 접근할 가능성이 높은 것을 말한다.

메모리 상의 같은 주소에 여러 차례 읽기 쓰기를 수행할 경우,

상대적으로 작은 크기의 캐시를 사용해도 효율성을 꾀할 수 있다.

 

공간 지역성

최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하려는 특성을 말한다.

대부분의 실제 프로그램이 참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성

 

특정 데이터와 가까운 주소가 순서대로 접근되었을 경우.
CPU 캐시나 디스크 캐시의 경우 한 메모리 주소에 접근할 때 그 주소뿐 아니라 해당 블록을 전부 캐시에 가져오게 된다.

이때 메모리 주소를 오름차순이나 내림차순으로 접근한다면,
캐시에 이미 저장된 같은 블록의 데이터를 접근하게 되므로 캐시의 효율성이 크게 향상된다.

 

 

5) 캐시히트와 캐시미스

캐시히트

CPU가 참조하고자 하는 메모리가 캐시에 존재하고 있을 경우 Cache Hit라고 한다.

 

캐시미스

CPU가 참조하고자 하는 메모리가 캐시에 존재하지 않을 때 Cache Miss라고 한다.

 

6) 캐시 매핑

캐시가 히트되기 위해 매핑하는 방법을 말한다.

CPU의 레지스터와 주 메모리(RAM) 간에 데이터를 주고받을 때를 기반으로 설명한다.

레지스터는 주메모리에 비해 굉장히 작고 주메모리는 굉장히 크기 때문에 작은 레지스터가 캐시 계층으로써 역할을 잘하려면 매핑을 어떻게 해주는지가 중요하다.

 

직접매핑(Direct Mapping)

메모리가 1~100이 있고 캐시가 1~10이 있다면 1:1~10, 2:1 ~20... 이런 식으로 매핑하는 방식을 말한다.

처리가 빠르지만 충돌 발생이 많다.

 

연관매핑(Associative Mapping)

순서를 일치시키지 않고 관련 있는 캐시와 메모리를 매핑한다.

충돌이 적지만 모든 블록을 탐색해야 해서 속도가 느리다.

 

집합 연관 매핑

직접 매핑의 단순한 회로와 연관 매핑의 적중률 두 개의 장점만을 취하기 위해서 만들어진 방식이다.

순서는 일치시키지만 집합을 둬서 저장하여 블록화되어 있기 때문에 검색은 좀 더 효율적이다.

EX) 메모리가 1~100이 있고 캐시가 1~10이 있다면 캐시 1~5에는 1~50의 데이터를 무작위로 저장시키는 것이다.

 

 

7) 웹브라우저의 캐시 

소프트웨어적인 캐시들을 말한다.

 

쿠키

만료 기한이 있는 키-값 저장소이다

same site 옵션을 strict로 설정하지 않았을 경우 다른 도메인에서 요청했을때 자동 요청 된다

4KB까지 데이터를 저장할 수 있고 말료 기한을 정할 수 있다

쿠키를 설정할 떄는 document.cookie로 쿠키를 볼 수 없게 httponly 옵션을 거는것이 중요하다

클라이언트 또는 서버에서 만료기한 등을 정할 수 있는데 보통 서버에서 만료기한을 정한다

 

로컬 스토리지

만료기한이 없는 키-값 저장소이다.

10MB까지 저장할 수 있으며 웹 브라우저를 닫아도 유지되고 도메인 단위로 저장 생성된다.

HTML5를 지원하지 않는 웹 브라우저에서는 사용할 수 없으며 클라이언트만 수정 가능하다.

 

세션 스토리지

만료기한이 없는 키-값 저장소이다.

탭 단위로 세션 스토리지를 생성하며 탭을 닫을 때 해당 데이터가 삭제된다.

5MB까지 저장이 가능하며 HTML5를 지원하지 않는 웹 브라우저에서는 사용할 수 없다.

클라이언트에서만 수정 가능하다.

 

DB의 캐싱 계층

데이터 베이스 시스템을 구축할 때도 메인 데이터베이스 위에

레디스(Redis) 데이터베이스 계층을 캐싱 계층으로 둬서 성능을 향상시키기도 한다.