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 를 통해 무한루프인 프로그램도 종료되며, 특정 프로그램이 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 이나, timer나 특정 h/w와 연관된 경우 asynchronous 인 경우도 있음
- SIGINT 시그널로 인해 발생되는 S/W interrupt가 대표적인 Asynchronous Interrupt임:
- TRAP가 Synchoronous 라는 점에서 구분됨:
- CPU가 특정 명령어를 실행시켜 발생하는 것이 S/W Interrupt.
- SVC (SuperVisor Call), INT n 명령어 호출로 이루어짐.
- ARM에선 SVC를 통해 system call 이 호출됨,
- 초기의 Intel 의 CPU에선 INT를 통해 system call 이 호출되었음: 현재는 TRAP을 이용하여 system call 이 이루어짐.
System Call
system call은
OS가 제공하는 서비스들(Kernel Space 의 코드 및 H/W 접근 등)에
User application이 접근하게 해주는 interface임.
- 이들 System call을 수행케 해주는 instruction (CPU가 가지고 있는 instruction set에 속함)이 SVC임: ARM
- User application은 User Mode에서 수행되기 때문에 직접 접근할 수 없는 resource들이 존재.
- 이같은 resource에 접근하는 코드(=system call)가 User application에 있다면,
- 해당 코드(system call)를 수행할 때,
- SVC(=S/W Interrupt)나 TRAP 을 통해 (CPU가 실행)
- Kernel Mode 로 변경이 되고 (Kernel이 관여)
- resource을 사용하는 코드의 수행이 종료된 이후 다시 User Mode로 변경이 된다.
3-3. TRAP
TRAP은 "TRAP 명령어(syscall)"를 CPU가 실행하거나 CPU가 예외를 검출한 경우 발생하는 (S/W 기반) Interrupt (주의: CPU에서 발생함).
- 대표적인 Synchoronous Interrupt 임.
- Fault, Abort와 달리 Trap을 발생시킨 명령어의 다음 명령어가 Trap으로 인한 인터럽트 처리가 완료된 이후 실행됨.
- CPU 내부 interrupt (or CPU가 발생시키는 Exception)라고도 불리며, 오늘날 system call도 실제로 Trap을 통해 구현됨.
일반 개발자 입장에선 TRAP이나 S/W Interrupt 는 구분이 쉽지 않은 편이다.
둘 다 CPU에서 발생하고 kernel mode로 들어가서 kernel space의 해당 ISR 이 수행된다.
단, S/W interrupt는 특정 경우에는 Asynchoronous 인 경우도 있고 특정 명령어를 CPU가 실행하여 발생하는 interrupt이므로 좀 더 범위가 넓다는 점과 TRAP은 항상 Synchoronous이며 CPU가 예외를 검출하거나 TRAP 명령어를 호출(System Call을 위해)한 경우 발생한다는 차이점이 있다는 정도를 기억하면 될 듯.
Signal은 Asynchorous Event를 다루며, CPU에서 발생하지 않고 Kernel에 의해 발생과 전달이 모두 이루어진다는 점이 차이임.
3-4. Internal Interrupt: Abort, Fault
- processor 내부에서 발생되는 interrupt: Processor가 프로그램의 코드를 실행하는 도중 발생한 interrupt.
- 잘못된 instruction이나 data를 사용한 경우 발생.
- TRAP도 여기에 해당한다고 볼 수 있으나, 오늘날 system call에 사용되기 때문에 앞에서 따로 다룸.
- 크게 2가지가 대표적.
- Abort:
- 매우 심각한 에러로 인해 프로그램이 더이상 수행되지 못할 때 발생되는 synchoronous interrupt.
- Fault:
- RAM에 필요한 데이터 등이 없는 경우 발생하는 synchoronous interrupt.
- 해당 exception(or interrupt) 처리 이후 interrupt를 발생시킨 명령어가 실행됨
- 참고로, Trap은 다음 명령어가 interrupt 처리 이후 실행되며, Abort는 프로그램 실행이 아예 중단됨.
- Abort:
더 읽어보면 좋은 자료들
https://product.kyobobook.co.kr/detail/S000211776141: 589page, 13.1.2 인터럽트와 트랩
https://ebook-product.kyobobook.co.kr/dig/epd/ebook/E000002986369: 203page, 인터럽트
https://ds31x.tistory.com/132: interrupt 외에 OS가 asynchronous event handling하는 방법의 하나.
https://dsaint31.me/mkdocs_site/CE/ch05/ch05_04_02_interrupt/: Interrupt vs. Polling
2023.04.09 - [Computer/CE] - [Linux] Signal : SIGINT: CTRL+C (키보드 입력이 SIGINT 시그널을 통해 비동기적 S/W interrupt를 발생시킴)
https://ds31x.tistory.com/152: context switching에 대해서 읽어볼 것.
'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 |