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")))
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 |