컴퓨터는 사용자, 응용 프로그램, 운영체제, 펌웨어, 하드웨어로 구성된다. 하드웨어는 다시 입력·기억·연산·제어·출력 다섯 가지로 나뉜다. 여기서 연산과 제어를 담당하는 부분은 한 칩에 들어가는데, 우리는 이 칩을 CPU라고 부른다.
컴퓨터의 정의
하드웨어는 수백만 개가 넘는 전자부품을 모아 만든 것이고, 그 위에서 프로그램이 돈다.
컴퓨터는 작성된 프로그램에 따라 입력장치로부터 자료를 받아 편집·가공·처리하고, 저장한 뒤 결과를 내보내는 전자자료처리 장치다.
입력장치로 들어온 원시자료는 처리를 거쳐 정보가 되어 나온다.
원시자료(raw data)는 이미 일어난 일을 그대로 적어둔 값이라 그 상태로는 의사결정에 쓰기 어렵다. 편집·가공을 거친 결과가 정보(information)이고, 의사결정에 쓰는 것은 정보다.
컴퓨터 시스템
컴퓨터 시스템은 사용자, 응용 프로그램, 운영체제, 펌웨어, 하드웨어 다섯 층으로 나뉜다. 이 가운데 응용 프로그램과 운영체제를 합쳐 소프트웨어라 부른다.
| 구성요소 | 설명 |
|---|---|
| 사용자 | 시스템을 쓰는 사람(End-User) |
| 응용 프로그램 | 사용자가 직접 쓰는 소프트웨어와 그것을 만드는 도구 |
| 운영체제 | 하드웨어와 시스템 동작을 직접 제어하고 관리한다 |
| 펌웨어 | 하드웨어를 제어하는 소프트웨어. 전원을 켜면 운영체제를 메모리에 올린다 |
| 하드웨어 | 정보 처리를 위한 물리적인 요소의 집합 |
응용 프로그램과 운영체제
응용 프로그램은 다시 네 부분으로 나뉜다.
| 구분 | 예 |
|---|---|
| 시스템 S/W | Windows, iOS, Unix, Linux |
| 응용 S/W | Excel, MS-Office, 한글, 미디어 플레이어 |
| 개발환경 | SDK, Eclipse, Visual Studio |
| 언어 | Java, Python, R, C++, C#, XML |
UI/UX와 API, 프로세스와 스레드도 이 층에 속한다.
운영체제가 하는 일은 크게 넷이다.
| 구분 | 하는 일 |
|---|---|
| 자원 관리 | 자원 할당, 파일과 네트워크 관리 |
| 직접 제어 | 입출력 제어, 메모리 제어, 프로세스와 스레드 처리 |
| 성능 | 처리 능력과 신뢰도를 올리고 응답 시간을 줄인다 |
| 동시 실행 | 멀티프로그래밍, 멀티스레딩, 멀티프로세싱 |
동시 실행은 가용성을 높이려는 수단이다. 프로그램 하나가 입출력을 기다리는 동안 다른 프로그램이 CPU를 쓰게 하는 것이 멀티프로그래밍이고, 그렇게 노는 시간을 줄여 처리량을 올린다.
펌웨어가 따로 있는 이유
펌웨어는 소프트웨어인데 하드웨어에 담겨 나온다. 메인보드의 BIOS와 UEFI, 저장장치와 네트워크 카드의 컨트롤러 코드가 다 여기 들어간다. 운영체제가 뜨기 전에 이미 돌고 있어야 하고, 실제로 운영체제를 메모리에 올리는 것이 펌웨어다. 그래서 H/W와 S/W 사이에 F/W를 따로 둔다.
하드웨어의 구성요소
하드웨어는 맨 아래 층이고, 구성요소는 다섯 가지다. 자료를 받는 것을 입력, 저장하는 것을 기억이라고 부른다. 편집·가공·처리는 연산이 맡고, 작성된 프로그램에 따른다는 조건이 제어이고, 결과를 내보내는 것은 출력이다.
자료는 입력장치로 들어와 연산장치와 기억장치를 오가며 처리되고 출력장치로 나간다. 제어장치는 자료를 직접 처리하지 않고 나머지 네 장치에 신호만 보낸다.
| 장치 | 하는 일 | 기술요소 |
|---|---|---|
| ① 입력장치 | 프로그램과 자료를 컴퓨터 안으로 받아들인다 | 키보드, 마우스, 음성인식, 웨어러블 기기, NFC·Bluetooth·WLAN |
| ② 기억장치 | 프로그램과 실행에 필요한 자료, 연산 결과를 기억한다 | HBM, DDR SDRAM, SSD, HDD, VTL, 테이프 |
| ③ 산술논리연산장치 | 산술연산과 논리연산을 실행한다 | 보조 프로세서, GPU, GPGPU |
| ④ 제어장치 | 각 장치의 동작 순서와 자료의 흐름을 지시한다 | 다중 코어 CPU |
| ⑤ 출력장치 | 처리한 결과를 사람이 볼 수 있는 형태로 내보낸다 | 모니터, 프로젝터, 프린터, 홀로그램 |
CPU
산술논리연산장치와 제어장치는 한 칩 안에 들어 있고, 둘을 합쳐 부르는 이름이 CPU다. 그래서 같은 컴퓨터를 CPU·기억장치·입력장치·출력장치 넷으로 나누기도 하고, 입력과 출력을 입출력장치 하나로 묶기도 한다. 나누는 방식이 다를 뿐 구성은 그대로다.
CPU는 외부에서 정보를 입력받아 기억하고, 프로그램의 명령어를 해석해 연산하며, 시스템을 제어하고 결과를 외부로 내보낸다.
CPU의 동작
CPU가 하는 동작은 다섯 가지인데, 매번 다 일어나지는 않는다.
| 구분 | 세부 동작 | 하는 일 |
|---|---|---|
| 공통 동작 | 명령어 인출 | 기억장치에서 명령어를 읽어온다 |
| 공통 동작 | 명령어 해독 | 어떤 동작을 할지 정하려고 명령어를 해독한다 |
| 명령어에 따라 | 데이터 인출 | 기억장치나 I/O 장치에서 데이터를 가져온다 |
| 명령어에 따라 | 데이터 처리 | 데이터를 산술 연산하거나 논리 연산한다 |
| 명령어에 따라 | 데이터 쓰기 | 결과를 주기억장치나 보조기억장치에 저장한다 |
명령어 인출과 해독은 어느 명령에서나 일어난다. CPU는 다음에 실행할 명령어를 기억장치에서 가져와야 하고, 가져온 뒤에는 그것이 무슨 명령인지 알아내야 한다. 데이터 인출과 처리, 쓰기는 명령어가 시킬 때만 일어난다. 메모리에 있는 값을 더하는 명령이면 셋이 다 일어나지만, 다음에 실행할 위치만 바꾸는 분기 명령이면 데이터를 건드리지 않는다.
CPU의 구성요소
앞에서는 CPU를 연산장치와 제어장치 둘로 봤는데, 안을 들여다보면 레지스터가 하나 더 있다. 장치 다섯 가지로 나눌 때는 레지스터가 기억장치에 속해 있었다.
| 구성요소 | 설명 |
|---|---|
| ALU | 산술과 논리 연산을 실행하는 회로. 산술은 +, −, ×, ÷이고 논리는 AND, OR, XOR, NOT이다 |
| 레지스터(Register) | 접근 속도가 가장 빠른 기억장치. CPU 안에 넣을 수 있는 개수는 제한된다 |
| 제어 유닛 | 명령어를 해독하고, 그것을 실행하는 데 필요한 제어 신호를 순서대로 만들어내는 하드웨어 모듈 |
레지스터가 CPU 안에 있는 이유는 속도다. 가장 빠른 기억장치인데 개수를 늘리는 데 한계가 있어서, 당장 연산에 쓰는 값만 레지스터에 들어가고 나머지는 기억장치에 남는다.
세 종류의 버스
ALU와 레지스터, 제어 유닛은 CPU 안의 내부 버스로 연결된다. CPU 밖으로는 주기억장치까지 버스 세 개가 나간다.
| 버스 | 나르는 것 | 방향 |
|---|---|---|
| 주소 버스 | CPU가 내보내는 주소 정보 (8/16/32비트) | 단방향 |
| 데이터 버스 | 기억장치나 I/O 장치와 주고받는 데이터 | 양방향 |
| 제어 버스 | Read, Write, Select 같은 동작 지시 | 단방향 |
CPU는 메모리를 읽기도 하고 쓰기도 하니 데이터 버스만 양방향이고, 주소와 제어는 CPU가 내보내기만 한다.
발전 방향
장치별 변화
| 장치 | 달라지는 것 |
|---|---|
| 입력 | 음성인식과 웨어러블 기기가 늘고, NFC·Bluetooth·WLAN처럼 선 없이 연결되는 입력이 기본이 된다 |
| 기억 | FeRAM·MRAM·PRAM 같은 비휘발성 소자가 나오면서 주기억장치와 보조기억장치의 구분이 흐려진다 |
| 연산 | GPU와 GPGPU가 산술연산을 나눠 맡는다. 초거대 언어 모델(LLM) 학습에는 TPU와 NPU까지 쓰인다 |
| 제어 | 메모리 컨트롤러가 CPU 안으로 들어와, 메모리 접근을 칩 바깥 부품에 맡기지 않는다 |
| 연산 + 기억 | HBM-PIM은 연산기를 메모리 다이 안에 넣어, 자료를 CPU까지 옮기지 않고 그 자리에서 계산한다 |
시스템 지표
| 항목 | 방향 |
|---|---|
| 처리 속도 | 1ms(1/1000초) → 1μs → 1ns → 1ps → 1fs(펨토초) |
| 저장 용량 | KB → MB → GB → TB → PB(peta) → EB(exa) → ZB(zetta) |
| 집적도 | TR → IC → SSI → MSI → LSI → VLSI → ULSI |
| 신뢰도 | MTBF(Mean Time Between Failure)를 늘린다 |
| 전력 | 탄소 배출 Zero, Zero Power I/O, 저전력 I/O |
ULSI 다음 단계를 VVLSI(Very Very Large Scale IC)라고 부르기도 한다.
인터페이스 변화
| AS-IS | TO-BE | 효과 |
|---|---|---|
| 병렬 전송 | 직렬 전송 | 신호끼리 간섭하지 않고 전력을 덜 쓴다 |
| Master/Slave | Point to Point | 3 Tier 구성이 2 Tier로 줄어든다 |
| 동기식(Clock 사용) | 비동기식 통신 | Clock을 쓰지 않아 EMI가 줄어든다 |
| 송신측 오류 복구 | 수신측 오류 복구 | 전송 속도가 올라간다 |
| Blocked I/O | 비동기 I/O | 필요할 때만 이벤트로 처리한다 |
병렬 전송은 선 여러 개로 비트를 한꺼번에 보낸다. 속도를 올리려면 클럭을 높여야 하는데, 선마다 길이와 전기적 성질이 조금씩 달라서 비트가 도착하는 시각이 어긋난다. 이 어긋남이 Data Skew이고, 클럭이 빨라질수록 커진다. 어긋남이 한 비트 구간을 넘어서면 받는 쪽이 어느 비트가 어느 자리인지 알 수 없어서, 선을 늘려도 속도가 더 오르지 않는다. 직렬은 한 선으로 순서대로 보내니 선끼리 어긋날 일이 없다.
I/O 전압도 하나로 통일되지 않았다. 1.5V로 도는 메모리와 3.3V로 도는 플래시, 5V로 도는 주변장치가 한 보드에 같이 붙는다. 컨트롤러는 상대에 맞춰 신호 전압을 바꿔가며 구동한다.
장치를 연결하는 방법도 유선에서 무선으로 바뀌고 있다. 802.11 계열이 대표적이다. USB와 Thunderbolt는 케이블 하나로 전원과 데이터, 영상을 함께 주고받는다.
CXL은 CPU와 가속기, 메모리를 하나의 프로토콜로 연결한다. 지금까지는 GPU가 쓸 데이터를 CPU 쪽 메모리에서 GPU 메모리로 복사해야 했는데, CXL에서는 여러 장치가 같은 메모리를 캐시 일관성을 지킨 채 나눠 쓴다.