컴퓨터 3층
- 유저모드(User)
- 커널모드(Kernel)
- 하드웨어(Physical) / 소프트웨어(Logical, Virtual)
컴퓨터 3층 내부에서는 통신을 한다
- 운영체제는 유저모드에 있는 애플리케이션을 서포트하고, 내부에 있는 커널모드와 하드웨어에는 관리 및 제어를 한다.
- 컴퓨터는 주변기기와 통신(입출력)을 한다. 즉, I/O를 말하는 것인데, 컴퓨터가 주변기기와 통신을 할 때 여러가지 매커니즘이 존재하는데 그럴때마다 인터럽트(Interrupt)가 발생한다.
Hello World 를 입력한다면?
컴퓨터 3층이 통신을 하는 예시이다. 대개 언어를 배울 때 “Hello World”를 입력한다. 이 행위는 운영체제가 모니터를 제어 했다는 말이 될 수도 있다. 이 과정을 나열해보면
printf
API Call (C언어 기준)- API 내부에서는 장치를 추상화된 파일이라는 인터페이스를 통해서 정보를 가지고 커널모드에 진입한다.
- 커널모드의 진입과 함께 새로운 코드가 실행 -> system call (API를 통해서 system call을 하였다)
- Device Driver가 작동되기 시작
- 인터럽트를 요청(Interrupt request: IRQ)해서 장치와 통신하기 시작
IRQ는 장치별로 값을 가지고 있다 인터럽트 요청선 포스팅
- Vedio(모니터) 물리적인 선을 통해 모니터에 렌더링 완료
- 인터럽트가 장치에게 응답으로 완료 표시를 알리면서 커널 수준부터 유저 모드까지 돌아가고 함수를 리턴(printf는 리턴 값이 없으니 패스)
블로킹/논블로킹 I/O
- 위의 과정을 거칠 때동안 다른 일을 처리하면 논블로킹 I/O
- 과정을 처리할 때동안 wait 상태이면 블로킹 I/O
정리
- 인터럽트는 컴퓨터의 주변기기와 정보 통신할 때 주로 발생한다.
- 시스템 호출(system call)은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다. 보통 C나 C++과 같은 고급 언어로 작성된 프로그램들은 직접 시스템 호출을 사용할 수 없기 때문에 고급 API를 통해 시스템 호출에 접근하게 하는 방법이다
PREVIOUS프로세스와 쓰레드