본문 바로가기

CS(ComputerScience)

CPU

728x90

CPU

중앙 처리 장치, Central Processing Unit

CPU, 사진 출처 :https://youtu.be/Fg00LN30Ezg

연산을 위해 만들어진 수많은 트랜지스터의 집합체로, 컴퓨터에서 뇌의 역할을 합니다.
N개의 register(State)로 이루어진 코어,
그 코어가 N개 있는 상태(듀얼 코어, 쿼드 코어)

연상과 제어를 관장하기에 CPU성능 = PC 속도와 성능
왜냐하면, 메모리 & 디스크와 같은 저장매체에도 영향을 미치기 때문!

CPU는 RAM과 소통하며 데이터를 저장하고 받아옴.


왜 싱글 코어에서 멀티 코어로 변경하였는가?

싱글 코어의 성능을 계속 올리는데 한계가 있어요.

고도화될 만큼 고도화된 CPU 자체가 소비하는 전력 소모와 그로 인한 발열 문제가 있기 때문!

또한, 클럭 수 증가 대비 싱글 코어 처리 작업량이 크지 않음.

이러한 한계로 인해 멀티코어 개념이 생김.

 

코어(Core)가 많을수록 CPU는 일반적으로 좋다고 할 수 있겠죠?
마트에서 계산 잘하는 종업원을 여러명 고용하는 것이 효율이 더 좋으니깐요!

📝 무어의 법칙(Moore's Law)

1965년, 인텔 창업자 고든 무어가 이야기한 법칙으로
반도체에 집적되는 트랜지스터 수가 약 2년마다 2배씩 증가한다는 경험칙

하지만, 코어 수 증가로 인한 코어 성능 향상엔 본질적인 한계가 있습니다.
트랜지스터 수가 늘어날 수록 발열 또한 심해지기 때문.

칩을 설계하는 기업인 NVIDIA는 미래의 칩의 가능성은 설계에서 나온다고 했습니다.
가속 컴퓨팅(Accelerated Computing)


CPU생김새

📝 CU

명령 제어 장치, Control Unit
입력된 명령어를 해독(decoding)해 cpu 내부 움직임을 총괄하고 각 과정을 통제합니다.
주로 데이터를 메모리로부터 ALU로 옮기라는 명령과 그 후 다시 메모리로 옮기라는 명령을 내립니다.

📝 ALU

산술 연산 장치, Arithmetic Logic Unit
CU로 부터 명령을 받아 CPU로 들어오는 모든 데이터들을 산술 연산(덧셈, 뺄셈), 논리연산(대수비교, 저장)을 합니다.
계산기라고 생각하시면 이해하기 쉽습니다.

📝 Register

CPU내부에 있는 저장장치로, CPU가 명령어를 처리하기 위해 필요한 여러 데이터를 용도에 맞게 저장함.
RAM보다 빠른 속도로 CPU에 정보를 제공합니다.

레지스터는 용도에 따라 종류가 나뉩니다.

📝 General Purpose(범용적)

ESP : 메모리 스택의 끝 지점 주소 포인터
EBP : 메모리 스택읠 첫 시작 주소 포인터

 

📝 Special Purpose(특수용)

PC(Program Counter) : 메모리에서 인출될 명령어 주소를 가지고 있는 레지스터
AC(Accumulator) : 누산기, ALU에서 연산된 결과를 임시적으로 저장
IR(Instruction Resister) : 명령어 레지스터, 현재 실행되고 있는 명령어를 기억합니다.


 

명령어 수행 방법

 

① fetch

명령어 인출.
프로그램A가 cpu에게 클릭 시 □연산을 해달라고 요청하면 원격 저장소에서 데이터를 로컬로 가져옵니다.

CU가 이번에 수행할 명령어 정보를 가지고 옵니다.

② decoding

명령어 해석(해독)
프로그램에서 입력된 명령어(command)를 해석하고 특정 register에 저장합니다.

③ 일처리

실행(Execute)
ALU에서 □연산을 합니다. 해독된 명령어들을 수행.

④ 프로그램A의 메모리 상태가 바뀜

쓰기(Write)
연산이 완료된 후, 바뀐 데이터가 메모리에 저장됩니다. 명렬어 수행결과를 반영하는 거죠!

프로그램 명령어를 순차적으로 처리합니다.
명령어1, 명령어2, .... 한 Line씩 처리.

📝 캐시

RAM도 CPU에 비하면 많이 느리고 거리가 멀기 때문에 CPU 내부나 근처에 캐시 메모리를 만들어 그곳에 데이터를 저장합니다. 하지만 RAM에 비해 용량이 작아 중요하다고 판단되는 데이터만 저장해서 사용합니다.

  • 빈번하게 사용하는 데이터
  • 가장 최근 사용한 데이터


음료수를 사러 10km 떨어진 마트까지 가기 귀찮으니, 집 근처 자판기를 이용하는 느낌입니다. 이 자판기에 원하는 음료수가 있으면(Cache hit) 없으면(Cache miss).

 

일종의 지름길. 메모리에 물어보기 전 캐시가 갖고 있으면 즉시, 캐시로부터 데이터를 가져와요.

📝 캐시 일관성

Cashe Coherence 즉, 데이터 불일치 현상을 없애는 것을 의미합니다.
공유 메모리 시스템에서 각 클라이언트(혹은 프로세서)가 가진 로컬 캐시 간의 일관성을 의미합니다.
캐시 갱신으로 인한 데이터 불일치 문제를 해결하기 위해 전용 캐시를 있게 해 하드웨어 차원에서 항상 최신내용을 읽을 수 있도록 캐시 일관성을 지원합니다.

 


CPU와 프로그래머 통신방법

 

📝 Assembly

CPU에서는 해당 프로세서에 명령을 내리기 위해 고유의 명령어가 있습니다.
이 명령어들을 기계어(binary 0과 1)이라고 합니다. 이러한 기계어는 프로그램을 하기에는 너무 난해하고 가독성이 떨어집니다. 그래서 기계어와 일대일 대응관계를 형성한 어셈블리어가 생겨났습니다.

📝 Assembly Language

사람이 기계어를 쓰진 못해도 유사 기계어는 쓸 수 있게 지원.

어셈블리어는 CPU 아키텍처에 따라 문법이 조금씩 다름

보통 연산자는 LOAD, STORE, JMP와 같은 원초적인 명령어들로 이루어져 있습니다.

피연사자는 메모리 주소, 레지스터, 즉시 값 중 하나만 사용 가능.

  • MASM - Windows
  • GAS - Linux/Unix
  • NASM - Windows, Linux, MAC
  • SASM - Windows, Linux

 

📝 Compiler

좀 더 자세히 이야기 하자면, 프로그래밍 언어에 작성된 코드는 라인마다 기계어 연산으로 치환됩니다.

컴파일 돌리면 어셈블리어로 해석해 실행이 되는지 확인해줍니다. 그래서 예외(런타임오류), 구문적 오류 등이 발생할 수 있습니다.

  • C
  • c++
  • Java

 

Compiler Assembler
- 고급 언어 프로그램을 입력
- 구문 오류 검사
- 목적코드(Object Code) 생성
- 고급언어의 한 문장은 여러 개의 기계 코드 명령어로 변경
- 어셈블리어를 기계어의 오브젝트 코드로 해석해주는 컴퓨터 언어 번역 프로그램
- 하나의 어셈블리어 명령어는 하나의 기계 코드에 대응함.

ISA

명령어 집합 구조, Instruction Set Architecture
최하우 레벨의 프로그래밍 인터페이스로, 프로세서가 실행할 수 있는 모든 명령어들을 포함합니다.
Software와 Hardware의 중재 역할을 합니다.
어셈블러(high-level language → assembly language)와 컴파일러(assembly languabe → machine language)를 거쳐 low-level lanaguage로 명령을 내려줘야 합니다. 이때 SW와 HW사이를 연결해주는 것이 ISA이다.

📝 CISC

Complex Instruction Set Computer
과거에는 컴퓨터 용량이 크지 않아서 SW 프로그램의 용량을 줄이기 위해 하나의 명령어로 여러 작업을 수행하도록 했습니다. 다양한 명령어들을 포함하고 있어 일반적으로 우리가 사용하는 범용 컴퓨터의 CPU로 사용됩니다.

📝 RISC

Reduced Instruction Set Computer
CISC 내부에 갖추어진 모든 명령어들 중 불과 20%에 해당하는 명령어들만 전체 80%이상의 일을 처리합니다. 이러한 비효율을 극복하기 위해 등장했습니다.
파이프라인 중첩이 가능해 같은 수의 명령어를 적은 clock으로 처리 가능합니다. 또한 발열, 전력 소모를 줄일 수 있습니다.
그래서 임베디드 프로세서에서 많이 사용합니다.




컴퓨터구조, OS, DB, 네트워크 + 컴파일러, 프로그래밍언어