Computer Science/컴퓨터 구조
컴퓨터 구조 - 명령어 사이클과 인터럽트
HongongHB
2024. 1. 4. 02:59
- 명령어 사이클 : CPU가 하나의 명령어를 처리하는 과정에는 정해진 흐름이 있고, CPU는 그 흐름을 반복하며 명령어들을 처리합니다. 이렇게 정형화된 흐름을 명령어 사이클이라고 합니다.
- 인출 사이클 : 명령어를 메모리에서 CPU로 가져오는 과정입니다.
- 실행 사이클 : 명령어를 메모리에서 CPU로 가져왔다면, 명령어를 실행합니다. 제어장치가 명령어 레지스터에 담긴 명령어를 해석하고, 제어 신호를 발생시키는 단계입니다.
- 간접 사이클 : 만약 CPU가 메모리를 참조하여 명령어를 가져올 때, 즉시 주소 지정 방식으로 명령어에 바로 접근할 수 있는 것이 아닌 간접 주소 지정 방식으로 오퍼랜드에 유효주소의 주소가 명시된 명령어를 가져온다면 바로 실행 사이클로 돌입할 수 없습니다. 메모리에 한 번 더 접근하여 유효주소를 가져와야하기 때문에 이 간접 사이클 단계를 거치게 됩니다.
- 인터럽트 : CPU가 수행 중인 작업이 방해를 받아 잠시 중단될 수 있는데, 이처럼 방해하는 신호를 인터럽트라고 합니다. CPU가 반드시 먼저 처리해야하거나, 지금 수행 중인 작업보다 더 우선순위가 높은 작업이 들어오면 발생합니다.
1. 동기 인터럽트 : CPU에 의해 발생하는 인터럽트입니다. CPU가 명령어 수행 중 예기치 못한 상황에 마주쳤을 때, 즉 프로그래밍상의 오류와 같은 예외적인 상황을 마주쳤을 때 발생합니다. 이런 점에서 예외(Exception)라고 부릅니다.
- 폴트 : 예외를 처리한 직후 예외가 발생한 명령어부터 다시 실행하는 예외입니다. 예를 들어 페이지 폴트가 있습니다.
- 트랩 : 예외를 처리한 직후 예외가 발생한 명령어 다음 명령어부터 실행을 재개하는 예외입니다. 예를 들어 디버깅이 있습니다.
- 중단 : 프로그램을 강제로 중단시킬 수 밖에 없는 치명적인 오류를 발견했을 때 발생하는 예외입니다.
- 소프트웨어 인터럽트 : 시스템 호출이 발생했을 때 발생하는 예외입니다.
2. 비동기 인터럽트 : 주로 입출력장치에 의해 발생하는 인터럽트입니다. 예를 들어, CPU가 프린터와 같은 입출력장치에 입출력 작업을 부탁하면 작업을 끝낸 입출력장치가 CPU에 완료 알림(인터럽트)를 보냅니다.
- 입출력장치가 CPU에 인터럽트 요청을 보냅니다.
- CPU는 실행 사이클이 끝나면 인출 사이클에 돌입하기 전에 인터럽트 여부를 확인합니다.
- 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인합니다.
- 인터럽트를 받아들일 수 있다면 현재까지의 작업을 스택 영역에 백업합니다.
- CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행합니다.
- 인터럽트 서비스 루틴이 끝나면 백업해 둔 작업을 복구하여 실행을 재개합니다.
인터럽트 서비스 루틴은 어떤 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하고 작동해야 할지에 대한 정보를 담은 프로그램이기 때문에 메모리에 저장되어 있습니다. 인터럽트 벡터는 인터럽트 서비스 루틴을 식별하기 위한 정보입니다. 인터럽트 벡터를 알면 인터럽트 서비스 루틴의 시작 주소를 알 수 있습니다.