오늘날 OS는 interrupt를 기반으로 동작 (Interrupt Based System)한다:
interrupt가 발생하면 CPU는 현재 하는 일을 멈추고 해당 interrupt를 해결하려고 동작한다.
processor가 특정 동작을 하고 있는 중 (OS가 특정 process를 수행)에
다른 device들에게서 interrupt가 오는 경우, (경우에 따라 다르지만)
현재 실행되고 있는 일을 멈추고
해당 interrupt에 대응하는 Interrupt Service Routine (ISR)이 수행하는 것을 가르킴.
- routine이란 어떤 동작을 수행하는 프로그램 코드를 의미함.
Interrupt 작동단계 : Keyboard 를 예로
Keyboard에서 키를 누를 경우 다음의 단계를 거치게 된다.
- Keyboard의 controller에서 key up, key down 등의 interrupt를 일으키는 event를 감지.
- Keyboard에서 전기적 신호가 processor로 전달됨 (interrupt 발생).
- 바로 연결된 것은 아님(작은 임베디드 시스템의 특정 센서라면 직접 연결될 수도 있음).
- 하지만 결국은 interrupt signal이 들어오는 processor의 pin에 전기신호가 들어오게 된다.
- processor는 매번 execute 명령이 끝날 때마다 interrupt를 확인하고 interrupt 요청 이 있을 경우, 현재 하던 일을 중지 (현재 실행 중인 process 중지).
- 현재 하던일을 stack에 저장하는 context switching이 발생. (실행 중이었던 process의 상태 저장)
- 이후 해당 ISR에 제어권이 넘어가며 수행됨 (키보드의 경우 keyboard ISR이 수행됨.) : ISR (또는 handler) 실행
- 키보드 인터럽트의 경우 scan code의 값을 ASCII code로 변환하여 buffer에 저장.
- ISR수행 이후, 원래 수행하던 process가 수행된다.(context switching) : 저장된 상태로 복구하고 다시 process 실행 재개
- 키보드 값이 필요한 process라면 buffer에서 읽어들이게 됨.
Interrupt 종류
다양한 Interrupt가 있지만 크게 다음과 같은 3가지 종류로 나뉨.
- Hardware Interrupt
- processor에 연결된 hardware에서 발생시키는 interrupt임.
- 키보드, 마우스를 조작할 때 발생되는 게 가장 흔한 예임 (입출력장치 interrupt).
- Timer interrupt, 전원공급 이상 interrupt 등이 있음.
- Timer interrupt 를 통해 무한루프인 프로그램도 종료되며, 특정 프로그램이 CPU를 독점하는 것이 방지됨.
- 전원공급 이상 interrupt를 통해 작업 중이던 process를 dump한다던지의 처리가 가능.
- Software Interrupt
- User application의 process가 system call을 할 때 발생되는 interrupt들.
- User application은 User Mode에서 수행되기 때문에 직접 접근할 수 없는 resource들이 존재한다.
- 이같은 resource에 접근이 필요한 코드가 User application에 있다면,
- 해당 코드를 수행할 때, SVC(SuperVisor Call)를 통해 Kernel Mode 로 변경이 되고
- (물론 OS가 허락을 해야함),
- 해당 코드의 수행이 종료된 이후 다시 User Mode로 변경이 된다.
- system call은 OS가 제공하는 서비스들에 User application이 접근하게 해주는 interface이고, 이들 System call을 수행케 해주는 instruction (CPU가 가지고 있는 instruction set에 속함)이 SVC임.
- TRAP: Register와 스택 포인터가 저장되고, Context Switching이 일어나고, 실행이 재개될 수 있게 해주는 특별한 명령어. CPU 내부 interrupt라고도 불리며, system call도 Trap을 통해 구현됨.
- SVC는 Software interrupt의 대표적 예임.
- Internal Interrupt
- processor 내부에서 발생되는 interrupt: Processor가 프로그램의 코드를 실행하는 도중 발생한 interrupt.
- 잘못된 instruction이나 data를 사용한 경우 발생한다.
- Overflow나 Divded by Zero, 기타 Exception 등이 발생한 경우 발생! : Trap은 특정 조건을 걸어둔 경우 적절할 ISR이 수행되는 경우라면 Exception은 예기치 못한 예외상황에 해당한다. SW 내부에서 exception처리를 통해 프로그래밍에서 특정 exception들이 발생시 처리할 수도 있다.
더 읽어보면 좋은 자료들
https://dsaint31.me/mkdocs_site/CE/ch05/ch05_04_02_interrupt/
'Computer > CE' 카테고리의 다른 글
[CE] Gateway (0) | 2023.01.17 |
---|---|
[CE] Router (0) | 2023.01.17 |
[CE] Direct Access Storage Device & media (DASD) (0) | 2023.01.13 |
[CE] Optical Disk (0) | 2023.01.13 |
[CE] Internet Protocol Address (IP Address) (0) | 2023.01.02 |