포시코딩

CPU 본문

CS (Computer Science)

CPU

포시 2023. 1. 7. 20:14
728x90

CPU

  • 컴퓨터에서 뇌의 역할을 한다.
  • CPU는 CU, ALU, 여러 레지스터, 캐시로 구성되어 있다.
  • CPU는 n개의 코어로 구성되어 있고(코어를 하나의 state(상태)라고도 하는듯)
    코어는 m개의 register로 구성되어 있다.

 

싱글 코어 -> 멀티 코어로 진화 이유

무어의 법칙이 말해주듯 싱글코어의 성능(클럭 수)는 계속 고도화되고 있다.

하지만 마냥 싱글코어의 성능을 올릴 수가 없었는데

고도화 된 CPU의 전력 소모에 따른 파워 서플라이의 한계와 발열 문제로 인한 쿨러의 한계가 있었기 때문이다.

게다가 클럭 수가 올라가도 싱글 코어가 처리할 수 있는 작업의 양은 그다지 차이가 나지 않았다.

이러한 싱글 코어의 성능 향상엔 본질적인 한계가 있기 때문에

싱글 코어의 성능을 프리징하고 차라리 코어의 수를 늘리자는 '멀티 코어'가 나오게 되었다.

* 멀티 코어 -> 멀티하게 state를 가짐 -> state: register들

 

CPU 생김새 

  • CU(Control Unit 제어 유닛): 다른 유닛들에 명령을 내리는 역할
  • ALU(Arithmetic and Logical Unit 산술/논리 연산 장치)
  • Register(레지스터): CPU가 명령어를 처리하기 위해 필요한 여러 데이터를 용도에 맞게 저장하고 있는 도우미
    • 범용 레지스터(General-purpose): EAX, ECX, EDX, ...
    • 전용 레지스터(Special-purpose): PC(Program Counter), ...
  • Cache(캐시): CPU의 성능 향상을 위해 고안된 장치. 
    어떤 데이터를 갖고 오기 위해서 메모리에 물어보기 전에 캐시가 갖고 있으면 캐시로부터 데이터를 가져온다.

 

CPU <-> 프로그래머 통신 방법

CPU는 기계어로만 다룰 수 있음. ex) binary

사람이 기계어를 쓴다는건 사실상 불가능하기에 나온 것이 어셈블리어이다.

  • 어셈블리어는 CPU 아키텍처에 따라 문법이 조금씩 다르다.
  • 보통 연산자는 LOAD, STORE, JMP와 같은 원초적인 명령어들로 이루어져 있다.
  • 피연산자는 메모리 주소, 레지스터, 즉시 값 중 하나만 사용할 수 있다.

근데 어셈블리어도 어려워서 프로그래밍 언어가 나옴. ex) C, C++, Java, ...

프로그래밍 언어에 있는 컴파일러를 통해 기계어를 사용할 수 있게 되었다.

 

명령어 수행 방법

위에서 CPU와 프로그래머는 프로그래밍 언어를 통해 얘기한다는걸 알았다.

프로그래밍 언어에 작성된 코드는 라인마다 기계어 연산으로 치환된다.

 

이렇게 치환된 기계어는 다음 과정을 거쳐 수행된다.

  • 명령어 인출
    • CU가 이번에 수행할 명령어 정보를 가져온다.
  • 명령어 해독 
    • 명령어 정보를 성공적으로 인출했으면 명령어를 해독한다.
    • 보통 opcode 명령어 코드를 인출하고 opcode의 성격에 맞게 레지스터들을 준비시킨다.
  • 실행
    • 해독된 명령어를 수행한다.
      ex) 산술/논리 관련 연산이라면 ALU가 주체가 되어 실행
  • 반영
    • 이 명령어의 수행 결과를 반영함으로서 명령어 수행의 한 사이클이 끝이 난다.

 

기타 키워드

opcode, operand

어셈블리어를 보면 다음과 같이 숫자들이 적혀있는 것을 볼 수 있다.

이런 숫자들을 Operation Code(=opcode)라고 한다.

컴퓨터 명령어란 사람이 만든 프로그램(고수준 언어로 작성한 프로그램)을 번역해

컴퓨터가 알아들을 수 있는 명령어(기계 언어)로 바꿔 놓은 것이다.

컴퓨터가 명령을 처리하기 위해서는 이 opcode데이터를 찾는 주소(Operand)를 가지고 있어야 한다.

 

opcode와 operand를 합쳐 명령어(instruction)라고 부른다.

참고: https://watchout31337.tistory.com/373

 

Opcode에 대해

어셈블리어를 보면 다음과 같이 숫자들이 적혀있는 것을 볼 수 있다. 이런 숫자들을 Operation Code라고 한다. 컴퓨터 명령어란 사람이 만든 프로그램(고수준 언어로 작성한 프로그램)을 번역해 컴

watchout31337.tistory.com

 

명령어 집합 구조 Instruction set architecture, ISA 

마이크로프로세서가 인식해서 기능을 이해하고 실행할 수 있는 기계어 명령어를 말한다.

최하위 레벨의 프로그래밍 인터페이스로, 프로세서가 실행할 수 있는 모든 명령어들을 포함한다.

ISA는 특정한 CPU 디자인으로 추가된 순수 명령어인 opcode의 집합 규격(기계어)을 포함한다.

 

CISC도 있지만

RISC CPU는 명령어의 구조와 명령어의 숫자를 단순화 하여 빠른 실행이 가능하고 하드웨어를 줄일 수 있기 때문에 대세라고 한다.

출처: https://ko.wikipedia.org/wiki/%EB%AA%85%EB%A0%B9%EC%96%B4_%EC%A7%91%ED%95%A9

 

명령어 집합 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 명령어 집합(영어: instruction set) 또는 명령어 집합 구조(영어: Instruction set architecture, ISA)는 마이크로프로세서가 인식해서 기능을 이해하고 실행할 수 있는 기계

ko.wikipedia.org

728x90

'CS (Computer Science)' 카테고리의 다른 글

함수 호출 스택(call stack)  (0) 2023.04.08
캐시(Cache)  (1) 2023.01.07
Database, MongoDB  (0) 2022.12.13
API, RESTful API  (0) 2022.12.01
랜덤이 정말 랜덤일까? - Web Crypto API  (0) 2022.11.22