명령어 사이클과 인터럽트

bebrain·2023년 6월 11일
0

컴퓨터구조

목록 보기
8/8

명령어 사이클(instruction cycle)

CPU가 일정한 주기를 반복하며 프로그램 속 명령어들을 하나씩 처리하는 정형화된 흐름

  • 인출사이클(fetch cycle)

    메모리에 저장된 명령어를 CPU로 가져오는 단계

  • 실행사이클(execution cycle)

    가져온 명령어를 CPU에서 실행하는 단계(제어장치가 명령어 레지스터에 담긴 값을 해석하고 제어신호를 발생시키는 단계)


  • 간접사이클(indirect cycle)

하지만 명령어를 CPU로 가져왔다고 하더라도 바로 실행할 수 없는 경우도 있다.

간접주소 지정방식의 경우 유효주소의 주소를 오퍼랜드 필드에 저장하는 방식이므로 메모리에 한번 더 접근하는 과정이 필요하기 때문이다.

인터럽트(interrupt)

cpu의 작업을 방해하는 신호

CPU가 잠시 하던 작업을 중단해야하는 상황이 발생한 것을 말한다.

  • 동기 인터럽트(synchronous interrupts)

    예상치 못한 상황(프로그래밍상의 오류)이 발생했을 때, CPU에 의해 발생하는 인터럽트로 예외(exception)라고도 부른다.

    • 폴트 : 예외를 처리한 직후 예외가 발생한 명령어부터 실행
    • 트랩 : 예외를 처리한 직후 예외가 발생한 명령어의 다음 명령어부터 실행(ex 디버깅)
    • 중단 : CPU가 실행중인 프로그램을 강제로 종료할 정도의 심각한 오류가 발생했을 때
    • 소프트웨어 인터럽트 : 시스템 호출이 발생했을 때

  • 비동기 인터럽트(asynchronous interrupts)

    알림과 같은 기능을 하며 주로 입출력장치에 의해 발생한다. 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 사용한다.

    • 비동기 인터럽트 처리순서
    1. 입출력장치 → CPU로 인터럽트 요청신호를 보낸다.
    2. 실행사이클이 끝나고 명령어를 인출하기 전 CPU는 항상 인터럽트 여부를 확인한다.
    3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받을 수 있는 상태인지 확인한다.
    4. 인터럽트를 받을 수 있다면 CPU는 현재까지의 작업을 백업해둔다.
    5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행한다.
    6. 인터럽트 서비스 루틴 실행이 완료되면 백업해둔 작업을 가져와 다시 수행한다.
비동기 인터럽트 ex) 프린터출력

▶ 입출력장치는 CPU보다 속도가 느리기때문에 CPU는 작업결과를 바로 받을 수 없다.
▶ CPU는 입출력장치가 작업을 완료할때까지 주기적으로 완료여부를 확인해야 한다.
▶ 이때 인터럽트를 사용하면 프린트 완료 인터럽트를 받을때까지 다른 작업을 처리할 수 있다.

** 인터럽트 요청신호 : 현재 인터럽트가 가능한지 CPU에 확인하는 것.

** 인터럽트 플래그 : 인터럽트를 받아도 될지 무시할지 결정하는 플래그.

인터럽트 요청신호를 받은 CPU는 인터럽트 플래그를 확인하는데 불가능으로 설정된 경우(중요작업처리중) 인터럽트 요청이 오더라도 무시하고, 가능으로 설정된 경우에는 인터럽트 요청을 받아들인다.

하지만 불가능으로 설정된 경우라 하더라도 강제로 인터럽트 요청을 받아야할때가 있는데 정전이나 하드웨어 고장으로 인한 인터럽트같은 경우이다.

** 인터럽트 벡터 : 각각의 인터럽트 서비스 루틴을 구분하기 위한 정보

** 인터럽트 서비스 루틴(=인터럽트 핸들러) : 인터럽트를 처리하기 위한 프로그램. 특정한 인터럽트가 발생했을 때 어떻게 처리해야 할 지 작동방법에 대한 정보가 담긴 프로그램이다.

0개의 댓글