Super Kawaii Cute Cat Kaoani topic0-4 Machines called computers

수업정리/컴퓨터 구조론

topic0-4 Machines called computers

치킨고양이짱아 2023. 2. 1. 17:37
728x90
728x90

세상에는 많은 수의 컴퓨터가 존재하지만 그들의 동작원리(컴퓨터가 프로그램을 실행시키는 원리)는 같음

→ Fetch-Decode-Execute를 반복하면서 프로그램을 실행한다.

프로세서에는 ALU가 들어가있고 R_0부터 R_31 까지 범용 레지스터가 32개 들어가있다.

범용 레지스터란? 프로그램이 실행되는 과정에서 생기는 데이터를 임시로 저장하는 장소

PC는 다음에 실행할 Instruction의 주소 저장

😀 모든 프로세서는 전원 들어오고 나면 PC가 정해진 값으로 초기화 된다.

(여기서는 0번지로 초기화 된다고 가정하자. → 우리가 실행하고 싶은 프로그램을 0번지에 넣으면 된다는 의미)

😀 R_31에는 data area의 시작 주소가 들어있다고 가정해보자. (편의를 위한 가정)

프로그램 area에 4개의 머신 instruction을 넣어놓고 실행

(data area에 있는 2개의 숫자를 더하는 프로그램이다.)

instruction 하나의 길이가 모두 32비트이기 때문에(RISC 스타일)

(엥 CISC는 instruction 하나 32비트 아님? ㅇㅇ)

한 줄 넘어갈 때 주소가 4씩 증가한다.

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

  • LD, R0, R31(0) → 왜 이렇게 쓰는걸까?

    LD, R0, 10000000 → 왜 이렇게 안쓰고? 더 직관적인데?

    (operation 길이 6비트 고정은 아님. 가정임)

  • 직관적으로 쓸 경우 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을 제공하는가?

  1. Data transfer instruction

    load, store 두 종류가 있다.

    메모리에 access 하는 instruction 으로 가장 기본적인 instruction이다.

    프로세서와 메모리가 떨어져있기 때문에 꼭 필요한 instruction

    😀 메모리 뿐만 아니라 I/O devices도 Load, store의 대상이다.

    즉, Load, store 이 두 instruction만 있으면 메모리랑 I/O에 모두 access 가능

  1. ALU instruction

    add, sub, multiplication, div and, or, not (arithmetic 연산 + logic 연산)

  1. 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

728x90
728x90