[CE] Interrupt 요약 (Computer 기준).

2023. 1. 17. 11:52·Computer/CE
728x90
728x90

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에서 키를 누를 경우 다음의 단계를 거치게 된다.

  1. Keyboard의 controller에서 key up, key down 등의 interrupt를 일으키는 event를 감지. 
  2. Keyboard에서 전기적 신호가 processor로 전달됨 (interrupt 발생).
    • 바로 연결된 것은 아님(작은 임베디드 시스템의 특정 센서라면 직접 연결될 수도 있음).
    • 하지만 결국은 interrupt signal이 들어오는 processor의 pin에 전기신호가 들어오게 된다.
  3. processor는 매번 execute 명령이 끝날 때마다 interrupt를 확인하고
    interrupt request(IRQ) 이 있을 경우, 현재 하던 일을 중지
    (현재 실행 중인 process 중지).
  4. 현재 하던 작업 데이터를 stack에 저장하는 context switching이 발생.
    (실행 중이었던 process의 상태 저장)
  5. 이후, Interrupt Request (실제로는 숫자번호임)에 기반하여 Interrupt Vector를 결정
  6. CPU는 Interrupt Vector를 index로 사용하여 IVT(Interrupt Vector Table)에서 해당 ISR 주소를 찾아 해당 주소로 점프하여 수행. 
    (키보드의 경우 keyboard ISR이 수행됨.) : ISR (또는 handler) 실행
    • 키보드 인터럽트의 경우 scan code의 값을 ASCII code로 변환하여 buffer에 저장.
  7. 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 이 이루어짐.

참고: 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
  • 이들 명령어는 모두 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는 프로그램 실행이 아예 중단됨.

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

 


 

728x90

'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
'Computer/CE' 카테고리의 다른 글
  • [CE] Gateway
  • [CE] Router
  • [CE] Direct Access Storage Device & media (DASD)
  • [CE] Optical Disk
dsaint31x
dsaint31x
    반응형
    250x250
  • dsaint31x
    Dsaint31's blog
    dsaint31x
  • 전체
    오늘
    어제
    • 분류 전체보기 (793)
      • Private Life (16)
      • Programming (55)
        • DIP (116)
        • ML (39)
      • Computer (121)
        • CE (55)
        • ETC (33)
        • CUDA (3)
        • Blog, Markdown, Latex (4)
        • Linux (9)
      • ... (369)
        • Signals and Systems (115)
        • Math (177)
        • Linear Algebra (33)
        • Physics (43)
        • 인성세미나 (1)
      • 정리필요. (61)
        • 의료기기의 이해 (6)
        • PET, MRI and so on. (7)
        • PET Study 2009 (1)
        • 방사선 장해방호 (5)
        • 방사선 생물학 (3)
        • 방사선 계측 (9)
        • 기타 방사능관련 (3)
        • 고시 (9)
        • 정리 (18)
      • RI (0)
      • 원자력,방사능 관련법 (2)
  • 블로그 메뉴

    • Math
    • Programming
    • SS
    • DIP
  • 링크

    • Convex Optimization For All
  • 공지사항

    • Test
    • PET Study 2009
    • 기타 방사능관련.
  • 인기 글

  • 태그

    Optimization
    Programming
    function
    Probability
    인허가제도
    linear algebra
    ML
    numpy
    signal_and_system
    cv2
    fourier transform
    opencv
    Term
    random
    Vector
    Python
    SIGNAL
    signals_and_systems
    math
    SS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dsaint31x
[CE] Interrupt 요약 (Computer 기준).
상단으로

티스토리툴바