근본적인 질문, 왜 컴퓨터 구조를 알아야 하는가?
코드를 작성하는 능력도 중요하나, 개발된 프로그램의 문제를 진단, 해결하고 원활히 구동할 수 있는 것도 그에 못지않게 중요한 능력입니다.
컴퓨터 구조는 코드를 작성하여 입력과 출력을 구현하는 그 자체에는 크게 체감을 주는 지식의 요소가 아니기 때문에 등한시되는 경우가 있습니다. 하지만 문제의 진단, 해결 및 원활히 구동하는 운영 및 기획의 면에서는 반드시 필요한 지식입니다.
* 운영 및 기획 : 서버의 선택(연산, 저장, 통신)이나 코드의 효율성 개선 등
컴퓨터는 어떤 정보를 처리하는가?
컴퓨터는 이진수로 정보들을 처리하며, 이 이진수들은 데이터와 명령어로 나뉩니다.
- 컴퓨터는 명령어를 처리하는 기계입니다.
- 프로그램은 그러한 명령어들의 모음으로 정의할 수 있습니다.
컴퓨터는 그 크기와 모양이 다양하지만 현행 컴퓨터들은 대부분 폰 노이만 구조를 채택하고 있습니다. 메모리에서 CPU가 데이터와 명령어를 읽어와 처리하며, 모니터와 키보드, 마우스와 같은 I/O 장치들이 있고, 적은 용량의 메모리를 보완하기 위해 그보다 더 큰 용량의 저장장치를 두고 있습니다. 이러한 구성요소간의 데이터 및 명령어의 이동을 하기 위한 경로들은 Bus라고 불립니다.
- CPU 내부에는 산술논리연산장치(ALU, Arithmetic and Logical Unit)와 제어장치(Control Unit), 그리고 Register들이 들어가 있습니다. 메인보드의 시스템 버스를 통해 메모리와 연결됩니다.
- 메모리는 빠른 속도가 중요하기 때문에 Random Access가 가능한 저장장치를 기용합니다.
- 프로그램이 실행되기 위해서는 관련된 데이터와 명령어가 메모리에 저장되어있어야 하며, 메모리에 저장된 데이터와 명령어는 ‘주소’를 통해 어떤 주소건 간에 CPU가 동일한 시간내로 접근 가능합니다.
참고로 우리가 흔히 CPU라고 부르는 패키지는 이렇게 생겼습니다.
패키지의 내부를 확인해보면 이렇습니다.
즉 지금 하고 있는 이야기는 위 사진의 Core에 대한 이야기입니다. CPU라는 말은 꼭 Arithemetic and Logical Unit, Register Unit, Control Unit으로 구성되어 있는 Core에 대한 것만 이야기하는 것은 아니라는 것입니다. 그렇다면 패키지를 지칭하는 의미로 CPU라는 단어를 쓰는 것이 틀린 것일까요? 그렇지는 않습니다.
그럼 이제 CPU라는 장치에 대해서 더 자세히 알아보겠습니다.
CPU는 Arithemetic and Logical Unit, Register Unit, Control Unit으로 구성되어 있습니다.
- ALU는 연산을 담당하며, 레지스터는 프로그램을 실행하는데 필요한 값들을 임시로 저장합니다.
- 제어장치(CU)는 제어신호(Control Signal)을 전기를 통해 보내며, 명령어를 해석합니다.
- 이러한 제어 신호는 메모리에 값을 쓰거나 값을 읽어올 목적으로 발생합니다.
CPU가 값을 메모리에서 읽어와 처리하는 과정을 간략하게 순서에 따라 묘사하면 다음과 같습니다.
- CU를 통해 메모리를 읽습니다.
- 읽은 해당 데이터나 명령어를 레지스터에 저장합니다.
- ALU가 레지스터의 데이터와 명령어를 처리합니다.
- ALU가 처리한 값이 레지스터에 저장됩니다.
- CU가 다음 명령을 다시 레지스터에서 읽어옵니다.
- 해당 명령은 메모리에 어떤 레지스터의 값을 저장하라는 내용입니다.
- 명령어에 따라 CU가 메모리의 어떤 주소에 값을 저장합니다.
이러한 처리는 시간적인 정렬을 위해 특정 진동 주기에 맞춰서 시행됩니다. 요즘 나오는 노트북들은 이러한 클럭이 3.0GHz 를 가뿐히 뛰어넘습니다. 1GHz 는 10^9로 10억 GHz 이므로 30억 Hz, 다시 말해 1초에 30억 번의 진동에 맞춰 연산을 수행하고, 이러한 연산을 수행하는 코어가 강력한 시스템 기준으로 8개 이상이니 아주 많은 연산을 수행하는 것입니다.
이렇게 많은 연산을 수행하는 것은 그를 위한 데이터와 명령어가 아주 많다는 것을 추정할 수 있습니다. 그러나 메모리는 보통 8GB 이거나 16GB 입니다. 그래서 메모리에 필요한 모든 데이터와 명령어를 저장할 수 없습니다. 또한 대부분의 상용 메모리는 RA를 구현하기 위해 지속적으로 전력 공급이 요구됩니다. 이를 휘발성 메모리라 하는데, 이런 용량과 휘발성의 문제를 해결하기 위해 별도의 전력 공급이 없어도 데이터가 저장되는 아주 큰 저장장치를 따로 두게 되었습니다. 이를 보조기억장치라고 부릅니다.
보조기억장치 예시 : SSD, HDD, CD, DVD, USB, SD Card
추가로 지금까지 보았던 내용 중에는 사람이 실제로 컴퓨터를 이용하기 위해 필요한 키보드, 마우스나 프린터, 스피커, 마이크 등에 대한 내용이 없습니다. 이러한 기기들도 메인보드를 통해 연결되며 시스템 버스를 통해 CPU를 이용하게 됩니다. 보조기억장치도 시스템 버스를 통해 이용되며, 이렇게 시스템 버스를 통해 외부에서 연결되는 기기들은 주변기기(Peripheral device)라고도 불립니다.
버스는 시스템 버스뿐만 아니라 다른 종류의 버스도 존재합니다. 하지만 여기서는 가장 중요한 시스템 버스에 대해서만 설명하겠습니다.
시스템 버스는 메인보드에 있습니다. 메인보드는 다른 기기들을 품어주는 점에서 Mother Board라고도 불립니다. 여러 장치들의 신호를 주고 받는 통로는 시스템 버스인데, 이는 주소, 데이터, 제어에 대한 신호를 보내도록 그 용도에 따라 나뉘어 있습니다. 그래서 시스템 버스는 주소 버스, 데이터 버스, 제어 버스가 구현되어 있습니다.
실제 버스들을 눈으로 보면 아래의 회로들입니다.
아래와 같이 버스는 여러 장치들의 연결을 담당합니다.
메인보드나 버스에 대한 내용은 더욱 심도깊은 내용이 많이 있습니다.
- CPU나 메인보드 제조사에 따라 도입된 개념들(FSB, BSB, EV6 등)
- Northernbridge, Southerbridge
그러나 이러한 내용은 본 문서의 목적인 컴퓨터 구조를 이해하는 부분에 가장 중요한 부분은 아니며, 도서에서도 다루지 않는 부분이므로 생략하도록 하겠습니다. 다만 성능에 영향을 미치는 내용이므로 나중에 기회가 된다면 다뤄보겠습니다.
여기까지 첫번째 장, 컴퓨터와 컴퓨터 구조에 대해서 내용을 정리해 기록해보았습니다.
감사합니다.