2강. 폰노이만 구조

이동재·2021년 2월 21일
0

컴퓨터구조

목록 보기
3/3

2-1. 컴퓨터의 정의

컴퓨터는 크게 3가지 구성요소로 이루어져있습니다.
1. Computation
2. Communication
3. Storage

2-2. 폰노이만 구조란

대부분의 현대 컴퓨터들은 폰노이만 컴퓨터구조 설계 방식을 따르고 있으며 폰노이만 구조는 크게 두 가지 특성을 가지고 있습니다.
특징 1. Stored program

프로그램 파일 (1강에서 말했던 0과 1들, 즉 기계어들의 집합이라고 보시면 됩니다)은 명령어와 데이터로 이루어져 있고 컴퓨터 상에서 실행되기 위해서는 메모리에 프로그램이 저장되어 있어야한다는 특징을 가지고 있습니다. 위 그림을 보면 메모리는 저장공간마다 주소를 갖고 있고 해당 주소마다 명령어 또는 데이터를 저장하고 있는 것을 확인하실 수 있습니다.

특징 2. Sequential instruction processing

명령어는 순서대로 실행되는 특성을 갖고 있습니다. 위 그림에서 살펴보면 총 5개의 명령어가 00000, 00001, 00010, 00011, 00100 번째 공간에 저장되어 있는데 만약 00000번째부터 명령어가 시작된다면 그 다음에 00001번째, 00010번째... 이렇게 순차적으로 명령어를 가져오고 해독하고 실행합니다.

2-3. 폰노이만 구조 예시

아래 예시를 통해 컴퓨터가 어떻게 작동하는지 이해할 수 있습니다.

CPU는 연산을 담당하고 메모리에는 데이터 및 명령어들이 저장되어 있습니다. 컴퓨터 작동 방식은 크게 3단계로 나눠서 볼 수 있습니다. ( 참고로 다른 교재에서는 5단계로 나눠서 설명하는 경우도 있고 3단계로 나눠 설명하는 경우가 있는데 저는 3단계로 나눠 설명하는 방식을 선택하겠습니다)

Program counter란: Instruction pointer라고도 불리기도 하는데 현재 프로그램 명령어 진행 순서를 저장하고 있는 레지스터입니다. 예로 들면 만약 프로그램 카운터 값이 00000이면 다음에 fetch해야할 명령어가 00000 번째 인거고, 00010 이면 다음에 fetch 해야할 명령어가 00010번째 라는 점을 알 수 있습니다.

1단계 (fetch stage): 현재 순서에 맞는 명령어를 메모리에서 cpu로 가져오는 과정입니다. 또한 fetch 단계에서 program counter 값을 업데이트하여 다음 명령어를 가져올 메모리 주소를 미리 설정해둡니다.

2단계 (decode stage): 가져온 명령어가 어떤 종류의 명령어인지 해독하는 과정입니다.

3단계 (execute stage): 명령어를 해독한 내용을 토대로 하드웨어를 실행하는 과정입니다.

또한 간단한 설명을 위해 4가지의 어셈블리 명령어만 존재한다고 가정해보겠습니다. (그림 상에서 R1, R2, R3가 레지스터, 그림 오른쪽에 위치한 박스는 메모리를 의미합니다)

  1. LOAD R1, MEM[A]: 메모리 A번째 주소에 있는 값을 레지스터 R1에 저장합니다.
  2. ADD R3, R1, R2: 레지스터 R1,R2,R3에 대하여, R1+R2 연산을 진행하고 이 결과값을 레지스터 R3 에 저장합니다.
  3. STORE R1, MEM[A]: 레지스터 R1에 저장된 값을 메모리 A번째 주소에 저장합니다.
  4. JUMP A: 현재 프로그램 카운터 값이 N이라고 했을 때, 그 다음에 실행해야할 명령어의 주소는 N + 1입니다. 그러나 JUMP A 명령어를 만나면 N + 1번째에 위치한 명령어를 실행하는 것이 아닌 A번째에 위치한 명령어를 실행시킵니다. 즉, JUMP 명령어는 코드를 순차적으로 실행시키지 않게 합니다. 여러분들에게 그나마 친숙한 키워드인 for문이나 if문이 일종의 JUMP문이라고 보시면 됩니다.

아래 예시 그림들을 통해 실제로 폰노이만 구조의 형태를 갖는 컴퓨터를 어떻게 프로그램을 실행하는지 표현했습니다. 총 20 step으로 나눠서 설명을 하겠습니다.
<프로그램 명령어>
0. LOAD R1, 10010
1. LOAD R2, 10011
2. ADD R3, R1, R2
3. STORE R3, 10100
4. JUMP 01001

<프로그램 데이터>
MEM[10010] = 10
MEM[10011] = 15

step 1 (0번째 명령어 가져오기 - fetch)

step 2 (Program counter 업데이트)

step 3 (0번째 명령어 해독 - decode)

step 4 (0번째 명령어 실행 - execute)

step 5 (1번째 명령어 가져오기 - fetch)

step 6(Program counter 업데이트)

step 7 (1번째 명령어 해독 - decode)

step 8 (1번째 명령어 실행 - execute)

step 9 (2번째 명령어 가져오기 - fetch)

step 10 (Program counter 업데이트)

step 11 (2번째 명령어 해독 - decode)

step 12 (2번째 명령어 실행 - execute)

step 13 (3번째 명령어 가져오기 - fetch)

step 14 (Program counter 업데이트)

step 15 (3번째 명령어 해독 - decode)

step 16 (3번째 명령어 실행 - execute)

step 17 (4번째 명령어 가져오기 - fetch)

step 18 (Program counter 업데이트)

step 19 (4번째 명령어 해독 - decode)

step 20 (4번째 명령어 실행 - execute)

이상으로 폰 노이만 구조에 대한 설명을 마치겠습니다!

profile
자투리 시간

0개의 댓글