베하!
날이 많이 더워지는게 느껴집니다. 더위 대비 건강 챙기셔야 합니다!
오늘은 모든 컴퓨팅 환경의 핵심 구성요소로 없으면 안될 존재인 메모리의 계층 구조에 대해 간략하게 알아보겠습니다. 레지스터, 캐시, 메모리, 하드디스크 등 한번은 들어 봤거나 그들의 관계가 궁금할 것입니다.
특히나 메모리 계층 구조를 파악한다는 것은 어쩌면 컴퓨터 시스템의 대부분을 파악하는 것과 다르지 않을 것입니다. 우리가 더 높은 기술을 이해하고 사용하기 위해서는 law 단계의 지식이 반드시 필요할 것입니다. 사용하는데 문제가 되지 않더라도 정밀하고 사용법에 대한 설명을 이해하기 위해서는 여전히 메모리 계층 구조와 같은 컴퓨터 기반 지식이 필요하다고 생각합니다.
오늘은 그 중에서 메모리에 대해 알아 보겠습니다.
메모리 계층 구조
위 그림으로 메모리에 기본적인 통신흐름을 파악할 수 있습니다. 레지스터 → 캐시 → 메모리 → 하드디스크로 데이터가 저장된다고 볼 수 있습니다.
그 중에서 많이 들어본 메모리에 대한 구조를 먼저 알아보겠습니다
메모리 구조
메모리의 구조는 위와 같은 그림으로 생각할 수 있습니다. 한 메모리에 논리적으로 코드, 데이터, 힙, 스택 부분으로 나눌 수 있습니다.
각 영역은 서로 다른 역할을 수행 합니다.
코드 영역
- 코드 영역은 실행할 프로그램의 코드가 저장되어 있는 영역으로 텍스트 영역이라고 불립니다. 특정 프로그램을 실행한다고 할 때 해당 프로그램의 소스코드는 코드영역에 있다가 CPU가 하나씩 불러 컴파일 하고 처리한다고 생각하면 좋습니다.
데이터 영역
- 데이터 영역은 프로그램의 전역 변수와 정적 변수가 저장되는 영역입니다. 데이터 영역은 프로그램의 시작과 함께 할당되고, 프로그램이 종료되면 소멸합니다.
- 만약 java 언어를 알고 있다면 static 변수가 존재할 것입니다. 해당 변수는 java 프로그램이 특정 부분을 처리하고 사라지는 지역변수와 달리 프로그램 전체에서 모두 사용할 수 있고 프로그램 전체가 종료되어야 해당 변수가 사라집니다. 따라서 데이터 영역은 보통 전체 혹은 특정 부분에서 공유되고 공통적으로 사용되는 값이 할당 된다고 볼 수 있습니다.
스택 영역
- 스택 영역은 함수, 메서드라고 불리는 작은 기능이 호출될 때 해당 기능이 가지고 있는 변수(지역변수)와 input을 담을 매개변수가 저장되는 영역입니다.
- 스택영역은 함수의 호출과 함께 할당되고 함수가 종료되면 해당 공간을 반환하게 됩니다.
- 스택영역은 LIFO라는 방식으로 동작합니다. LIFO는 후입 선출로 특정 지역변수가 먼저 할당되면 해당 변수는 가장 마지막에 반환된다는 의미입니다.
- 스택영역은 메모리의 전체 주소가 0~100이라 가정할 때 메모리 할당시 100부터 데이터가 쌓이게 됩니다. 힙은 그 반대로 쌓이게 됩니다.
힙 영역
- 사용자가 직접 관리하는 공간으로 동적으로 할당되는 공간입니다.
- java를 예로 들어 특정 객체를 참조하는 참조변수는 사용가 관리해야 합니다. 그리고 그 변수는 사용자가 설정한 객체의 생명주기에 따라 런타임시 객체가 메모리에 할당되는 동적인 변수라고 할 수 있습니다. 따라서 이러한 참조변수는 힙 영역에 할당됩니다.
- 객체가 힙에 할당되고 객체가 필요한 변수(지역)는 스택에 있다고 생각하면 좋습니다.
- 힙 영역은 스택과 반대로 메모리 전체주소가 0~100이라 가정할 때 메모리 할당시 0부터 데이터가 쌓이게 됩니다.
- 힙은 사용자가 동적으로 할당하는 것이기 때문에 메모리 사용의 목적이 달성이 되면 반환되게 처리해야 합니다. 그렇지 않으면 불필요한 메모리 할당으로 점차적으로 메모리 누수가 발생할 것 입니다. 그래서 java에서는 Garbage Collection이 존재하고 C언어에서 malloc() 함수로 동적 메모리 할당 후 free()로 공간을 반환하게 하는 코드가 존재합니다.
오늘은 이렇게 메모리 구조를 알아 봤습니다.
메모리 구조는 컴퓨터 과학 지식의 기초가 되고 컴퓨팅 환경에서 알아야 다른 원리를 이해할 수 있는 바탕이 됩니다.
다음에는 레지스터와 캐시에 대해 알아 보는 시간을 가질까 합니다.
다음에 만나요!
'IT KNOWLEDGE' 카테고리의 다른 글
Kafka (0) | 2023.06.27 |
---|---|
LlamaIndex 설치 & OpenAI API 키 발급 방법 (0) | 2023.06.23 |
Kubeflow 개요 및 특징 (0) | 2023.06.19 |
LLM (0) | 2023.06.09 |
구글 Bard의 차세대 모델 PaLM2 (0) | 2023.06.05 |
댓글