인터럽트: Device가 CPU에게 동작이 끝났다고 알리는 동작
인터럽트가 필요한 이유: 입출력을 기다리긴 너무 힘드뤄,,, 인터럽트를 이용하여 작업 중간에 다른 프로그램이나 명령어를 수행 가능하게 함으로써 시스템의 처리 효율을 향상한다.
인터럽트의 발생
하드웨어: 시스템 버스를 통해 CPU에 신호 전송
소프트웨어: system call을 통해 인터럽트 발생 (밑에 내부 인터럽트)
인터럽트의 종류
외부 인터럽트: 입출력 장치, 타이밍 장치, 전원 등 외부적인 요인에 의해 발행하는 인터럽트
- 전원 이상 인터럽트: 정전이나 전원에 이상이 있는 경우
- 기계 고장 인터럽트: CPU 등의 기능적인 동작 오류가 발생한 경우
- 입출력 인터럽트: 입출력의 종류 등의 이유로 CPU의 수행을 요청하는 인터럽트
내부 인터럽트: 잘못된 명령이나 데이터를 사용할 때 발생하는 인터럽트
- 0으로 나누는 경우
- 오버플로우/언더플로우가 발생한 경우
- 프로그램 상의 오류(잘못된 메모리 장소 참조..)
- 함수 등 명령어를 잘못 사용한 경우
- SW인터럽트: CPU가 인스트럭션을 수행하는 도중에 일어나는 인터럽트 (system call)
인터럽트의 동작 구조
인터럽트 발생 -> 현재 연산 중단 -> 인터럽트 처리(ISR: Interrupt Service Routine) -> 중단된 연산 재개
연산 중단 시! 인터럽트가 발생했을 당시의 상황을 그대로 저장하고 추가적인 인터럽트를 비활성화하여 Lost interrupt를 방지한다.
인터럽트의 우선순위
전원 공급의 이상 > CPU의 기계적인 오류 > 외부 신호에 의한 인터럽트 > 입출력 전송 요청/완료/오류 > 프로그램 검사 인터럽트 > SVC 인터럽트(슈퍼바이저 호출)
인터럽트의 처리
SW적 방법: Polling
인터럽트 정보를 조사하는 특정 루틴을 호출하여 CPU가 각 장치를 순환하면서 인터럽트 요구를 체크하고 해당 처리기(핸들러)를 호출한다(계속 확인하면서 대기 탄다는 얘기).
HW적 방법: Vectored Interrupt System
인터럽트 발생 시 인자로 배열의 인덱스가 전달되고, 그 위치에 있는 ISR이 실행된다.
인터럽트 벡터 = 인터럽트 서비스 루틴의 주소가 기록되어있는 테이블(배열)로, 부팅 시 메모리에 위치한다.
'OS' 카테고리의 다른 글
프로세스(3): Process Control Block PCB, CPU Switching (0) | 2020.08.02 |
---|---|
프로세스(2) : 메모리에 저장된 프로세스, 프로세스의 상태 (0) | 2020.08.02 |
프로세스 (1): 정의, 프로그램과의 차이 (0) | 2020.08.02 |
시스템 호출의 유형: 프로세스 제어, 파일 조작, 장치 관리, 정보 유지, 통신 (0) | 2020.07.30 |
System Call 시스템 호출, 그리고 API (0) | 2020.07.30 |
댓글