명령줄 매개변수와 파일 I/O 작업이 CPU 시간을 소모할 가능성이 있습니까?

명령줄 매개변수와 파일 I/O 작업이 CPU 시간을 소모할 가능성이 있습니까?

정의에 따르면CPU 시간:

CPU 시간(또는 CPU 실행 시간)은 주어진 프로그램의 실행 시작과 끝 사이의 시간입니다. 이 시간은 프로그램을 대신하여 실행되는 운영 체제 루틴을 포함하여 CPU가 특정 프로그램을 컴퓨팅하는 데 소비하는 시간을 설명하지만 I/O를 기다리는 시간과 다른 프로그램을 실행하는 시간은 포함하지 않습니다.

프로세스의 CPU 시간을 측정할 때 I/O 스트림(명령줄 인수 및 파일용) 설정 및 닫기와 같은 작업에 관련된 시간도 CPU 시간에 포함됩니까?

답변1

예(건전한 구현 및 합리적인 정의를 위해)

분명히, 그런 명령이 있다면 cat /etc/passwd프로세스는 open(2)파일을 열기 위해 호출을 할 것입니다.

약간 덜 분명한 점은 파일을 여는 비용과 같은 명령이 있는 경우 cat < /etc/passwd적어도 일반적인 셸 구현의 경우 해당 프로세스도 변경된다는 것입니다. 쉘은 다음과 같이 명령을 처리합니다.

  1. cat이것은 내장된 명령이 아니라는 것을 알게 될 것입니다 . 따라서 이를 실행하기 위한 새로운 프로세스가 생성됩니다. 전통적으로 이는 fork(2) 시스템 호출을 사용했지만 이제는 시스템에 따라 vfork, clone 또는 build 시스템 호출이 될 수 있습니다.
  2. 명령이 로 시작하지 않기 때문에 원래 프로세스는 대기 시스템 호출의 일부 버전을 호출합니다 &.
  3. 새 프로세스가 여전히 셸을 실행 중입니다. 열린 파일을 호출 open하고 파일 설명자 0에 열린 파일을 예약합니다. 이를 수행하는 방법은 최소한 몇 가지가 있지만 중요한 점은 이 새로운 프로세스가 open을 호출한다는 것입니다.
  4. cat그런 다음 새 프로세스는 일부 버전의 exec시스템 호출을 사용 하게 됩니다 .
  5. 결국에는 cat종료되고 원래 셸이 wait호출에서 반환됩니다.

따라서 이 경우 새 프로세스에는 I/O 스트림을 설정하는 비용도 발생합니다. 물론 I/O를 설정하는 비용은 실제로 I/O를 수행하는 비용에 비해 일반적으로 적습니다.

마무리를 위해서는 상황이 조금 복잡합니다. 프로그램과 관련된 런타임은 일반적으로 모든 버퍼를 플러시하고 열려 있는 파일을 닫습니다. 이를 수행하는 데 걸리는 시간은 프로세스에 따라 계산됩니다. 프로세스가 종료되면 열려 있는 나머지 파일이 모두 닫힙니다. 이를 수행하는 데 드는 비용은 프로세스에 포함될 수도 있고 포함되지 않을 수도 있습니다.

다른 프로세스가 파일 시스템을 제공하는 FUSE와 같은 경우 다른 프로세스에서 열기 작업을 수행하는 데 소요된 시간은 열기 호출을 수행하는 프로세스가 아닌 해당 프로세스에 기록됩니다.

관련 정보