컴퓨터의 핵심 부품 - CU, ALU, 레지스터
앞선 글들에서 컴퓨터는 전기를 통해서 '계산' 이 목적인 기계이며, 목적을 위해서 저장, 연산, 제어라는 요소가 필요하다는 것을 알았고, 각각에 맞게 플립플롭, ALU, CU 라는 것이 등장했다는 것을 알았다.
이 중에서 플립플롭은 1bit 의 정보만 저장할 수 있기 때문에 다룰 수 있는 값이 적으니까, 이걸 연결해서 8bit(1byte) 의 값을 저장할 수 있도록 만들어보자. 이렇게 플립플롭을 여러 개 묶어놓은 것을 '레지스터' 라고 한다
CU 와 ALU 와 레지스터를 전선으로 연결한 다음 전기를 통해 레지스터들에 값을 넣어주면 계산이 가능할 것이다.
즉, 이론상 CU, ALU, 레지스터를 가지고 '계산'이라는 목적을 이룰 수 있는 것이다.
CU, ALU, 레지스터만 가지고있는 구조의 문제
하지만 cpu 와 레지스터만을 가지고 계산을 하는 것은 여러 문제점을 가져온다
- cpu 와 레지스터는 휘발성이기 때문에 전원이 꺼지면 지금까지의 정보가 사라진다
- 레지스터는 용량이 매우 작기 때문에 많고 복잡한 데이터를 처리할 수 없다
- (지금까지 알아본 것으로는) 키보드나 모니터같은 입출력이 없기 때문에 외부 기기와 데이터를 주고받을 수 없다
문제의 해결 - 비휘발성 저장 매체 (메모리 계층화)
우선 처음의 두 가지 문제를 해결하기 위해서 천공카드, 자기테이프 같은 비휘발성 저장 매체를 사용했다.
(추후 ROM, HDD, SSD 의 사용으로 비휘발성 저장 매체가 발전했다)
하지만 cu 가 이런 비휘발성 저장 매체에서 값을 읽어오는 것에는 시간이 너무나도 오래 걸렸다.
(천공카드, 자기테이프가 CU 가 요청한 데이터를 읽어오는데 시간이 걸렸고, CU는 데이터가 도착할 때까지 한참을 기다려야했다)
이런 단점을 해결하기 위해서 RAM 이 생겨났다. CU 가 데이터 요청을 하면 RAM 은 자기테이프 같은 보조저장 장치의 데이터를 읽어오고 담아두었다가 CU 가 요청할 때 읽어온 데이터를 보내주는 방식으로 속도를 개선했다.
하지만 이 역시도 한계가 있었고, 캐시 메모리라는 것이 등장했다.
CU 에 더 가깝고 속도가 빠른 메모리를 추가하는 개념이었다.
이런 방식으로 메모리를 목적에 따라 여러 종류로 나누는 것을 '메모리 계층화' 라고 한다.
즉, RAM 이 읽어왔던 데이터를 캐시 메모리에 담아두고, CU 가 요청할 때마다 캐시 메모리가 바로바로 필요한 데이터를 빠르게 전달해 주는 것이다.
CU -> 캐시 메모리 -> RAM -> 보조 저장 장치 (HDD, SDD...)
문제의 해결 - BUS (부품, 장치의 연결)
비휘발성 저장매체와 메모리 계층화를 통해서 두 개의 문제점을 해결할 수 있었다.
이제 이런 비휘발성 저장매체, 메모리, 외부 입출력 기기들과 어떻게 데이터를 주고받을지에 대한 문제를 해결해야한다.
이 문제를 해결하기 위해서 BUS 라는 연결 통로를 만들었다.
BUS 는 CPU 와 각종 부품들, 또는 부품과 부품끼리, 더 나아가 컴퓨터와 외부 장치들(키보드, 마우스 등)을 연결하는 역할을 했고, 처음에는 단일 BUS 만 있었으나, 점점 더 컴퓨터 구조가 복잡해지면서 병목현상을 막고 효율성을 높이기 위해 BUS 도 여러 종류로 세분화되었다.
(처음에 ALU, CU, 레지스터를 이은 전선도 BUS 라고 할 수 있다)
문제의 해결 - 클럭 (연결된 부품 간의 소통 타이밍)
부품들을 연결해서 데이터를 교환하는 것 까지 성공했다. 그렇다면 모든 문제가 해결된 것일까?
아쉽지만 그렇지 않다.
연결된 부품들간 데이터 전송을 수행할 때 속도의 차이가 나는 문제가 생긴다.
예를 들어 CU 에서 SSD 의 데이터를 읽어오려고 한다고 했을 때, SSD 가 만약 기존의 작업을 아직 끝내지 못하고 처리중인 상황에서 새로운 요청을 받고 바로 수행한다면 이전의 요청을 제대로 끝마치지 못하고 예상하지 못한 데이터를 가져올 수 있는 것이다.
그렇기 때문에 각 부품과 외부 장치들과 CU 간에 '동기화' 가 필요한데, 이 문제를 해결하기 위해 '클럭' 이라는 개념이 등장했다.
클럭이라는 전기 신호를 통해서 작업 타이밍을 맞추는 것이다.
클럭이 CU 와 각종 부품들과 타이밍을 맞추는 과정은 아래와 같다
(예를 들어 CU 가 SSD 에 데이터를 요청하고 읽어오는 과정을 생각해보자)
CU 는 CU 의 클럭이 있고, SSD 는 SSD 의 클럭이 존재한다.
1. CU 는 데이터 요청을 보내고 이는 시스템 버스를 통해서 전달된다 (CU 의 클럭 타이밍에 맞춤)
2. 요청이 SSD 컨트롤러에 도착하면 인터페이스(SATA ....)가 SSD 의 클럭 타이밍에 맞춰서 요청을 처리한다
3. SSD 는 자신의 클럭 타이밍에 맞춰서 요청을 처리하고 응답한다.
4. 응답은 또 SSD 컨트롤러 인터페이스를 통해서 CU 의 클럭 타이밍에 맞춰서 전달된다.
즉, 프로토콜이나 중간 매체로 인해서 서로 다른 클럭 타이밍을 조절해서 데이터 교환이 이루어지는 것이다.
컴퓨터의 핵심
CU 의 지휘 아래 클럭의 박자에 맞춰서 각각의 부품들이 데이터를 교환하고 끊임없이 레지스터를 변경하면서 데이터를 변경하며 작업을 수행하는 것
'컴퓨터 과학 > 프로그래밍 기초' 카테고리의 다른 글
4 - 서브루틴과 함수 (+ 컴파일러) (0) | 2025.03.27 |
---|---|
3- 초기 프로그래밍의 변수 (0) | 2024.12.17 |
1-컴퓨터의 계산(저장, 연산 그리고 제어) (0) | 2024.12.17 |
0-컴퓨터란? (1) | 2024.11.10 |