인터럽트
대부분의 시스템에서 하나의 CPU를 두고 여러 프로세스들이 경쟁을 하면서 자신의 작업을 수행한다.
이 때 각 프로세스는 정해진 시간만큼 CPU를 사용할 수 있고 정해진 시간이 지나게 되면 타이머 인터럽트에 의해 다른 프로세스에게 CPU가 이양된다.
그런데, 만약 CPU가 A프로세스에게 할당되어 있는데 급하게 처리해야하는 작업이 발생하면 어떻게 될까?
사용자의 응답에 관한 일인 경우 최대한 즉각적으로 답을 주어야 한다. 이럴 때 발생하는 것이 인터럽트이다.
하드웨어 입출력 장치의 사용,
프로그램에서 0으로 나누는 경우,
커널 함수를 사용하는 시스템 콜 ..
등이 인터럽트에 해당한다.
interrupt 라는 단어만 보면 '방해'라는 것을 의미하는 것처럼 들리지만
OS에서는 방해라기보다 우선순위가 더 높은 작업을 우선적으로 처리한다는 의미가 더 강하다.
일반적으로 마우스/키보드/입출력 장치 등의 user interaction 작업이 더 높은 우선순위를 갖는다.
예를 들어서 마우스/작업의 경우 현재 하는 작업보다 우선적으로 처리해야 하므로 인터럽트가 필요하고, 하드웨어 인터럽트의 경우 프로세스의 클럭과 상관 없이 비동기적으로 인터럽트를 발생시키기 때문에 인터럽트는 아무때나 발생할 수 있다.
*비동기적으로 인터럽트를 발생한다?
프로세스 간 서로의 상황을 알지 못하고 인터럽트를 발생하는 것을 말한다.
인터럽트는 크게 소프트웨어 인터럽트와 하드웨어 인터럽트로 나눌 수 있다.
소프트웨어 인터럽트를 다른 말고 트랩이라고도 한다.
소프트웨어 인터럽트
- 허가되지 않은 메모리 주소 참조
- 0으로 나누는 경우
- 시스템 콜
- 페이지 폴트
하드웨어 인터럽트
- 정전 또는 전원 공급의 이상
- CPU 또는 기타 하드웨어의 오류
- 타이머 인터럽트
- 하드웨어 입출력 장치
그리고 이렇게 발생한 인터럽트에 대해서 이에 대한 정보와 해야할 일은 이미 커널에 정의되어 있다.
인터럽트 벡터 테이블
여러가지 인터럽트에 대해 해당 인터럽트가 발생했을 때 처리해야 하는 과정의 주소를 보관하고 있는 테이블을 의미한다.
대부분의 CPU는 인터럽트 벡터 테이블을 갖고 있다.
인터럽트 벡터 테이블은 000000H–0003FFH 주소공간에 4바이트씩 할당하여 256개가 존재하는데 이것을 인터럽트 벡터라고 한다,
인터럽트는 16진수 2자리로 이 벡터에서 해당 루틴의 번지가 기억된 순번을 지적하여 그 기능을 요청하면 그 곳에 기억된 번지로 분기하여 인터럽트를 수행하게 된다.
인터럽트 서비스 루틴
인터럽트 핸들러라고도 하며 실제 인터럽트를 처리하는 루틴으로 실행 중이던 레지스터와 PC를 저장하여 실행중이던 CPU의 상태를 보존하고 인터럽트 처리가 끝나면 다시 원래 상태로 복귀한다.
운영체제 코드 부분에는 각종 인터럽트 별로 처리해야 할 내용이 이미 프로그램화 되어 있다.
'OS' 카테고리의 다른 글
[운영체제] 프로세스 동기화 1 (0) | 2022.09.11 |
---|---|
[운영체제] 시스템 구조 및 프로그램 실행 (1) | 2022.09.11 |
동기 VS 비동기 (+ Blocking VS Non-Blocking) (0) | 2022.09.06 |
[질문] 프로세스 스케줄링 & CPU 스케줄링 (0) | 2022.09.05 |
CPU 스케줄링 (0) | 2022.09.05 |