c언어로 cpu 스케줄링 구현

조회수 586회

시뮬레이션 프로그램이 수행해야 할 가장 기본적인 작업은 computation과 I/O 요청을 번갈아 수행하는 process들에 대해 CPU scheduling을 수행하는 것이다.

이를 위해 다음과 같이 간단한 가정을 한다. ● 각 process에 대해 그 process가 도착한 시각을 A 라고 하고, 그 process가 종료될 때까지 필요로 하는 총 CPU time을 C 라고 하자. ● CPU burst time은 0과 어떤 수 B 사이에서 uniformly distributed random integer이다. 또한 IO burst time은 0과 어떤 수 IO 사이의 uniformly distributed random integer이다. 프로세스는 이 4개의 파라미터 (A, C, B, IO) 에 의해 정의된다. 이 숫자들의 단위는 단순히 time unit 이다.

프로그램은 n개의 프로세스들을 기술한 (즉 4개의 숫자가 한 그룹이 되는 그룹들이 n개가 있어야 할 것임) 파일을 읽어 들인 후 그 n개의 process가 모두 끝날 때까지 그 process들을 시뮬레이션 해야 한다. 이를 위한 기본적인 방법은 각 프로세스의 상태를 추적해서 필요할 때마다 상태전이(state transition)를 수행하고 시간을 전진시키는 것이다.

이렇게 해서 모든 process의 수행이 끝나면 사용된 CPU scheduling 알고리즘, 사용된 파라미터(예: Round Robin방식에서 사용되는 quantum), simulate된 process의 수 등을 출력하고, 그 다음 각 process에 대해 다음과 같은 내용을 출력한다.

● (A, C, B, IO) ● Finishing Time(그 process가 끝난 시간) ● Turnaround Time (= finishing time - A) ● CPU time (즉, 그 process가 running state에 있었던 시간의 총합) ● I/O time (즉, 그 process가 blocked state에 있었던 시간의 총합) ● Waiting time(즉, 그 process가 ready state에 있었던 시간의 총합) (마지막 세 가지의 시간의 합은 Turnaround time과 같아야 함)

이어서 다음의 summary data를 출력해야 함. ● Finishing time (모든 process가 다 끝난 시각) ● CPU utilization (Percentage of time some job is running) ● I/O utilization (Percentage of time some job is blocked) ● Throughput in processes completed per hundred time units ● Average turnaround time ● Average waiting time

다음 scheduling algorithm 각각에 대해 별도로 시뮬레이션을 수행하고 결과를 출력하고 그 결과들을 비교할 것. ● FCFS ● RR with quantum 1 ● RR with quantum 10 ● RR with quantum 100 ● SJF

testcase의 예는 다음과 같다. 5 (0 200 3 3)(0 500 9 3)(0 500 20 30)(100 100 1 0)(100 500 100 3) 이 testcase의 경우 맨 앞에 나오는 숫자 5는 5개의 프로세스가 있다는 것을 의미한다. 그 다음에 나오는 "(0 200 3 3)"은 첫 번째 프로세스의 특성을 설명하고 있으며 구체적으로는 다음을 의미한다. 도착시간: 0 이 프로세스가 종료될 때까지 필요로 하는 총 CPU시간: 200 이 프로세스의 각 CPU burst time: 0과 3사이의 random한 정수 값 이 프로세스의 각 IO burst time: 0과 3 사이의 random한 정수 값

i/o가 포함된 스케줄링은 구현한적이 없어서 너무 어렵습니다 어떻게 시작해야할지도 모르겠습니다 ㅜㅜ 고수님들 부탁드립니다

  • C나 스케줄링 같은건 모르지만... c cpu scheduling example이라고 구글에 쳐보니 FCFS 예제는 나오는 거 같은데요. https://www.tutorialspoint.com/c-program-for-fcfs-scheduling 엽토군 2022.5.19 14:12
  • 감사합니다..! I/O 버스트 타임부분이 어려워서요 ㅠ_ㅠ 달아주신 링크 참고하도록 하겠씁니다! choisejin12 2022.5.19 14:32
  • 그냥 수학문제 아닌가요. dbwodlf3 2022.5.20 14:09

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)