-
CPU가 메모리를 관리하는 원리C언어 2020. 2. 5. 22:53
전에 포스팅 한 글에 다음과 같은 내용이 있다.
" 정보를 처리할 때 CPU의 연산을 통해 정보가 처리되며 해당 과정은 메모리라는 공간을 통해 정보가 전달, 연산, 저장 등의 처리가 이루어진다. " 따라서 정보의 연산과정에서 CPU와 메인 메모리 ( RAM ) 사이에는 매우 많은 정보 전달 과정이 존재하며 CPU는 메인 메모리를 관리하는 역할도 수행한다.
이번 포스트에서는 그렇다면 CPU는 메인 메모리를 도대체 어떠한 원리로 관리를 하게 되는 것인가 ? 다음과 같은 주제에 대해서 다룰 것이다.
위의 그림은 메모리를 그림으로 표현한 것이다. 비유적으로 본다면 그림과 같이 파란색 상자들이 밀집하여 큰 공간을 이루고 있으며 이 큰 공간을 메모리라고 한다면 상자 하나씩은 1Byte의 정보를 담을 수 있는 크기이다. 또한 상자를 관리하기 위해 부여한 고유한 번호가 있는데 이것을 주소라고 칭한다.
즉 메모리라는 큰 기억 공간에는 1Byte 크기의 정보를 담을 수 있는 공간 매우 많이 존재하며 CPU는 이 1Byte의 단위로 메모리를 관리하며 이 공간 각각마다 관리를 하기 위해 붙인 특별한 고유 번호가 존재한다. 이 고유 번호의 이름을 주소라고 칭한다. 따라서 정보를 메모리라는 공간에 저장한 뒤 사용자는 정보가 필요할 때 해당 메모리 공간의 주소를 찾아서 정보를 꺼내오면 되는 구조이다.
CPU와 RAM사이에 일어나는 정보 전달과정을 살펴보자
위와 같은 과정을 통해 정보를 주고 받게 된다.
즉 사용자가 코드를 통해 " ~위치에 있는 정보를 +,- 등의 연산을 해라 "와 같은 명령을 CPU에게 내리면 CPU는 명령에 따라 사용자가 지정한 ~위치에 있는 정보를 RAM으로 부터 읽어와 연산을 수행한 뒤 연산한 정보를 다시 RAM에 저장하는 과정이 이루어 진다. 따라서 CPU는 RAM을 관리하는 기능을 가지고 있다.
추가적으로 이전 포스트 중에 Bit개념에 대해서 다룰 때 32 bit OS라는 용어를 본적이 있을 것이다. 이 말은 위에서 설명한 CPU가 RAM을 관리함에 있어 최대 32 Bit의 크기만큼 관리를 할 수 있다는 의미이다. 즉 사용자의 PC에 32bit OS가 설치 되었다면 해당 PC의 CPU는 2의 32제곱 4GB만큼의 메모리를 관리 할 수 있다고 보면 된다. 따라서 8GB등의 메모리를 장착하더라도 CPU가 다룰수 있는 최대 메모리의 크기는 4GB에 한정 된다.
그렇다면 사용자가 32Bit App을 제작한다면 사용가능한 메모리의 크기는?
사용자가 32Bit App을 만든다는 것은 만든 App의 사용가능한 최대 메모리의 크기가 32Bit 즉 4GB의 크기만큼 사용가능하다는 의미이다. 이 말은 즉 위에서 설명한 메모리 하나의 크기가 1Byte라는 것을 기준으로 43억개 가량 있다는 것을 의미한다.
위의 자료는 디버거를 통해 메모리가 어떻게 할당 되는지를 확인한 자료이다.
문자열 ch라는 이름의 변수를 선언과 동시에 크기는 12로 설정했다. 또한 모든 값을 0으로 초기화 하였다. 이때 ch이름이 붙어있는 주소를 따라가 보니 0x 0112F7F8부터 차례대로 12개의 크기만큼 0으로 초기화 된 것을 볼 수 있다.
이를 통해 확인 할 수 있는 점은 CPU에게 위의 코드와 같이 명령을 내리면 성공적으로 컴파일 되어 RAM의 수많은 공간중 임의의 공간을 확보해 사용자가 지정한 값으로 초기화 한 것을 확인 할 수 있다. 또한 0x 0112F7F8와 같이 복잡한 메모리 공간의 주소 대신 사용자가 변수를 선언할 때 붙인 이름을 해당 주소를 식별해서 해당 메모리의 위치를 불러올 수 있다는 것이다.
위의 내용을 정리한다면 CPU가 메모리를 관리하기 위해 설정한 관리 단위 즉 1Byte마다 고유한 주소를 가지고 있으며 해당 주소는 App에 사용가능한 메모리 크기 만큼의 주소를 같는다. 즉 32Bit App에서 주소가 0x 0112F7F8 이와 같은 형태를 같는 이유는 32 bit 만큼의 크기에 따라 주소가 부여 되기 때문 이다.
ex )
0x 00 00 00 00 ~ FF FF FF FF
위와 같이 메모리에 붙은 이름, 주소, 메모리 안에 있는 내용은 모두 따로 구분해서 개념을 정리해야한다. 서로 같은 거라고 착각 X
'C언어' 카테고리의 다른 글
자료형이란 ? (0) 2020.02.06 Hello World 에서 벌어지는 일 (0) 2020.02.06 C언어를 위한 컴퓨터 구조 (0) 2020.02.05 비트 개념과 2진법 (0) 2020.02.05 C언어 프로그래밍을 이루는 세 가지 요소 (0) 2020.02.05