본문 바로가기
CS/컴퓨터 구조

컴퓨터 구조 - 명령어 사이클과 인터럽트 [혼공컴구]

by 블로블로글 2023. 11. 17.

1. 명령어 사이클

  - 하나의 명령어를 처리하는 정형화된 흐름

  - 프로그램 속 각각의 명령어들은 일정한 주기가 반복되며 실행

  - 과정

    - 인출 사이클 (fetch cycle) : 메모리에 있는 명령어를 CPU로 가지고 오는 단계

    - 실행 사이클 (excution cycle) : 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어 신호를 발생

    - 간접 사이클 (indirect cycle)

      - 간접 주소 지정 방식 등에서는 유효 주소의 주소를 명시하므로 명령어를 인출한다고 바로 실행이 불가능

      - 이 경우 명령어 인출을 위해 메모리 접근을 한 번 더 해야 하기 때문에 간접 사이클을 거침

    - 인터럽트

      - CPU의 작업을 방해하는 신호

      - 종류

        1. 동기 인터럽트

          - CPU가 실행하는 프로그래밍 상의 오류와 같은 예외적인 상황에 마주쳤을 때 발생

        2. 비동기 인터럽트

          - 주로 입출력 장치에 의해 발생

          - 입출력 장치는 CPU보다 속도가 현저히 느리기 때문에 CPU는 입출력 작업의 결과를 바로 받을 수 없음

          - 따라서 비동기 인터럽트는 입출력 장치의 작업이 완료될 때까지 CPU가 다른 작업을 처리할 수 있게 해줌

          - 프린터와 같은 입출력 장치에 CPU가 작업을 부탁하면 작업을 끝낸 입출력 장치가 CPU에 인터럽트(완료 알림)를 보냄

          - 비동기 인터럽트 동작 과정

            1. 입출력 장치가 CPU에 인터럽트 요청 신호 보냄

            2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부를 확인

            3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 확인

              - 인터럽트 플래그

                - 플래그 레지스터 안에 존재

                - 가능, 불가능 여부에 따라 CPU가 인터럽트를 받아들일지 말지 결정

                - 정전이나 하드웨어 고장으로 인한 인터럽트는 인터럽트 플래그가 불가능으로 설정되어도 반드시 먼저 처리함

            4. 가능하다면 지금까지의 작업을 백업

            5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행

              - 인터럽트 서비스 루틴 (인터럽트 핸들러)

                - 인터럽트를 처리하기 위한 프로그램

                - 인터럽트를 어떻게 처리하고 작동해야 할지에 대한 정보로 이루어짐

                - 다른 프로그램과 마찬가지로 프로그램 카운터를 비롯한 레지스터들을 사용하면서 실행

              - 인터럽트 벡터

                - 인터럽트 서비스 루틴을 식별하기 위한 정보

                - 인터럽트 벡터를 알면 인터럽트 서비스 루틴의 시작 주소를 알 수 있음

                - CPU는 인터럽트 벡터를 통해 특정 인터럽트 서비스 루틴을 처음부터 실행할 수 있음

            6. 인터럽트 서비스 루틴이 끝나면 백업해 둔 작업을 복구하여 실행

      - 인터럽트 처리 과정 정리

        1. 인터럽트 서비스 루틴을 실행한 후

        2. 본래 수행하던 작업으로 돌아온다.

사이클 정리