ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Computer Science] CPU : 명령어 사이클과 인터럽트
    Computer Science 2024. 5. 10. 20:18

    CPU의 작동원리 중 명령어 사이클과 인터럽트에 대하여 정리하였습니다.


    참조 : 인프런 '개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제'


    < 사이클 >

    프로그램 속 명령어들은 일정한 주기가 반복되며 실행되는데, 이 주기를 명령어 사이클(인출-실행-간접)이라고 합니다.
    1. 인출 사이클 : 실행할 명령어를 CPU로 가져옵니다.
    2. 실행 사이클 : 가져온 명령어를 실행합니다.
    3. 간접 사이클 : 추가적으로 메모리에 접근해야 하는 경우(간접 주소 지정 방식 등)

     

    : 명령어 사이클

     

     


    < 인터럽트 >

    인터럽트란 CPU가 현재 실행 중인 프로그램을 중단하고 다른 코드를 실행하도록 요청하는 신호입니다.
    : CPU가 얼른 처리해야 할 다른 작업이 생겼을 때, CPU가 꼭 주목해야할 때 발생


    인터럽트의 종류에는 동기 인터럽트(예외), 비동기 인터럽트(하드웨어 인터럽트)가 있습니다. 

     

     


    < 동기 인터럽트(예외) >

    CPU가 예기치 못한 상황을 접했을 때 발생

    폴트, 트랩, 중단, 소프트웨어 인터럽트

     

    Ex)

    - CPU가 접근하고자 하는 메모리 주소에 접근했는데 원하는 데이터가 없을 경우

    - 실행할 수 없는 명령어가 있는경우

    - Etc

     

     


    < 비동기 인터럽트(하드웨어 인터럽트) >

    주로 입출력장치에 의해 발생하고, 입출력 작업 도중에도 효율적으로 명령어를 처리하기 위해 하드웨어 인터럽트를 사용합니다.

     

     

    Ex) 프린트 완료 여부 확인

    : 입출력 장치는 일반적으로 CPU에 비해 느림. 인터럽트가 없다면 CPU는 프린트 완료 여부를 확인하기 위해 주기적으로 확인해야 하는 번거움 발생

    : 인터럽트가 있다면 입출력 작업 동안 CPU는 다른 일을 할 수 있음

     


    [ 하드웨어 인터럽트의 처리 순서 ]

    1. 입출력장치는 CPU에 인터럽트 요청 신호를 보냅니다.


     

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


     

    3. CPU는 인터럽트 요청을 확인하고 플래그 레지스터에 있는 입터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인합니다.

    +. 모든 인터럽트를 인터럽트 플래그로 막을 수 있는 건 아닙니다. 하드웨어 고장이나 정전 등 인터럽트 플래그가 막을 수 없는 인터럽트(non maskable interrupt)도 존재합니다.


     

    4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 스택에 백업합니다.

    01


     

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

    - 인터럽트 벡터 : 각각의 인터럽트를 구분하기 위한 정보(인터럽트 요청 신호 시 함께 전달됩니다)

                                                 (ex. 마우스가 보낸 인터럽트 요청인지, 키보드인지 프린터인지 등)

    - 인터럽트 서비스 루틴 : 인터럽트가 발생했을 때 해당 인터럽트를 어떻게 처리하기 위한 프로그램
                                                 (ex. 마우스가(혹은 키보드, 프린터 등) 인터럽트 요청을 보내면 이렇게 행동해야 한다)


     

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

     

     


     

    [ 총 사이클 ]

     

     

     

     

     

     

     

     

     

     

     

    댓글

Designed by Tistory.