1. 인터럽트 기본 개념
인터럽트란 무엇이며, 컴퓨터 시스템에서 왜 중요한가요?
인터럽트라는걸 알기위해선 CPU는 한번에 한가지 일만 할 수 있다는 것을 이애해야 한다,
(1core = 한가지 일) 이렇게 CPU가 한가지 일을 할 때 일을 중지하고 다른 일을 시키는 요청 이것을 인터럽트라고 한다.
인터럽트 = "방해하다" 즉 하는 일을 방해한다는 의미를 그대로 사용한다.
cpu가 키보드 입출력을 기다리지 않고 다른일을 하다가 키보드에서 입력이 완료되고 인터럽트 요청하면 키보드에서 입력된 것을 처리하는 것처럼 인터럽트를 사용하면 cpu가 무엇인가를 기다릴 일 없이 효율적으로 일처리가 가능해서 중요하다.
키보드같은 입출력 장치는 cpu에 비해서 느리기 때문에 작업이 완료됐는지 cpu에서 확인이 필요한데 cpu가 계속해서 확인해 주는 것이 아니라 인터럽트를 통해서 입출력 장치가 완료가 됐다고 알려주는 것이다.
2. 인터럽트의 종류
하드웨어 인터럽트와 소프트웨어 인터럽트의 차이점은 무엇인가요?
1. 동기 인터럽트(소프트웨어 인터럽트)
cpu가 예기치 못한 상황을 접했을 때 방생하는 인터럽트
ex : 디버깅, 메모리 주소 참조 요류 등등
종류로는 폴트 트랩 중단 소프트웨어 인터럽트가 있다.
2. 비동기 인터럽트(하드웨어 인터럽트)
입출력 장치에 의해서 발생하는 인터럽트
ex : 키보드 입력 완료, 프린트 완료, 파일 저장 완료
마스크 가능 인터럽트와 마스크 불가능 인터럽트는 어떤 차이가 있나요?
마스크 가능 인터럽트는 무시할 수 있는 인터럽트를 뜻한다. 지금 바로 처리하지 않아도 그렇게 중요하지 않은 인터럽트를 얘기하고 마스크 불가능 인터럽트는 당연히 바로 처리해야하는 (ex:정전, 하드웨어 고장)
3. 인터럽트 처리 과정
CPU가 인터럽트를 처리하는 일반적인 과정을 설명해 주세요.
- 입출력 장치가 인터럽트 요청을 함
- cpu는 인터럽트 요청을 확인하고 인터럽트 flag를 확인해서 인터럽트를 받을 수 있는 상황인지 혹은 마스크 불가능 인터럽트인지 확인한다.
- 인터럽트 요청을 받아들어야 하면 지금 하고 있는 작업의 레지스터등을 메모리 stack에 백업한다.
- 인터럽트 백터를 참조하여(메모리에 존재하는 인터럽트 프로그램) 인터럽트 서비스 루틴을 실행한다.
- 인터럽트 서비스 루틴이 끝나면 stack에 백업한 작업을 다시 가져와 실행한다.
인터럽트 벡터 테이블은 무엇이며, 어떤 역할을 하나요?
인터럽트는 종류가 다양해서 인터럽트 프로그램이 ram에 저장된 주소도 다양하게 되는데 이것을 매핑해주는 것이 인터럽트 백터이다. 보통 인터럽트 요청을 입출력장치에서 보낼 때 같이 보낸다
4. 인터럽트 우선순위
인터럽트 우선순위란 무엇이며, 어떻게 설정되나요?
.모든 인터럽트에는 중요도에 따라서 우선순위가 정해져 있다.같이 요청이 들어와도 우선순위가 높은 (중요하거나 긴급한) 인터럽트 부터 처리되게 된다. 이는 2가지 방식으로 나눌 수 있다.
1. SW적 방식
운영체제나 펌웨어에서 미리 인터럽트에 우선순의를 정할 수 있다.
2. HW적 방식
PIC같은 인터럽트 컨트롤러에 인터럽트 우선순의가 정의 되어 있어서 이를 따라서 처리한다.
인터럽트 우선순위가 높은 경우와 낮은 경우의 처리 방식은 어떻게 다른가요?
우선순의가 높은 인터럽트가 들어오면 가능한 즉각 처리를 하게 된다. 하지만 낮은 우선순의가 들어올 경우 느리게 처리되거나 무시되기도 한다.
5. 인터럽트와 시스템 성능
인터럽트가 시스템 성능에 미치는 영향
위에서 설명한 것과 같이 인터럽트는 cpu가 작업을 효율적으로 처리하게 해준다. 또한 긴급하게 행해야하는 작업을 바로 처리할 수 있도록 해준다.
인터럽트를 많이 사용하는 시스템에서는 어떤 성능 문제를 겪을 수 있나요?
우선순의가 낮지만 실행이 되야하는 것들이 있을 때 우선순의가 높은 인터럽트가 계속 발생하게 되면 시스템의 전체적인 속도가 낮아질 수 있다.
6. 인터럽트 핸들러
인터럽트 핸들러가 무엇인가요? 어떤 기능을 하나요?
인터럽트 핸들러는 인터럽트 서비스 루틴과 같다 인터럽트 요청을 어떻게 수행해야 하는지 알려주는 함수나 블록이다.
인터럽트 핸들러를 작성할 때 고려해야 할 주요 사항은 무엇인가요?
인터럽트는 최소한의 작업을 해야만 하고 인터럽트 중에 다른 인터럽트가 생길 수 있으니 중단되더라도 문제없이 다시 실행 될 수 있어야 한다.
7. 인터럽트와 동기화 문제
인터럽트로 인해 발생할 수 있는 동기화 문제는 어떤 것이 있나요?
인터럽트 동시에 발생할 경우 그리고 이 2가지 요청이 같은 자원(하드웨어, 메모리 주소)를 사용해야 할 경우 서로 자원을 기다리면서 무안하게 기다릴 수 있다.
인터럽트로 인한 경쟁 조건을 방지하기 위해 어떤 기법을 사용할 수 있나요?
1. 플레그 변수 사용
인터럽트 플레그를 사용해서 지금 인터럽트 요청을 받을 수 있는지 받을 수 없는지 상태를 나타내게 된다.
2. 뮤텍스
한번의 하나의 스레드만 뮤텍스를 잠글 수 있도록 해서 잠금이 해제될 때까지 다른 스레드가 사용할 수 없다.
3. 세마포어
카운터 값을 가지고 있으며 동시에 여러 스레드가 접근할 수 없도록 접근 스레드의 수를 제어한다.
Coding, Software, Computer Science 내가 공부한 것들 잘 이해했는지, 설명할 수 있는지 적는 공간