인터럽트
개념
- CPU가 프로그램을 실행하고 있을 때 (프로세스가 CPU를 선점하여 Running 상태 일때), 입출력 하드웨어 등의 장치에 예외상황이 발생하여 처리가 필요할 경우에 CPU에게 알려 이를 먼저 처리할 수 있도록 하는것 (Running상태의 프로세스를 Waiting 또는 Ready 상태로 변경한다)
- 인터럽트는 크게 하드웨어 인터럽트와 소프트웨어 인터럽트로 나눌 수 있다.
하드웨어 인터럽트
는 키보드 마우스와 같은 하트웨어가 발생시킨 인터럽트소프트웨어 인터럽트
는 프로그램이 오류를 범하여 Exception이 발생하거나 사용자 프로그램이 커널함수 사용을 위해 호출하는 System Call이 발생하는 경우를 말함
소프트웨어 인터럽트
- 내부/ 동기적 인터럽트
- trap, exception이라고 함
- 프로세스가 실해중인 명령어로 인해 발생하는 동기적 인터럽트
- 프로그램상의 문제로 인해(다른 프로세스의 메모리 접근...)
- 입출력 장치 같은 주변장치의 조작에 의한
- 산술연산중 발생(ex. 0으로 나누기)
- 터미널 작업중단 (Ctrl + c)
- Running -> Ready
하드웨어 인터럽트
- 외부 / 비동기적 인터럽트
- 인터럽트는 일반적으로 하드웨어 인터럽트를 뜻함
- CPU 외부의 인터럽트 요구신호 때문에 발생
- 정전, 하드웨어 고장
- 입출력 이벤트 발생
- Running -> Waiting
처리과정
- 인터럽트 발생하면 현재 실행 중인 프로세스는 일시 정지상태가 된다.
재시작을 위해 현재 프로세스 관련정보를 임시로 저장.(PCB에 저장) - 인터럽트 컨트롤러가 실행되어 인터럽트의 처리 순서를 결정
- 먼저 처리할 인터럽트가 결정되면 인터럽트 벡터에 등록된 인터럽트 핸들러가 실행
- 인터럽트 벡터 : 인터럽트 종류마다 번호를 정해서 번호에 따라 처리해야할 코드가 위치한 부분을 가리키는 자료구조
- 인터럽트 핸들러 : 해당 인터럽트를 처리하는 커널 함수, 인터럽트 처리 루틴이라고도 함
- 인터럽트 벡터에 연결된 핸들러가 인터럽트 처리를 마치면 일시 정지된 프로세스가 다시 실행되거나 종료
인터럽트와 이중모드
- 사용자 프로세스에서, 하드디스크 입출력, 프로세스 생성등 커널의 기능을 사용하기 위해서
사용자모드 -> 커널모드
로 전환하며 일처리를 하는 모드- 프로세스 -> 커널 프로세스/ 사용자 프로세스 로 나눌수있다
- 커널 프로세스가 실행되는 상태 : 커널모드
- 사용자 프로세스가 실행되는 상태 : 사용자모드
- 사용자가 커널모드로 진입하는 경우 두가지 경우가 있다
- 시스템 호출을 사용하는 경우
- 인터럽트를 발생 시킨 경우