2020. 7. 6. 20:04ㆍ컴퓨터언어/운영체제
👍 인터럽트란?
Interrupt : 중단하다, 끊다
인터럽트란 프로세스를 잠시 중단하는 것을 말한다.
그럼 프로세스를 갑자기 왜 중단해야 할까?
프로그램을 한번에 하나만 실행하는 단일프로그래밍방식에서는 필요없지만, 여러 프로그램을 동시에 실행하는 다중프로그래밍 방식에서 인터럽트는 필수과정이다.
다중프로그래밍, 즉 멀티태스킹은 엄밀히 말하면 동시에 실행하는 것이 아니라 동시인 것처럼 보일 뿐이다.
메모리에 적재된 여러 프로세스들을 짧은 시간씩 돌아가면서 처리하기 때문이다.
2020/07/05 - [컴퓨터언어/운영체제] - 운영체제의 발전
벌써 답이 나왔다. 여러 프로세스들을 돌아가면서 처리해야 하기 때문에, B가 실행되고 있는 동안에는 A가 잠시 멈춰야 하는 것이다.
이러한 일시중지 뿐만 아니라 입출력연산, 사용자의 의도적인 종료 또는 에러(기기고장/정전 등)에 의해 중단이 필요하다면 "인터럽트 처리"를 수행해야 한다.
예
친구랑 카톡(✅카톡 프로세스)하던 중,
학교에서 전화와서 전화를 받았고(❗️카톡 인터럽트 요구 + ✅통화 프로세스 실행),
전화하던 중에 누가 초인종을 눌러서 전화기 너머로 기다리라고 말하고(❗️통화 인터럽트 요구 + ✅"누구세요?"프로세스 실행-완료),
밖으로 나갔더니 택배가 왔고(✅택배수령 프로세스 실행-완료),
다시 이어서 전화를 하고(🔄통화 프로세스 복구),
전화를 끊은 후 이어서 카톡하기(🔄카톡 프로세스 복구)
인터럽트는 프로세스를 중단시키는 만큼 중단시점의 정보(레지스터 문맥)를 스택에 저장함으로써 이후에 복구하는 것이 대단히 중요하다.
정리
인터럽트란 수행 중이던 프로세스가 다른 프로세스를 수행하기 위해서 또는 외부 입력장치에 의해서 중단되는 것이다.
👍 인터럽트의 종류
👊 SVC(Supervisor Call) 인터럽트
사용자(Operator)가 새로운 프로그램의 실행을 요청했을 때 발생.
새로운 프로그램을 위해 기억장치 할당, 루틴호출 등을 행함
👊 입출력(I/O) 인터럽트
하드웨어적 인터럽트로, 인쇄나 디스크 저장시 입출력 채널 확인, 준비, 할당, 완료시에 발생.
👊 외부(Extern) 인터럽트
다중프로그래밍에서 각 프로세스가 CPU에게 할당받는 시간간격을 "시간할당량"이라고 한다.
운영체제는 시간할당량을 소진한 프로세스를 종료시키는데, 이를 외부인터럽트라고 한다.
👊 재시작(Restart) 인터럽트
사용자가 Ctrl+Alt+Del 키를 입력하여 특정 프로세스의 종료를 선택하거나, Reset 버튼을 눌러 시스템을 재부팅할때 발생
👊 프로그램 검사(Program Check) 인터럽트
실행중인 프로그램에서 오버플로우나 언더플로우가 발생하거나 0으로 나누기 연산을 처리하는 경우 발생
👊 기계 검사(Machine Check) 인터럽트
컴퓨터 시스템의 고장으로 발생
👍 인터럽트의 특징
- 컴퓨터 시스템에 비상사태가 발생할 때, 그 처리를 위해서 인터럽트가 필요하다.
- 프로그램의 착오는 정해진 인터럽트 처리 루틴에 의해 복구되어야 한다.
- 컴퓨터가 정상적인 업무를 수행하는 도중에 발생하는 예기치 않은 일들(오버플로우, 연산오류 등)에 대하여 중단없이 계속 업무를 수행하도록 한다.
- 인터럽트가 발생하면 CPU는 실행중이던 명령을 마친 후 기존 상태를 보관한다.
- 입출력이 완료되어도 인터럽트가 발생한다.
- 메모리 보호구역(OS전용 적재구간)에 접근을 시도하는 경우에도 인터럽트가 발생한다.
- 인터럽트요구의 처리를 위한 주소 역시 PC(Program Counter)에 기억된다.
👍 인터럽트와 동기(시간맞춤성)
👊 동기인터럽트(Synchronous Interrupt)
시간을 연속적으로 맞춰가는 인터럽트
0으로 나누기 연산, 보호메모리영역 참조, 특정 명령어 실행 등으로 인해 발생하는 인터럽트는 예상가능하기 때문에 동기 인터럽트라고 한다.
👊 비동기인터럽트(Asynchronous Interrupt)
시간을 간헐적으로 맞춰가는 인터럽트
CPU클럭 시그널의 자연스러운 흐름과 상관없이 다른 하드웨어 장치로 인해 발생하는 인터럽트는 갑작스럽고 예측불가능하기 때문에 비동기 인터럽트라고 한다.
👍 트랩(Trap)
프로그램 검사 인터럽트 발생 시, 프로그램 내에 해당 인터럽트를 처리하기 위한 루틴을 프로그램 내에 미리 준비해놓았다가 운영체제에게 넘기는 것
소프트웨어적 인터럽트라고도 한다.
'컴퓨터언어 > 운영체제' 카테고리의 다른 글
문맥교환 (0) | 2020.07.06 |
---|---|
PCB(Process Control Block) (0) | 2020.07.06 |
프로세스 메모리 영역 - Text, Data, Heap, Stack (0) | 2020.07.06 |
프로세스 상태 전이 (0) | 2020.07.06 |
프로세스의 정의 (0) | 2020.07.06 |