मैं जेफियों को मिलीसेकंड में मैन्युअल रूप से कैसे परिवर्तित कर सकता हूं और इसके विपरीत लिनक्स में? मुझे पता है कि कर्नेल 2.6 के लिए एक फ़ंक्शन है, लेकिन मैं 2.4 (होमवर्क) पर काम कर रहा हूं और हालांकि मैंने कोड को देखा है, यह मैक्रो स्थिरांक का उपयोग करता है, जिसे मुझे नहीं पता कि 2.4 में परिभाषित किया गया है या नहीं।जिफियों को मिली सेकंड में कनवर्ट करना
उत्तर
जैसा कि पिछले उत्तर में कहा गया था, जिस दर पर jiffies
वेतन वृद्धि तय की गई है।
jiffies
स्वीकार करने वाले फ़ंक्शन के लिए समय निर्दिष्ट करने का मानक तरीका निरंतर HZ
का उपयोग कर रहा है।
यह हर्ट्ज का संक्षिप्त नाम है, या प्रति सेकंड टिकों की संख्या है। एक टाइमर टिक के साथ एक सिस्टम पर 1ms, एचजेड = 1000 सेट। कुछ वितरण या आर्किटेक्चर एक और संख्या का उपयोग कर सकते हैं (100 आम होने के लिए इस्तेमाल किया जाता है)।
एक समारोह के लिए एक jiffies
गिनती निर्दिष्ट करने के लिए मानक तरीका HZ
उपयोग कर रहा है, इस तरह:
schedule_timeout(HZ/10); /* Timeout after 1/10 second */
सबसे सरल मामलों में, यह ठीक काम करता है।
2*HZ /* 2 seconds in jiffies */
HZ /* 1 second in jiffies */
foo * HZ /* foo seconds in jiffies */
HZ/10 /* 100 milliseconds in jiffies */
HZ/100 /* 10 milliseconds in jiffies */
bar*HZ/1000 /* bar milliseconds in jiffies */
उन पिछले दो एक 10 एमएस घड़ी टिक के साथ एक सिस्टम पर के रूप में, HZ/100
1, एक समस्या का एक सा है, तथापि, और सटीक पीड़ित शुरू होता है। आपको 0.0001 और 1.999 टाइमर टिक (0-2 एमएस, अनिवार्य रूप से) के बीच कहीं भी देरी हो सकती है। यदि आपने 1012 टिक सिस्टम पर HZ/200
का उपयोग करने का प्रयास किया है, तो पूर्णांक विभाजन आपको 0 jiffies देता है!
तो की एक बात, छोटे मूल्यों (1 jiffie आ गया है) के लिए हर्ट्ज का उपयोग कर बहुत सावधान रहना है।
अन्य तरीके से बदलने के लिए, आप का प्रयोग करेंगे:
jiffies/HZ /* jiffies to seconds */
jiffies * 1000/HZ /* jiffies to milliseconds */
तुम कुछ भी मिलीसेकंड परिशुद्धता की तुलना में बेहतर उम्मीद नहीं करनी चाहिए।
क्या सीएलआई का उपयोग कर एचजेड मूल्य प्राप्त करना संभव है? जैसे 2.6 कर्नेल पर/proc/[pid]/stat से utime पढ़ने के बाद, क्या मैं आसानी से इसे सी कोड से संकलित करने की आवश्यकता के बिना सेकंड में परिवर्तित कर सकता हूं? –
यदि आप उपयोगकर्ता स्पेस से एचजेड के साथ बातचीत कर रहे हैं, तो इसके बजाय USER_HZ का उपयोग करें। 'मैन 7 टाइम' इस मान को लाने के लिए sysconf (_SC_CLK_TCK) का उपयोग करने के लिए कहता है। –
मुझे शेल स्क्रिप्ट से ऐसा करने का एक स्पष्ट तरीका दिखाई नहीं देता है, लेकिन यह आमतौर पर एक स्थिर है जब तक कि आप अपने कर्नेल को अप्राकृतिक चीजें नहीं कर रहे हैं। X86 यूएसER_एचजेड पर 100 है। –
लिफ़िक्स 2.4 में जिफियों को हार्ड-कोड किया गया है। HZ
की परिभाषा की जांच करें, जिसे आर्किटेक्चर-विशिष्ट param.h
में परिभाषित किया गया है। यह अक्सर 100 हर्ट्ज होता है, जो प्रत्येक पर एक टिक (1 सेकंड/100 टिक * 1000 एमएस/सेकंड) 10 एमएस होता है।
यह i386 के लिए सच है, और एचजेड include/asm-i386/param.h
में परिभाषित किया गया है।
#define MAX_JIFFY_OFFSET ((~0UL >> 1)-1)
static __inline__ unsigned long
timespec_to_jiffies(struct timespec *value)
{
unsigned long sec = value->tv_sec;
long nsec = value->tv_nsec;
if (sec >= (MAX_JIFFY_OFFSET/HZ))
return MAX_JIFFY_OFFSET;
nsec += 1000000000L/HZ - 1;
nsec /= 1000000000L/HZ;
return HZ * sec + nsec;
}
static __inline__ void
jiffies_to_timespec(unsigned long jiffies, struct timespec *value)
{
value->tv_nsec = (jiffies % HZ) * (1000000000L/HZ);
value->tv_sec = jiffies/HZ;
}
नोट::
timespec_to_jiffies
और jiffies_to_timespec
बुलाया include/linux/time.h
में कार्य जहां आगे और पीछे एक struct timespec
और jiffies
के बीच परिवर्तित कर सकते हैं कर रहे हैं मैं संस्करण 2.4.22 में इस जानकारी की जाँच की।
^में jiffies_to_msecs() को शामिल करें। – PypeBros
Answer to #3875801 भी revelant
मैं kernelnewbies पर यह कोड का नमूना पाया जा सकता है। सुनिश्चित करें कि आप -lrt
#include <unistd.h>
#include <time.h>
#include <stdio.h>
int main()
{
struct timespec res;
double resolution;
printf("UserHZ %ld\n", sysconf(_SC_CLK_TCK));
clock_getres(CLOCK_REALTIME, &res);
resolution = res.tv_sec + (((double)res.tv_nsec)/1.0e9);
printf("SystemHZ %ld\n", (unsigned long)(1/resolution + 0.5));
return 0;
}
- 1. jiffies को सेकंड में कनवर्ट करें
- 2. रुबी टाइमआउट एन * मिली * सेकंड
- 3. पायथन समय (मिली सेकंड) गणना
- 4. Joda समय, कुल मिली सेकंड के
- 5. सेकंड को सेकंड्स में कनवर्ट करने के लिए फ़ंक्शन
- 6. सेकंड, मिनट और सेकेंड में सेकंड्स को कनवर्ट करें
- 7. mysql DATETIME कॉलम को युग सेकंड में कनवर्ट करें
- 8. पेड़ सूची को पदानुक्रम में कनवर्ट करना
- 9. स्ट्रिंग को पूर्णांक में कनवर्ट करना
- 10. एक एनएसएसटींग * को चार में कनवर्ट करना?
- 11. सी # बाइट को बिटरएरे में कनवर्ट करना
- 12. यूआईएममेज को पीडीएफ फाइल में कनवर्ट करना
- 13. लिंक को XSLT में कनवर्ट करना
- 14. सी # - यूट को बाइट में कनवर्ट करना []
- 15. सी #: स्ट्रिंग को एसबीईटी में कनवर्ट करना *
- 16. डेटाटाइम को POSIX समय में कनवर्ट करना
- 17. Ada95: इंटेगर को कैरेक्टर में कनवर्ट करना
- 18. बिगडेसिमल को इंटीजर में कनवर्ट करना
- 19. जावा को आईओएस में कनवर्ट करना
- 20. एक TreeSet को ArrayList में कनवर्ट करना?
- 21. यूआरएल को JSON संस्करण में कनवर्ट करना?
- 22. एक्सएमएल को जावा ऑब्जेक्ट्स में कनवर्ट करना
- 23. आर में दशमलव में बाइनरी कनवर्ट करना?
- 24. MySQL को कनवर्ट करना PostgreSQL
- 25. बाइट्स को एक स्ट्रिंग में कनवर्ट करना C#
- 26. सेकंड में डेटा प्राप्त करना, घंटों, मिनटों और सेकंड की गणना करना चाहते हैं
- 27. प्रति सेकंड और jiffies टिक्स। क्या फर्क पड़ता है?
- 28. PHP में पीडीएफ में एचटीएमएल कनवर्ट करना?
- 29. कनवर्ट करें। चेंज टाइप और enums में कनवर्ट करना?
- 30. शक्तियों में txt फ़ाइल को csv में कनवर्ट करना
कर्नेल 2.6 में उपयोग किया गया फ़ंक्शन क्या है? –
@kaciula हार्ड-कोडित जिफिस को याद दिलाने के लिए/linux/jiffies.h – tonylo