꾸준하게 기록하기
article thumbnail
Published 2022. 2. 23. 16:08
인터럽트 CS/운영체제

 

1. 인터럽트란?

CPU 프로그램을 실행하고 있을 ,

입출력 하드웨어 등의 장치나 또는 예외상황이 발생하여 처리가 필요할 경우에 CPU 알려서 처리하는 기술

어느 한순간에 CPU 실행하는 명령은 하나! 

CPU 처리하는 코드 이외에 외부에서 이벤트가 발생하는 경우 CPU 알려주는 기술

 

2. 인터럽트 필요한 이유

1. 선점형 스케줄러 구현

  : 프로세스 running 중에 스케줄러가 이를 중단시키고 다른 프로세스로 교체하기 위해 현재 프로세스 실행을 중단시킴.

그러려면 스케줄러 코드가 실행이 되서 프로세스 실행을 중지시켜야함 ( 인터럽트 기술을 이용해 중지 )

 

2. IO Device와의 커뮤니케이션

: 저장매체에서 데이터 처리완료시, 프로세스에 알려줘야함 → 인터럽트 기술이 알려줌 (block state → ready state)

 

3. 예외 상황 핸들링

: CPU 프로그램을 실행하고 있을 , 입출력 하드웨어 등의 장치가 또는 예외 상황이 발생한 경우

(이상동작 발견 - 외부에 문제가 있을 ) CPU 해당 처리를 있도록 CPU 알려줘야함 인터럽트 필요

 

3. 인터럽트 처리 예 

CPU 프로그램을 실행하고 있을 ,

 

1. 입출력 하드웨어 등의 장치 이슈 발생

- 파일 처리가 끝났다는 것을 운영체제에 알려주기

- 운영체제는 해당 프로세스를 block state에서 실행 대기(reday) 상태로 프로세스 상태 변경하기

 

2. 또는 예외 상황이 발생

- 0으로 나누는 계산이 발생해서, 예외 발생을 운영체제에 알려주기

- (인터럽트 발생해서) 운영체제가 해당 프로세스 실행 중지/에러 표시

 

4. 이벤트와 인터럽트

- 인터럽트는 일종의 이벤트로 불림

- 이벤트가 발생하면 이벤트에 맞게 운영체제가 처리

 

5. 주요 인터럽트

1. 계산하는 코드에서 0으로 나누는 코드 실행시 (Divide-by-Zero Interrupt)

<c++ />
#include <stdio.h> int main() { printf("Hello World\n"); int data; int divider = 0; data = 1 / divider; // 이 부분에서 인터럽트 발생 return 0; }

divider 가 0이라서 data = 1/0 이 되므로 오류. 컴파일러에선 체크 안됨

CPU에서 코드를 실행할 때 오류가 발생 → 해당 프로세스를 중지시키고 에러메시지를 보여준다.

 

2. 타이머 인터럽트

→ 타이머 인터럽트를 발생시키는 장치가 컴퓨터 안에 별도의 칩으로 존재. 일정 시간마다 계속 인터럽트 발생시킨다.

→ 선점형 스케줄러를 위해 필요

 

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

 ex. 프로세스가 실행 키보드가 눌리면 운영체제에 알려줘야하고 어떻게 처리할지

 

6. 인터럽트 종류 

1. 내부 인터럽트 (소프트웨어 인터럽트)

 

 - 주로 프로그램 내부에서 잘못된 명령(예외사항) 또는 잘못된 데이터 사용시 발생

  → 0으로 나눴을

  → 사용자 모드에서 허용되지 않은 명령 또는 공간 접근시

  → 계산 결과가 Overflow/Underflow   (Overflow:변수가 표현할 있는 범위 넘어설때)

 

2. 외부 인터럽트 (하드웨어 인터럽트)

 

 - 주로 하드웨어에서 발생되는 이벤트(프로그램 외부)

  → 전원 이상

  → 기계 문제

  → 키보드 등 IO 관련 이벤트 

  → Timer 이벤트

 

 

 

제로베이스 컴퓨터 공학 전공자 따라잡기 강의 시청 후 정리한 내용입니다.
728x90

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

프로세스 구조  (0) 2022.02.23
인터럽트 내부 동작  (0) 2022.02.23
선점형과 비선점형 스케쥴러  (0) 2022.02.23
프로세스 상태와 스케쥴러  (0) 2022.02.23
스케쥴링 알고리즘 기본  (0) 2022.02.23
profile

꾸준하게 기록하기

@:_:

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!