
초기 컴퓨터 과학자 중에 한명이였던 폰 노이만은 컴퓨터에 대해 연산, 제어, 저장의 세 가지 기능이 꼭 필요하다고 생각했습니다.
ALU (Arithmetic Logic Unit) - 산술/논리 단위로 연산을 수행하게 됩니다.
산술 연산은 기본적으로 덧셈, 뺄셈 그리고 이를 응용한 곱셈, 나눗셈이 있습니다.
논리 연산은 AND, OR, NOT, XOR 등 비트를 가지고 연여 조건에 따라 데어터를 처리할 수 있습니다.
그리고 데이터를 비교도 합니다.
각각의 Status는 분기, 조건판단 등을 위한 값이다.
레지스터 (Register) - 메모리의 한 종류로 속도가 빠르다.
수만은 메모리가 있지만 때에 따라서 각각의 용도에 맞게 사용하게 됩니다.
위에 보이는 사진처럼 레지스터는 저장 가능한 용량이 적지만 처리 속도는 빠릅니다.
메모리의 종류로는
PC (Program Counter) - 프로그램을 순차적으로 처리하도록 프로그램의 순서를 카운트하는 역할
어떤 명령어가 몇번째 순서에 실행되는지를 기록하는 역할로 다음에 실행될 명령어의 메모리 주소를 기억하고 있다.
명령어가 실행될 때마다 자동으로 업데이트되며, 대게는 1씩 증가합니다.
MAR (Memory Address Register) - 메모리 주소를 저장하는 레지스터다.
메모리에 접근 시, CPU는 MAR에 원하는 주소를 적어놓고 동작을 수행한다.
| READ | WRITE | |
|---|---|---|
| 예시 | MAR ← 0x2000 / READ | MAR ← 0x3000 / MDR ← 0xDEADBEEF / WRITE |
| 설명 | 메모리 주소 0x2000의 내용을 읽기 위해 MAR에 주소를 설정 | 주소 0x3000에 데이터 0xDEADBEEF를 저장 |
MDR은 메모리에서 읽어온 값 또는 저장할 값을 저장하는 곳이다.
MBR (Mamory Buffer Register)
메모리에 저장되기 전 임시적으로 저장되는 공간이다.
메모리에서 읽어온 값 또는 저장할 값을 저장하는 곳이다.
이를, 다른 명칭으로 MDR로도 부른다.
IR (Instruction Register)
Decoder(해석기)에 들어가기 전에 명령어를 기억하는 역할
CPU가 무엇을 해야 할지 알려주는 정보의 중심이 되는 곳으로 명령어 저장, 디코딩 대상, 연산 제어의 역할이 있다.
명령어 저장 : 메모리에서 읽어온 명령어를 임시 저장
디코딩 대상 : 제어 유닛(Control Unit)이 해석할 명령어의 소스
연산 제어 : 어떤 연산을 할지, 어떤 레지스터를 쓸지 등을 결정하는 기준
제어장치 (Control Unit) - 명령어를 해석하고 실행하기 위한 제어 신호를 생성하여 다른 구성 요소들을 제어한다.
지금 상태에서는 크게 필요 없는 내용이므로 개념만 알고 넘어 갑니다.
그럼 이제는 아래 그림의 흐름을 알 수 있을 겁니다.
주기억장치 - 컴퓨터에서 프로그램 실행에 필요한 데이터와 명령어를 저장하는 기억 장치이다.
기본적으로 읽기(R), 쓰기(W)의 요소가 있습니다.
RAM(Random Access Memory) - 데이터를 읽고 변경이 가능하다 / 휘발성(프로그램이 종료되면 데이터가 삭제됨)
ROM(Read Only Memory) - 데이터를 읽을 수만 있다 / 비휘발성(프로그램이 종료되어도 데이터가 보존됨)
일반적으로 주기억장치라고 하면 RAM을 의미합니다.
보조기억장치 - 컴퓨터 시스템에서 데이터를 장기적으로 저장하는 장치이다.
주기억장치의 단점을 보조하는 역할을 합니다. (속도 ⬇️, 비휘발성, 저장용량 ⬆️)
대표적으로 하드디스크(Hard Disk Drive, HDD), SSD(Solid State Drive)이 있다.
크게 3가지만 보면 데이터, 주소, 제어가 있습니다.
데이터 버스 - 데이터를 전달하는 경로
각 구성요소(CPU, Memory, I/O Unit)는 양방향으로 데이터 전달이 가능한 버스를 사용함
주소 버스 - 메모리의 주소나 I/O Unit의 포트 번호 전달 (포드 번호 → 고유 식별 번호)
단반향 경로를 사용하기 때문에 CPU → Memory로 전달이 된다.
I/O Unit은 CPU와 Memory간 통신을 양방향 노선을 사용해 전달한다.
제어 버스 - 제어 신호 전달
Read 읽을 것인지 Write 변경할 것인지에 대한 신호를 전달한다.
각 구성요소와는 양방향으로 통신이 이루어진다.