잘못된 풀이가 있다면 댓글 부탁드립니다.
제 컴퓨터에서 실행한 문제의 파이썬 스크립트의 실행결과가 문제의 의도와 다른 것 같습니다.
SWITCH_ON_END와 IO_RUN_IMMEDIATE 플래그를 제외하곤 플래그가 있으나 없으나 실행결과가 같네요.
숙제
process-run.py 프로그램은 프로세스가 실행되면서 변하는 프로세스의 상태를 추
적할 수 있고,
프로세스가 CPU를 사용하는지 (예, add 명령어 실행) 입출력을 하는지
(예, 디스크에 요청을 보내고 완료되기를 기다린다)를 알아볼 수 있다.
상세한 사항은 README 파일을 확인하기 바란다.)
문제
1. 다음과 같이 플래그를 지정하고 프로그램을 실행시키시오.
./process-run.py -l 5:100,5:100
CPU 이용률은 얼마가 되어야 하는가
(예, CPU가 사용 중인 시간의 퍼센트?)
그러한 이용률을 예측한 이유는 무엇인가?
-c 플래그를 지정하여 예측이 맞는지 확인하시오.
풀이
모든 명령어(10개)가 실행되고 난 후의 CPU 이용률은 100%입니다.
기다려야하는 입출력 작업이 없으므로
각 프로세스는 마지막 명령어가 수행된 후 종료되며
하나의 프로세스가 종료된 후에도 곧바로 다른 프로세스의 명령어를 처리하므로
모든 프로세스가 종료될 때 까지 CPU는 매시간 계속 명령어를 처리합니다.
2. 이제 다음과 같이 플래그를 지정하고 실행시키시오.
./process-run.py -l 4:100,1:0
이 플래그는 4개의 명령어를 실행하고 모두 CPU만 사용하는 하나의 프로세스와
오직 입출력을 요청하고 완료되기를 기다리는 하나의 프로세스를 명시한다.
두 프로세스가 모두 종료되는 데 얼마의 시간이 걸리는가?
-c 플래그를 사용하여 예측한 것이 맞는지 확인하시오.
풀이
입출력 작업이 없는 첫번쨰 프로세스의 명령어 4개를 모두 수행한 후에
두번째 프로세스의 입출력 작업이 시작되므로
4 + 입출력 작업 소요시간이 소요됩니다. (문제에서는 11 times에 작업 완료)
3. 옵션으로 지정된 프로세스의 순서를 바꾸시오.
./process-run.py -l 1:0,4:100
이제 어떤 결과가 나오는가?
실행 순서를 교환하는 것은 중요한가?
이유는 무엇인가?
(언제나처럼 -c 플래그를 사용하여 예측이 맞는지 확인하시오.)
풀이
첫번째 프로세스의 입출력 작업을 시작하고 기다리는 동안
입출력 작업이 없는 두번째 프로세스의 명령어 4개를 모두 수행합니다.
문제에서는 5번의 Block(입출력 대기) 상태 이후 입출력 작업이 완료되므로
두번쨰 프로세스가 종료되어 CPU는 당장 수행해야 할 명령어가 없고
입출력 작업을 기다려야 하는 공백 시간이 1 time 발생하지만
이전보다 공백 시간이 줄어들었고 전체 작업 속도가 빨라졌습니다.
실행 순서를 변경함으로써
CPU가 입출력 작업 결과를 기다리는(공백 시간) 동안 다른 명령어를 처리하도록 하면
같은 시간에 더 많은 명령어를 처리하여 전체 작업 속도가 단축되기 때문에 중요합니다.
4. 자, 다른 플래그에 대해서도 알아보자.
중요한 플래그 중 하나는 -S로서 프로세스가 입출력을 요청했을 때 시스템이 어떻게 반응하는지를 결정한다.
이 플래그가 SWITCH_ON_END로 지정되면 시스템은 요청 프로세스가 입출력을 하는 동안
다른 프로세스로 전환하지 않고 대신 요청 프로세스가 종료될 때까지 기다린다.
입출력만 수행하는 프로세스와 CPU 작업만 하는 프로세스 두 개를 실행시키면 어떤 결과가 발생하는가?
(-l 1:0,4:200 -c -S SWITCH_ON_END)
풀이
첫번째 프로세스에서 입출력 작업이 시작되고 나서
다른 프로세스로 전환되지 않고 입출력 작업 결과를 기다렸다가
입출력 작업이 완료되고나서 나머지 명령어를 처리합니다.
CPU는 입출력 작업을 기다리는 동안 다른 명령어를 처리하지 않고 쉬고 있습니다.
5. 이번에는 프로세스가 입출력을 기다릴 때마다
다른 프로세스로 전환하도록 플래그를 지정하여 같은 프로세스를 실행시켜 보자
(-l 1:0,4:100 -c -S SWITCH_ON_IO)
이제 어떤 결과가 발생하는가?
-c를 사용하여 예측이 맞는지 확인하시오.
풀이
3번의 결과처럼 입출력 작업 결과를 기다리는 동안 다른 프로세스 명령어를 처리합니다.
6. 또 다른 중요한 행동은 입출력이 완료되었을 때 무엇을 하느냐이다.
-I IO_RUN_LATER 가 지정되면 입출력이 완료되었을 때
입출력을 요청한 프로세스가 바로 실행될 필요가 없다.
완료 시점에 실행 중이던 프로세스가 계속 실행된다.
다음과 같은 조합의 프로세스를 실행시키면 무슨 결과가 나오는가?
(./process-run.py -l 3:0, 5:100,5:100, 5:100 -S SWITCH_ON_IO -I IO_RUN_LATER -c -p)
시스템 자원은 효과적으로 활용되는가?
풀이
첫번째 프로세스의 3개의 입출력 작업 중에 첫번째 입출력을 기다리는 동안
다른 3개의 프로세스의 명령어가 모두 수행된 후
첫번째 프로세스의 입출력 결과 처리 작업이 수행되었고
그 후 나머지 두개의 입출력 작업이 수행되었습니다.
첫번째 입출력 작업 결과를 기다리는 동안에 다른 프로세스의 명령어를 처리할 수는 있었지만
다른 프로세스의 명령어를 처리하는 동안 입출력 결과 처리 작업이 지연되었고
나머지 입출력 작업이 수행될 때는 입출력 결과를 기다리는 시간 동안 CPU가 쉬고 있어 효과적인 것 같지 않습니다.
7. 같은 프로세스 조합을 실행시킬 때
-I IO_RUN_IMMEDIATE를 지정하고 실행시키시오.
이 플래그는 입출력이 완료되었을 때 요청 프로세스가 곧바로 실행되는 동작을 의미한다.
이 동작은 어떤 결과를 만들어 내는가?
방금 입출력을 완료한 프로세스를 다시 실행시키는 것이 좋은 생각일 수 있는 이유는 무엇인가?
풀이
각 입출력 작업이 시작된 후 기다리는 동안에는 다른 명령어를 처리하면서
입출력이 완료되었을 때는 즉시 입출력 결과를 처리한 후 다른 입출력 작업을 다시 요청하고
기다리는 동안에는 다른 명령어를 처리하는 과정을 반복함으로써
CPU를 효율적으로 사용하고 전체 작업 속도가 빨라졌습니다.
여러번의 입출력 작업이 연속적으로 수행되어야 하는 상황에서는
각각의 입출력 작업 결과를 바로 처리하고 다른 입출력 작업을 요청함으로써
전체 작업 속도를 단축시킬 수 있다는 장점이 있습니다.
8. 이제 다음과 같이 무작위로 생성된 프로세스를 실행시켜 보자.
예를 들면,
-s 1 -l 3:50,3:50, -s 2 -l 3:50,3:50, -s 3 -l 3:50,3:50
어떤 양상을 보일지 예측할 수 있는지 생각해 보시오.
-I IO_RUN_IMMEDIATE 를 지정했을 때와
-I IO_RUN_LATER 를 지정했을 때 어떤 결과가 나오는가?
-S SWITCH_ON_IO 대 -S SWITCH_ON_END의 경우에는 어떤 결과가 나오는가?
풀이
각각 실행해보기
출처
원서
Operating Systems: Three Easy Pieces
Blog: Why Textbooks Should Be Free Quick: Free Book Chapters - Hardcover - Softcover (Amazon) - Buy PDF - EU (Lulu) - Buy in India - Buy Stuff - Donate - For Teachers - Homework - Projects - News - Acknowledgements - Other Books Welcome to Operating System
pages.cs.wisc.edu
번역본
https://github.com/remzi-arpacidusseau/ostep-translations
GitHub - remzi-arpacidusseau/ostep-translations: Various translations of OSTEP can be found here. Help the cause and contribute!
Various translations of OSTEP can be found here. Help the cause and contribute! - remzi-arpacidusseau/ostep-translations
github.com
문제
https://github.com/remzi-arpacidusseau/ostep-homework
GitHub - remzi-arpacidusseau/ostep-homework
Contribute to remzi-arpacidusseau/ostep-homework development by creating an account on GitHub.
github.com
'문제 풀이 > OSTEP' 카테고리의 다른 글
OSTEP 09-cpu-sched-lottery(Lottery Scheduling) 문제 풀이 (0) | 2024.09.21 |
---|---|
OSTEP 08-cpu-sched-mlfq(Multi-level Feedback) 문제 풀이 (0) | 2024.09.20 |
OSTEP 07-cpu-sched(CPU Scheduling) 문제 풀이 (1) | 2024.09.15 |
OSTEP 06-cpu-mechanisms(Direct Execution) 문제 풀이 (2) | 2024.09.14 |
OSTEP 05-cpu-api(Processe API) 문제 풀이 (2) | 2024.08.14 |