CPU Work(cpu 동작 방식)

함수 / 프로시저 / 서브루틴

코드를 재사용하는 주요 수단으로 중복된 코드를 줄여 코드가 차지하는 메모리를 절약할 수 있다. 프로그램에서의 함수를 호출하는 과정은 아래와 같다.

  1. 메인 함수에서 실행을 시작해 다른 함수를 호출

  2. CPU가 메인 함수 코드를 수행하다가 다른 함수의 코드로 수행 위치 이동

  3. 이동 하기 전에 돌아와야 할 지점을 저장

  4. 호출한 함수로 이동해 그 함수의 내용을 실행하고 완료 후에 원래 호출 했던 위치로 복귀

컴퓨터 시스템 동작 개요

CPU는 매 순간(일정 주기에 의해 동작) 메모리에 특정 주소에 존재하는 명령을 하나씩 읽어와 실행하게되는데, 이 때 실행해야할 메모리 주소를 담고 있는 레지스터를 Program Counter라고 하며, CPU는 매 번 프로그램 카운터가 가리키는 메모리 위치의 명령어만 수행한다.

Program Counter(PC)

CPU가 수행해야 할 메모리 주소를 담고 있는 레지스터로 다음에 실행할 명령을 메모리에서 찾아 주소를 알려주는 역할을 한다.

  1. 프로그램 카운터에는 다음 실행할 명령어의 주소가 존재

  2. 해당 주소에서 명령어를 가져옴

  3. 프로그램 카운터를 증가시켜 그 다음 실행할 명령어 주소 대입

  4. 가져온 명령어 실행

레지스터

  • CPU 내부에서 처리할 명령어나 연산의 중간 결과값 등을 일시적으로 기억하는 임시저장소

  • 빠른 속도가 장점

레지스터
기능

프로그램 카운터(Program Counter)

다음 번에 실행 될 명령어의 번지를 기억하는 레지스터, 명령어 포인터라고 부르는 CPU도 존재

명령어 레지스터(Instruction Register)

현재 실행중인 명령어의 내용을 기억하는 레지스터

누산기(Accumulator)

연산의 결과를 일시적으로 기억하는 레지스터

상태 레지스터(Program Status Word)

시스템 내부의 순간 상태가 기록된 정보를 저장하는 레지스터

메모리 주소 레지스터(Memory Address Register)

메모리 주소를 저장하는 레지스터

메모리 데이터 레지스터(Memory Data Register)

메모리와 주고 받을 값(데이터와 명령어)을 저장하는 레지스터, 메모리 버퍼 레레지스터라고도 부름

CPU 실행 과정

고수준 프로그래밍 언어

A = 3;
B = 4;
C = A + B;

어셈블리 언어

LOAD [10]
ADD [11]
STORE [12]

기계어(예시)

100110 0000001010101
110110 0000001010110
110111 0000001010111

메모리 상태

주소
메모리

8

0

9

0

10

3

11

4

...

...

100

LOAD 10

101

ADD 11

102

STORE 12

103

0

제어 장치와 레지스터 상태

장치
저장된 값

제어 장치

산술 논리 장치

프로그램 카운터

명령어 레지스터

메모리 주소 레지스터

메모리 데이터 레지스터

누산기

  1. 프로그램 카운터에 프로그램의 첫 번째 명령어의 주소 전달(프로그램 카운터에는 CPU가 실행 시켜야 할 다음 번 명령어 주소를 지니고 있음)

장치
저장된 값

제어 장치

산술 논리 장치

프로그램 카운터

100

명령어 레지스터

메모리 주소 레지스터

메모리 데이터 레지스터

누산기

  1. 프로그램 카운터에 있는 주소를 메모리 주소 레지스터에 저장

장치
저장된 값

제어 장치

산술 논리 장치

프로그램 카운터

100

명령어 레지스터

메모리 주소 레지스터

100

메모리 데이터 레지스터

누산기

  1. 메모리 주소 레지스터에 있는 주소에 접근해서 메모리 데이터 레지스터에 저장

장치
저장된 값

제어 장치

산술 논리 장치

프로그램 카운터

100

명령어 레지스터

메모리 주소 레지스터

100

메모리 데이터 레지스터

LOAD 10

누산기

  1. 읽어 온 명령어를 명령어 레지스터로 저장

장치
저장된 값

제어 장치

산술 논리 장치

프로그램 카운터

100

명령어 레지스터

LOAD 10

메모리 주소 레지스터

100

메모리 데이터 레지스터

LOAD 10

누산기

  1. 프로그램 카운터 1 증가

장치
저장된 값

제어 장치

산술 논리 장치

프로그램 카운터

101

명령어 레지스터

LOAD 10

메모리 주소 레지스터

100

메모리 데이터 레지스터

LOAD 10

누산기

  1. 명령어 레지스터에 있는 명령어를 제어장치에 이동 시켜 명령어 해독(Decode)

장치
저장된 값

제어 장치

LOAD 10

산술 논리 장치

프로그램 카운터

101

명령어 레지스터

LOAD 10

메모리 주소 레지스터

100

메모리 데이터 레지스터

LOAD 10

누산기

  1. 제어장치에서 해독한 명령어를 해독해 메모리 주소 레지스터에 실행 할 메모리 주소를 저장

장치
저장된 값

제어 장치

LOAD 10

산술 논리 장치

프로그램 카운터

101

명령어 레지스터

LOAD 10

메모리 주소 레지스터

10

메모리 데이터 레지스터

LOAD 10

누산기

  1. 메모리 데이터 레지스터에 주소에 있는 데이터를 저장

장치
저장된 값

제어 장치

LOAD 10

산술 논리 장치

프로그램 카운터

101

명령어 레지스터

LOAD 10

메모리 주소 레지스터

10

메모리 데이터 레지스터

3

누산기

  1. 메모리 데이터 레지스터의 데이터를 누산기로 저장

장치
저장된 값

제어 장치

LOAD 10

산술 논리 장치

프로그램 카운터

101

명령어 레지스터

LOAD 10

메모리 주소 레지스터

10

메모리 데이터 레지스터

3

누산기

3

  1. 명령어가 종료 됐으므로 프로그램 카운터에 있는 주소를 메모리 주소 레지스터에 전달

장치
저장된 값

제어 장치

LOAD 10

산술 논리 장치

프로그램 카운터

101

명령어 레지스터

LOAD 10

메모리 주소 레지스터

101

메모리 데이터 레지스터

3

누산기

3

  1. 메모리 데이터 레지스터에 데이터 저장

장치
저장된 값

제어 장치

LOAD 10

산술 논리 장치

프로그램 카운터

101

명령어 레지스터

LOAD 10

메모리 주소 레지스터

101

메모리 데이터 레지스터

ADD 11

누산기

3

  1. 명령어 레지스터로 전달

장치
저장된 값

제어 장치

LOAD 10

산술 논리 장치

프로그램 카운터

101

명령어 레지스터

ADD 11

메모리 주소 레지스터

101

메모리 데이터 레지스터

ADD 11

누산기

3

  1. 프로그램 카운터 1 증가

장치
저장된 값

제어 장치

LOAD 10

산술 논리 장치

프로그램 카운터

102

명령어 레지스터

ADD 11

메모리 주소 레지스터

101

메모리 데이터 레지스터

ADD 11

누산기

3

  1. 명령어를 제어 장치로 전달 후 제어 장치가 명령어 해독

장치
저장된 값

제어 장치

ADD 11

산술 논리 장치

프로그램 카운터

102

명령어 레지스터

ADD 11

메모리 주소 레지스터

101

메모리 데이터 레지스터

ADD 11

누산기

3

  1. ADD 명령어를 수행하기 위해 누산기에 있는 데이터를 산술 논리 장치에 저장(ADD 명령어를 수행한다는 것은 누산기에 무엇인가 있겠다고 판단하여 해당 동작을 실행하는 것으로 보인다.)

장치
저장된 값

제어 장치

ADD 11

산술 논리 장치

3

프로그램 카운터

102

명령어 레지스터

ADD 11

메모리 주소 레지스터

101

메모리 데이터 레지스터

ADD 11

누산기

3

  1. 메모리 주소 레지스터에 실행 할 주소 저장

장치
저장된 값

제어 장치

ADD 11

산술 논리 장치

3

프로그램 카운터

102

명령어 레지스터

ADD 11

메모리 주소 레지스터

11

메모리 데이터 레지스터

ADD 11

누산기

3

  1. 메모리 데이터 레지스터에 주소의 메모리 저장

장치
저장된 값

제어 장치

ADD 11

산술 논리 장치

3

프로그램 카운터

102

명령어 레지스터

ADD 11

메모리 주소 레지스터

11

메모리 데이터 레지스터

4

누산기

3

  1. 해당 데이터를 누산기로 저장

장치
저장된 값

제어 장치

ADD 11

산술 논리 장치

3

프로그램 카운터

102

명령어 레지스터

ADD 11

메모리 주소 레지스터

11

메모리 데이터 레지스터

4

누산기

4

  1. 산술 논리 장치에 전달하여 기존에 있던 데이터를 합산

장치
저장된 값

제어 장치

ADD 11

산술 논리 장치

3+4=7

프로그램 카운터

102

명령어 레지스터

ADD 11

메모리 주소 레지스터

11

메모리 데이터 레지스터

4

누산기

4

  1. 다시 데이터를 누산기에 저장

장치
저장된 값

제어 장치

ADD 11

산술 논리 장치

3+4=7

프로그램 카운터

102

명령어 레지스터

ADD 11

메모리 주소 레지스터

11

메모리 데이터 레지스터

4

누산기

7

  1. 한 명령어가 종료 됐으므로 프로그램 카운터의 값을 메모리 주소 레지스터에 저장

장치
저장된 값

제어 장치

ADD 11

산술 논리 장치

3+4=7

프로그램 카운터

102

명령어 레지스터

ADD 11

메모리 주소 레지스터

102

메모리 데이터 레지스터

4

누산기

7

  1. 메모리 데이터 레지스터에 명령어를 저장

장치
저장된 값

제어 장치

ADD 11

산술 논리 장치

3+4=7

프로그램 카운터

102

명령어 레지스터

ADD 11

메모리 주소 레지스터

102

메모리 데이터 레지스터

STORE 12

누산기

7

  1. 명령어를 명령어 레지스터로 저장

장치
저장된 값

제어 장치

ADD 11

산술 논리 장치

3+4=7

프로그램 카운터

102

명령어 레지스터

STORE 12

메모리 주소 레지스터

102

메모리 데이터 레지스터

STORE 12

누산기

7

  1. 프로그램 카운터를 1증가, 하지만 메모리에 아무 것도 없으므로(0) 프로그램이 종료될 예정

장치
저장된 값

제어 장치

ADD 11

산술 논리 장치

3+4=7

프로그램 카운터

103

명령어 레지스터

STORE 12

메모리 주소 레지스터

102

메모리 데이터 레지스터

STORE 12

누산기

7

  1. 명령어를 제어 장치에 전달

장치
저장된 값

제어 장치

STORE 12

산술 논리 장치

3+4=7

프로그램 카운터

102

명령어 레지스터

STORE 12

메모리 주소 레지스터

102

메모리 데이터 레지스터

STORE 12

누산기

7

  1. 메모리 주소 레지스터에 실행 할 주소 저장

장치
저장된 값

제어 장치

STORE 12

산술 논리 장치

3+4=7

프로그램 카운터

102

명령어 레지스터

STORE 12

메모리 주소 레지스터

12

메모리 데이터 레지스터

STORE 12

누산기

7

  1. 누산기의 데이터(계산 결과)를 메모리 데이터 레지스터에 저장

장치
저장된 값

제어 장치

STORE 12

산술 논리 장치

3+4=7

프로그램 카운터

102

명령어 레지스터

STORE 12

메모리 주소 레지스터

12

메모리 데이터 레지스터

7

누산기

7

  1. 저장 명령어이므로 메모리 데이터 레지스터의 값을 메모리에 저장

장치
저장된 값

제어 장치

STORE 12

산술 논리 장치

3+4=7

프로그램 카운터

102

명령어 레지스터

STORE 12

메모리 주소 레지스터

12

메모리 데이터 레지스터

7

누산기

7

주소
메모리

8

0

9

0

10

3

11

4

12

7

...

...

100

LOAD 10

101

ADD 11

102

STORE 12

103

0

참고자료

Last updated

Was this helpful?