1. CPU란? CPU 구조와 역할
CPU란 Central Processing Unit의 약자로 중앙 처리 장치를 의미한다. 프로그램의 명령어를 해석하고 실행하는 역할을 하는 컴퓨터 시스템의 중심이 되는 핵심 요소이다. CPU는 어떻게 생겼을까? 컴퓨터 본체를 분리시켜보면, 메인보드라는 흔한 초록색 기판(색깔은 종류에 따라 다름)이 나온다. 그 기판에 네모난 모양의 부품이 CPU다. 컴퓨터 부품은 보통 크게 5가지로 나뉜다. CPU, 주기억장치(RAM), 보조기억장치(HDD/SSD), I/O디바이스(모니터, 마우스 등), 메인보드 이렇게 5가지이다.
HDD/SSD에는 우리가 흔히사용하는 엑셀, 포토샵 등의 프로그램들이 저장되어있다. 비휘발성이고, 용량이 크다.(256GB 등) 프로그램을 실행시키면, 로딩이 되면서 RAM에 프로그램이 올라온다. RAM은 휘발성 메모리이고, 용량이 상대적으로 작다.(8GB 등) RAM에 프로그램이 올라와 있는 상태는 도서관에서 책을 빌려와서 책장에 꽂아놓은 상태와 비슷하다. 책상에 책을 올려놓으면, 바로 책을 읽을 수 있는 준비가 되어있는 상태가 되는 것처럼, RAM에 프로그램을 올려놓으면, 언제든 프로그램을 빠르게 실행할 수 있는 준비가 되어있는 상태로 만들 수 있다. 이렇게 여러가지 프로그램들을 동시에 올려놓을 수 있으나, RAM의 크기가 한정되어있기 때문에 여러가지 프로그램을 동시에 실행하면, 컴퓨터가 굉장히 느려질 수 있다.
RAM은 CPU와 연결되어 서로 통신하면서 프로그램을 실행한다.(이 단계의 중간 역할은 운영체제가 담당한다.) CPU에는 RAM보다 용량이 작은 캐시메모리와 레지스터가 있다. 캐시메모리는 L3, L2, L1으로 나뉘며, 숫자가 작을 수록 용량이 작고, 빠르다. 레지스터는 캐시메모리보다 용량이 더 작으며, 속도가 가장빠르다. RAM이 책장에 책을 꽂아 놓은 것에 비유된다면, 캐시는 읽을 책 몇권을 책상에 올려놓고 쌓아둔 것이고, 레지스터는 그 중에 지금 당장 읽을 책 한권을 펼쳐놓은 것과 같다. CPU는 크게 4가지로 나뉘어져있다. 제어장치, 누산기, ALU, 레지스터 이렇게 4가지이다.
ALU은 연산을 해주는 장치, 제어장치는 명령을 해석해주는 장치, 레지스터는 데이터를 저장하는 장치, 누산기는 중간에서 데이터를 전달해주는 장치라고 생각하면 쉽다. 레지스터는 RAM으로 부터 인출이 된 명령어 데이터를 받아와 잠깐 저장을 해둔다. 레지스터 종류에는 프로그램 카운터, 메모리 주소 레지스터, 메모리 버퍼 레지스터, 명령어 레지스터가 있으며, 각각의 레지스터는 데이터 값과 메모리의 주소값, 그리고 명령어를 누산기 및 ALU와 주고받을 수 있다.
이 때, 데이터들은 메인보드 기판에 선처럼 그려져있는 시스템 버스를 통해 움직인다. CPU에서 명령어가 실행되는 프로세스는 인출, 해석, 실행, 저장 순인데, 이는 쓰레드 단위로 쪼개서 처리한다. 이렇게 쓰레드 단위로 쪼개어서 처리 하면 훨씬 빠른 속도로 RAM에서 인출된 데이터를 CPU가 처리하게 만들 수 있기 때문이다. 인출단계는 RAM에서 명령어를 인출하여 버스를 통해 레지스터로 옮기는 단계이다. 해석단계는 레지스터가 데이터를 제어장치에 전달해주고, 명령어를 해석하는 단계이다. 실행 단계는 그렇게 해석된 명령어를 ALU에 전달해주고, 연산을 하는 단계이다. 그리고, 그 연산된 값을 다시 레지스터에 저장하는 단계가 저장단계이다.
오늘날 CPU는 계속 발전하면서, 멀티코어, 핵사코어 등의 스펙을 가진 CPU가 생겨났다. 여기에서 코어는 그냥 CPU라고 생각하면된다. 코어 하나에는 ALU, 제어장치, 누산기, 레지스터 4가지가 포함되어있다. 정확하게는 작은 계산 논리 회로의 집합으로 구성된다. 즉, 멀티코어는 CPU가 2개라는 뜻과 같다고 생각하면 된다. 각각의 코어는 원래 명령어를 병렬로 처리하지 못하고, 데이터를 쓰레드 단위로 나눠서 파이프라이닝이라는 기술을 통해 병렬처럼 보이게끔 처리한다. 하지만, 코어가 여러개면 명령어를 병렬로 처리할 수 있게 된다. 그래서 CPU성능이 좋으면, 속도가 빨라지는 것이다.
2. CPU 구성요소
위에서 CPU가 무엇인지 알아보았다. 그리고 CPU의 구성요소인 캐시 메모리, 레지스터, ALU, 누산기, 제어장치와 컴퓨터 구성요소인 CPU, 입출력장치, 주기억장치, 보조기억장치에 대한 이야기를 했는데, 이를 정리하면 아래 그림과 같다. 이는 폰노이만 구조로 컴퓨터의 가장 기본적인 아키텍처이다.
- Control Unit: 제어 장치는 CPU에서 프로그램의 명령어를 해석하고, 실행하는 부분이다. 제어 장치는 명령어 레지스터에서 현재 실행 중인 명령어를 가져와서, 해당 명령어를 해석하고, 이에 맞게 다른 구성 요소들을 제어한다.
- Arithmetic/Logic Unit(ALU): 산술 논리 장치는 CPU 내부에서 수치 연산과 논리 연산을 처리하는 부분이다. 산술 논리 장치는 두 개의 입력 신호를 받아서, 덧셈, 뺄셈, 곱셈, 나눗셈 등의 산술 연산을 처리하고, AND, OR, NOT 등의 논리 연산을 처리한다.
- Register: 레지스터는 CPU 내부에 저장되어 있는 소규모 메모리로, 데이터를 저장하거나 처리하는 데 사용된다. 레지스터는 CPU에서 가장 빠른 속도로 데이터를 처리할 수 있으므로, CPU의 속도와 성능에 큰 영향을 미친다.
- Cache Memory:
- 속도 : Register > Cache > RAM
- 저장용량 : RAM > Cache > Register
- 캐시는 CPU 내부에 존재하는 빠른 메모리로, CPU가 자주 사용하는 데이터나 명령어를 저장해 두는 역할을 한다. 캐시는 주 메모리보다 빠르지만, 저장 용량이 작으므로, 자주 사용되는 데이터나 명령어만 저장된다.
- Bus: 버스는 CPU와 다른 시스템 구성 요소들(메모리, 입출력 장치 등) 간에 데이터나 명령어를 전송하는 경로이다. CPU와 다른 구성 요소들 간에 데이터 전송을 원활하게 하기 위해 여러 종류의 버스가 사용된다.
3. CPU 성능 향상을 위한 작업 방법
위에서 CPU에서 명령어가 실행되는 프로세스는 인출, 해석, 실행, 저장 순인데, CPU의 속도를 올리기 위해서 쓰레드 단위로 쪼개서 처리한다고 했다. 이는 CPU 성능 향상을 위한 작업방법이며, 상세한 원리는 아래와 같다.
3-1. 파이프라이닝(Pipelining)
첫번 째 방법은 파이프라이닝(Pipelining)이다. 파이프라이닝은 한 가지 작업을 수행하는 데에 여러 단계의 작업이 필요한 경우, 이 단계들을 연속적으로 실행하여 단축시키는 기술이다. 인출, 해석, 실행, 저장 등의 단계를 한 번에 하나씩 처리하는 것이 아니라, 아래와 같이 한 번에 여러 단계를 처리하여 실행시간을 단축시킨다. 특징은 한개의 코어에서 작업하는 방법이기 때문에 시간에 동기화(Sync) 되어있다는 점이다.
3-2. 독립적인 병렬처리(Parallellism)
Parallellism은 한 번에 여러 작업을 수행하는 것을 말한다. 여러 개의 CPU 코어를 사용하여 병렬적으로 작업을 처리하는 것이 그 예이다. 이러한 기술은 동시에 여러 작업을 수행하므로, 실행 시간을 단축시키는 것이 가능하다. 병려로 작업을 처리하기 때문에 시간에 동기화가 되어있지 않아도 된다(Async)
두 기술의 차이점은 실행 방식이다.
- Pipelining은 하나의 작업을 여러 단계로 분할하여 각 단계를 병렬적으로 처리하여 실행 시간을 단축시키는 것
- Parallellism은 여러 작업을 동시에 처리하여 실행 시간을 단축시키는 것이다.
두 기술은 함께 사용될 수도 있다. 예를 들어, CPU에서는 파이프라인 기술을 사용하여 명령어를 처리하면서, 동시에 여러 개의 코어를 사용하여 병렬적으로 다른 작업을 수행할 수 있다.
TMI) CPU의 구조를 간단하게 해서 수천개를 집어넣은 것이 GPU이다. 단순한 명령어를 처리하기 때문에 이렇게 수천개를 집어넣을 수 있다. 단순 연산작업들은 동시에 몇천개를 수행하기 때문에 그래픽 작업이나, 딥러닝 분야에서는 CPU보다 훨씬 뛰어난 성능을 보인다. 쉽게 말하면, CPU는 박사급 1명, GPU는 고등학생 수천명. 단순계산만 하면 되기 때문에 CPU보다 실수 계산 속도가 말도 안되게 빨라진다.
'Computer Science > 컴퓨터공학(김용담 강사님)' 카테고리의 다른 글
운영체제: 유저모드, 커널모드, 시스템콜 (0) | 2023.04.22 |
---|---|
운영체제(OS)란? 개념과 구조(커널, 시스템콜 등) (0) | 2023.04.18 |
정수(signed, unsigned)와 부동 소수점 표현 in 컴퓨터 (0) | 2023.04.12 |
컴퓨터 아키텍처란: 폰노이만 구조, 명령주기 (0) | 2023.04.09 |
그래프 자료구조& 알고리즘(BFS, DFS) (0) | 2023.04.08 |
댓글