time(7) - wariua/manpages-ko GitHub Wiki

NAME

time - μ‹œκ°„ 및 타이머 μ†Œκ°œ

DESCRIPTION

μ‹€μ œ μ‹œκ°„κ³Ό ν”„λ‘œμ„ΈμŠ€ μ‹œκ°„

*μ‹€μ œ μ‹œκ°„(real time)*은 μ–΄λ–€ κ³ μ • μ‹œμ μ„ κΈ°μ€€μœΌλ‘œ μΈ‘μ •ν•œ μ‹œκ°„μœΌλ‘œ μ •μ˜ν•œλ‹€. κ·Έ μ‹œμ μ΄ 과거의 μ–΄λ–€ ν‘œμ€€ μ‹œμ μΌ μˆ˜λ„ 있고 (μ•„λž˜ 에포크 및 달λ ₯ μ‹œκ°„ μ„€λͺ… μ°Έκ³ ), ν”„λ‘œμ„ΈμŠ€ 수λͺ… μ€‘μ˜ μ–΄λŠ (κ°€λ Ή μ‹œμž‘) μ‹œμ λΆ€ν„° 잰 것(κ²½κ³Ό μ‹œκ°„)일 μˆ˜λ„ μžˆλ‹€.

*ν”„λ‘œμ„ΈμŠ€ μ‹œκ°„(process time)*은 ν”„λ‘œμ„ΈμŠ€κ°€ μ“΄ CPU μ‹œκ°„μ˜ μ–‘μœΌλ‘œ μ •μ˜ν•œλ‹€. λ•Œλ‘œλŠ” κ·Έκ±Έ μ‚¬μš©μž λΆ€λΆ„κ³Ό μ‹œμŠ€ν…œ λΆ€λΆ„μœΌλ‘œ λ‚˜λˆ„κΈ°λ„ ν•œλ‹€. μ‚¬μš©μž CPU μ‹œκ°„μ΄λž€ μ‚¬μš©μž λͺ¨λ“œμ—μ„œ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©° μ“΄ μ‹œκ°„μ΄λ‹€. 그리고 μ‹œμŠ€ν…œ CPU μ‹œκ°„μ΄λž€ ν”„λ‘œμ„ΈμŠ€λ₯Ό λŒ€μ‹ ν•΄ μ‹œμŠ€ν…œ λͺ¨λ“œμ—μ„œ 컀널이 μ‹€ν–‰λ˜λ©° (κ°€λ Ή μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ μ‹€ν–‰ν•˜λ©°) μ“΄ μ‹œκ°„μ΄λ‹€. time(1) λͺ…령을 μ“°λ©΄ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ λ™μ•ˆ μ†Œλͺ¨ν•œ CPU μ‹œκ°„ 양을 μ•Œμ•„λ‚Ό 수 μžˆλ‹€. 그리고 ν”„λ‘œκ·Έλž¨μ—μ„œ times(2), getrusage(2), clock(3)을 μ¨μ„œ μžκΈ°κ°€ μ†Œλͺ¨ν•œ CPU μ‹œκ°„ 양을 μ•Œμ•„λ‚Ό 수 μžˆλ‹€.

ν•˜λ“œμ›¨μ–΄ 클럭

λŒ€λΆ€λΆ„μ˜ μ»΄ν“¨ν„°μ—λŠ” (배터리가 달린) ν•˜λ“œμ›¨μ–΄ 클럭이 μžˆλ‹€. 컀널이 λΆ€νŒ… ν•  λ•Œ κ·Έ ν΄λŸ­μ„ μ½μ–΄μ„œ μ†Œν”„νŠΈμ›¨μ–΄ ν΄λŸ­μ„ μ΄ˆκΈ°ν™” ν•œλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ rtc(4)와 hwclock(8)을 보라.

μ†Œν”„νŠΈμ›¨μ–΄ 클럭, HZ, μ§€ν”Ό

(select(2), sigtimedwait(2)처럼) νƒ€μž„μ•„μ›ƒμ„ μ„€μ •ν•˜κ±°λ‚˜ (getrusage(2)처럼) CPU μ‹œκ°„μ„ μΈ‘μ •ν•˜λŠ” μ—¬λŸ¬ μ‹œμŠ€ν…œ 호좜의 정밀도 ν•œκ³„κ°€ λ˜λŠ” 게 μ†Œν”„νŠΈμ›¨μ–΄ 클럭 해상도인데, μ»€λ„μ—μ„œ μœ μ§€ν•˜λŠ” κ·Έ ν΄λŸ­μ€ μ§€ν”Ό(jiffy) λ‹¨μœ„λ‘œ μ‹œκ°„μ„ μΈ‘μ •ν•œλ‹€. 그리고 μ§€ν”Όμ˜ 크기λ₯Ό μ •ν•˜λŠ” 게 컀널 μƒμˆ˜ HZ의 값이닀.

HZ의 값은 컀널 버전과 ν•˜λ“œμ›¨μ–΄ ν”Œλž«νΌμ— 따라 λ‹€μ–‘ν•˜λ‹€. i386의 상황을 보자면, 2.4.xκΉŒμ§€ μ»€λ„μ—μ„œλŠ” HZκ°€ 100μ΄μ–΄μ„œ μ§€ν”Όκ°€ 0.01μ΄ˆμ˜€κ³ , 2.6.0λΆ€ν„° HZκ°€ 1000으둜 μ˜¬λΌμ„œ μ§€ν”Όκ°€ 0.001μ΄ˆκ°€ 됐닀. 그리고 컀널 2.6.13λΆ€ν„°λŠ” HZ 값이 컀널 ꡬ성 λ§€κ°œλ³€μˆ˜μ—¬μ„œ 100, 250 (κΈ°λ³Έκ°’), 1000일 수 있고, 각각 μ§€ν”Ό κ°’ 0.01초, 0.004초, 0.001μ΄ˆκ°€ λ‚˜μ˜¨λ‹€. 컀널 2.6.20λΆ€ν„°λŠ” μΆ”κ°€λ‘œ 300도 μ‚¬μš©ν•  수 μžˆλŠ”λ°, 일반적인 μ˜μƒ ν”„λ ˆμž„ 속도(PAL 25 HZ, NTSC 30 HZ)둜 λ‚˜λˆ  λ–¨μ–΄μ§€λŠ” 값이닀.

times(2) μ‹œμŠ€ν…œ ν˜ΈμΆœμ€ νŠΉλ³„ν•œ κ²½μš°λ‹€. 이 ν˜ΈμΆœμ€ 컀널 μƒμˆ˜ USER_HZ에 μ˜ν•œ μ •λ°€λ„λ‘œ μ‹œκ°„μ„ μ•Œλ € μ€€λ‹€. μ‚¬μš©μž 곡간 μ‘μš©μ—μ„œ sysconf(_SC_CLK_TCK)둜 κ·Έ μƒμˆ˜μ˜ 값을 μ•Œμ•„λ‚Ό 수 μžˆλ‹€.

고해상도 타이머

λ¦¬λˆ…μŠ€ 2.6.21 μ „μ—μ„œ 타이머 및 μž λ“€κΈ° μ‹œμŠ€ν…œ 호좜(μ•„λž˜ μ°Έκ³ )의 정밀도 ν•œκ³„λ„ μ§€ν”Ό ν¬κΈ°μ˜€λ‹€.

λ¦¬λˆ…μŠ€ 2.6.21λΆ€ν„° λ¦¬λˆ…μŠ€μ—μ„œ 고해상도 타이머(HRT, high-resolution timer)λ₯Ό μ§€μ›ν•˜μ—¬ CONFIG_HIGH_RES_TIMERSλ₯Ό 톡해 μ„ νƒμ μœΌλ‘œ ꡬ성 κ°€λŠ₯ν•˜λ‹€. HRTλ₯Ό μ§€μ›ν•˜λŠ” μ‹œμŠ€ν…œμ—μ„œλŠ” μž λ“€κΈ° 및 타이머 μ‹œμŠ€ν…œ 호좜의 정밀도가 더 이상 지피에 μ˜ν•΄ μ œμ•½λ°›μ§€ μ•ŠμœΌλ©° ν•˜λ“œμ›¨μ–΄μ—μ„œ ν—ˆμš©ν•˜λŠ” 만큼 μ •λ°€ν•  수 μžˆλ‹€. (μš”μ¦˜ ν•˜λ“œμ›¨μ–΄μ—μ„  마이크둜초 정밀도가 μΌλ°˜μ μ΄λ‹€.) 고해상도 타이머가 μ§€μ›λ˜λŠ”μ§€ μ•Œμ•„λ‚΄λ €λ©΄ clock_getres(2) 호좜이 λ°˜ν™˜ν•˜λŠ” 해상도λ₯Ό ν™•μΈν•˜κ±°λ‚˜ /proc/timer_listμ—μ„œ "resolution" ν•­λͺ©μ„ 보면 λœλ‹€.

λͺ¨λ“  ν•˜λ“œμ›¨μ–΄ μ•„ν‚€ν…μ²˜μ—μ„œ HRTλ₯Ό μ§€μ›ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€. (x86, arm, powerpc λ“±μ—μ„œλ§Œ μ§€μ›ν•œλ‹€.)

에포크

μœ λ‹‰μŠ€ μ‹œμŠ€ν…œλ“€μ€ 에포크(Epoch), 즉 1970-01-01 00:00:00 +0000 (UTC) 이후 μ§€λ‚œ 초 수둜 μ‹œκ°„μ„ λ‚˜νƒ€λ‚Έλ‹€.

ν”„λ‘œκ·Έλž¨μ—μ„œ clock_gettime(2)의 CLOCK_REALTIME ν΄λŸ­μ„ 톡해 *달λ ₯ μ‹œκ°„(calendar time)*을 μ•Œμ•„λ‚Ό 수 μžˆλŠ”λ°, 에포크 이후 μ§€λ‚œ μ‹œκ°„μ΄ (μ΄ˆμ™€ λ‚˜λ…Έμ΄ˆλ‘œ) λ°˜ν™˜λœλ‹€. time(2)도 λΉ„μŠ·ν•œ 정보λ₯Ό μ œκ³΅ν•˜λ˜ 정밀도가 초 λ‹¨μœ„μ΄λ‹€. clock_settime(2)으둜 μ‹œμŠ€ν…œ μ‹œκ°„μ„ λ°”κΏ€ 수 μžˆλ‹€.

λΆ„ν•  μ‹œκ°„

μ–΄λ–€ 라이브러리 ν•¨μˆ˜λ“€μ€ tm νƒ€μž… ꡬ쑰체λ₯Ό μ¨μ„œ *λΆ„ν•  μ‹œκ°„(broken-down time)*을 λ‚˜νƒ€λ‚΄λŠ”λ°, μ‹œκ°„ 값을 λ³„κ°œ μš”μ†Œλ“€(λ…„, μ›”, 일, μ‹œκ°„, λΆ„, 초 λ“±)둜 λ‚˜λˆ μ„œ μ €μž₯ν•˜λŠ” 것이닀. ctime(3)μ—μ„œ κ·Έ ꡬ쑰체λ₯Ό μ„€λͺ…ν•˜λ©° 또 달λ ₯ μ‹œκ°„κ³Ό λΆ„ν•  μ‹œκ°„μ„ μ„œλ‘œ λ³€ν™˜ν•˜λŠ” ν•¨μˆ˜λ“€λ„ μ„€λͺ…ν•œλ‹€. ctime(3), strftime(3), strptime(3)μ—μ„œλŠ” λΆ„ν•  μ‹œκ°„κ³Ό 좜λ ₯ κ°€λŠ₯ν•œ λ¬Έμžμ—΄ μ‹œκ°„ ν‘œν˜„μ„ μ„œλ‘œ λ³€ν™˜ν•˜λŠ” ν•¨μˆ˜λ“€μ„ μ„€λͺ…ν•œλ‹€.

μž λ“€κΈ°μ™€ 타이머 μ„€μ •ν•˜κΈ°

μ—¬λŸ¬ μ‹œμŠ€ν…œ 호좜과 ν•¨μˆ˜λ₯Ό 톡해 ν”„λ‘œκ·Έλž¨μ΄ 일정 μ‹œκ°„ λ™μ•ˆ μž λ“€ 수 (싀행을 쀑지할 수) μžˆλ‹€. nanosleep(2), clock_nanosleep(2), sleep(3) μ°Έκ³ .

μ—¬λŸ¬ μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ 톡해 ν”„λ‘œμ„ΈμŠ€μ—μ„œ 타이머λ₯Ό μ„€μ •ν•  수 μžˆλ‹€. κ·Έ νƒ€μ΄λ¨ΈλŠ” 미래 μ–΄λŠ μ‹œμ μ— 만료되며 일정 주기둜 λ§Œλ£Œλ˜κΈ°λ„ ν•œλ‹€. alarm(2), getitimer(2), timerfd_create(2), timer_create(2) μ°Έκ³ .

타이머 κ²ŒμœΌλ¦„

λ¦¬λˆ…μŠ€ 2.6.28λΆ€ν„° μŠ€λ ˆλ“œλ³„λ‘œ "타이머 κ²ŒμœΌλ¦„(slack)" 값을 μ œμ–΄ν•˜λŠ” 게 κ°€λŠ₯ν•˜λ‹€. 타이머 κ²ŒμœΌλ¦„ κ°’μ΄λž€ νƒ€μž„μ•„μ›ƒκ³Ό ν•¨κ»˜ 블둝 돼 μžˆλŠ” νŠΉμ • μ‹œμŠ€ν…œ ν˜ΈμΆœλ“€μ΄ κΉ¨μ–΄λ‚˜λŠ” κ±Έ μ»€λ„μ—μ„œ μ§€μ—°μ‹œν‚¬ 수 μžˆλŠ” μ‹œκ°„ 길이이닀. 이런 지연을 ν—ˆμš©ν•˜λ©΄ μ»€λ„μ—μ„œ μ—¬λŸ¬ 깨우기 이벀트λ₯Ό 병합할 수 있고, κ·Έλž˜μ„œ μž˜ν•˜λ©΄ μ‹œμŠ€ν…œμ΄ κΉ¨μ–΄λ‚˜λŠ” 횟수λ₯Ό μ€„μ—¬μ„œ μ „λ ₯을 μ•„λ‚„ μˆ˜λ„ μžˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ prctl(2)의 PR_SET_TIMERSLACK μ„€λͺ…을 보라.

SEE ALSO

date(1), time(1), timeout(1), adjtimex(2), alarm(2), clock_gettime(2), clock_nanosleep(2), getitimer(2), getrlimit(2), getrusage(2), gettimeofday(2), nanosleep(2), stat(2), time(2), timer_create(2), timerfd_create(2), times(2), utime(2), adjtime(3), clock(3), clock_getcpuclockid(3), ctime(3), ntp_adjtime(3), ntp_gettime(3), pthread_getcpuclockid(3), sleep(3), strftime(3), strptime(3), timeradd(3), usleep(3), rtc(4), hwclock(8)


2018-04-30

⚠️ **GitHub.com Fallback** ⚠️