커널코드에서...time()함수 사용할 수 없나요?

swhong의 이미지

time함수를 사용해야 하는데, 없는거 같아서....

아무래도....gettimeofday같은 으로 해야할듯...한데....

커널 함수 매뉴얼 보려면 documentation디렉토리에 있는것 밖에는 없나요?

너무 불편해요...

혹시 그걸 매뉴얼로 바꾸는 방법은 없는지요? (man 말이죠...)

움, 보통 커널함수들이 sys나 do같은게 붙어서 헤깔려요...

잉....

sliver의 이미지

절대적인 시간 대신에

두 절대적인 시간의 차이를 원한다면,

jiffies 변수를 사용하면 됩니다.

j1 = jiffies;
/*
code
*/
j2 = jiffies;
diff_jiffies = j2-j1;
diff_milli_seconds = diff_jiffies*1000/HZ;

마지막 변수는 j1시점과 j2시점의 시간차이를 milli초 단위로 가지게 됩니다.

sliver의 이미지

절대적인 시간을 구하고 싶다면,

struct timeval tv;
do_gettimeofday(&tv);

이렇게 하면 되는것 같네요.

참 그리고 커널이 제공하는 시스템 콜은 커널함수명이

sys_systemcall 이런식으로 되어 있습니다.

이런 함수는 대부분 do_systemcall 이런식의 커널함수를 사용하여

구현되어 있습니다.

따라서 커널에서 어떤 시스템 콜을 사용하고 싶으시다면,

sys_...함수를 보고, do_...를 호출하는 부분을 잘(?) 흉내내면 될듯 합니다..-_-;;

swhong의 이미지

계속 열씸히 해서 결과 보여드리께요...^^ 감사합니다.

- by swhong in jgdr.net -

swhong의 이미지

do_gettimeofday()함수를 사용했습니다.

struct timeval tmp;

do_gettimeofday(&tmp);

요렇게 쓰면 되구요,

요것을 응용하여...

struct timeval start, end;
float result;

do_gettimeofday(&start);

.
code...
.
do_gettimeofday(&end);

result = (end.tv_sec - start.tv_sec) + (end.tv_usec - start.tv_usec)/1000000.0;

요런 식으로 구하였습니다.

하시만 실은 커널 레벨에서 result 값을

printk("%.6f", result);

와 같이 찍어보니

%f

요렇게만 나왔습니다.

왜 float형 값이 안찍히는지 잘 모르겠습니다...

명확한 것은 너무나 적은 시간이 흘러서 안나오는 것은 아니라는 것입니다.

푸헐~

- by swhong in jgdr.net -

sliver의 이미지

제가 알기로는

리눅스 커널의 context switching은 커널이 fpu를 사용하지 않는다는 것을 가정합니다.

user 프로세스가 스케줄링 된 다음에 첨으로 fpu를 사용할때,

exception이 발생해서 그때에 해당 프로세스의 fpu context를

불러옵니다.

또 이 프로세스가 나중에 switched-out될 때에 만약 fpu를 썼다면,

그 fpu context를 저장합니다.

만약 커널에서 fpu를 사용하게 되면, 현재 프로세스의 fpu context를

불러오게 될 것이고, 나중에 switched-out될 때에

스케줄러는 프로세스가 fpu를 썼다고 생각하여 fpu context를

저장할 것입니다. 즉, 프로세스의 fpu context를 엉뚱한 데이터로 덮어씌우는 것이 되죠.

따라서 커널에서 fpu를 사용하면 안됩니다.

이런 이유로 printk도 %f를 지원할 필요가 없겠죠..^^;

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.