이번 글에서는 제어 장치의 대략적인 작동 방식에 대해 알아보겠다.
방금 강조했듯 대략적이다. 왜냐하면 물론 한 글에서 자세히 설명할순 있지만 알다싶이 하나의 부품마다 굉장히 많은 기능이 있다. 따라서 아래에 있는 그림을 분해할 때마다 기하급수적으로 설명할게 너무 많아진다.
그럼 시작하겠다.
먼저 위 그림에서는 약어로 설명된 부분들이 존재하니 모든 부분에 대해 전체 이름과 대략적인 기능을 설명하겠다.
1. Opcode (Operation Code) : 명령어 코드를 저장해 놓은 부분이다.
2. Operand : 주소값이 들어가 어떤 데이터를 연산할지 알려주거나 데이터 자체가 들어가 연산할 수 있도록 한다. 피연산자로 해석할 수 있다.
3. MBR (Memory Buffer Unit) : 이름에 Buffer가 들어가듯이 메모리의 값을 임시로 저장한다.
4. MAR (Memory Adress Unit) : 메모리 주소를 임시 저장한다.
5. Decoder : Opcode에서 들어오는 명령어를 해석하여 어떤 동작을 해야하는지 알려준다.
6. Sequencer : 순서기는 프로그램 내의 명령어들을 올바른 순서로 실행하는 역할을 한다.
7. 주소 처리기 : 되도록 영어로 작성하고 싶었는데 정말 주소와 관련된 기능만 할 수 있어서 주소 처리기로 작성하였다.
8. PC (Program Counter) : 현재 프로그램이 동작하고 있는 주소를 가르킨다. 이 부분에서 값을 지속적으로 증가시켜 프로그램을 순서대로 작동할 수 있도록 한다.
9. ALU (Arithmetic and Logical Unit) : 컴퓨터 내 연산을 처리하는 부분이다. 산술 논리 유닛이다.
10. Register : ALU에서 처리한 값들을 임시 저장하는 부분이다. 물론 ALU 내에도 누산기(Accumulator)가 존재하지만, 이 부분은 다른 성질을 띈다.
11. IR (Instruction Register) : 명령어를 임시 저장하는 공간이다.
이제 작동 순서이다.
다시 강조하지만 본래라면 훨씬 복잡하다.
1) 명령어의 주소 전송을 위해 POC에 기억된 주소를 MAR로 전송한다.
2) 주기억 장치에서 읽어 온 명령어르 IR에 저장 후 PC를 증가시킨다.
3) Opcode와 주소를 각각 해독기와 주소 처리기로 보낸다.
4) 주소 처리기가 연산 결과를 인출할 때는 Operand의 주소를 계산하며, 수행될 명령어의 순서가 바뀔 때에는 다음에 수행될 명령어의 주소를 계산하여 PC에 기억시킨다.
5) 연산자를 해독하여 명령어 수행을 위한 제어 신호를 발생시켜 수행 순서를 변경할 때에는 주소 처리기를 동작시켜 수행될 명령어 주소를 계산한다.
6) 다음명령의 수행을 위해 위 과정을 반복한다. IR에 있는 명령어의 수행이 끝나면 증가된 PC의 값을MAR에 보내 다음 명령어를 실행한다.