Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 국비지원
- 야놀자
- 컴퓨터공학
- Javascript
- cpu
- CSS
- git
- github
- 알고리즘
- 자바스크립트
- 컴퓨터과학
- BFS
- CS
- DFS
- computerscience
- 너비우선탐색
- 코딩테스트
- js
- 프론트엔드개발자
- 부트캠프
- 패스트캠퍼스
- nodejs
- 그리디
- 호이스팅
- 국비지원취업
- KAKAO
- html/css/js
- 백준
- LinkSnap
- 코테
Archives
- Today
- Total
My Boundary As Much As I Experienced
인터럽트(Interrupt)란? 본문
인터럽트(Interrupt)란?
인터럽트란 CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 발생한다.
지금 수행 중인 일보다 더 중요한 일(ex. 입출력, 우선 순위 연산 등)이 발생하면 그 일을 먼저 처리하고 나서 하던 일을 계속해야한다.
인터럽트의 종류
외부 인터럽트
-
전원 이상 인터럽트: 정전이나 전원이 이상이 있는 경우
-
기계 고장 인터럽트: CPU등의 기능적인 동작 오류가 발생한 경우
-
외부 신호 인터럽트(External interrupt)
- 타이머가 끝난 경우
- 키보드로 인터럽트 키를 누른 경우 : 대표적으로 Control + Alt + Delete
- 외부장치에서 인터럽트 요청이 있는 경우
- 입출력 인터럽트(I/O Interrupt): 입출력의 종료 등의 이유로 CPU의 수행을 요청하는 인터럽트.
- 입출력장치가 데이터 전송을 요구하거나 전송이 끝나 다음 동작이 수행되어야 할 경우
- 입출력 데이터에 이상이 있는 경우
내부 인터럽트
- Trap이라고 부르며, 잘못된 명령이나 데이터를 사용할 때 발생
- 0으로 나누기, 참조 오류
- 오버플로우가 발생했을 때
- 등등 프로그램 상의 에러가 났을 때
- 문제적 프로세스가 시스템 콜 system call을 통해 인터럽트를 발생시킨다.
- CPU는 현재 진행 중인 기계어 코드를 완료한다. (지금 하던 것만 저장)
- 현재까지 수행중이었던 상태를 해당 process의 PCB(Process Control Block)에 저장한다. (수행중이던 MEMORY주소, 레지스터 값, 하드웨어 상태 등...), PC(Program Counter, IP)에 다음에 실행할 명령의 주소를 저장한다.
- 인터럽트 벡터를 읽고 ISR 주소값을 얻어 ISR(Interrupt Service Routine)로 점프하여 루틴을 실행한다.
- 해당 코드를 실행한다.
- 해당 일을 다 처리하면, 대피시킨 레지스터를 복원한다. (PC, PCB에 있는거 복구)
인터럽트 우선순위
여러 장치에서 인터럽트가 동시에 발생하거나 인터럽트 서비스 루틴 수행 중 인터럽트가 발생했을 경우 우선순위를 따져서 처리한다.
전원 이상(Power fail) > 기계 착오(Machine Check) > 외부 신호(External) > 입출력(I/O) > 명령어 잘못 > 프로그램 검사(Program Check) > SVC(SuperVisor Call)
일반적으로 하드웨어 인터럽트가 소프트웨어 인터럽트보다 우선 순위가 높고 내부 인터럽트 보다 외부 인터럽트가 우선 순위가 높다.
인터럽트 우선순위 판별 방법
소프트웨어적인 방법(Polling)
- 인터럽트 요청 플래그를 차례로 비교하여 우선순위가 가장 높은 인터럽트 자원을 찾고, 이에 해당하는 인터럽트 서비스 루틴을 수행한다.
- 속도가 따른 장치에 높은 등급을 부여한다.
- 우선순위 변경이 쉽다.
- 많은 인터럽트가 있을 경우 하드웨어 적인 방법에 비해서 우선순위 판단 속도가 느리다.
- 회로가 간단하고 융통성이 있으며, 별도의 하드웨어가 필요 없다.
하드웨어적인 방법(Vectored Interrupt)
인터럽트를 요청할 수 있는 장치와 CPU사이에 장치번호를 식별할 수 있는 버스를 직렬/병렬로 연결한다.
인터럽트 벡터는 인터럽트를 발생한 장치가 분기할 곳에 대한 정보이다.
소프트웨어적인 방법에 비해 비경제적이다.
- Daisy chain
- 인터럽트가 발생하는 모든 장치를 하나의 직렬 회선으로 연결한다.
우선순위가 높은 장치를 상위에 두고 우선순위 차례대로 배치한다.
=> 즉, 인터럽트 발생하는거를 queue에 넣듯이 일직선으로 넣고 처리하라는거 아닌가? - 각 장치별 우선순위를 판별하기 위한 Mask register에 bit를 설정한다.
- 인터럽트가 발생하는 모든 장치를 하나의 직렬 회선으로 연결한다.
'Computer Basics' 카테고리의 다른 글
PCB 와 Context Switching (0) | 2023.08.29 |
---|---|
시스템 콜(System Call) (0) | 2023.08.22 |
운영체제(Operating System)란? (0) | 2023.08.07 |
ARM 프로세서란? (0) | 2023.08.07 |
패리티 비트(Parity Bit)와 해밍코드(Hamming Code) (0) | 2023.08.01 |