프로그래밍 / C++ / 언리얼

Programming/CS

[CS] 메모리

아트성 2022. 9. 14. 17:14

메모리 계층 구조

컴퓨터의 설계에 있어, 각각의 특징이 있는 서로 다른 여러 종류의 저장 장치를 함께 사용하여 최적의 효율을 낼 수 있게 하는 것. 빠른 저장 장치는 용량에 비해 가격이 비싸고, 용량이 넉넉한 저장 장치는 처리 속도가 느리다. 그러나 컴퓨터가 행하는 작업은 매우 다양하다. 빠른 속도가 필요한 상황도 있지만, 단순히 많은 내용을 천천히 읽고 쓰는 작업도 그만큼 많다. 이러한 상황에 맞게 여러 저장 장치를 각각 사용할 수 있도록 하여 싸고 성능 좋은 컴퓨터를 구현하는 설계가 메모리 계층 구조이다.

 

 

레지스터

컴퓨터에서 제일 빠른 메모리. CPU계산 과정에서 작동한다. CPU마다 다르겠지만 한 CPU에 100개 들어있으면 매우 많은 편. 그러나 무작정 많다고 좋은 건 아니고, CPU 스펙에도 포함되지 않는다. 

 

 

캐시메모리

레지스터 다음으로 빠른 메모리. 캐시 메모리도 CPU와의 거리에 따라 L1 캐시, L2 캐시, L3 캐시 등 여러 단계로 나뉜다. 숫자가 작을수록 CPU에 가까운 상위 레벨 캐시로 용량이 작고 빠르며, 숫자가 클수록 용량이 크고 느린 물건이다. 최하위 레벨 캐시의 경우 마지막 레벨을 의미하는 LLC(Last Level Cache)라고도 부른다.

2021년 현재 가정용 PC당 L1 캐시는 수십 KB, L2 캐시는 수백 KB~수 MB, L3 캐시는 수~수십 MB 정도로 들어있으며, 이들은 보통 SRAM으로 구성된다.

보통 프로그래머가 직접 제어할 수 없으며 CPU에 의해 자동으로 통제된다. 캐시가 있든 없든 프로그래머와 외부 사용자에게 보이는 결과는 동일하다. 이러한 특성을 사용자에게 투명(Transparent)하다고 한다. 물론 캐시의 특성을 이해하고 프로그래밍하면 훨씬 효율 좋은 코드를 생성할 수 있다.

 

 

메인메모리

CPU나 메인보드와 분리되어 있는 메모리 중에서는 최상위 메모리이자, 프로그램을 직접 구동하는 데 사용되는 '주 기억 장치'의 최하위 메모리. CPU와 캐시에 비하면 훨씬 느리지만, HDD는 말할 것도 없고 SSD에 비해서도 차원이 다르게 빠르다.

 

스토리지 (SSD, HDD)

프로그램이 구동될 때에는 직접 쓰이지 않는 '보조 기억장치' 또는 '저장소'들 중에서는 컴퓨터 안에 내장되어 있는 이 메모리들이 대개 최상위에 위치하게 된다. 둘 다 있는 컴퓨터에서는 대개 SSD가 HDD보다 상위에 위치하게 된다. 세부사항은 SSD, HDD 참조 2021년 현재 가정용으로 SSD는 100GB ~ 1TB 정도, HDD는 1TB ~ 십수TB 정도의 용량으로 구성된다.
일반적으로는 ATA라는 중간 계층을 따로 두어 통신한다. 단 NVMe SSD만큼은 CPU와 직접 통신한다.

 
 
지역참조성

컴퓨터 프로그램은 메모리의 같은 지역을 자주 확인하는 경향이 있다.

이처럼 프로그램이 일부분만을 자주 사용하는 현상을 지역 참조성이라고 한다. 이 지역참조성은 특별한 한 프로그램에서만 일어나는 것이 아니라 거의 대다수의 프로그램에서 일어나는 것이 알려져 있다. 만약 당신이 웹브라우저에서 여러 탭을 켜 놓았다고 가정하자. 웹브라우저는 다른 탭보다 당신이 지금 보고 있는 이 탭의 정보에 보다 자주 접속할 것이다. 이처럼 거의 모든 프로그램이 자신이 가진 정보 중 일부분에 자주 접속하는 지역참조성 현상을 보인다.

 

 

프로그램 (Program)

하드 디스크 등의 저장되어있는 실행코드와 리소스의 집합체

 

 

프로세스 (Process)

 

프로세스 이제까지 하드웨어에 대해서 살펴봤다. 이번엔 소프트웨어를 살펴보자. 프로그램을 실행하면 무슨 일이 일어날까? 프로그램을 실행하면 프로세스(Process)라는 것이 된다. 프로세스는 프로그램을 실행하기 위한 여러 가지 데이터를 관리하며 아래와 같이 4가지 영역이 존재한다. 즉 프로세스는 자원을 할당받은 프로그램의 인스턴스, 또는 작업단위 라는 것이다.

 

 

 

● 코드(Code)

위쪽(낮은)주소와 가까이 위치하며, 실행하는 프로그램의 코드가 저장되는 영역이다.

실행파일을 구성하는 명령어(예약어, 제어문, 상수)들이 저장되는 영역이며 컴파일 타임에 결정된다. 

 

● 데이터(Data)

위쪽(낮은)주소와 가까이 위치하며, 전역변수와 정적Static 변수가 저장되는 영역이다. 

초기화 된 데이터는 Data영역에 초기화 되지 않은 데이터는 BSS영역에 저장된다.

 

● 힙(Heap) :

위쪽(낮은)주소부터 할당이 되며, 참조형 데이터값이 저장되고, 메모리 공간이 동적으로 할당되고 해제되어 메모리 영역은 런타임에 결정된다. Heap과 Stack은 같은 공간을 공유하기 때문에 각 영역이 상대 공간을 침범하는 일이 발생할 수 있는데 이를 각각 Heap Overflow라고 한다.

 

● 스택(Stack)

아래쪽(높은)주소부터 할당이 되며 함수의 호출과 관계되는 지역, 매개변수 또는 함수가 저장된다.

컴파일 타임에 결정되는데 함수나 지역변수를 많이 가지고 있으면 stack영역을 초과하게 되는데 힙과 비슷하게 이때 stackoverflow에러가 발생한다.

 

 

스레드 (Thread)

프로세스가 할당받은 자원을 이용하는 실행단위

반응형

'Programming > CS' 카테고리의 다른 글

[CS] 운영체제  (0) 2023.03.24
[CS] CPU가 작동하는 방식  (0) 2023.03.22