| 그림번호 | 설명 | CPU 모드 |
|---|---|---|
외부에서 신호(read()시스템 콜)가 CPU로 들어오면, 수행하던 명령어를 중단하고 커널 모드로 전환 |
**(소프트웨어 인터럽트) | |
| 유저모드 → 커널모드** | ||
| 1 | OS에서 디바이스 controller(하드웨어)로 명령, | |
| 디바이스는 I/O 작업 수행 | 커널모드 | |
현재 프로세스는 waiting 상태로 변경, |
||
ready중인 프로세스가 있다면 running으로 변경 |
커널모드 → 유저모드 | |
| 2 | 디바이스가 작업을 완료하면, Interrupt controller에게 종료 시그널을 전송 | 유저모드 |
| 3 | Interrupt controller에서 CPU에게 디바이스가 작업 완료했음을 알림. | |
| 이때 여러 개의 디바이스 controller가 연결되어 있을 수 있으나 우선순위에 의해서 처리됨. | **(하드웨어 인터럽트) | |
| 유저모드 → 커널모드** | ||
| 4 | 3번에서 interrupt 신호를 전송함과 동시에, interrupt를 발생시킨 디바이스의 번호를 같이 보냄. |
| 그림번호 | 설명 | CPU 모드 |
|---|---|---|
| 1 | interrupt 발생 (위 3번) | (하드웨어 인터럽트) |
| 유저모드 → 커널모드 | ||
| 2 | Interrupt vector(위 4번에서 얻은 정보)를 통해서 interrupt handler 불러내 수행. | |
waiting으로 변경되었던 프로세스 ready로 변경. |
커널모드 | |
| 3 | return해서 다음 작업 ㄱㄱ | 커널모드 → 유저모드 |