운영체제 스터디 (5) - interrupt

운영체제 스터디 도중 쉽게 배우는 운영체제를 읽고 요약한 내용입니다. 자세한 내용은 책을 구매하여 확인 부탁드립니다.

인터럽트 처리

인터럽트

  • 프로그래밍의 비유
    • 순차적 프로그래밍 에서는 버튼이 눌렸는지, 안눌렸는지 주기적으로 직접 확인 → 비효율적
    • 버튼이 눌리면 시스템에 알려줌 → event driven 방식
  • 운영체제 입출력 처리
    • 입출력 장치가 별로 없었을 때는 주기적으로 직접 모두 확인 → 폴링
    • 입출력을 요청하고, 완료되면 이벤트를 발생시켜 이벤트를 알림 → 인터럽트
  • 인터럽트의 용도
    • 입출력 용도 뿐만 아니라, Ctrl + c로 프로세스 멈추는 것도 인터럽트
    • 어떤 프로세스가 다른 프로세스의 메모리 영역에 침범 하는 것도 인터럽트

동기적 인터럽트 / 비동기적 인터럽트

  • 동기적 인터럽트 : 실행 중인 명령어로 인해 발생 하는 인터럽트
    • 예시
      • 프로그램 상의 문제 때문에 일어나는 인터럽트 ( 다른 프로세스의 메모리에 접근 … )
      • 입출력 장치의 조작
      • 수를 0으로 나눔
  • 비동기적 인터럽트 : 실행 중인 명령어와 무관하게 발생하는 인터럽트, 하드웨어와 관련된 것이 다수
    • 예시
      • 하드디스크 읽기 오류
      • 메모리 불량

인터럽트 처리 과정

  • 인터럽트 = 인터럽트 번호 ( IRQ ) + 번호에 붙어있는 함수 ( Interrupt handler )
    • 윈도우 화면의 최소화 버튼에는 창을 작게 만드는 함수가 정의되어 있음
    • 종료 버튼에도 함수가 정의 되어 있음
    • 최대화 함수를 지우면, 눌러도 반응이 없음
  • 인터럽트는 종류가 많음 → 이를 구분하기 위해 각 인터럽트별 고유번호가 존재 ( IRQ )
  • 인터럽트가 여러개 동시에 발생 할 수 도 있음 → 인터럽트 벡터 자료구조를 사용하여 하나로 묶어서 보냄
  • 예시
    • 인터럽트 발생
    • 프로세스 일시정지 상태로 전환, 재시작 하기 위해 현재 프로세스 관련 정보를 임시로 저장
    • 인터럽트 컨트롤러가 실행되어 처리 순서를 결정
    • 여러개의 인터럽트가 동시에 발생했다면, 인터럽트의 우선순위를 고려하여 중요한 인터럽트 부터 처리하도록 순서를 결정
    • 인터럽트 벡터에 등록된 인터럽트 핸들러가 실행
    • 모든 인터럽트 처리를 마치면, 일시 정지된 프로세스가 다시 실행되거나 종료 ( 메모리 침범 인터럽트 : 종료, 입출력 완료 : 재실행 )

인터럽트와 이중 모드

  • 프로세스 → 커널 프로세스 / 사용자 프로세스로 나눌 수 있음
  • 커널 프로세스가 실행되는 상태 → 커널 모드
  • 사용자 프로세스가 실행되는 상태 → 사용자 모드
  • 이중 모드 ( dual mode )
    • 사용자 프로세스에서, 하드디스크 입출력, 프로세스 생성 등 커널의 기능을 사용하기 위해서 사용자모드 → 커널모드로 전환 하며 일 처리를 하는 모드
    • 운영체제가 자원을 보호하기 위해 사용하는 기법
    • 커널은 시스템 호출을 통해서만 자원에 접근하도록 허용
    • 사용자 프로세스가 커널 모드에서 실행되지 못하도록 막음
    • 이러한 시스템 호출 위해 API를 제공
    • 이렇게 사용자가 커널 모드로 진입 하는 경우는, 시스템 호출을 사용 한 경우, 인터럽트를 발생 시킨 경우로 두가지 경우가 있음