하이헬로올라
오늘은 인터럽트에 대해서 알아볼건데용?
가벼운 주제기 때문에 전래동화 듣는 느낌으로 멍때리고 보시면 될 것 같습니다.
인터럽트(Interrupt)란?
인터럽트는 CPU가 작업을 하는 도중 예기치 않은 상황이 발생할 때, 현재 정상적으로 작업중인 프로세스를 잠시 중단하고, 해당 상황에 대한 우선 처리를 한 후 원래 작업중인 프로세스로 복귀하는 것을 말합니다. 이를 통해 시스템이 예기치 않은 상황에 대해 대응을 할 수 있습니다.
여기서 예기치 않은 상황이란 것은 뭘까요?
● 외부 인터럽트, 내부 인터럽트
예기치 않은 상황이란 말을 듣게되면 당연히 에러부터 생각하실 겁니다. 하지만 CPU의 입장에선 여러 가지 경우가 있습니다. 단순히 분류하자면 소프트웨어 측에서 나는 예외 상황이 있고, 하드웨어 측에서 나는 예외 상황이 있습니다.
소프트웨어 측에서 발생한 인터럽트를 내부 인터럽트(혹은 소프트웨어 인터럽트)라고 하고,
하드웨어 측에서 발생한 인터럽트를 외부 인터럽트(혹은 하드웨어 인터럽트)라고 합니다.
● 내부 인터럽트 (Internal Interrupt, 또는 Exception)
내부 인터럽트(소프트웨어 인터럽트)란 CPU 내부에서 발생하는 예외 상황이나 오류에 대한 인터럽트를 말합니다. 내부 인터럽트는 주로 소프트웨어 또는 하드웨어의 잘못된 동작으로 인해 발생하며, 일반적으로 CPU가 스스로 감지해냅니다.
내부 인터럽트의 주요 예시를 살펴보자면,
- 디바이드 바이 제로(0 나누기): 프로그램이 숫자를 0으로 나누려고 할 때 발생하는 예외.
- 페이지 폴트: 메모리 관리에서 잘못된 메모리 주소에 접근할 때 발생하는 예외.
- 잘못된 명령어: CPU가 알 수 없는 명령어를 처리하려고 할 때 발생.
- 오버플로우: 산술 연산이 CPU 레지스터의 최대값을 초과할 때 발생.
- 시스템 콜(System Call): 운영체제의 기능을 호출할 때 발생하는 인터럽트. 사용자가 커널 모드로 진입하기 위해 주로 사용.
● 외부 인터럽트 (External Interrupt)
외부 인터럽트(하드웨어 인터럽트)란 CPU 외부를 통해 발생하는 이벤트에 대한 인터럽트를 말합니다. 외부 인터럽트는 주로 입출력 장치나, 타이머 등의 외부장치가 특정 조건을 충족할 때 발생하는 이벤트를 통해 발생합니다.
외부 인터럽트의 주요 예시를 살펴보자면,
주요 외부 인터럽트 예시:
- 키보드 입력: 사용자가 키보드를 눌렀을 때 발생하는 인터럽트.
- 마우스 클릭: 마우스 클릭 등의 입력이 있을 때 발생.
- 타이머 인터럽트: 타이머가 설정된 시간이 다 되었을 때 발생. 보통 운영체제에서 시간 기반의 스케줄링에 사용.
- I/O 인터럽트: 네트워크 카드, 하드 드라이브 등에서 데이터 전송이 완료되었을 때 발생.
- 전원 관리 인터럽트: 배터리 수준이 낮거나 전원이 꺼지기 직전에 발생.
●인터럽트의 처리 과정
인터럽트는 어떤 과정을 통해 처리를 할까요?
1. 인터럽트가 발생할 시, CPU는 현재 상태를 저장하고 실행 중인 작업을 잠시 중단합니다.
2. 인터럽트 벡터 테이블을 통해 해당 인터럽트를 확인하고, 인터럽트를 처리하는 핸들러로 점프해 예외 처리를 합니다.
3. 예외 처리를 다 하면 저장해놓은 상태를 참조해 원래 작업으로 복귀합니다.
인터럽트 벡터 테이블 이란?
인터럽트 벡터 테이블은 인터럽트가 발생했을 때, 어떤 인터럽트가 발생했는지 식별하고, 해당 인터럽트에 맞는 처리 코드(인터럽트 핸들러)의 주소를 저장해놓은 테이블입니다.
● 내부 인터럽트와 외부 인터럽트의 주요 차이점
내부 인터럽트와 외부 인터럽트의 주요 차이점을 보고 마무리 해보겠습니다.
발생 원인 | CPU 내부에서 발생 (프로그램 실행 중) | 외부 하드웨어 장치에서 발생 |
예시 | 디바이드 바이 제로, 페이지 폴트 등 | 키보드 입력, 타이머, 네트워크 카드 등 |
발생 시점 | 예측 불가능한 오류나 특정 조건이 발생할 때 | 장치에서 특정 이벤트가 발생할 때 |
CPU 개입 여부 | CPU 스스로 감지 | 외부 장치에 의해 발생 |
인터럽트들은 시스템이 다양한 작업을 동시에 처리하고, 예기치 않은 상황에 대처할 수 있도록 하기 위해 만들어진 매커니즘입니다.
'프로그래밍 > CS' 카테고리의 다른 글
[CS] 페이징(Paging) (0) | 2024.10.22 |
---|---|
[CS] PCB와 ContextSwitching (2) | 2024.10.22 |
[CS] CPU 스케줄링 (4) | 2024.10.21 |
[CS] CPU의 메모리 계층 구조 (4) | 2024.10.13 |
[CS] 커널(Kernel)과 그 종류에 대해 (0) | 2024.10.13 |