컴퓨터는 크게 3가지 구성요소로 이루어져있습니다.
1. Computation
2. Communication
3. Storage
대부분의 현대 컴퓨터들은 폰노이만 컴퓨터구조 설계 방식을 따르고 있으며 폰노이만 구조는 크게 두 가지 특성을 가지고 있습니다.
특징 1. Stored program
프로그램 파일 (1강에서 말했던 0과 1들, 즉 기계어들의 집합이라고 보시면 됩니다)은 명령어와 데이터로 이루어져 있고 컴퓨터 상에서 실행되기 위해서는 메모리에 프로그램이 저장되어 있어야한다는 특징을 가지고 있습니다. 위 그림을 보면 메모리는 저장공간마다 주소를 갖고 있고 해당 주소마다 명령어 또는 데이터를 저장하고 있는 것을 확인하실 수 있습니다.
특징 2. Sequential instruction processing
명령어는 순서대로 실행되는 특성을 갖고 있습니다. 위 그림에서 살펴보면 총 5개의 명령어가 00000, 00001, 00010, 00011, 00100 번째 공간에 저장되어 있는데 만약 00000번째부터 명령어가 시작된다면 그 다음에 00001번째, 00010번째... 이렇게 순차적으로 명령어를 가져오고 해독하고 실행합니다.
아래 예시를 통해 컴퓨터가 어떻게 작동하는지 이해할 수 있습니다.
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가 레지스터, 그림 오른쪽에 위치한 박스는 메모리를 의미합니다)
아래 예시 그림들을 통해 실제로 폰노이만 구조의 형태를 갖는 컴퓨터를 어떻게 프로그램을 실행하는지 표현했습니다. 총 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
이상으로 폰 노이만 구조에 대한 설명을 마치겠습니다!