본문 바로가기
Computer Science/운영체제

06. 인터럽트

by _S0_H2_ 2021. 7. 31.
728x90
반응형

1. 인터럽트란 ?
CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 경우에 CPU에 알려서 처리하는 기술


1 ) Timer Interrupt : 선점형 스케쥴러를 따를 때, 프로세스 running 중에 스케쥴러가 이를 중단시키고, 다른 프로세스로 교체하기 위해 현재 프로세스 실행을 중단시킨다. 그러기 위해서는 스케쥴러 코드가 실행이 되어서 현 프로세스 실행을 중지시켜야 한다.

2 ) IO Device와의 커뮤니케이션 중 저장 매체에서 데이터 처리 완료시, 프로세스를 깨워야한다.
( block state -> ready state )

3 ) 1 / 0 을 계산할 때 예외상황을 프로세스 등에 알려주어야함

#include <stdio.h> int main() { print("hello"); int data; int divider = 0; data = 1/ divider; <--- 여기에서 인터럽트 발생 return 0; }

 

2. 인터럽트 종류


1 ) 내부 인터럽트(SW 인터럽트) : 주로 프로그램 내부에서 잘못된 명령 또는 데이터 사용시 발생
- 0으로 나눴을 때
- 사용자 모드에서 허용되지 않은 명령 또는 공간 접근시
(프로세스가 0~4GB까지 공간을 갖는데 0~3GB는 사용자모드, 3~4GB는 커널모드이다. )
- 계산 결과가 Overflow, Underflow날 때

2 ) 외부 인터럽트 : 주로 하드웨어에서 발생되는 이벤트
- 전원 이상
- 기계 문제
- 키보드 등 IO 관련 이벤트
- Timer 이벤트

3. 인터럽트 내부 동작

1 ) 시스템 콜 인터럽트
: 시스템콜을 실행하기 위해서 강제로 코드에 인터럽트 명령을 넣어 CPU에게 실행시켜야 한다.

mov eax, 1 <---- 레지스터에 시스템 콜 번호를 넣고 mov ebx, 0 <---- 시스템 콜에 해당하는 인자값을 넣고 int 0x80 <---- sw 인터럽트 명령을 호출하면서 0x80 값을 넘겨줌


이후 0x80값을 받으면

- CPU는 사용자 모드를 커널 모드로 변경
- IDT(Interrupt Descriptor Table) 에서 0x80에 해당하는 주소를 찾아서 실행
- 시스템콜 함수에서 eax로부터 시스템 콜 번호를 찾아서 해당 번호에 맞는 시스템콜 함수로 이동
- 해당 시스템콜 함수 실행 후, 다시 커널 모드에서 사용자 모드로 변경 후 다시 해당 프로세스 다음 코드로 진행


2 ) 사용자/커널 모드와 프로세스, 인터럽트


4. 인터럽트와 IDT

: 인터럽트는 미리 정의되어 각각 번호실행코드를 가리키는 주소가 기록되어 있음

- where? IDT에 기록

- when? 컴퓨터 부팅시 운영체제가 기록

- what? 운영체제 내부 코드

 

728x90
반응형

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

08. 프로세스와 Context Switching  (0) 2021.08.01
07. 프로세스 구조  (0) 2021.07.31
05. 프로세스 상태와 스케쥴러  (0) 2021.07.26
04. 스케줄링 알고리즘  (0) 2021.07.19
03. 프로세스 스케쥴링  (0) 2021.07.18