간단 지식/System Programming

03. CPU와 Memory의 관계

납작한돌맹이 2020. 11. 2. 02:00
반응형

프로그래머의 입장에서 CPU와 Memory의 관계는 위 그림과 같다. 두 관계에서 address와 instruction은 일방, data는 쌍방으로 주고받는다. 각각을 구성하는 요소들에 대해 자세히 알아보자.

 

CPU는 흔히 아는 intel 7세대 코어i5와 같은 컴퓨터에 내장된 칩을 말한다. 하드웨어의 영역에 포함되며 크게 3가지 요소가 저장되어 있다. PC는 Program Counter의 약자로, 지금 실행 중인 instruction이 끝난 후 실행할 instruction의 주소를 저장한다. 그런 의미에서 x84-64 bit에서는 RIP(Register Instruction Pointer)라고 불린다. 다음에 실행할 코드의 주소를 저장하기 때문에 메모리에서 instruction을 일방적으로 가져온다. Register는 레지스터 파일을 의미하며, 프로그램 데이터에서 가장 중요하게 사용된다. 저장소에 저장되는 일반적인 파일과는 다른 파일이다. x84-64 bit 컴퓨터에는 총 16개의 레지스터가 사용된다. Condition code는 가장 최근에 실행한 산수연산에 대한 정보를 저장한다. 이렇게 저장된 상태는 conditional branch에 사용된다. 이 부분은 어셈블리어로 직접 조작할 수 있는 부분이 아니며, 그저 연산 결과에 따라 bit가 0/1로 변환될 뿐이다.

Memory는 소프트웨어의 영역에 포함되며 크게 Stack, Code, Data로 구성된다. 이전에 자바의 메모리 영역에 대한 글을 올렸는데, 그런 특정 언어 입장에서의 메모리 영역이 아니라 어셈블리 프로그래머 관점에서의 메모리 영역이다. 메모리는 쉽게 말하면 주소 지정이 가능한 배열의 byte라고 정의 내릴 수 있다.

전체적인 구성요소에 대해 알았으니 전체적인 작동에 대해서도 이해해보자. 다음은 CPU 입장에서 일어나는 컴파일 과정을 짧게 요약한 것이다.

1. 소스코드를 컴파일하면 메모리의 stack영역에 차곡차곡 명령어가 쌓인다.

2. 해당 명령어들은 차례차례 PC에 자신들이 저장된 주소를 저장하며 CPU로 복귀된다.

3. 명령어를 받은 CPU는 필요한 데이터를 얻어 register에 저장한다.

4. CPU는 register에 저장한 데이터 이외의 데이터들을 memory의 어느 위치에 돌려줄지 결정한다.

여기서 중요하게 봐야할 것은 레지스터다. 3번과 4번을 보면 필요한 데이터는 레지스터에, 그 외의 데이터는 메모리에 돌려준다고 하였다. 이게 의미하는 바가 무엇일까?

CPU는 결국에 하드웨어이기 때문에 작은 칩이고, 그 안에는 레지스터가 있다. 그 작은 곳에 꼭 붙어 존재하는 레지스터에 저장하는 데이터는 어떤 것이겠는가? 바로 가장 중요한 데이터라는 의미이다. 아무 데이터나 레지스터에 저장하는 것이 아니다. 

 

즉, 시스템 프로그램에 대해 이해하기 위해 기초적으로 알아야 할 개념은 레지스터가 무엇이고, 어떤 역할을 하는지에 대한 개념이다. 다음 글을 통해 알아보자.

 

 

(이 글이 도움이 됐다면 광고 한번씩만 클릭 해주시면 감사드립니다, 더 좋은 정보글 작성하도록 노력하겠습니다 :) )

 

 

반응형