---
# System prepended metadata

title: 컴퓨터 구조
tags: [과외(기태)]

---

# 컴퓨터 구조

- 컴퓨터 구조란 컴퓨터의 구성과 동작 원리를 이해하는 것을 말한다.
- 개발자는 프로그래밍 언어뿐 아니라 컴퓨터의 근간을 알아야 한다

## 컴퓨터의 구조를 알아야 하는 이유

- 문제 해결 능력을 기르기 위해
  - 만약 코드상의 문제가 없는데도 불구하고 실행이 안되는 경우, 컴퓨터의 구조를 이해하면 문제를 해결할 수도 있다.
  - 컴퓨터를 미지의 대상에서 분석의 대상으로 바꾸는 것이 중요하다.
- 성능, 용량, 비용을 고려한 프로그래밍을 위해
  - 내가 개발한 코드가 어느정도의 성능의 컴퓨터에서 어느정도의 성능을 낼 수 있는지를 알기 위해서는 컴퓨터 구조를 이해해야 한다.

## 컴퓨터 구조의 큰 그림

![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)
