1. Interrupt Based System (or Interrupt Driven System)
오늘날 OS는 interrupt를 기반으로 동작 (Interrupt Based System)한다:
interrupt가 발생하면 CPU는 현재 하는 일을 멈추고 해당 interrupt를 해결하려고 동작한다.
processor가 특정 동작을 하고 있는 중 (OS가 특정 process를 수행)에
- 다른 device들에게서 interrupt가 오는 경우, (경우에 따라 다르지만)
- 현재 실행되고 있는 일을 멈추고
- 해당 interrupt에 대응하는 Interrupt Service Routine (ISR)이 수행하는 것을 가르킴.
- routine이란 어떤 동작을 수행하는 프로그램 코드를 의미함.
2. Interrupt 작동단계 : Keyboard 를 예로 **
Keyboard에서 키를 누를 경우 다음의 단계를 거치게 된다.
- Keyboard의 controller에서 key up, key down 등의 interrupt를 일으키는 event를 감지.
- Keyboard에서 전기적 신호가 processor로 전달됨 (interrupt 발생).
- 바로 연결된 것은 아님(작은 임베디드 시스템의 특정 센서라면 직접 연결될 수도 있음).
- 하지만 결국은 interrupt signal이 들어오는 processor의 pin에 전기신호가 들어오게 된다.
- processor는 매번 execute 명령이 끝날 때마다 interrupt를 확인하고
interrupt request(IRQ) 이 있을 경우, 현재 하던 일을 중지
(현재 실행 중인 process 중지). - 현재 하던 작업 데이터를 stack에 저장하는 context switching이 발생.
(실행 중이었던 process의 상태 저장) - 이후, Interrupt Request (실제로는 숫자번호임)에 기반하여 Interrupt Vector를 결정
- CPU는 Interrupt Vector를 index로 사용하여 IVT(Interrupt Vector Table)에서 해당 ISR 주소를 찾아 해당 주소로 점프하여 수행.
(키보드의 경우 keyboard ISR이 수행됨.) : ISR (또는 handler) 실행- 키보드 인터럽트의 경우 scan code의 값을 ASCII code로 변환하여 buffer에 저장.
- ISR수행 이후, 원래 수행하던 process가 수행된다.(context switching) : 저장된 상태로 복구하고 다시 process 실행 재개
- 키보드 값이 필요한 process라면 buffer에서 읽어들이게 됨.
3. Interrupt 종류 ***

위의 그림은 Interrupt의 종류와 CPU cycle을 보여줌.
각 Interrupt에 대한 간단한 설명은 다음과 같음:
3-1. Hardware Interrupt
좁은 의미의 interrupt 인 경우,
H/W interrupt 만을 가리킴.
processor (CPU)에 연결된 hardware에서 발생 시키는 asynchronous interrupt임.
- 키보드, 마우스를 조작할 때 발생되는 게 가장 흔한 예임 (입출력장치 interrupt).
- Timer interrupt, 전원공급 이상 interrupt 등이 있음.
- Timer interrupt 를 통해 OS scheduler가 현재 process를 preempt(선점)하여, 특정 프로그램이 CPU를 독점하는 것이 방지됨.
- 전원공급 이상 interrupt를 통해 작업 중이던 process를 dump한다던지의 처리가 가능.
- Maskable Interrupt와 Non-maskable Interrupt로 나뉨.
- Maskable Interrupt: CPU의 flag register 중 interrupt flag가 1인 경우에만 interrupt 발생되고, 0이면 무시됨.
- Non-maskable Interrupt: interrupt flag에 상관없이 interrupt발생됨(전기가 끊어지는 등의 무시가 불가능한 interrupt임.)
3-2. Software Interrupt
- User application (or program)에서 명시적으로 명령어 호출을 통해 cpu가 발생시키는 interrupt들.
- 항상 Synchronous Interrupt 임: 프로그램의 명령어 흐름에서 해당 명령어 실행 시점에 발생하므로, 발생 시점이 예측 가능함.
- CPU가 특정 명령어를 실행시켜 발생하는 것이 S/W Interrupt.
- SVC (SuperVisor Call), INT n 명령어 호출로 이루어짐.
- ARM에선
SVC를 통해 system call 이 호출됨, - 초기의 Intel 의 CPU에선 INT 0x80 을 통해 system call 이 호출되었음
- 현재는 전용명령어인 SYSCALL / SYSENTER (TRAP 방식)을 이용하여 system call 이 이루어짐.
- ARM에선
참고: SINGNAL
UNIX Signal(예: SIGINT)은 S/W interrupt와 유사하게 현재 실행 흐름을 중단하고 등록된 handler를 호출하지만,
CPU 명령어에 의해 발생하는 것이 아니라 Kernel이 프로세스 단위로 전달하는 통보 메커니즘이므로 S/W interrupt와는 구별됨.
Signal은 주로 비동기적 통보(예: SIGINT)이나 CPU Exception에 의한 동기적 통보(예: SIGFPE)도 지원함.
다음은 S/W Interrupt와 SIGNAL이 같이 관여하는 CPU Exception에 의한 SIGNAL 발생의 과정을 보여줌:
1. CPU가 명령어 실행 중 이상 검출 (e.g. zero division)
2. CPU Exception(S/W Interrupt) 발생 → kernel mode로 전환
3. Kernel의 Exception handler(ISR)가 실행됨
4. Exception handler가 예외 종류를 분석
5. 해당 예외에 매핑된 Signal 번호를 결정
(e.g. divide-by-zero → SIGFPE, 잘못된 메모리 접근 → SIGSEGV)
6. Kernel이 해당 프로세스(thread)의 task structure에 Signal 정보를 기록
7. 해당 thread가 kernel mode에서 user mode로 복귀하는 시점에
pending signal을 확인하고 등록된 signal handler를 호출
참고: System Call
System call은 OS가 제공하는 서비스들(Kernel Space의 코드 및 H/W 접근 등)에
User application이 접근하게 해주는 interface임.
- User application은 User Mode에서 수행되기 때문에 직접 접근할 수 없는 resource들이 존재.
- 이같은 resource에 접근하는 코드(= system call)가 User application에 있다면,
- 해당 코드(system call)를 수행할 때,
- CPU가 TRAP 방식의 S/W Interrupt 명령어를 실행하여
- Kernel Mode로 변경이 되고 (Kernel이 관여)
- resource을 사용하는 코드의 수행이 종료된 이후 다시 User Mode로 변경이 된다.
- 이때 사용되는 구체적 TRAP 방식의 S/W Interrupt 명령어 는 아키텍처마다 다름:
- ARM:
SVC(SuperVisor Call) - x86 (초기):
INT 0x80 - x86 (현재):
SYSCALL/SYSENTER
- ARM:
- 이들 명령어는 모두 TRAP 메커니즘을 통해 User Mode → Kernel Mode 전환을 수행하며,
넓은 범주에서 S/W Interrupt에 해당함.
3-2-1. TRAP
TRAP은 Software Interrupt의 하위 유형으로, CPU가 "TRAP 명령어(SYSCALL, SYSENTER)"를 실행하거나 CPU가 예외(Exception)를 검출한 경우 발생하는 Synchronous Interrupt임 (주의: CPU에서 발생함). .
- 대표적인 Synchronous Interrupt 임 (항상 synchronous Interrupt).
- Fault, Abort와 달리 TRAP을 발생시킨 명령어의 "다음 명령어"가 TRAP으로 인한 인터럽트 처리가 완료된 이후 실행됨.
- CPU 내부 interrupt (or CPU가 발생시키는 Exception) 라고도 불리며, 오늘날 system call도 실제로 TRAP을 통해 구현됨.
일반 개발자 입장에선 TRAP이나 S/W Interrupt 는 구분이 쉽지 않은 편이다.
둘 다 CPU에서 발생하고 kernel mode로 들어가서 kernel space의 해당 ISR 이 수행된다.
실제로 TRAP은
- S/W Interrupt의 한 종류이며,
- 그중에서도 의도적으로 발생시키는 경우 (system call)와
- CPU의 예외 검출에 의한 경우를 포함한다 (이 CPU 예외를 "비의도성"을 강조하여 분리하는 경우도 있음).INT n같은 명시적 명령어 호출도 넓은 의미의 S/W Interrupt에 해당하므로,
TRAP이 S/W Interrupt 의 일종이라고 이해하면 됨.
참고로, TRAP 이라는 용어는 1950년대 후반~1960년대 초반의 초기 컴퓨터에서 유래했음.
당시 프로그램이 잘못된 연산(예: zero division)이나 특권 명령어를 실행하면, 하드웨어가 자동으로 실행을 중단하고 미리 지정된 루틴으로 "빠지게(fall into)" 만드는 메커니즘이 있었는데, 이것이 마치 동물이 덫에 걸리는 것과 같다고 하여 trap이라 불림.
이후 이 개념이 확장되어, 의도적으로 OS 서비스를 요청하기 위해 프로그램이 스스로 덫을 밟는 경우(system call)에도 같은 용어가 사용되게 됨.
3-2-2. Internal Interrupt: Abort, Fault
H/W Interrupt가 CPU 외부에서 발생하는 것에 대비하여 부르는 용어.
- processor (=CPU) 내부에서 발생되는 interrupt: Processor(=CPU)가 프로그램의 코드를 실행하는 도중 발생한 interrupt.
- 잘못된 instruction이나 data를 사용한 경우 발생.
- 때문에 Internal Interrupt는 CPU Exception이라고도 불림.
- 크게 2가지가 대표적.
- Abort:
- 매우 심각한 에러로 인해 프로그램이 더이상 수행되지 못할 때 발생되는 synchoronous interrupt.
- 인터럽트 처리 이후 프로그램 실행이 중단(=복원불가)됨.
- Fault:
- RAM에 필요한 데이터 등이 없는 경우 발생하는 synchoronous interrupt.
- 해당 exception(or interrupt) 처리 이후 interrupt를 발생시킨 명령어가 재실행(=복원가능)됨
- 참고로, TRAP은 다음 명령어가 interrupt 처리 이후 실행되며, Abort는 프로그램 실행이 아예 중단됨.
- Abort:
Internal Interrupt는
CPU Exception에 의해 발생하는 Software Interrupt의 sub-category 로 보는 관점
(Intel의 관점으로 TRAP 까지 포함하여 모든 S/W Interrupt를 CPU Exception이라고 봄) 도 있으나,
의도성에 의해 의도적(복원가능)인 경우 Software Interrupt(TRAP도 포함)로 보고,
비의도적인 Internal Interrupt (Abort:복원불가, Fault:복원가능)의 경우 Exception으로 분류하기도 함.
더 읽어보면 좋은 자료들
https://product.kyobobook.co.kr/detail/S000211776141: 589page, 13.1.2 인터럽트와 트랩
컴퓨터 시스템 딥 다이브: C 언어부터 어셈블리, 아키텍처, OS까지 한 꺼풀씩 벗겨보는 컴퓨터 시
컴퓨터 시스템 딥 다이브: C 언어부터 어셈블리, 아키텍처, OS까지 한 꺼풀씩 벗겨보는 컴퓨터 시스템 | 코드 아래 숨겨진 아름답고 놀라운 컴퓨터 아키텍처 대탐험컴퓨터 시스템은 바다와 비슷
product.kyobobook.co.kr
https://ebook-product.kyobobook.co.kr/dig/epd/ebook/E000002986369: 203page, 인터럽트
한 권으로 읽는 컴퓨터 구조와 프로그래밍 | 조너선 스타인하트 | 책만- 교보ebook
더 나은 소프트웨어 개발을 위한 하드웨어, 대부분의 개발자들은 자신이 만든 프로그램을 움직이는 하부 기술에 대해 잘 알지 못한다. 코드가 잘 도는데 구태여 근원적인 하부 기술에 신경을 써
ebook-product.kyobobook.co.kr
https://ds31x.tistory.com/132: interrupt 외에 OS가 asynchronous event handling하는 방법의 하나.
[Linux] SIGNAL
SIGNAL이란?? OS (LINUX 및 UNIX계열)에서의 SIGNAL은 UNIX 또는 UNIX 계열 또는 POSIX 호환 OS에서 사용되는 제한된 형태의 Iner-Process Communication (IPC)을 가르킨다. 특정 process가 동일 process 내의 thread 또는 다른
ds31x.tistory.com
https://dsaint31.me/mkdocs_site/CE/ch05/ch05_04_02_interrupt/: Interrupt vs. Polling
BME
Interrupt and Polling Interrupt와 Polling은 CPU에게 어떤 event들이 발생했음을 알리고 이들을 처리하기 위해 제안된 두가지 방법임. event가 발생했을 때, CPU는 대개의 경우 어떤 process를 처리하고 있을 경
dsaint31.me
2023.04.09 - [Computer/CE] - [Linux] Signal : SIGINT: CTRL+C (키보드 입력라는 H/W Interrupt를 Kernel의 터미널 드라이버가 감지하고 Kernel이 SIGINT 시그널을 foreground process에 전달 : S/W Interrupt 아님.)
[Linux] Signal : SIGINT
0. SIGINT 란?Ctrl+c 를 누를 때 발생하는 Signal:keyboard interrupt 가 발생함을 알리는 SIGNAL: SIGINTCtrl+c 가 눌린 Keyboard의 H/W Interrupt가 Kernel의 드라이버가 감지하고현재 terminal 에서 fore-ground로 동작하는 proc
dsaint31.tistory.com
https://ds31x.tistory.com/152: context switching에 대해서 읽어볼 것.
[CE] Process versus Thread
Process versus Thread1. Process (프로세스)Process는 자신을 위한 독립된 메모리 공간 등의 리소스를 차지한 상태에서 실행 중인 프로그램의 instance라고 볼 수 있음. 독립된 execution unit (실행 단위)이며,
ds31x.tistory.com
'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] Domain Name System (0) | 2023.01.02 |