커널 레벨 스레드로 CPU 스케줄링 시뮬레이션을 작성해야합니다. FCFS (first come first served) 또는 RR (round robin) 알고리즘을 사용할 수 있어야합니다. 프로세스 및 스레드에 대한 데이터는 텍스트 파일 형식으로 제공됩니다. 현재 내 프로그램은 텍스트 파일 데이터를 링크 된 목록으로 읽습니다. 시뮬레이션을 시작하는 방법을 잘 모르겠습니다. (전에는 시뮬레이션을 프로그래밍 한 적이 없었습니다.)문제 CPU 스케줄링 개념 이해
FCFS의 경우 어떻게 진행합니까? 첫 번째 프로세스의 첫 번째 스레드에 도달하면 CPU 시간을 시계 시간에 추가합니다. 그런 다음 CPU가 유휴 상태 일 때 I/O 시간을 시계에 간단하게 추가합니까? 또는 대기열에 다시 넣고 다음 스레드가 CPU에서 실행을 시작할 수 있도록해야합니까? 그렇다면 어떻게 각 스레드가 이미 실행되었는지 추적 할 수 있습니까?
2 4 6 // number_of_processes thread_switch process_switch
1 5 // process_number(1) number_of_threads(1)
1 0 4 // thread_number(1) arrival_time(1) number_of_CPU(1)
1 15 100 // 1 cpu_time io_time
2 18 120 // 2 cpu_time io_time
3 12 100 // 3 cpu_time io_time
4 16 // 4 cpu_time
2 4 4 // thread_number(2) arrival_time(2) number_of_CPU(2)
1 18 110
2 15 80
3 20 75
4 15
3 6 5 //thread(3)
1 40 100
2 20 70
3 15 80
4 18 90
5 50
4 8 4 //thread(4)
1 25 60
2 15 50
3 20 80
4 18
5 18 4 //thread(5)
1 8 60
2 15 120
3 12 80
4 10
고마워요! number_of_CPU는 해당 스레드의 CPU 버스트 수임을 지정해야합니다. I/O를 기다리는 스레드 (io 시간을 무시하는 대신)를 바꿔야한다고 가정하면 게시 한 출력을 어떻게 바꿀 수 있습니까? –
I/O 시간이 프론트로드 된 경우 스레드 1이 time = 0에서 100 시간 단위를 즉시 차단/대기한다고해도 말하기 어렵습니다. 스레드 2는 시간 = 4에서 비슷한 작업을 수행합니다. 따라서이 경우 실제로 실행을 시작하는 첫 번째 스레드는 시간이 68 일 때 스레드 4 (I/O 수행 횟수가 가장 적기 때문에)가됩니다. 그런 다음 시간 = 93에 스레드 5는 I/O가 그때까지 수행되어야하기 때문에 진행됩니다. I/O 요청은 동시에/병렬로 실행할 수 있다고 가정합니다. 그렇지 않으면 누가 압니까? – aroth