공부해서 남주냐!

인터럽트와 트랩의 차이점을 기술하시오.

작성일 작성자 악마의유혹

 

인터럽트와 트랩.hwp

 

 

■ 인터럽트와 트랩의 차이점을 기술하시오.

 

인터럽트에는 크게 외부 인터럽트, 내부 인터럽트로 나눠어지는데, 내부 혹은 소프트웨어 인터럽트와 트랩은 매우 유사하므로, 앞으로 내용에는 차이점을 분석하기 위해 인터럽트는 외부 인터럽트 중심으로 비교 하겠습니다.

트랩(trap)은 프로그램 내에서 발생하는 것이고 내부 인터럽트라고 하며 CPU로부터 발생하는 운영오류등 포함됩니다. 인터럽트는 하드웨어적으로 프로그램 외부에서 발생하는 것이며 트랩은 발생하는 시점이 프로그램의 일정함 지점이라는 점에서 동기적 입니다. 한마디로 고정된 영역에서 일어납니다.

반면 인터럽트(interrupt)는 프로그램 외부 상황에 따라서 발생 시점이 일정하지 않기 때문에 비동기적입니다. 하드웨어 인터럽트 들은 CPU외의 다른 장치들에서 발생합니다. 키보드, 디스크 드라이브, CD-ROM, 사운드 카드, 마우스와 같은 장치들이 이에 포함됩니다.

트랩은 인터럽트와 달리 트랩은 현재 수행되는 명령어와 직접 연관되어 그 원인이 발생합니다.

인터럽트는 마우스와 같은 주변장치에서 발생하는 하드웨어 인터럽트와 소프트웨어에서 인위적으로 발생시키는 소프트웨어 인터럽트가 있는데, 합해서 256가지의 인터럽트를 가지게 되며, 각각의 인터럽트는 고유한 번호를 가지게 됩니다. 인터럽트 핸들러는 인터럽트가 발생한 물리적인 메모리의 위치를 기억하기 위한 세그먼트 어드레스를 포함하게 되는데 인터럽트 핸들러가 끝난후 중단된 프로세스에서 다시 하던 일을 계속하도록 지시할 수 있습니다.

프로그램 실행 중 overflow나 underflow 같은 특이한 (어떤 조치를 취해야 할) 사항이 발생한 경우 프로그램은 지정한 특정번지로 점프하여 그곳의 명령을 실행하게 되는데, 이렇게 프로그램이 자동적으로 특정 번지로 점프하여 그곳의 명령을 실행하는 것을 트랩이라고 하며, 특정 번지의 있는 프로그램을 트랩 핸들러(trap handler)라고 합니다. 사실 overflow는 flag register의 특정 비트를 체크해 봄으로서, 각 명령어를 실행했을 때 overflow가 일어났는지 알 수 있습니다. 그러나 모든 산술 명령에 대해 플래그 레지스터를 체크해 보는 것은 비효율적입니다.

간단히 말하자면 인터럽트는 하드웨어적인 흐름의 변화이고, 트랩은 소프트웨어적이라고 할 수 있습니다. 트랩과 인터럽트의 주된 차이점은 트랩은 어떤 프로그램을 실행시켰을때, 항상 고정된 위치에서 일어나나, 외부 인터럽트는 언제 발생될지 모른다는 점입니다. 인터럽트는 장치 폴링 문제 해결을 위해 입출력장치의 완료 신호로 사용할 수 있으며, 트랩은 운영체제 루틴을 호출하거나, 산술 오류를 잡아내는데 사용할 수 있습니다.

■ 참고사항

● 인터럽트

컴퓨터가 프로그램을 수행하는 동안 컴퓨터의 내부 또는 외부에서 예기치 않은 긴급한 일이 발생했을 때 조치를 강구하여 계속적으로 프로그램 처리를 하도록 해주는 기능

● 인터럽트 처리

가. 인터럽트가 발생하면 현재 수행 중인 프로그램 처리는 일시 중단되고 제어권이 제어 프로그램으로 넘어 간다.

나. 제어 프로그램 중에 준비된 인터럽트 처리 루틴과 인터럽트 서비스 루틴이 처리된다.

다. 이 루틴들의 처리가 끝나면 시스템은 인터럽트가 발생하기 이전의 상태로 돌아가서 먼저 실행하던 처리 프로그램의 실행을 다시 시작한다.

● 인터럽트의 발생 원인과 종류

▶ 인터럽트의 발생 원인과 필요성

(1) 인터럽트의 발생 원인

가. 기계적인 문제(정전, 데이터 전달 과정에서 오류의 발생)

나. 프로그램 상의 문제(보호된 기억 공간에 접근, 불법적인 명령의 수행 등)

다. 컴퓨터 조작자(operator)의 의도적인 조작으로 중단되는 경우

라. 입출력과 같은 주변 장치들의 조작에 중앙 처리 장치의 기능이 요청되는 경우

마. 산술 연산 중에 범람(overflow)이나 언더풀로(underflow)가 발생하는 경우

▶ 인터럽트의 필요성의 예

가. 정전의 경우

- 정전이 되는 순간까지 수행된 결과를 보존하고, 그때의 중앙 처리 장치의 상태를 보존한다면 전원이 회복된 후에 보존된 정보에 의하여 중단한 프로그램을 다시 계속할 수 있으므로 나머지 남은 부분만 수행하면 되나 그렇지 않 은 경우에는 처음부터 다시 수행하여야 한다.

나. 중앙 처리 장치와 주변 장치의 속도 차이가 극심한 경우 입출력

- 중앙 처리 장치가 명령을 수행하여 입력 장치에게 단위 정보를 요청하고 입력장치가 원하는 정보를 읽는 동안 중앙처리장치는 기다리는 시간에 중앙 처리장치가 수천 개의 명령을 수행할 수 있도록 인터럽트를 사용하면 경제적이다.

- 입출력 인터럽트를 사용하여 입출력하는 동안에 중앙 처리 장치와 입출력 장치가 병행하여 동작함으로써 하드웨 어의 운영 효율을 기할 수 있다.

▶ 인터럽트의 종류와 우선 순위

(1) 인터럽트의 종류

가. 기계 검사 인터럽트(machine check interrupt)

- 프로그램을 수행하는 도중에 기계의 착오로 인하여 생기는 인터럽트

나. 외부 인터럽트(external interrupt)

- 외부의 신호에 의하여 발생하는 인터럽트

다. I/O 인터럽트(I/O interrupt)

- 입출력의 종료나 입출력의 오류에 의해 생기는 인터럽트

라. 프로그램 검사 인터럽트(program check interrupt)

- 연산기에서 0으로 나누는 경우라든가 명령 코드를 잘못 사용한 경우와 같이 프로그램의 오류에 의해 생기는 인터럽트

마. 감시 프로그램 호출 인터럽트(supervisor call interrupt)

- 프로그램 내부에서 특정한 요구를 하는 경우에 생기는 인터럽트

(2) 인터럽트의 우선 순위

가. 정전 또는 기계 잘못으로 인하여 발생하는 인터럽트

나. 프로그램의 연산자나 주소 지정 방식의 잘못으로 인하여 발생하는 인터럽트

다. 컴퓨터 조작자의 의도적인 조작에 의한 인터럽트

라. 입출력 장치로부터의 인터럽트

● 인터럽트의 동작 원리와 체제

▶ 인터럽트의 동작 원리

[그림] 인터럽트의 동작 원리

(1) 인터럽트 시스템의 구성

- 인터럽트 요청 신호 회로(in- terrupt request circuit)

- 인터럽트 처리 루틴(interrupt handling routine)인터럽트 후에 인터럽트 서비스 루틴의 주소로 분기하기까지의 처리 프로그램 루틴

- 인터럽트 서비스 루틴(interrupt service routine)인터럽트 요청에 의해서 수행되어야 하는 프로그램 루틴

(2) 인터럽트 처리 과정을 정리하면 다음과 같다.

가. 인터럽트 요청 신호 회로를 통해 인터럽트 요청을 한다.

나. 중앙 처리 장치가 인터럽트 요청을 받으면 현재 수행 중인 명령을 완료한 후 현재 수행 중인 프로그램을 일시 중단하고 수행 중인 프로그램의 상태(프로그램이 사용한 모든 레지스터, PC 등)를 안전한 장소에 보존한다.

다. 인터럽트 처리 루틴을 수행하여 인터럽트 원인을 찾아 낸 다음 그것의 인터럽트 서비스 루틴을 수행시킨다.

라. 인터럽트 서비스 루틴의 수행을 통하여 인터럽트에 대한 조치를 한다.

마. 다시 인터럽트 처리 기능을 이용하여 미리 보존한 프로그램의 상태를 복구하고 인터럽트 당한 프로그램을 중단 된 곳에서부터 계속할 수 있도록 조치한다.

▶ 인터럽트의 체제

(1) 인터럽트 요청 선의 연결 방법

가. 단일 회선 인터럽트 체제

- 인터럽트 요청이 가능한 모든 장치들로부터 인터럽트 요청 신호들을 논리적으로 합하여 단일회선으로 중앙 처리 장치에 연결

- 한 개의 요청 선에 여러 개의 장치가 연결되어 있으므로 중앙 처리 장치가 인터럽트 원인을판별하는 기능이 필요

나. 다중 회선 인터럽트 체제

- 모든 장치들과 중앙 처리 장치 사이에 각각 고유의 인터럽트 요청 선들이 존재

- 중앙 처리 장치가 인터럽트의 원인을 바로 판별

다. 혼합 인터럽트 체제

- 단일 회선과 다중 회선을 혼합한 형태

[그림] 인터럽트 요청 회선 연결 방법

(2) 단일 회선 인터럽트 체제에서 인터럽트 원인을 판별하는 방법

- 폴링 방식

- 벡터 방식

(2-1) 폴링 방식 - 소프트에어나 하드웨어로 구현 가능

가. 소프트웨어 구현

- 모든 장치에 적용되는 하나의 인터럽트 처리 루틴을 두고 이것에 의하여 중앙 처리 장치가 지정된 순서대로 각 장치에 신호를 보내서 인터럽트 요청 장치를 판별하는 방법

- 각 장치의 인터럽트 요청 우선 순위는 폴링하는 순서에 따라 정해짐

[그림] 소프트웨어(폴링) 방식에 의한 인터페이스 구조

- 각 장치들은 IR을 1로 하여 중앙 처리 장치에 인터럽트 요청을 하고, D를 1로 하여 인터럽트 를 요청했음을 표시

- 각 장치가 인터럽트 요청을 하면 중앙 처리 장치는 인터럽트 처리 루틴에 의해서 현재 수행 중인 프로그램의 상태를 보존하고 폴링 순서에 따라서 각 장치의 D 풀레그를 시험하는 명령을 수행

- 이때 최초로 D가 1인 장치를 인터럽트 요청 장치로 판별

- 인터럽트를 요청한 장치를 판별하여 그 장치의 서비스 루틴의 수행이 시작되면 IR과 D를 다시 0으로 만들어 다른 장치가 인터럽트를 요청할 수 있도록 한다.

나. 하드웨어 구현

- 2진 카운터는 초기에는 첫 번째 장치의 주소를 가지고 있고, 만약 CPU가 폴링 모드로 되면 각 클럭 펄스마다 1씩 증가

- 카운터가 인터럽트를 요청한 장치의 주소에 도달하면 인터럽트 요구 풀립풀롭이 세트되어 2진 카운터는 증가되지 않고 인터럽트를 요청한 장치의 주소가 2진 카운터에 남아 있게 되고 2진 카운터의 주소 즉 인터럽트 요청 장치의 주소는 중앙 처리 장치로 전송

[그림] 하드웨어(폴링) 방식에 의한 인터페이스 구조

* 폴링방식의 장점

- 프로그램에 의해서 우선 순위를 조절

- 최소한의 하드웨어만으로 구성이 가능

* 폴링방식의 단점

- 각 장치를 폴링하여야 하므로 응답 시간이 길어짐

(2-2) 벡터 인터럽트 방식

- CPU는 인터럽트에 대한 응답으로 인터럽트 승인(INTA) 신호를 보낸다.

- 중앙 처리 장치에 가까운 쪽에 있는 장치가 우선 이 승인 신호를 받게 되고 그 장치가 인터럽트를 요청한 경우에는 자신의 인터럽트 벡터를 데이터 버스에 실어서 중앙 처리 장치로 보낸다.

- 장치 다음에 연속되는 장치들은 인터럽트 인정 신호를 받을 수 없게 되어 자신의 벡터를 중앙 처리 장치에 알릴 수 없다.

[그림] 벡터 방식 인터럽트

(가) 벡터 인터럽트 방식의 인터페이스

- 한 장치가 인터럽트를 요청하여 인터럽트 풀립풀롭이 세트되면 장치에 접속되어 있는 INTA 풀립풀롭이 INTA 신호에 의해 세트

- 장치는 데이터 버스 상에 벡터를 전송

- CPU는 이 벡터를 읽어 인터럽트를 요청한 장치를 확인

- 장치가 확인되면 CPU는 해당 장치로 두 번째 INTA를 보내고 해당 장치는 INTA 풀립풀롭과 인터럽트 풀립풀롭 리세트

- 중앙 처리 장치가 장치 주소를 받은 후에는 해당 인터럽트 서비스 루틴으로 분기하여 서비스 루틴을 수행

 

[그림] 벡터 방식에 의한 인터페이스 구조



맨위로
통합 검색어 입력폼