# 컴퓨터 구조 - 컴퓨터 구조란 컴퓨터의 구성과 동작 원리를 이해하는 것을 말한다. - 개발자는 프로그래밍 언어뿐 아니라 컴퓨터의 근간을 알아야 한다 ## 컴퓨터의 구조를 알아야 하는 이유 - 문제 해결 능력을 기르기 위해 - 만약 코드상의 문제가 없는데도 불구하고 실행이 안되는 경우, 컴퓨터의 구조를 이해하면 문제를 해결할 수도 있다. - 컴퓨터를 미지의 대상에서 분석의 대상으로 바꾸는 것이 중요하다. - 성능, 용량, 비용을 고려한 프로그래밍을 위해 - 내가 개발한 코드가 어느정도의 성능의 컴퓨터에서 어느정도의 성능을 낼 수 있는지를 알기 위해서는 컴퓨터 구조를 이해해야 한다. ## 컴퓨터 구조의 큰 그림 ![image](https://hackmd.io/_uploads/ry26jqW6a.png) ### 컴퓨터가 이해하는 정보 - 데이터 - 숫자, 문자, 이미지, 동영상과 같은 정적인 정보 - 0과 1로 숫자,문자, 이미지, 동영상을 표현한다. - 명령어 - 컴퓨터를 실질적으로 움직이는 정보 - 컴퓨터는 결국 명령어를 처리하는 기계 - 데이터는 명령어를 위한 일종의 재료 ### 컴퓨터의 네가지 핵심 부품 ![image](https://hackmd.io/_uploads/ByGwzfMa6.png) #### 메모리 - 프로드램이 실행되기 위해서는 메모리에 저장되어 있어야 한다 - 메모리는 프로세스의 명령어와 데이터가 저장한다 - 프로세스 = 현재 실행되는 프로그램 - 메모리에 저장된 값의 위치는 주소로 알 수 있다 ![image](https://hackmd.io/_uploads/B1MGyjb6p.png) #### CPU - 메모리에 저장된 명령어를 읽어들이고, 해석하고, 실행하는 부품 - CPU의 핵심구성부품 3가지 : ALU, 레지스터, 제어장치 - ALU : 계산장치 - 레지스터 : CPU 내부의 작은 저장장치 - 제어장치 : 제어신호를 내보내고 명령어를 해석장치 - 제어신호 : 컴퓨터 부품들을 관리하고 작동하기 위한 전기 신호 - ex) 메모리를 읽고 쓸 때, 메모리 읽기/쓰기 제어신호를 보낸다. ##### Arithmetic Logic Unit (ALU) ![image](https://hackmd.io/_uploads/SJ_SHU36p.png) - CPU의 핵심 부품 중 하나로 연산을 담당한다 - ALU는 레지스터에 저장된 데이터를 읽어들여 연산을 수행하고, 그 결과를 다시 레지스터에 저장한다 ##### 제어장치 ![image](https://hackmd.io/_uploads/HJlNSU2Ta.png) - 제어 신호를 내보내고, 명령어를 해석하는 부품 - 제어장치는 명령어를 해석하고, ALU나 메모리에 제어신호를 보낸다 - 제어장치는 명령어를 실행하는 동안 다음 명령어를 가져와서 실행할 준비를 한다 ##### CPU가 연산을 수행하는 과정 ![image](https://hackmd.io/_uploads/SyydxobTp.png) ![image](https://hackmd.io/_uploads/H1oVQsb6p.jpg) ![image](https://hackmd.io/_uploads/r1P-HiWaa.jpg) ![image](https://hackmd.io/_uploads/SkDZBoZTp.jpg) ![image](https://hackmd.io/_uploads/rJ6WHibT6.png) ##### CPU의 역할과 발전 과정 ![image](https://hackmd.io/_uploads/rkQ4dKYaT.png) CPU는 컴퓨터의 두뇌에 해당하며 프로그램의 명령어를 실행한다. 과거에는 CPU 하나로 컴퓨터를 제어했다. 과거에는 CPU 코어를 하나만 사용하였고, 이 CPU의 집적도를 높이는 방식으로 성능을 향상시켰다. 하지만, CPU의 집적도를 높이는 것은 물리적인 한계가 있었다. 이에 대한 해결책으로 멀티 코어 CPU가 등장했다. 멀티 코어 CPU란 하나의 CPU 칩 안에 여러 개의 코어가 들어있는 것을 말한다. 멀티 코어 CPU는 여러 개의 코어가 동시에 작업을 수행할 수 있기 때문에 단일 코어 CPU보다 여러 작업을 빠르게 처리할 수 있다. ![image](https://hackmd.io/_uploads/ry5jrJLaT.png) 이에 추가로 하이퍼스레딩이라는 기술이 등장했다. 하이퍼스레딩이란 하나의 코어가 두 개의 작업을 동시에 처리할 수 있도록 하는 기술이다. 즉, 하이퍼스레딩을 사용하면 코어 하나가 두 개의 스레드를 동시에 처리할 수 있고 더욱 높은 성능을 제공할 수 있다. #### 보조기억장치 - 전원이 꺼져도 보관될 프로그램을 저장하는 장치 - 메모리보다 용량이 크고, 속도가 느리다 - 즉, 메모리는 실행할 정보를 저장하고, 보조기억장치는 보관할 정보를 저장한다. #### 입출력장치 - 컴퓨터 외부에 연결되어 컴퓨터의 내부와 정보를 교환할 수 있는 부품 > 사실상 보조기억장치랑 입출력장치는 딱 잘라 구분되지는 않는다. 보조기억장치는 입출력장치의 일종이라고 볼 수 있다. > 예를 들어, USB는 보조기억장치이면서 입출력장치이다. > > 즉, 보조기억장치는 "메모리를 보조하는 특별한 입출력장치" 정도로 이해해도 문제없다 #### 메인보드 - 메인보드에 연결된 부품은 (시스템) 버스를 통해 데이터를 주고 받는다 - 버스는 컴퓨터의 부품끼리 정보를 주고받는 통로이다 - 버스의 종류는 다양하다. 그 중 **시스템 버스**는 컴퓨터의 핵심 부품을 연결하는 버스이다 #### 시스템 버스 - 시스템 버스는 CPU, 메모리, 보조기억장치, 입출력장치를 연결하는 버스이다 - 시스템 버스는 데이터 버스, 주소 버스, 제어 버스로 구성된다 - 데이터 버스 : 데이터를 주고 받는 버스 - 주소 버스 : 데이터의 주소를 주고받는 버스 - 제어 버스 : 제어신호를 주고 받는 버스 ![image](https://hackmd.io/_uploads/rkbG4MMpp.png)