혼.공.컴.운
레지스터 종류
프로그램 카운터
메모리에서 읽어 들일 명령어의 주소를 저장
명령어 레지스터
해석할 명령어를 저장하는 레지스터.
제어장치가 명령어 레지스터의 명령어를 받아 이를 해석하고 제어 신호를 내보낸다.
메모리 주소 레지스터
메모리의 주소를 저장하는 레지스터
메모리 버퍼 레지스터
메모리와 주고받을 값을 저장하는 레지스터
범용 레지스터
다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터
플래그 레지스터
연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장하는 래지스터
주소 지정 방식 : 스택 주소 지정 방식
- 스택 포인터는 스택 주소 지정 방식이라는 주소 지정 방식에 사용된다.
- 프로그램 카운터와 베이스 레지스터는 변위 주소 지정 방식이라는 주소 지정 방식에 사용 된다.
스택 주소 지정 방식
- 스택과 스택 포인터를 이용한 주소 지정 방식
- 스택 포인터란 스택의 꼭대기를 가리키는 레지스터(= 스택의 어디까지가 채워져 있는지에 대한 표시)
- 스택은 메모리 안에 있다. 메모리 안에 스택처람 사용할 영역이 정해져 있다. 이를 스택 영역이라 한다. 이 영역은 스택처럼 사용하기로 암묵적으로 약속된 영역이다.
주소 지정 방식 :변위 주소 지정 방식
- 변위 주소 지정 방식이란 오퍼랜드 필드의 값(변위)와 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식이다.
- 그래서 변위 주소 지정 방식을 사용하는 명령어는 [연산 코드 필드][레지스터 필드][오퍼랜드] 가 있다.
상대 주소 지정 방식
- 오퍼랜드와 프로그램 카운터의 값을 더하여 유효 주소를 얻는 방식
베이스 레지스터 주소 지정 방식
- 오퍼랜드와 베이스 레지스터의 값을 더하여 주소를 얻는 방식
- 베이스 레지스터는 기준 주소
- 오퍼랜드는 기준 주소로부터 떨어진 거리로서의 역할을 한다.
ex) 기준 주소 300번지로부터 50번지 떨어진 코드 실행!
명령어 사이클과 인터럽트
CPU 가 하나의 명령어를 처리하는 과정
- 인터럽트 : CPU는 정해진 흐름에 따라 명령어를 처리해 나가지만, 간혹 이 흐름이 끊어지는 상황이 발생한다. 이를 인터럽트라 한다.
명령어 사이클
- 프로그램 속 각각의 명령어들은 일정한 주기가 반복되며 실행된다. 이 주기를 명령어 사이클이라 한다.
- 인출 사이클 : 명령어를 메모리에서 CPU로 가져오기
- 실행 사이클 : 가져온 명령어 실행
제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생시키는 단계
- 간접 사이클 : 간접 주소 지정 방식처럼 메모리를 두 번 다녀와야하는 경우를 간접 사이클이라 한다.
인터럽트
CPU 의 작업을 방해하는 신호를 인터럽트라 한다.
- 인터럽트 종류
- 동기 인터럽트
- 동기 인터럽트
CPU에 의해 발생하는 인터럽트다. CPU가 명령어들을 수행하가다가 예상치 못한 상황에 마주쳤을 때 발생하는 인터럽트. 예외라고도 부른다.
- 비동기 인터럽트
주로 입출력장치에 의해 발생하는 인터럽트다.
하드웨어 인터럽트라고도 한다.
- 알림과 같은 인터럽트다.
- 하드웨어 인터럽트를 이용하면 CPU는 주기적으로 프린트 완료 여부를 확인할 필요가 없다. 입출력 장치로부터 완료 인터럽트를 받을 때까지 다른 작업을 처리할 수 있다.
- 이로 인해 CPU가 효율적으로 명령어를 처리할 수 있다.
- 하드웨어 인터럽트 처리 순서
1. 입출력 장치 ------>인터럽트 신호-------> CPU
- CPU 실행 사이클 끝나고 명령어 인출하기 전 항상 인터럽트 여부 확인함
- CPU 인터럽트 요청 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부 확인
- 받을 수 있다면 CPU는 지금까지 작업 백업한다.
- CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴 실행
- 인터럽트 서비스 루틴 실행 끝나면 4에서 백업해 둔 작업 복구해서 실행 재개
- 하드웨어 인터럽트 종류
- 막을 수 있는 인터럽트
용어 정리
-
인터럽트 요청 신호 : 인터럽트는 CPU의 정상적인 실행 흐름을 끊는 것이기에 인터럽트 하기 전 CPU에 문의하는 것.
이때 CPU가 인터럽트 요청을 수용하기 위해서는 플래그 레지스터의 인터럽트 플래그가 활성화되어 있어야 한다.
-
인터럽트 플래그 : 인터럽트 플래그는 말 그대로 하드웨어 인터럽트를 받아들일지, 무시할지를 결정하는 플래그다.
-
인터럽트 벡터 : 수많은 인터럽트 서비스 루틴을 구분하기 위해 인터럽트 벡터를 이용한다.
-
인터럽트 서비스 루틴 : 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하고 작동해야 할지에 대한 정보로 이루어진 프로그램
CPU가 인터럽트를 처리한다
== 인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 되돌아온다.