CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용
(CPU는 한 순간에는 하나의 일 밖에 처리할 수 없기 때문에 어떤 일을 처리하는 도중에 우선순위가 급한 일을 처리할 필요가 생김)
❓ 인터럽트 서비스 루틴이란?
인터럽트 핸들러라고도 하며, 실제 인터럽트를 처리하기 위한 루틴이다
운영체제의 코드 영역에는 인터럽트별로 처리해야할 내용이 이미 프로그램 되어 있다
- 인터럽트 벡터: 인터럽트 발생 시 처리해야 할 인터럽트 핸들러의 주소를 인터럽트 별로 보관하고 있는 테이블
+) 여러 개의 인터럽트가 동시에 발생할 경우, 인터럽트 우선순위에 따라 인터럽트를 처리함
(전원 공급의 이상 > CPU의 기계적인 오류 > 외부 신호에 의한 인터럽트 > 입출력 전송 요청/완료/오류 > 프로그램 검사 > 수퍼바이저 호출)
어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 및 메모리
ex) A 작업을 단순하게 실행한다면 10초가 걸리지만, 안전성을 고려하고 부가적인 B 처리를 추가한 결과 처리시간이 15초가 걸렸다면 오버헤드는 5초가 됨
즉, 오버헤드는 반드시 존재하지만 오버헤드를 줄이는 것이 좋은 것!
컴퓨터의 정수 연산의 계산 결과가 허용 범위를 초과할 때 발생하는 오류
ex) 부호 없는 8비트의 데이터를 저장할 수 있는 메모리라면, 1111 1111에서 1을 증가시키면 최댓값의 범위를 넘어서기 때문에 최소값인 0000 0000으로 되돌아가게 됨
운영체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스
일반적인 프로그램들은 사용자 모드에서 실행되므로 커널 모드에 대한 직접적인 접근이 불가능하지만, 커널에 접근할 수 없으면 사용자 모드의 프로세스들이 파일을 쓰거나 불러올 수 없고 그래픽 처리와 같은 거의 모든 작업을 할 수 없음
→ 커널에 요청하여 커널 모드에서 처리하고 그 결과를 사용자 모드의 프로그램에게 전달하는 것
CPU는 사용자 애플리케이션이 시스템을 손상시키는 것을 방지하기 위해 2가지 모드를 제공함
CPU에 있는 Mode bit로 모드를 구분하며 0은 커널 모드, 1은 사용자 모드를 나타냄
int main(void) {
...
printf("Hello");
// printf는 stdio.h에 있는 라이브러리 함수
// = printf() { write(...) }와 같음 -> write는 시스템 콜 함수임(커널 모드 I/O)
...
}
... <- (1) 매개변수 관련 명령어
movl 5, %eax <- (2) EAX 레지스터에 시스템 콜 정보 저장
int $0x80 <- (3) 인터럽트를 발생시키는 명령어
https://namu.wiki/w/인터럽트
https://whatisthenext.tistory.com/147
https://velog.io/@adam2/인터럽트
https://ko.wikipedia.org/wiki/오버헤드
https://namu.wiki/w/오버플로
https://she11.tistory.com/123
https://namu.wiki/w/시스템 콜
https://velog.io/@nnnyeong/OS-시스템-콜-System-Call
https://hasensprung.tistory.com/176
https://codybuilder.com/41