프로세스가 CPU를 사용하여 실행하고 있을 때 하드웨어 장치에서 비동기적으로 신호( I/O 같은 )가 발생하여 처리가 필요한 경우에 커널에게 처리를 요청하는 것이다.
CPU는 명령을 가져와서 실행을 한다.
연산 처리 및 데이터 접근 등등의 일을 하며 하나의 명령 실행이 끝났다면 PC(Program Counter)를 증가시킨다. (보통 4바이트)
디스크가 인터럽트를 발생시킨 경우 우선 Interrupt Request Bit
에 한 비트 설정을 한다.
이 비트가 설정되면 더 이상 CPU는 작업을 돌지 않고 PC에 인터럽트 핸들러의 새로운 주소를 저장한다.
다시 진행을 하게 되면 인터럽트 핸들러의 주소가 fetch
되고 인터럽트 핸들러 루틴이 실행된다.
이때 Interrupt Request Bit
를 Disabled
할 수 있는데 이렇게 되면 인터럽트가 발생하지 않는다.
부팅시와 같이 인터럽트가 발생하면 안되는 순간에 사용한다.
위의 단일 장치가 아닌 다중 장치에서 동시에 인터럽트를 발생 시키는 경우에는
Interrupt Request Bit
에서 한 비트를 설정하는 것이 아닌 Interrupt Controller
에서 인터럽트를 관리하게 된다.
Interrupt Controller
는 PIC (Programmable Interrupt Controller)라고 부른다.
인터럽트를 요청한 장치들은 IRQ (Interrupt Request Line)에 연결된다.
PIC에는 IMR (Interrupt Mask Register) 과 IRR (Interrupt Request Register)이 존재한다.
연결된 장치들은 IMR에서 0일 경우에는 차단이 되고 0이 아닌 경우에는 통과되어 IRR로 이동하게 된다.
소프트웨어적으로 Masking할 장치를 선택할 수 있다. ( 절대적으로 Masking이 되지 않는 인터럽트 또한 존재한다. )
이후에 Priority register에서 우선순위에 따라 ISR(In Service Register)로 등록되고 등록된 요청이 INTR ( Interrupt Request) 로 전달되어 Interrupt Request Bit을 한 비트 설정한다.
위의 요청이 처리되기 전까지는 PIC는 블락되어 다른 장치들의 요청을 받을 수 없다.
CPU에서 요청을 처리한 후에 Ack 신호를 보내면 이때 PIC 블락이 해제되고 다음 인터럽트 요청을 처리할 수 있다.
CPU에서 장치에 대한 버퍼, 포인터, 입출력 카운트를 세팅한 후 CPU의 개입없이 바로 메모리로 입출력을 하도록 도와주는 장치이다.
기존에 CPU로 한 바이트씩 이동하면서 인터럽트를 발생시켰던 과정과는 다르게 대량의 데이터를 블록으로 구성하여 DMA를 통해 CPU의 관여 없이 이동할 수 있다.
데이터 블록이 이동하고 나서 인터럽트가 발생하므로 I/O가 진행하는 동안 CPU는 다른 일을 수행할 수 있고
데이터 입출력이 완료된 후에 CPU에 인터럽트를 전달한다.
→ 데이터가 큰 경우 실시간으로 자주 일어나는 인터럽트를 데이터 블록이 모두 이동되는 동안 CPU에게 다른 할 일을 주고 인터럽트를 나중에 데이터가 모두 이동되면 처리할 수 있어 효과적이다.
멀티 프로세스 환경에서의 PIC는 다음과 같이 구성된다.
두 CPU는 버스와 연결되어 있으며 버스는 APIC와 연결되어 있다.
Local APIC는 CPU마다 하나씩 지니고 있는 것으로 주기적으로 인터럽트를 걸어주는 Timer와 연결되어 있다.
모든 Local APIC는 외부 APIC와 연결되어 있다.
(Multi) APIC는 멀티 프로세스를 위한 Advanced IPC이다.
SMP는 모든 프로세서가 하나의 메모리, 인터럽트, I/O 장치 등을 공유하며 하나의 운영체제가 모든 프로세스를 관리한다.
따라서 인터럽트 발생 시에 어느 CPU에 요청할지에 대한 방식이 필요하다.
1. Static Table 을 통해 미리 결정하고 정적으로 결정된 곳으로 보낸다.
1. 동적 IRO 분배 알고리즘으로 결정한다.
a. 우선순위가 가장 낮은 프로세스를 돌리고 있는 CPU에게 요청한다.
2. 우선순위가 동일한 프로세스를 돌리는 경우에는 Arbitration 알고리즘을 활용한다
a. Arbitration : CPU 마다 Count를 주고 인터럽트 요청을 처리한 CPU는 Count를 0으로 초기화한다. 나머지 CPU는 Count 를 1씩 증가한다.
가장 Count가 높은 CPU 일수록 인터럽트를 처리하지 않은 것이므로 할당한다.
SMP는 CPU가 모든 자원을 공유하기 때문에 Mutual Exclusion이 확실하게 이루어져야 한다. 따라서 구현이 상대적으로 어렵다.
각 프로세스가 특정 업무를 맡아서 처리한다.
Master Process를 갖는 주종관계로 Master CPU가 메모리를 갖고 이때 OS 커널이 이 메모리 안에 속한다.
따라서 Master CPU의 권한하에 다른 CPU들이 인터럽트 요청을 받아 처리한다.
❓ AMP의 정의가 주종관계 말고도 I/O 등의 특정 작업에 고정된 CPU라는 의미가 있던데 어느 정의가 맞는지는 아직 의문이다.
DMA(Direct Memory Access)란? (+PIO, 채널제어방식)
고건 교수님 강의
https://olc.kr/course/course_online_view.jsp?id=35&cid=51