달력

2

« 2025/2 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

'OS이야기'에 해당되는 글 86

  1. 2011.10.17 지피 - jiffy
2011. 10. 17. 13:08

지피 - jiffy OS이야기2011. 10. 17. 13:08

jiffy는 순간이라는 의미를 가지고 있다.
jiffies는 <linux/jiffies.h>에 다음과 같은 변수로 선언돼있다.

extern usigned long volatile jiffies;

  74#define __jiffy_data __attribute__((section(".data")))
  75
  76/*
  77 * The 64-bit value is not atomic - you MUST NOT read it
  78 * without sampling the sequence number in xtime_lock.
  79 * get_jiffies_64() will do this for you as appropriate.
  80 */
  81extern u64 __jiffy_data jiffies_64;
  82extern unsigned long volatile __jiffy_data jiffies;

unsigned long time_stamp = jiffies; //현재
unsigned long next_tick = jiffies + _1; // 현재로부터 하나의 tick
unsigned long later = jiffies + 5 * HZ; //현재로부터 5초후 


지피의 내부 표현
jiffy는 unsigned long 타입이기 때문에, 32비트에서는 32비트의 길이를 가진다. 100HZ에서 만약 실행된다면 497일 이후에
오버플로우가 발생한다. 그러나 1000HZ이면 49.7일만에 발생한다.

이 문제점을 해결하기 위해 linker를 이용하여 해결하엿다.

extern unsigned long volatile jiffies;

또 다른 변수가 마찬가지로 <linux/jiffies.h>에 정의되어 있다.
extern u64 jiffies_64;

ld(1) 스크립트는 주 커널 이미지(arch/i386/kernel/vmliunx.lds.S)를 링크하기 위해 사용된 후,
jiffies변수를 jiffies_64변수의 시작에 오버레이한다.

jiffies를 사용하는 코드는 jiffies_64의 하단 32비트만을 읽게 된다.
또한 함수 get_jiffies_64()를 이용해 전체 64비트 값을 읽을 수도 있따. 

 

'OS이야기' 카테고리의 다른 글

현재시각(wall time)  (0) 2011.10.17
jiffies wraparound  (0) 2011.10.17
어떤 Bottom Half를 사용해야 하는가?  (0) 2011.10.16
태스크릿의 사용  (0) 2011.10.15
태스크릿의 스케줄링  (0) 2011.10.14
:
Posted by НooпeУ


Code Start Code End