처음 가입했습니다 sched_setattr()함수의 위치가 어딧는지 알 수 있을까요?

cwis1234의 이미지

커널버전은 4.10입니다 커널에 대해서는 거의 모르는 초짜인데요 학교 수업에서 리눅스 커널에 새로운 스케줄러를 추가하라는 과제가 나와서.. 이렇게 질문드립니다
교수님 말대로라면 유저프로그램에서 sched_setattr()함수를 이용해 스케줄링 정책을 결정하거나 변경할수있고 저 함수를 수정하여서 제가 추가한 스케줄링 클래스로 할당할 수 있다는것 같은데요(확실치는 않습니다 정확히 기억하는게 아니라..)
스케줄링 클래스는 모듈형식으로 추가를 할것이고 아마 새로 추가한 스케줄링 정책이 있다는걸 커널쪽에 인식시키는 프로그램 작업이 필요해 보입니다. 문제는 scehd_setattr()함수를 찾지 못하겠다는건데요 man page에 나온바로는 매개변수가 총 세개 필요한데(pid_t pid, struct sched_attr *attr, unsigned int flags)
제가 찾은 함수(커널소스코드의 루트/kernel/sched/core.c)는 두개밖에 받지 않습니다(flags 변수를 받지 않더라구요) 그래서 다른곳에 있을거라고 예상하고 찾아봤는데 안보입니다 ㅠㅠ. 위치를 알려주실수 있나요?

corona10의 이미지

답변이 충분하지 않아서 삭제처리했습니다.

12의 이미지

man 에서 보신 그 함수를 호출하면 커널의 http://elixir.free-electrons.com/linux/v4.11.3/source/kernel/sched/core.c 로 넘어옵니다.

12의 이미지

익명 사용자의 이미지

그리고, "새로 추가한 스케줄링 정책이 있다는걸 커널쪽에 인식시키는 프로그램 작업" 과 sched_setattr 은 관련이 없습니다.
정말 sched_class 를 바꾸고 싶은 것이라면 보고 계시는 core.c 의 여기저기를 수정해야 할 것입니다.
rt_sched_class 나 fair_sched_class 가 어떻게 참조되고 있는지부터보세요.

cwis1234의 이미지

인터넷에 떠도는 예제를 보고 어느정도 수정 후에 커널컴파일까지 마쳤습니다. 문제가 몇가지 더 발생하는데요 제가 수정한 코드부분이 컴파일할때 아예 사라지는것같습니다.. 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 헤더파일에 있다고 명시가 되어있는데.. 일단 답변 감사합니다.

bushi의 이미지

"사라진다" 와 "발견되지가 않는다" 를 구체적으로 설명해주세요.
/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 {} 이 본인이 사용하는 커널과 같은지 재차 확인하시고요.

익명 사용자의 이미지

ㅂㅎㅊ교수님인가요?

cwis1234의 이미지

.......

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.