-
[OS] 인터럽트(Interrupt)OS 2021. 7. 18. 20:02
인터럽트(Interrupt)
인터럽트(Interrupt)
인터럽트란?
마이크로프로세서(CPU)가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치에 예외상황이 발생하여 처리가 필요할 경우에 마이크로프로세서에게 알려 처리할 수 있도록 하는 것을 말한다.
현대의 운영체제는 인터럽트에 의해 구동된다고 할 수 있다. 인터럽트 당한 시점의 레지스터와 PC(Program Counter)를 저장한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
넓은 의미의 interrupt
인터럽트는 크게 하드웨어 인터럽트와 소프트웨어 인터럽트로 나눌 수 있다.
하드웨어 인터럽트는 키보드 마우스와 같은 하드웨어가 발생시킨 인터럽트를 말한다.
소프트웨어 인터럽트는 프로그램이 오류를 범하여 Exception이 발생하거나 사용자 프로그램이 커널함수 사용을 위해 호출하는 Systeme Call이 발생하는 경우를 말한다.
인터럽트 처리 과정
CPU는 매번 프로그램 카운터가 가리키고 있는 지점의 명령을 하나씩 수행하고 나서, 다음 명령을 수행하기 직전에 인터럽트 라인이 세팅되었는지 체크한다.
인터럽트가 발생하면 ?
1. 현재 실행중인 명령의 메모리 주소를 포함한 부가 정보를 저장한다.
CPU에서 명령이 실행될 때에는 CPU 내부에 있는 임시 기억장치인 레지스터에 데이터를 읽거나 쓰면서 작업을 한다.
이때 인터럽트가 발생하면 기존의 레지스터값들이 지워지게 되므로 CPU 내의 이러한 상태를 PCB에 저장한다.
PCB (프로세스 제어 블록)
PCB는 프로그램마다 하나씩 존재하는데, PCB에는 해당 프로그램의 어느 부분이 실행 중이였는지를 저장한다.
저장되는 내용은 실행중이던 코드의 메모리 주소, 레지스터 값, 하드웨어 상태 등이 저장된다.2. 인터럽트 처리 루틴
운영체제는 할 일을 쉽게 찾아가기 위해 인터럽트 벡터(interrupt vector)를 가지고 있다. 인터럽트 백터란 인터럽트 종류마다 번호를 정해서 번호에 따라 처리해야 할 코드가 위치한 부분을 가리키는 자료구조를 말한다.
인터럽트 백터를 따라가면 실제 처리해야 할 코드는 인터럽트 처리 루틴(Interrupt service routine) 또는 인터럽트 핸들러(Interrupt handler)라고 불리는 다른 곳에 정의된다.
인터럽트 처리 루틴(=Interrupt Service Routine, 인터럽트 핸들러)
해당 인터럽트를 처리하는 커널 함수를 말한다.3. 인터럽트 당하기 직전으로 복원
인터럽트 처리 루틴을 통해 해당되는 인터럽트 처리를 완료하고 나면 PCB에 저장한 수행중이던 원래 수행하던 작업으로 돌아가 중단되었던 일을 계속해서 수행한다.
Q.
Q. 운영체제한테 CPU가 넘어가는 경우는 언제인가?
1. 인터럽트 발생(Interrupt Line 사용하는 경우)
- 인터럽트 발생(Interrupt Line 사용하는 경우)
- 하드웨어 장치들이 I/O가 인터럽트를 요청 할 때
- timer 가 정해진 시간이 지난 후에 CPU에 제어권을 넘기는 경우
2. system call 발생
3. Exception 발생시
Q. 그렇다면 인터럽트 처리중에 또다른 인터럽트가 발생하는 경우는 어떻게 되는가?
1. 원직적으로는 인터럽트 처리중에 또 다른 인터럽트의 처리를 허용하지 않는다.
- 앞서 변경중이던 데이터를 또다른 인터럽트가 발생해 처리하게 되면 의도하지 않은 결과값으로 바뀔 수 있기 때문이다.
2. 예외적인 경우가 존재한다.
- 인터럽트마다 중요도가 다르다.
- 상대적으로 낮은 중요도를 가진 인터럽트를 처리하는 도중 높은 중요도의 인터럽트 발생을 허용한다.
POST
References
잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)
'OS' 카테고리의 다른 글
[OS] 프로그램 VS 프로세스 VS 스레드 (0) 2021.07.21 [OS] 프로세스 관리, 프로세스 문맥(context) (0) 2021.07.20 [OS] 프로세스 메모리 구조 (코드, 데이터, 스텍, 힙) (2) 2021.07.19 [OS] 컴퓨터 시스템의 동작 원리 (2) 2021.07.17 [OS] 운영체제 (0) 2021.07.15