
- CPU는 ALU, Control Unit, Register로 구성된다.
- ALU는 산술/논리 연산 장치, Control Unit은 제어 신호를 발생시키고 명령어를 해석하는 장치이다.
- 산술/논리 연산을 수행하기 위해서는 연산자와 피연산자가 필요하다.
- 받아들이는 정보
i) 연산자- Control Unit에서 제어 신호의 형태로 ALU에 전달된다.ii) 피연산자
- Register에서 ALU에게 전달된다.
- 내보내는 정보
i) 결과값- ALU에서 Register에 전달된다. - Register로 전달되는 이유: CPU에서 Memory보다는 Register에 접근하는 것이 더 빠르기 때문ii) Flag
- Flag: ALU에서 Flag Register에 전달된다.
- 산술/논리 연산을 수행하기 위해서는 연산자와 피연산자가 필요하다.
- 받아들이는 정보
i) Clock Signal (클럭 신호)- 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 사간 단위이다.ii) 해석할 명령어
- Instruction Register에서 Control Unit에게 전달된다.
- CPU 내부에 내보내는 정보
i) Register에 보내는 제어 신호- Register 동작에 관련된 제어 신호이다.ii) ALU에 보내는 제어 신호
- 수행할 연산을 지시하는 제어 신호이다.
- CPU 외부에 내보내는 정보
i) Memory에 보내는 제어 신호- Memory를 읽고, Memory에 쓰도록 하는 제어 신호이다.ii) I/O Device에 보내는 제어 신호
- I/O Device에 읽기, 쓰기 테스트 제어 신호를 보낸다.
- Register는 CPU 내부에 있는 임시 저장 장치이다.
- 프로그램 속 명령어와 데이터는 실행 전후로 Register에 저장된다.
1) PC (Program Counter, 프로그램 카운터)
- Memory에서 읽어들일 다음 명령어의 주소를 가져온다.
- 이미 Memory에서 읽어 들인 해석될 명령어를 저장한다.
- CPU가 읽어 들이고자 하는 Memory의 주소를 주소 버스로 보낼 때 거치는 Register이다.
- 즉, CPU가 읽어 들이고자 하는 Memory의 주소가 저장되는 Register이다.
- CPU가 명령어와 데이터를 데이터 버스를 통해 주고받을 때 거치는 Register이다.
- 즉, CPU가 Memory와 주고 받을 데이터와 명령어가 저장되는 Register이다.
- 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장한다.
- 다양하고 일반적인 상황에서 자유롭게 사용된다.
- Stack의 꼭대기를 가리키는 Register이다.
- 주소 지정에 사용된다.
- 프로그램 시작의 기준 주소를 저장하는 Register이다.
- 주소 지정에 사용된다.
- Stack과 SP를 이용한 방식
- 변위와 특정 Register의 값을 더하여 유효 주소를 얻는 방식이다.
- 변위: Operand의 필드 값을 변위로 이용하며, 이 경우 Operand의 필드에는 주소 값이 들어있다. - 특정 Register: PC 또는 BR
- 형태:
Operation Code|Register|Operand- 동작 방식:
Register와 주소 값인Operand를 더한 곳에 있는 데이터로Operation Code를 수행- 구분
i) 상대 주소 지정 방식 (PC 사용)- 변위와 PC의 값 (다음 읽어올 명령어가 저장된 Memory의 주소)을 더하여 주소를 지정한다.ii) BR 주소 지정 방식 (BR 사용)
- BR에 담긴 프로그램 시작의 기준 주소 값과 변위 값을 더하여 주소를 지정한다.
- 프로그램 속 명령어들의 실행은 일정한 주기로 반복된다.
- 기본적으로
인출 사이클-실행 사이클-인출 사이클-실행 사이클-인출 사이클-...순으로 반복된다.
- Memory에 저장된 명령어를 실행하기 위해 가장 먼저 Memory에서 CPU로 명령어를 가지고 와야 한다.
- Memory에서 인출된 명령어를 실행한다.
간접 주소 지정 방식처럼 명령어가 Memory에서 CPU로 인출돼도 바로 실행되지 못 하는 경우도 있다.간접 주소 지정 방식: 명령어의 Operand 필드에 유효 주소의 주소를 명시하는 방식- 이 경우,
인출 사이클-간접 사이클-실행 사이클-인출 사이클-간접 사이클-실행 사이클-인출 사이클-...순으로 반복된다.
- 명령어의 Operand 필드 값인
유효 주소의 주소값을 통해 Memory에 접근하고, 해당 주소에 담긴유효 주소의 위치로 이동하여연산에 사용할 데이터값을 가져온다.
- 위의 명령어 사이클이 끊어지도록 하는 방해하는 신호이다.
- CPU가 예기치 못한 상황을 접했을 때 발생하는 예외이다.
Fault,Trap,Abort,SW Interrupt가 있다.
- 주로 입출력 장치에 의해 발생하는 HW Interrupt이다.
- 비동기 인터럽트가 필요한 이유
- 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 사용된다. - 일반적인 입출력 장치는 CPU에 비해 느리다. - 비동기 인터럽트가 없다면 CPU는 입출력 장치의 동작 완료 여부를 주기적으로 확인해야 한다. - 비동기 인터럽트가 있다면 입출력 장치가 동작하는 동안 CPU는 다른 작업을 처리할 수 있다.
- 인터럽트 서비스 루틴 (ISR, Interrupt Service Routine)
- 명령어 사이클을 반복하며 프로그램이 실행될 때 인터럽트가 발생한 경우 해당 프로그램의 실행을 중단한다. - 인터럽트 벡터에 담긴 ISR 주소로 이동하여 Memory에 저장된 ISR를 수행한다. - 중단되었던 프로그램 실행 위치로 되돌아와 다시 명령어 사이클을 반복한다. - 프로그램의 실행을 재개하기 위해 ISR로 넘어가기 전에 Register에 저장된 명령어의 정보를 Memory의 Stack 영역에 백업해둔다.
- 인터럽트 벡터
- 각각의 인터럽트를 구분하기 위한 정보이다. - 인터럽트 주체 별 ISR의 시작 주소가 담겨 있다. 🞷 인터럽트 벡터 테이블: 인터럽트 벡터를 Memory에 테이블의 형태로 저장한 것