세상에는 많은 수의 컴퓨터가 존재하지만 그들의 동작원리(컴퓨터가 프로그램을 실행시키는 원리)는 같음
→ Fetch-Decode-Execute를 반복하면서 프로그램을 실행한다.
Fetch-Decode-Execute
PC에 0번지가 들어있으므로 0번지에 있는 instrcution을 실행해야하는데
Step1: Instruction Fetch(IF)
- 지금 실행할 instruction 주소를 메모리에 넘겨주고 읽어달라고 요청한다. 그럼 memory가 그에 대한
instruction을 답으로 넘겨준다. 그럼 이걸 임시로 IR(instruction register)에 저장한다.
- PC는 다음에 실행할 instruction 주소로 바뀐다. (jump 없으면 RISC 스타일에서는 기본적으로 +4)
(Fetch 단계에서 PC값이 바로 바뀐다!!)


Step2: Instruction Decode(ID)
- 지금 실행할 instruction이 무슨 의미인지 해독하는 과정이다.
- IR에 저장된 내용을 보고 분석한다.
LD, R0, R31(0) ← 이 load instruction을 보고 R0 ← M[ R31 + 0 ]라고 알아듣고 최종적으로 R0 ←M[1000 0000]이라고 해석하는 과정
Step3: Instruction Execute(EX)
- ID(Instruction Decode) 과정에서 해독한걸 직접 실행.
- R31에 저장되어 있는 주소에 0을 더해서 메모리에 넘겨주고 메모리는 그에 해당하는
값을 넘겨준다. 이 값을 받은 프로세서는 그걸 R0에 저장한다.

→ 한 instruction의 실행 끝난 상태에서 PC는 다음에 실행시킬 Instruction을 가리키고 있으므로 다시 Fetch-Decode-Execution 하면 된다.
Program Execution
- 프로그램 실행은 머신 instruction 하나하나를 fetch-decode-execute 이 3단계를 거쳐서 실행.
- 프로세서(CPU)처럼 복잡한 칩은 여러가지로 복잡한 회로로 구성되어 있어서 clock에 의존해서 동기화한다.
clock이 올라가는 순간 → 연산이 시작
다음 clock이 올라가기 전까지 → 연산을 끝낸다.
다음 clock이 올라갈 때 → 연산 결과를 저장하면서 다음 연산을 시작
- instruction 실행하고 나면 머신 state가 바뀐다. 위에서 예시로 들었던 instruction을 실행한 경우
PC: 0000 0000 → 0000 0004
R0 ← 0000 0002
(IR에도 instruction이 담겨있긴한데, 여기엔 실행다한 instruction이 있는거라 크게 중요한 값 X)
More on Load Instruction
- 직관적으로 쓸 경우 32비트 주소를 instruction 안에 표현해야하므로 instruction length가 늘어나게 된다.
이렇게 되면 instruction을 읽어오기 위해 fetch를 2번해야한다.
메모리는 CPU에 비해 엄청 느리기 때문에 이건 성능에 어마어마한 영향을 미친다.
Fetch-Decode-Execute Machines
이제 전공자로서 컴퓨터가 뭐냐? 물어본다면 → Fetch-Decode-Execute 머신이라고 대답하면 된다.
Time Behavior
오늘날 우리가 사용하고 있는 프로세서는 얼마나 빠른가?
- I GHz processor는 1GHz clock을 사용한다.
- 1GHz clock이라는건 1초당 clock 한 주기가 10의 9승 개가 있는거. 즉 clock 한 주기 길이는 10^-9 (1 나노 세컨드)
즉, 1 나노 세컨드에 instruction 하나를 실행하는거
(1 나노 세컨드 동안 빛은 진공상태에서 약 30cm 진행한다.)
(우리가 사용하는 컴퓨터는 빛이 30cm 진행하는 동안 instruction 하나 실행할 정도로 빠른거)
ISA(Instruction Set Architecture)
→ 머신이 제공하는 수백개의 instruction set을 ISA라고 한다는걸 앞에서 배웠었다. 컴퓨터를 구매하는 이유는 ISA를 쓰기 위함이며
instruction set이 머신이 제공하는 가장 중요한 인터페이스라는 의미에서 Instruction set architecture라고 한다는걸 배웠음.
→ 우리가 원하는 계산을 모두 수행하기 위해 컴퓨터는 우리에게 어떤 종류의 instruction을 제공하는가?
- Data transfer instruction
load, store 두 종류가 있다.
메모리에 access 하는 instruction 으로 가장 기본적인 instruction이다.
프로세서와 메모리가 떨어져있기 때문에 꼭 필요한 instruction
😀 메모리 뿐만 아니라 I/O devices도 Load, store의 대상이다.
즉, Load, store 이 두 instruction만 있으면 메모리랑 I/O에 모두 access 가능
- ALU instruction
add, sub, multiplication, div and, or, not (arithmetic 연산 + logic 연산)
- JUMP instruction
위에 두 종류의 instruction만으로 우리가 원하는걸 전부 표현할 수 없음
IF 개념을 나타낼 수 없기 때문에! IF는 problem solving, programming을 위해 필수적이다.
(=, ≠, >, <, ≤, ≥ ) 6가지 종류의 jump instruction 이 있다.
→ 우리 이 3종류의 instruction으로 지난 70년간 컴퓨팅을 해왔다!
→ BOOLE의 AND, OR, NOT, IF의 power를 확인할 수 있음! (IF 앞에서 빼먹었다가 여기서 다시 집어넣음)
Machine Called Computers
컴퓨터의 무서운 점
→ 프로그래밍을 통해 문제를 해결하는 패러다임을 제공함. 만약 특정 문제를 해결하는 소프트웨어가 만들어지면 그 문제는 영원히 빠르게 해결할 수 있다.
컴퓨터는 고장도 날 안나고, 굉장히 빠른 속도로 문제를 풀어준다.
컴퓨터의 한계
인공지능엔 두 종류가 있음. 1) Strong AI와 2) Weak AI
인공지능이 처음에 만들어질때의 생각 → 우리가 굉장히 스마트한 소프트웨어를 만들어서 컴퓨터에 넣어주면 인간과 같이 똑똑해지지 않을까?
→ 즉, Strong AI의 방향으로 인공지능 연구가 시작되었음. 하지만 아직 만들어지지 않았고 미지의 영역이다.
미디어에서 나오는 인공지능은 weak AI다. 공학으로서의 의미
- Strong AI: 인간과 같이 생각하는 기계 (intelligence)
아직 (공상)과학의 영역. CS의 드림 프로젝트임
- Weak AI: 이전보다 훨씬 스마트한 소프트웨어(공학)
알파고도 weak AI임. 딥러닝을 이용한 음성인식, 자율주행 모두 weak AI
컴퓨터: 언어를 이해하는 기계
- 오븐, 자동차 등... → 얘네가 제공하는 인터페이스는 너무 쉽기 때문에 언어라고 부르지 않음
- 컴퓨터
→ 하지만 컴퓨터라는 기계의 사용법은 언어라고 부른다. 굉장히 관대한 표현인거임.
→ 인간이 쓰는 자연어랑은 굉장히 다르다. 컴퓨터가 제공하는 언어는 기계적으로 처리 가능한 언어를 의미하는거
Programs in Binary
우리가 본 LD R0, R31(+0) → 이런건 어셈블리 표현이다. 모든 프로그램 binary로 구성된다면서?? 이건 binary가 아닌데?
Assembly vs Binary Languages
- instruction은 opcode와 operands로 구성된다.
opcode → operation을 나타내는 곳
operands → operation에 사용되는 데이터를 나타내는 부분
- 어셈블리와 binary languages 는 동일하다. (1:1 매칭)
즉, 어셈블리와 binary는 추상화 레벨이 같다.
그럼에도 어셈블리를 쓰는 이유는 인간이 인지적으로 보기에 좀 편하기 때문(mnemonic)
- 이때까지 본 것과 같이 32비트로 instruction 길이가 고정되어 있는데 이런걸 RISC style이라 함
Stored Program Concept
사실 Fetch-decode-execute 랑 같은 의미를 가지고 있음
Modern Digital Computers
애니악이 modern computer의 시조라고 사람들이 이야기하지만, 사실 애니악과 우리가 사용하는 컴퓨터엔 중요한 차이점이 있었음.
→ 애니악에는 프로그램이 메모리에 들어가있지 않았음.
→ 애니악에는 프로그램을 컴퓨터 외부의 판넬에 만들었다.
이런 경우, 새로운 프로그램을 돌릴 때 프로그램 다 떼어내고 새로운 판넬에 새로운 프로그램 짜서 넣어야한다.
→ 폰 노이만은 애니악을 보고 무언가 이상하다고 생각함.
프로그램이 외부에 나와있어서는 컴퓨터가 널리 효율적으로 사용되기 어렵다고 생각해서 프로그램을 컴퓨터 메모리 안에 넣는다는 아이디어를 냄
"Stored Program Concept"
→ 프로그램이 메모리 안에 들어감에 따라 컴퓨터의 동작원리는 자연스럽게 fetch-decode-execute 가 되었음.
그래서 Stored Program Concept == fetch-decode-execute (거의 같은 말)
→ 프로그램이 메모리에 위치해있기 때문에 오늘날처럼 high level 프로그래밍을 한 다음 컴파일을 해서 메모리에 넣는 것도 가능해진거임
→ Stored Program Concept 이 개념은 사실 19세기 초에 C.Babage 가 냈던 아이디어임. 하지만 시대를 너무 앞서갔음.
이 사람이 살던 시기에 있는 기계 장치만을 가지고서는 컴퓨터를 만들 수 없었음
→ '폰 노이만 bottleneck'이라는 용어도 자주 쓰인다.
프로세서는 동작하기 위해 메모리에 굉장히 많이 의존하는데 메모리는 너무 느림. 그래서 나온 용어
→ 최초의 컴퓨터인 애니악이 1950년대에 나오게 된 이후, 70년 동안 부단한 성능이 있었다.
오늘날의 컴퓨터는 애니악보다 100억배 빠르다.
→ 근데 우리 한 종류의 컴퓨터만 사용하고 있다고 했음(fetch-decode-execute)
이거 말고 다른 형태의 컴퓨터는 없나? ) 아직 실용적으로 성공한 아키텍쳐는 없다. 오늘날엔 fetch-decode-execute 머신만을 사용하고 있음.
Uploaded by N2T