02. cpu memory architecture, pointers

Posted by aliontory on April 03, 2024 · 2 mins read

2024-04-03-02. CPU Memory Architecture, Pointers

수학적 기초 역량을 배운 다음에도 프로그래밍이 어려울 수 있다. 수학적으로 문제를 해결하는 것은 종이나 컴퓨터 등의 도구에 대해 무관한 증명을 하는 것이기 때문이다.
반면 프로그램은 컴퓨터에서 작성해야 한다. 컴퓨터에서 할 수 있는 일과 못하는 일을 구별할 수 있어야 한다.


컴퓨터 구조

현대의 모든 컴퓨터는 기계어 프로그램과 데이터를 메모리에 저장해 놓고, CPU에서 실행한다. 이와 같이 명령어를 실행하는 장치와, 명령어와 데이터를 저장하는 장치가 분리된 구조를 프로그램 내장형 컴퓨터(stored program computer)라고 한다.
컴퓨터 프로그램은 메모리의 값을 CPU로 가져가서 계산한 후, 계산 결과를 다시 메모리에 저장하는 것을 반복하며 실행된다.

메모리의 바이트마다 번호를 붙여 각각의 바이트를 구별한다. 이 번호를 메모리의 주소라고 한다.


CPU는 다음과 같은 요소로 구성되어 있다.
  • IR(Instruction Register) : CPU가 실행하는 명령어가 저장되는 공간이다.
  • IP(Instruction Pointer. Program Counter라고도 한다) : CPU가 다음에 실행할 명령어가 들어있는 메모리의 주소를 저장한다. IP가 가리키는 명령어를 CPU가 IR에 저장하면, IP는 그 다음으로 가져올 명령어의 주소를 가리키도록 갱신된다.
  • CU(Control Unit) : IR에 저장된 명령어를 해독하고, 이에 따른 제어신호를 생성하여 ALU가 연산을 수행하도록 한다. 또한 메모리와 입출력장치를 제어하기 위한 제어신호도 생성한다.
  • ALU(산술 논리 연산 장치) : CU의 제어신호에 따라 연산을 수행한다.
  • Register(레지스터) : 피연산자 등 명령어를 처리하는 데 필요한 데이터를 저장한다.

CPU와 메모리는 시스템 버스를 통해 데이터를 주고받는다. 시스템 버스는 다음 세 가지 종류가 있다.
  • 주소 버스(address bus) : CPU에서 읽거나 쓸 메모리 위치의 주소를 지정한다.
  • 데이터 버스 : CPU와 메모리의 데이터 전달 통로이다. 데이터 버스를 통해 메모리의 데이터가 레지스터에 적재되거나, 레지스터의 데이터가 메모리에 저장된다.
  • 제어 버스(control bus) : 메모리에 데이터 읽기 또는 쓰기 신호를 보내는 등 다양한 제어 신호를 보낸다.


Pointer

Type이 메모리 주소인 변수. 저장하는 값을 주소로 해석하기로 약속한 변수
포인터 변수를 선언할 때, 변수에 저장된 주소에 가면 어떤 Type의 변수가 있는지를 추가로 표시해야 한다.

int a, *p, **pp;
a에 int가 저장되어 있고, p에 저장된 주소로 접근(*)하면 int가 저장되어 있고, pp에 저장된 주소로 접근한 뒤 다시 그곳에 저장된 주소로 접근하면 int가 저장되어 있음을 나타낸다.