View

인터럽트란?

  • CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 또는 예외상황이 발생하여 처리가 필요할 경우 CPU에 알려서 처리하는 기술어느 한순간 CPU가 실행하는 프로그램은 하나!

=> 즉, ready -> running -> waite(block) 상태에서 다시 ready로 가려면 어떤한 신호가 필요한데, 이를 interrupt라고 한다.

  • 이벤트 발생 -> interrupt -> kernel모드 변경

인터럽트 필요 이유

=> 이벤트 정의부터 처리까지 담당하는 운영체제

  1. 선점형 스케쥴러 구현
    -   프로세스 running 중에 스케쥴러가 이를 중단 시키고, 다른 프로세스로 교체하기 위해, 현재 프로세스 실행을 중단시킴
        -   그러려면, 스케쥴러 코드가 실행이 되어서, 현 프로세스 실행을 중지켜야 함.
  2. IO Device와의 커뮤니케이션
    -   저장매체에서 데이터 처리 완료시, 프로세스를 깨워야 함.(block state -> ready state)
  3. 예외 상황 핸들링
    -   CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 또는 예외 상호아이 발생할 경우,  
        CPU가 해당 처리를 할 수 있도록 CPU에 알려줘야함.


인터럽트의 처리 예

  • CPU는 Program counter(PC)가 처리하는 code한줄에 집중하고 있다.
  • CPU가 프로그램을 실행하고 있을 때,
    • 입출력 하드웨어 등의 장치 이슈 발생
      1. 파일 처리가 끝났다는 것을 운영체제에 알려주기
      2. 운영체제는 해당 프로세스를 block state에서 실행대기(ready) 상태로 프로세스 상태 변경하기
    • 또는 예외 상황이 발생
      1. 0으로 나누는 계산이 발생해서, 예외 발생을 운영체제에 알려주기
      2. 운영체제가 해당 프로세스 실행 중지/에러 표시

주요 인터럽트

1. 계산하는 코드에서 0으로 나누는 코드 실행 시

#include <stdio.h> 
int main() { 
    printf("Hello World!\n"); 
    int data; 
    int divider = 0; 
    data = 1 / divider; //=> 에러 발행
    return 0; 
}
  • data = 1 / divider; // return 0;실행 중지 및 에러 화면을 보내주어야하는데, 이것을 운영체제에서 처리한다.

 

2. 타이머 인터럽트 

  • 컴퓨터 안에 타이머 인터럽트를 발생시키는 칩이 따로 존재하며, 이는 선점형 스케쥴러를 위해 필요하다.

 

3. 입출력(IO) 인터럽트 

  • 프린터, 키보드, 마우스, 저장매체(SSD 등)

🖐 인터럽트 종류 

  1. 내부인터럽트 = 소프트웨어 인터럽트
    • 주로 프로그램 내부에서 잘못된 명령 또는 잘못된 데이터 사용시 발생
      • 0으로 나눴을 때
      • 프로세스가 사용자 모드에서 허용되지 않은 명령 또는 공간 접근시(0~3GB : 사용자모드 , 3~4GB: 커널모드 사용 가능)
      • 계산 결과가 Overflow/Underflow 날 때-> int는 보통 32bit를 지칭하는데, 2의 32승이 표현할 수 있는 범위를 넘어설 때를 의미.
  2. 외부 인터럽트 = 하드웨어 인터럽트
    • 주로 하드웨어에서 발생되는 이벤트(프로그램 외부)
      • 전원이상
      • 기계문제
      • 키보드 등 IO 관련 이벤트
      • Timer 이벤트
Share Link
reply
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31