개발자 끄적끄적

운영체제와 인터럽트(Interrupt) 본문

운영체제

운영체제와 인터럽트(Interrupt)

햏치 2024. 3. 13. 18:35

<인터럽트(Interrupt)>
- CPU가 현재 하던 일을 중단하고 미리 정의된 다른 일을 하도록 처리하는 '비동기적' 방법 

*비동기적 : 동시에 일어나지 않는다 를 의미한다. 요청과 결과가 동시에 일어나지 않을 것이라는 약속이다.

  1. 하드웨어 인터럽트 : 각 장치가 어떤 비동기적 상황 발생을 CPU에게 알리는 신호
    - 인터럽트 발생 -> CPU는 ISR 실행
  
  2. 소프트웨어 인터럽트 : CPU 명령어에 의해 하드웨어 인터럽트 수신한 것처럼 처리

  - 예시)
    - 사용자의 입력 장치 조작
    - 디스크 처리 종료
    - 시스템 클럭으로부터 시간 만료 알림, USB 메모리 부착 혹은 해제



<인터럽트를 고려한 명령어 사이클>
- 명령어 인출 -> 명령어 실행 -> 인터럽트 발생(Y/N)
  인터럽트가 발생할 때(Y) -> ISR 시작 준비
  인터럽트가 발생되지 않았을 때(N) -> 다음 명령어 인출을 수행



<인터럽트 발생 및 처리 과정>
- IDTR(Interrupt Descriptor Table Register)
  - 인터럽트 벡터 테이블의 시작 주소와 크기를 가진 CPU안에 있는 레지스터

- IVT(Interrupt Vector Table)
  - 각 인터럽트에 대한 ISR의 시작 주소(인터럽트 벡터)를 갖는 테이블

1. 인터럽트가 발생하기 전 응용프로그램 실행 중
2. 인터럽트 발생 -> I/O APIC(전체 시스템에 1개 존재)
3. 인터럽트 메시지(인터럽트 벡터 번호 N) 전송 -> APIC 전달
4. 인터럽스 신호를 발생 -> Local APIC #n
5. CPU의 INTR에 인터럽트 신호를 발생, 수신되어진 벡터는 CPU가 읽어갈 수 있도록  APIC자신에게 저장 -> CPU가 인터럽트가 발생했다고 인지
6. 인터럽트 벡터 테이블에서 인터럽트 N의서비스 루틴(ISR)의 주소를 알아낸다
7. 인터럽트 서비스 루틴 수행
8. 인터럽트 전에 하던 작업으로 돌아간다
9. CPU는 인터럽트 발생 전에 하던 작업을 계속한다 



<인터럽트 서비스 루틴과 운영체제>
- ISR(Interrupt Service Routine)
  - 인터럽트 핸들러
  - 디바이스 드라이버나 커널 코드, 임베디드 컴퓨터의 ROM 상에 위치

1. 운영체제
  1) 커널
    - 입출력 장치와 무관한 코드
    - 입출력 장치와 무관하게 작동
    - 입출력 장치와 무관하게 개발 

  2) 드라이버
    - 입출력 장치 의존적인 코드
    - 입출력 장치 직접 제어
    - 입출력 장치와 관련하여 개발
    - ex) 키보드 드라이버(키보드), 마우스 드라이버(마우스), 하드 디스크(하드 디스크 드라이버), 프린터 드라이버(프린터)

라이브러리 함수들 및 응용프로그램의 사용자 코드에 연결




<인터럽트는 다중 프로그래밍의 핵심>
- 다중 프로그래밍 환경에서 : 입출력 처리가 완료되었다는 것을 통보 받는 방법
  - CPU 폴링(polling)에 비해 효율적

- 인터럽트의 효과
  - 입출력 장치와 CPU가 동시에 각자의 작업 실행 가능
  - 컴퓨터 시스템의 효율적 동작 : CPU 이용률(활용률)과 시스템 처리율 향상

'운영체제' 카테고리의 다른 글

프로세스와 프로세스 관리  (0) 2024.03.22
커널(Kernel)과 시스템 호출(System Call)  (0) 2024.03.13
논리 주소 공간과 실행 모드  (0) 2024.03.13