반응형
경과시간 측정방법
- 실제시간 - 현실에서 사용하는 진짜 시간과 날짜
- 프로세스 시간 - 프로세서에서 프로세스를 실행하는 데 소비한 시간
- 모노티닉 시간 - 시동 직후부터 경과한 시스템 가동 시간. 반드시 일정하게 증가함
시간 표현 방법
- 상대시간 - 현재 시각과 같이 특정 기준점에 대한 상대값으로 표현.
- 절대시간 - 특정 기준점 없이 절대값으로 표현. 유닉스 시스템은 1970년 1월 1일 기준으로 절대시간 표현
기타 정보
- 유닉스 시간은 1970년 1월 1일 00:00:00 UTC가 기준임
- UTC(Universal Time Coordinate) - GMT(Greenwith Mean Time) 또는 줄루(Zulu) 시라고도 함
- 타이머 한 주기가 지나면 커널은 경과시간을 틱이나 지피(Jiffy)라는 한 단위만큼 늘림
- 시스템의 타이머 빈도를 HZ이라고 함. 예를 들어 HZ가 100이면 타이머가 1초동안에 100번 동작(주파수가 100HZ). w지피값은 0.01초(1/HZ) 가 됨. 2.6은 1,000HZ, 2.6.13이후 버전은 250HZ로 조정
1. 시간에 대한 자료구조
- time_t 타입 - 초단위, 기준시간으로부터 경과한 시간(초). long값을 가짐. 가장 단순
- timeval 구조체 - 마이크로 초 정밀도
- timespec 구조체 - 나노초 정밀도
- tm 구조체 - 프로그램적으로 주어진 날짜를 표현하는 문자열을 만들기 위한 구조체
2. POSIX 시계
- clockid_t 타입 - CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_MONTONIC_RAW, CLOCK_PROCESS_CPU_ID, CLOCK_THREAD_CPUTIME_ID. 이중에서 CLOCK_REALTIME만 POSIX 표준
- clock_getes() - 시계 해상도 정보를 제공
3. 현재 시간 얻기
- time() - 기준시간(1970년) 이후 경과시간을 초 단위로 환산(윤년, 윤초 무시)
- gettimeofday() - 마이크로 초 해상도 시간 구함
- clock_gettime() - 나노 초 해상도 시간 구함
- times() - 실행 중인 프로세스와 자식 프로세스의 프로세스 시간을 틱단위로 가져옴
4. 현재 날짜와 시각 설정하기
- stime() - 시간 설정. CAP_SYS_TIME 기능이 필요하고, 보통 root 권한만 실행 가능
- settimeofday() - gettimeofday()와 대응되는 시간 설정
- clock_settime() - clock_gettime()과 대응되는 시간 설정
5. 시간 다루기
- asctime() - tm구조체를 ASCII 문자열로 변환. 예로 "Sun Sep 16 01:03:52 1973"
- asctime_r() - asctime()과 동일한 기능. 쓰레드세이프한 함수
- mktime() - tm구조체를 time_t구조체로 변환
- cmtime() - time_t구조체를 ASCII 문자열로 변환
- cmtime_r() - cmtime()과 동일한 기능. 쓰레드세이프한 함수
- gmtime() - time_t구조체를 tm구조체로 변환, UTC시간대
- gmtime_r() - gmtime()과 동일한 기능. 쓰레드세이프한 함수
- localtime() - time_t구조체를 tm구조체로 변환. 사용자시간대
- localtime_r() - localtime()과 동일한 기능. 쓰레드세이프한 함수
- difftime() - 경과한 초를 double로 변환하여 리턴
6. 시스템 시계 조율
- adjtime() - 올바른 시간에 수렴할때까지 시계를 천천히 움직인다
- adjtimex() - adjtime()보다 강력하고 복잡한 시간 조정 알고리즘 제공함
7. 잠들기와 대기
- 초단위 잠들기 - sleep()
- 마이크로 초단위 해상도로 잠들기 - usleep()
- 나노초 해상도로 잠들기 - nanosleep()
- 고급 잠들기 - clock_nanosleep()
- 이식성을 고려한 잠들기 - select()
- 시간 초과 - 평균적으로 주기가 X인 타이머의 초과비율은 X/2임
8. 타이머
- 간단한 알람 - alarm(초)
- 인터벌 타이머 - gettimer(), settimer()
- 고급타이머 - timer_create(), timer_settime(), timer_gettime(), timer_getoverrun(), timer_delete()
'기술 정리 > 리눅스시스템프로그래밍' 카테고리의 다른 글
리눅스 시스템 프로그래밍 - 7장, 8장 (0) | 2016.04.01 |
---|---|
리눅스 시스템 프로그래밍 - 5장, 6장 (0) | 2016.03.26 |
리눅스 시스템 프로그래밍 - 3장, 4장 (0) | 2016.03.16 |
리눅스 시스템 프로그래밍 - 1장, 2장 (0) | 2016.03.09 |