-
만약 사용자 프로그램에 있는 코드가 I/O 디바이스를 사용하기 위해 system call을 건다면?
- system call을 거는 이유는 사용자 프로그램은 I/O로 직접적인 요청을 못함.
- 의도적으로 interrupt line을 세팅함.
- 인터럽트가 걸리면 하던 일을 중단하고 CPU 제어권을 운영체제에게 넘기기 때문에.
- 일반적으로 거는 인터럽트는 하드웨어 인터럽트로써 I/O device가 거는 인터럽트이다.
- 이건 의도적으로 세팅을 해서 부르는데 Trap(소프트웨어 인터럽트)라고 한다.
- 운영체제만이 I/O 디바이스에게 요청할 수 있음.
- 사용자 프로그램이 I/O 요청을 직접적으로 하는 것을 막기 위해 mode bit 존재
mode bit
- 1일때는 사용자 모드로, 사용자 프로그램을 수행하며 I/O 접근을 못하게 막음.
- 0일때는 모니터 모드로 CPU가 운영체제에 넘어가 있을때를 뜻함.
-
system call이나 Exception(예시로 0으로 나누는 것)을 걸면 interrupt line이 자동으로 세팅되고 mode bit가 1에서 0으로 바뀜.
- system call과 Exception으로 거는 interrupt를 소프트웨어 인터럽트(trap)라고 함.
-
CPU가 운영체제에게 넘어가서 trap을 사용하여 인터럽트 벡터의 특정 위치로 이동시킴.
-
제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동
- 인터럽트 벡터는 특정 인터럽트가 발생해서 실행시켜야 하는 함수들의 주소를 정의해 놓은 일종의 테이블
- 인터럽트 처리 루틴은 각 인터럽트마다 처리해야 하는 실제 코드(커널 함수)
-
올바른 I/O 요청인지 확인 후 I/O 수행