[혼공컴운] chapter04 CPU작동원리

ALU와 제어장치

 

ALU (Arithmetic Logic Unit)

레지스터를 통해 피연산자를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어신호를 받아들여 다양한 연산을 수행한다. 연산 후에 ALU는 결과값은 바로 메모리에 저장되지 않고 일시적으로 레지스터에 저장하고 연산결과에 대한 추가적인 상태 정보인 플래그(flag)를 플래그 레지스터로 내보낸다.

플래그

제어장치

 

제어장치가 무엇을 받아들이고, 무엇을 내보내는지 하나씩 살펴보자.

제어장치가 받아들이는 정보

  • 제어장치는 클럭 신호를 받아들인다.
  • 제어장치는 '해석해야 할 명령어'를 받아들인다.
  • 제어장치는 플래그 레지스터 속 플래그 값을 받아들인다.
  • 제어장치는 제어 버스로 전달된 제어 신호를 받아들인다.

제어장치가 내보내는 정보

  • cpu 내부에 전달하는 제어 신호
  • cpu 외부에 전달하는 제어 신호

 

레지스터

 

프로그램 명령어와 데이터는 실행 전후로 레지스터에 저장된다. 따라서 레지스터에 저장된 값만 관찰해도 프로그램의 실행 흐름을 파악할 수 있다.

레지스터 종류 설명
프로그램 카운터 메모리에서 가져올 명령어의 주소를 저장
명령어 레지스터 방금 메모리에서 읽어 들인 명령어를 저장
메모리 주소 레지스터 메모리의 주소를 저장하는 레지스터
메모리 버퍼 레지스터 메모리와 주고받을 값을 저장하는 레지스터
범용 레지스터 데이터와 주소를 모두 저장할 수 있는 레지스터
플래그 레지스터 연산 결과 또는 CPU상태에 대한 부가적인 정보를 저장하는 레지스터

'프로그램 카운터'는 지속적으로 증가하며 프로그램 카운터 값이 증가하며 계속해서 다음 명령어를 읽어 들일 준비를 한다.

스택 주소 지정 방식

 

스택 포인터 (스택의 어디까지 데이터가 채워져 있는지에 대한 표시)

메모리 안에 스택처럼 사용할 영역이 정해져 있어 이를 스택 영역이라고 한다. 

변위 주소 지정 방식

 

오퍼랜드 필드 값과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식이다.

 

상대 주소 지정 방식

 

오퍼랜드와 프로그램 카운터(읽어 들일 명령어의 주소가 저장됨)의 값을 더하여 유효 주소를 얻는 방식이다.

만약, 오퍼랜드가 -3이였다면, CPU는 읽어 들이기로 한 명령어로부터 '세 번째 이전' 번지로 접근한다. 

 

상대 주소 지정 방식은 분기하여 특정 주소의 코드를 실행할때 사용된다.

 

베이스 레지스터 주소 지정 방식

 

오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식이다.

베이스 레지스터 = 기준 주소

오퍼랜드 = 기준 주소로부터 떨어진 거리

 

명령어 사이클과 인터럽트

 

명령어 사이클 : 하나의 명령어를 처리하는 정형화된 흐름 (인출 사이클 <-> 실행 사이클 <-> 간접 사이클)

인터럽트 : 명령어 사이클이 끊어지는 상황

  • 동기 인터럽트 = 예외
  • 비동기 인터럽트 = 하드웨어 인터럽트 (알림)

 

하드웨어 인터럽트 처리 순서

 

 

하드웨어 인터럽트 처리 순서

 

서비스 루틴을 식별하기 위한 인터럽트 벡터를 참고해서 서비스 루틴의 시작 주소를 알 수 있다.

결국, CPU는 아래와 같은 과정을 반복해 나가며 프로그램을 실행한다고 볼 수 있다.

 

예외의 종류

 

폴트 (fault)

 

예외를 처리한 직후 예외가 발생한 명령어부터 실행 재개.

 

트랩 (trap)

 

예외를 처리한 직후 예외가 발생한 다음 명령어부터 실행 재개.

중단 (abort)

 

CPU가 실행 중인 프로그램을 강제로 중단시킬 수밖에 없는 심각한 오류를 발견했을 때 발생하는 예외

소프트웨어 인터럽트

 

시스템 호출 발생.