# Week 2 Homework

질문 1. 다음 플래그와 함께 `process-run.py`를 실행하세요: `-l 5:100,5:100`. CPU 활용률(예: CPU가 사용 중인 시간의 백분율)은 어떻게 되어야 할까요? 왜 그렇게 알 수 있나요? `-c`와 `-p` 플래그를 사용해 여러분의 생각이 맞는지 확인해 보세요.

해설 : 5초 동안 100% 사용할 것이다. `python process-run.py -l 5:100,5:100 -c` 사용하여 대략적으로 100%인 것을 확인할 수 있습니다. 그리고 -p 플래그를 사용하여 실행 중인 프로세스를 확인하면, 두 개의 프로세스가 실행 중이며 각각 5초 동안 CPU를 100% 사용하고 있음을 확인할 수 있습니다.

질문 2. 이제 다음 플래그로 실행해 보세요: `./process-run.py -l 4:100,1:0`. 이 플래그는 4개의 명령어(모두 CPU 사용)를 가진 하나의 프로세스와 I/O를 실행하고 완료될 때까지 기다리는 하나의 프로세스를 지정합니다. 두 프로세스를 모두 완료하는 데 얼마나 걸리나요? `-c`와 `-p`를 사용해 여러분의 생각이 맞는지 확인해 보세요.

해설 : 첫 번째 프로세스는 CPU를 계속 사용하므로, 해당 프로세스가 완료되기까지 시간이 걸리게 됩니다. 그리고 두 번째 프로세스는 I/O 작업이므로 CPU가 사용되지 않습니다. 따라서, 정확한 시간은 실행 환경에 따라 다르지만, 첫 번째 프로세스를 완료하는 데 걸리는 예상 시간은 명령어 하나의 실행 시간에 4을 곱한 것입니다.

질문 3. 프로세스의 순서를 바꿔 보세요: `-l 1:0,4:100`. 이제 어떻게 되나요? 순서를 바꾸는 것이 중요한가요? 왜 그런가요? (항상 그렇듯이 `-c`와 `-p`를 사용해 여러분의 생각이 맞는지 확인해 보세요)

해설 : 첫 번째 프로세스는 CPU를 사용하지 않고 대기합니다. 두 번째 프로세스는 CPU를 100% 사용하며, 4개의 명령어를 실행합니다. CPU를 사용하는 프로세스가 먼저 실행되면, 이 프로세스는 CPU를 대부분 사용하게 되므로, 다른 프로세스가 CPU를 사용하는데 더 많은 시간이 걸리거나, 시스템이 느려질 수 있습니다.

질문 4. 이제 다른 플래그들을 살펴보겠습니다. 중요한 플래그 중 하나는 `-S`인데, 이는 프로세스가 I/O를 실행할 때 시스템이 어떻게 반응하는지 결정합니다. 플래그를 `SWITCH_ON_END`로 설정하면 한 프로세스가 I/O를 수행하는 동안 시스템은 다른 프로세스로 전환하지 않고 해당 프로세스가 완전히 끝날 때까지 기다립니다. 다음 두 프로세스를 실행할 때 어떤 일이 일어나나요(`-l 1:0,4:100 -c -S SWITCH_ON_END`), 하나는 I/O를 수행하고 다른 하나는 CPU 작업을 수행합니다?

해설 : -S SWITCH_ON_END 플래그를 사용하면 한 프로세스가 I/O를 수행하는 동안 다른 프로세스로 전환하지 않고 해당 프로세스가 완전히 끝날 때까지 기다리게 됩니다.

질문 5. 이제 같은 프로세스를 실행하되, 한 프로세스가 I/O를 기다리는(`WAITING`) 동안 다른 프로세스로 전환되도록 switching 동작을 설정해 봅시다(`-l 1:0,4:100 -c -S SWITCH_ON_IO`). 이제 어떤 일이 일어나나요? `-c`와 `-p`를 사용해 여러분의 생각이 맞는지 확인해 보세요.

해설 : 주어진 플래그 -l 1:0,4:100 -c -S SWITCH_ON_IO를 사용하여 두 프로세스를 실행하면 첫 번째 프로세스는 CPU를 사용하지 않고 대기하고 두 번째 프로세스는 CPU를 100% 사용하여 실행 중입니다.
