I/O가 왜 논스톱인가요?

I/O가 왜 논스톱인가요?

I/O를 중단 없이 만드는 원리는 무엇입니까? I/O를 처리하는 프로세스가 신호를 처리하도록 허용되면 부정적인 결과는 무엇입니까?

답변1

모든 I/O는 프로세스에서 호출하는 시스템 호출에 의해 처리됩니다. 결국 이러한 시스템 호출은 실제 I/O 작업을 수행하기 위해 적절한 하위 수준 장치 드라이버 기능으로 흘러내립니다.

I/O는 까다로울 수 있습니다. 실제로 장치에서 데이터를 이동하려면 다양한 단계를 순차적으로 수행해야 할 수 있으며 타이밍 요구 사항이 적용될 수 있습니다. 이러한 단계가 자동으로 완료되지 않으면 다음에 이 단계를 시도할 때 장치가 응답하지 않거나 예기치 않게 작동하거나 시스템이 잠길 수도 있습니다. 이러한 단계는 각 장치마다 다르고 고유할 수 있으므로 장치 드라이버가 너무 많습니다.

잘 작성된 장치 드라이버는 서비스하려는 장치를 처리하는 방법을 알아야 하므로 드라이버 버그가 있거나 잘못된 장치 드라이버를 사용하거나 물리적 장치에 오류가 발생하지 않는 한 일반적으로 문제가 발생하지 않습니다.

답변2

이제 나는 Maurice Bach의 책 "The Design of the Unix Operating System"을 읽었으므로 이 질문에 스스로 대답해 보겠습니다.

즉, I/O를 중단할 수 없게 만드는 것은 신호 간섭 없이 I/O 작업을 최대한 빨리 완료할 수 있도록 하는 것입니다.

책에서 얻은 몇 가지 관련 지식은 다음과 같습니다.

  1. "끊임없는"이라는 단어는 "끊임없는 수면"을 의미해야합니다. 프로세스가 중단 없이 절전 모드에 있으면 신호로 깨울 수 없으며 신호를 처리할 수도 없습니다.
  2. 프로세스는 다음과 같은 경우에 신호를 처리합니다. 커널 모드에서 실행 중이고 사용자 모드로 돌아가려고 합니다. b. 수면이 중단되면 수면 상태에 들어가고 나가려고 합니다.
  3. 신호에 의해 수면 과정이 깨어나면 어떻게 되나요? 신호를 처리하며 기본 동작은 프로세스를 종료하는 것입니다. 프로세스가 I/O가 완료되기를 기다리고 있는 경우 프로세스가 조기에 종료되는 것을 원하지 않을 것입니다.

답변3

커널의 특정 코드 경로는 주로 코드가 엄격한 타이밍(장치에 대한 응답)을 준수해야 하거나 간섭을 허용하지 않는 작업을 수행하기 때문에 중단 불가능으로 표시됩니다. Linux에 관한 한 전자의 대부분은 별도의 커널 스레드로 푸시되었으며 후자의 대부분은 제거되었습니다(주로 현재 다중 CPU 시스템의 압박으로 인해). 즉, 방해받지 않는 수면 과정을 본 지 꽤 오래되었습니다.

관련 정보