처음 가입했습니다 sched_setattr()함수의 위치가 어딧는지 알 수 있을까요?
글쓴이: cwis1234 / 작성시간: 금, 2017/05/26 - 6:32오후
커널버전은 4.10입니다 커널에 대해서는 거의 모르는 초짜인데요 학교 수업에서 리눅스 커널에 새로운 스케줄러를 추가하라는 과제가 나와서.. 이렇게 질문드립니다
교수님 말대로라면 유저프로그램에서 sched_setattr()함수를 이용해 스케줄링 정책을 결정하거나 변경할수있고 저 함수를 수정하여서 제가 추가한 스케줄링 클래스로 할당할 수 있다는것 같은데요(확실치는 않습니다 정확히 기억하는게 아니라..)
스케줄링 클래스는 모듈형식으로 추가를 할것이고 아마 새로 추가한 스케줄링 정책이 있다는걸 커널쪽에 인식시키는 프로그램 작업이 필요해 보입니다. 문제는 scehd_setattr()함수를 찾지 못하겠다는건데요 man page에 나온바로는 매개변수가 총 세개 필요한데(pid_t pid, struct sched_attr *attr, unsigned int flags)
제가 찾은 함수(커널소스코드의 루트/kernel/sched/core.c)는 두개밖에 받지 않습니다(flags 변수를 받지 않더라구요) 그래서 다른곳에 있을거라고 예상하고 찾아봤는데 안보입니다 ㅠㅠ. 위치를 알려주실수 있나요?
Forums:
댓글 삭제
답변이 충분하지 않아서 삭제처리했습니다.
man 에서 보신 그 함수를 호출하면 커널의 http
man 에서 보신 그 함수를 호출하면 커널의 http://elixir.free-electrons.com/linux/v4.11.3/source/kernel/sched/core.c 로 넘어옵니다.
링크 다시... http://elixir.free
링크 다시... http://elixir.free-electrons.com/linux/v4.11.3/source/kernel/sched/core.c#L4544
그리고, "새로 추가한 스케줄링 정책이 있다는걸
그리고, "새로 추가한 스케줄링 정책이 있다는걸 커널쪽에 인식시키는 프로그램 작업" 과 sched_setattr 은 관련이 없습니다.
정말 sched_class 를 바꾸고 싶은 것이라면 보고 계시는 core.c 의 여기저기를 수정해야 할 것입니다.
rt_sched_class 나 fair_sched_class 가 어떻게 참조되고 있는지부터보세요.
질문을 하나 해도 될까요?
인터넷에 떠도는 예제를 보고 어느정도 수정 후에 커널컴파일까지 마쳤습니다. 문제가 몇가지 더 발생하는데요 제가 수정한 코드부분이 컴파일할때 아예 사라지는것같습니다.. define으로 정의해놓은 상수부터해서 발견되지가 않네요.. 예를들면 SCHED_NORMAL이 0번으로 정의되있고 SCHED_FIFO가 1번.. 이런식으로 6번까지 정의가 되어있는데 제가 거기다 SCHED_MYSCHED라고 7로 정의시켜논 부분부터 해서 싹 다 사라지는것 같습니다.. 이유를 알 수 있을까요? 그리고 sched_setattr을 유저프로그램에서 사용할수 있는 방법이 있을까요? sched.h파일을 include 시킨 후에 sched_setattr 함수를 실행시켜 봐도 undefined reference to 'sched_setattr' 이라면서 에러가 나네요. man page에는 분명히 sched.h 헤더파일에 있다고 명시가 되어있는데.. 일단 답변 감사합니다.
"사라진다" 와 "발견되지가 않는다" 를 구체적으로
"사라진다" 와 "발견되지가 않는다" 를 구체적으로 설명해주세요.
/usr/include/linux/sched.h 에 없다는 뜻이라면, 그건 glibc 설치할 때 같이 설치되는 파일이라서 커널 수정과는 상관이 없기 때문입니다.
"undefined reference to 'sched_setattr'" 는 컴파일러가 아니라 링커가 출력하는 에러 메시지입니다.
커널 소스 중 Documentation/scheduler/sched-deadline.txt 에 syscall() 을 사용하는 예가 있지만 문서가 오래된 것이니 그냥 보기만하시고,
https://www.redhat.com/archives/libvir-list/2016-November/msg00526.html 를 참고해서 프로그램을 고치세요.
struct sched_attr {} 이 본인이 사용하는 커널과 같은지 재차 확인하시고요.
혹시 교수님 성함이
ㅂㅎㅊ교수님인가요?
.....
.......
댓글 달기