Search

04-3 명령어 사이클과 인터럽트

Last update: @1/7/2023
혼자 공부하는 컴퓨터구조 + 운영체제

컴퓨터 구조

01 컴퓨터 구조 시작하기

02 데이터

03 명령어

04 CPU의 작동 원리

05 CPU 성능 향상 기법

06 메모리와 캐시 메모리

07 보조기억장치

08 입출력장치

명령어 사이클과 인터럽트

명령어 사이클 : 하나의 명령어를 처리하는 정형화된 흐름
인출 사이클(fetch cycle) : 메모리에 있는 명령어를 CPU로 가지고 오는 단계
실행 사이클(execution cycle) : CPU로 가져온 명령어를 실행하는 단계. 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생킴
간접 사이클(indirect cycle) : 간접 주소 지정 방식의 경우처럼 메모리 접근을 한 번 더 하는 단계
인터럽트 사이클(interrupt cycle) : 명령어 실행 중간에 인터럽트 명령을 수행하는 단계
인터럽트(interrupt) : CPU가 수행 중인 작업은 방해를 받아 잠시 중단될 수 있는데, 이렇게 CPU의 작업을 방해하는 신호
동기 인터럽트(synchronous interrupts = exception(예외)) : CPU에 의해 발생하는 인터럽트. CPU가 명령어들을 수행하다가 에상치 못한 상황에 마주쳤을 때, 예를 들어 프로그래밍상의 오류와 같은 예외상황에 마주쳤을 때 발생
폴트(fault) : 예외를 처리한 직후 예외가 발생한 명령어부터 실행을 재개하는 예외(예> 메모리가 아니라 보조기억장치에 데이터가 있을 때)
트랩(trap) : 예외를 처리한 직후 예외가 발생한 명령어의 다음 명령어부터 실행을 재개하는 예외(예> 디버깅)
중단(abort) : CPU가 실행 중인 프로그램을 강제로 중단시킬 수밖에 없는 심각한 오류를 발견했을 때 발생하는 예외
소프트웨어 인터럽트(software interrupt) : 시스템 호출이 발생했을 때 나타남
비동기 인터럽트(asynchronous interrupts = hardware interrupt(하드웨어 인터럽트)) : 주로 입출력장치에 의해 발생하는 인터럽트
예시
프린터와 같은 입출력장치에 입출력 작업을 부탁하고, 작업을 끝낸 입출력장치가 CPU에 작업완료 알림(인터럽트)을 보낸 경우
키보드, 마우스와 같은 입출력장치가 어떠한 입력을 받아들였을 때 이를 처리하기 위해 CPU에 입력 알림(인터럽트)을 보낸 경우
하드웨어 인터럽트를 사용하면 CPU는 주기적으로 외부 장치들의 작업 완료 여부를 확인할 필요가 없음
하드웨어 인터럽트 처리 순서
1.
입출력장치는 CPU에 인터럽트 요청 신호를 보냄
2.
CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인함
3.
CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인함
4.
인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업함
5.
CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행함
6.
인터럽트 서비스 루틴 실행이 끝나면 4 에서 백업해 둔 작업을 복구하여 실행을 재개함
인터럽트 요청 신호 : 다른 장치가 CPU를 인터럽트하고자 할 때 보내는 신호
인터럽트 플래그(interrupt flag) : 말 그대로 하드웨어 인터럽트를 받아들일지, 무시할지를 결정하는 플래그. CPU가 중요한 작업을 처리해야 하거나 어떤 방해도 받지 않아야 할때 인터럽트 플래그는 불가능으로 설정되고, 인터럽트 요청이 오더라도 해당 요청을 무시함. ‘가능’으로 설정되어 있다면 CPU는 인터럽트 요청 신호를 받아들이고 인터럽트를 처리함
막을 수 없는 인터럽트 : 인터럽트 플래그가 불가능으로 설정되어 있어도 무조건 실행되는 인터럽트(정전, 하드웨어 고장으로 인한 인터럽트 등)
막을 수 있는 인터럽트 : 인터럽트 플래그가 불가능으로 설정되어 있으면 실행되지 않는 인터럽트
인터럽트 서비스 루틴(ISR; Interrupt Service Routine = interrupt handler) : 인터럽트를 처리하기 위한 프로그램. 어떤 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하고 작동해야 할지에 대한 정보로 이루어진 프로그램. 즉, CPU가 인터럽트를 처린하다는 말은 인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 다시 되돌아온다는 뜻
인터럽트 벡터(interrupt vector) : 인터럽트 서비스 루틴을 식별하기 위한 정보. 인터럽트 벡터를 알면 인터럽트 서비스 루틴의 시작 주소를 알 수 있기 때문에 CPU는 인터럽트 벡터를 통해 특정 인터럽트 서비스 루틴을 처음부터 실행할 수 있음. 인터럽트 요청을 보낸 대상이 데이터 버스를 통해 전달함
인터럽트 백업 : CPU는 인터럽트 서비스 루틴을 실행하기 전에 프로그램 카운터 값 등 현재 프로그램을 재개하기 위한 모든 내용을 스택에 백업함. 그러고 나서 인터럽트 서비스 루틴의 시작 주소가 위치한 곳으로 프로그램 카운터 값을 갱신하고 인터럽트 서비스 루틴을 실행함