첫번째 구현해야 할 것은 FIFO스케줄러이다. 일단 앞서 만들었던 mysched모듈이 FIFO로 되어 있기 때문에 유저프로그램인 test.c만 바꿔주면 된다.

<그림4 \home\ubuntu\v4.10\kernel\sched\mysched\test.c>

 

위 코드처럼 일단 syscall(314,getpid(),&attr,0)을 사용하여 우리가 만든 mysched모듈 스케줄러에 해당 프로세스를 넣어주었다. 그런 다음 TOTALFORK만큼(5define) 반복문을 돌려 5섯개의 자식 프로세스를 만들어 주었다. 이 때 각 자식 프로세스를 구별해주기 위하여 runProces라는 int형 변수를 두어 자식이 생성되면 하나씩 증가 시켜 0~4까지 번호를 매겼다. 또한 각 자식프로세스에 변수 t를 두어 그 안의 반복문의 계산이 한 번 끝나면 t를 증가시키고 그에 해당하는 설명(몇번째 프로세스가 몇 번째의 계산을 하고 있는가)printf하여 중간과정을 유저에게 알려주게끔 하였다. 마지막으로 t==3, 즉 계산이 3번 끝나면 break를 걸어 자식 프로세스가 종료되게 하였다.

 

 

<그림5 2-2결과>

 

그림5처럼 ./test를 실행시켜 원래 리눅스의 fair 스케줄로 작동 안하고 0번프로세스가 종료 되고 1번프로세스가 종료되고 이렇게 차례대로 실행되고 종료되면서 FIFO동작하고 있음을 볼 수 있다.

 

 

깃허브

https://github.com/icd0422/-Scheduling-algorithm-implementation-and-Context-switching-overhead-analysis

 

icd0422/-Scheduling-algorithm-implementation-and-Context-switching-overhead-analysis

Contribute to icd0422/-Scheduling-algorithm-implementation-and-Context-switching-overhead-analysis development by creating an account on GitHub.

github.com

 

+ Recent posts