끝나지 않는 프로그래밍 일기

[시스템 프로그래밍]


하드웨어 구성

(Hardware Configuration)




이 하드웨어 구성편에서는 CPU(Central Processing Unit), 레지스터(Register), 입출력 버스(Input/Output Bus), 메인 메모리(Main Memory), ALU(Arithmetic Logic Unit), 컨트롤 유닛(Control Unit), 버스 인터페이스(Bus Interface)에 대해 간단히 알아봅니다.




 1. 중앙 처리 장치(Central Processing Unit: CPU)  컴퓨터의 머리!


먼저 CPU(Central Processing Unit)에 대해 알아보도록 합시다. CPU는 중앙 처리 장치로 컴퓨터의 핵심, 사람으로 치면 컴퓨터의 뇌에 해당합니다. 메모리를 읽고 쓸수도 있으며, 다른 하드웨어를 제어할 수도 있으며 명령을 해독하고, 연산을 수행하는 녀석입니다. 저 위에잇는 하드웨어의 구성을 보시면, CPU 내에 ALU, 컨트롤 유닛, 레지스터, 버스 인터페이스로 구성되어 있음을 보실 수 있습니다. 먼저 ALU를 보도록 합시다.


 1-1. ALU(Arithmetic Logic Unit)  연산을 담당하는 영역!


ALU(Arithmetic Logic Unit)는 CPU의 구성요소 중에서 연산을 담당하는 녀석입니다. 이 ALU 내에는 또다시 연산 모듈과 논리 모듈로 나누어지는데, 연산 모듈에선 덧셈 또는 뺄셈과같은 사칙 연산, 논리 모듈에서는 AND, OR 또는 Shift와 같은 논리 연산이 이루어집니다.


 1-2. 컨트롤 유닛(Control Unit)  CPU를 통제한다!


컨트롤 유닛(Control Unit)은 CPU를 제어하는 녀석입니다. 컨트롤 유닛은 명령어를 해석하고 레지스터와 ALU 사이의 명령 흐름을 제어합니다. ALU은 연산만 담당하는 영역일뿐, ALU로 들어오는 명령어를 해석하지 못합니다. 이때, 컨트롤 유닛이 이 명령어를 해석하고 연산을 수행할 수 있게끔 ALU에 명령을 내립니다. 정리하자면 명령어를 해석하고, 결과에 따라 다른 영역으로 순차적으로 제어 신호를 내보냅니다.


 1-3. 레지스터(Register Set)  CPU 내부의 기억장치!


레지스터(Register Set)는 임시로 데이터를 기억하는 장치입니다. 연산 후에 나오는 임시 데이터를 저장하거나, CPU의 상태, 다음 명령의 메모리 번지수.. 등이 이 레지스터에 기억됩니다. 레지스터는 하나가 아니며, 상당히 다양하다고 할 수 있습니다. 이 레지스터는 CPU의 내부 메모리이기에 다른 기억 장치와는 다르게 액세스 속도가 상당히 빠릅니다. 예를 들어, ALU가 연산을 수행하고 있고 컨트롤 유닛이 명령을 해석하고 있다면 추가로 들어온 명령을 해석하거나 연산하지 못하므로 레지스터에 임시로 데이터 혹은 다음 명령의 번지값 등이 저장되는 것입니다.


 1-4. 버스 인터페이스(Bus Interface)  데이터를 주고받는 통로!


버스 인터페이스(Bus Interface)는 외부의 입출력 버스(I/O Bus)와 연결됩니다. 즉, CPU의 외부와 연결되어 있으며 외부에서 들어오는 데이터를 받거나, 데이터를 보내는 역할을 담당합니다. 즉, 명령어를 내보내거나 입출력 버스를 통해 데이터를 받을 수 있다는 말이죠. 한마디로 버스 인터페이스는 '외부와 데이터를 주고받는 통로이다!'라고 기억하시면 되겠습니다. 입출력 버스에 대해서는 아래에 설명해두었으니 참고하시기 바랍니다.


 2. 입출력 버스(Input/Output Bus)  다른 구성요소와 데이터를 교환하는 통로!


이 입출력 버스(Input/Output Bus)는 다른 구성요소의 사이에서 데이터를 교환하기 위해 거치는 통로라고 말할 수 있습니다. 위 그림을 보시면, CPU와 메모리, 그리고 I/O 장치(키보드, 마우스 등..)와 연결되어 있는데 이 구성 요소 사이의 데이터를 입출력이 가능한 이유가 이 입출력 버스가 존재하기 때문입니다. 전송되는 데이터에 따라 번지 버스(Address Bus), 자료 버스(Data Bus), 제어 버스(Control Bus)로 분류할 수 있습니다.


제일 먼저 번지 버스는 CPU가 메모리 혹은 I/O 장치의 번지를 지정할때 쓰이며, 자료 버스는 CPU와 메모리 혹은 I/O 장치 사이에서 데이터를 전송할때 쓰이며, 제어 버스는 현재 CPU의 상태나, 상태 변경을 메모리 혹은 I/O 장치에 알리는 제어 신호를 전송하는데 쓰입니다. 여기서 자료 버스와 제어 버스는 양방향, 번지 버스는 단방향임을 기억하시는게 좋겠습니다.