컴퓨터가 3층집인건 알고 있죠?

 

널널한 개발자 - 컴퓨터가 3층집인건 알고 있죠?

컴퓨터 3층

  • 유저모드(User)
  • 커널모드(Kernel)
  • 하드웨어(Physical) / 소프트웨어(Logical, Virtual)

컴퓨터 3층 내부에서는 통신을 한다

  • 운영체제는 유저모드에 있는 애플리케이션을 서포트하고, 내부에 있는 커널모드와 하드웨어에는 관리 및 제어를 한다.
  • 컴퓨터는 주변기기와 통신(입출력)을 한다. 즉, I/O를 말하는 것인데, 컴퓨터가 주변기기와 통신을 할 때 여러가지 매커니즘이 존재하는데 그럴때마다 인터럽트(Interrupt)가 발생한다.

Hello World 를 입력한다면?

컴퓨터 3층이 통신을 하는 예시이다. 대개 언어를 배울 때 “Hello World”를 입력한다. 이 행위는 운영체제가 모니터를 제어 했다는 말이 될 수도 있다. 이 과정을 나열해보면

  1. printf API Call (C언어 기준)
  2. API 내부에서는 장치를 추상화된 파일이라는 인터페이스를 통해서 정보를 가지고 커널모드에 진입한다.
  3. 커널모드의 진입과 함께 새로운 코드가 실행 -> system call (API를 통해서 system call을 하였다)
  4. Device Driver가 작동되기 시작
  5. 인터럽트를 요청(Interrupt request: IRQ)해서 장치와 통신하기 시작

    IRQ는 장치별로 값을 가지고 있다 인터럽트 요청선 포스팅

  6. Vedio(모니터) 물리적인 선을 통해 모니터에 렌더링 완료
  7. 인터럽트가 장치에게 응답으로 완료 표시를 알리면서 커널 수준부터 유저 모드까지 돌아가고 함수를 리턴(printf는 리턴 값이 없으니 패스)

블로킹/논블로킹 I/O

  • 위의 과정을 거칠 때동안 다른 일을 처리하면 논블로킹 I/O
  • 과정을 처리할 때동안 wait 상태이면 블로킹 I/O

정리

  1. 인터럽트는 컴퓨터의 주변기기와 정보 통신할 때 주로 발생한다.
  2. 시스템 호출(system call)은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다. 보통 C나 C++과 같은 고급 언어로 작성된 프로그램들은 직접 시스템 호출을 사용할 수 없기 때문에 고급 API를 통해 시스템 호출에 접근하게 하는 방법이다