1. Time의 종류
- Wall Time (Real Time): 실제 시간. Absolute Time을 측정하기 위해 사용됨. (ex 2021년 12월 8일)
- Monotonic Time: 상대적인 시간. Relative Time을 측정하기 위해 사용됨. 사용자가 임의로 변경할 수 없다. (ex 컴퓨터가 켜진 뒤로부터 지난 시간, 두 샘플에서 시간차이를 측정)
- Process Time: 프로세스가 user-space, kernel에서 사용된 시간. 프로세스 profiling 등에 사용됨. 프로세스 시간은 멀티 태스킹 환경에서 wall time보다 천천히 돌아가는 것처럼 보일 수 있다.
2. Hardware Clocks
- Real Time Clock (RTC): 컴퓨터가 꺼져도 시간이 흘러가는 것을 기록함.
- High Precision Event Timer (HPET): RTC보다 높은 Resolution의 periodic interrupts 를 발생시킬 수 있다. 시스템이 꺼지면 동작하지 않는다.
- Time Stamp Counter (TSC): CPU 사이클이 몇번 발생했는지를 누적하는 레지스터이다. HPET보다 Resolution이 높다. periodic interrupts 를 발생시킬 수 없고 시스템이 꺼지면 동작하지 않는다.
3. Software Clocks
- Timer interval이 종료되면 커널은 경과 시간을 tick / jiffy 단위로 증가시킨다. 디폴트 간격은 4ms 주기 (250HZ)
- System Time: Unix Time (00:00:00 1 Jan 1970) 으로부터 지난 시간을 기록한다.
4. Unix - get, set time
struct timeval: seconds, micro seconds 정보를 저장한다.
struct timeval {
time_t tv_sec; // seconds
suscenods_t tv_usec; // micro seconds
}
$\verb|gettimeofday(struct timeval *tv, struct timezone *tz)|$
System Time의 값을 tv에 저장한다. (tz는 항상 NULL 사용) (성공 시 0 리턴)
$\verb|settimeofday(struct timeval *tv, struct timezone *tz)|$
System Time의 값을 tv에 저장된 값으로 변경한다. (tz는 항상 NULL 사용) (성공 시 0 리턴)
5. POSIX Clocks
- $\verb|CLOCK_REALTIME|$: Real time
- $\verb|CLOCK_MONOTONIC|$: 시스템이 부팅된 후 지난 시간
- $\verb|CLOCK_PROCESS_CPUTIME_ID|$: 프로세스가 사용한 시간
- $\verb|CLOCK_THREAD_CPUTIME_ID|$: 스레드가 사용한 시간
6. POSIX - get, set Time
struct timespec: seconds, nano seconds 정보를 저장한다.
struct timespec {
time_t tv_sec; // seconds
long tv_nsec; // nano seconds
}
$\verb|int clock_getres(clock_id, struct timespec *res)|$
clock_id의 resolution 값을 가져와서 res에 저장한다.
$\verb|int clock_gettime(clock_id, struct timespec *ts)|$
clock_id 시계의 값을 ts에 저장한다. (성공 시 0 리턴)
$\verb|int clock_settime(clock_id, struct timespec *ts)|$
clock_id 시계의 값을 ts의 값으로 설정한다. (성공 시 0 리턴)
'학부 수업 정리 > 시스템프로그래밍 (21-2)' 카테고리의 다른 글
[시스템] 15. Timers (0) | 2021.12.29 |
---|---|
[시스템] 14. Sleeping (0) | 2021.12.29 |
[시스템] 12. I/O Redirection, Standard I/O Library (0) | 2021.12.29 |
[시스템] 11. Multiplexed I/O, Memory Mapped I/O (0) | 2021.12.29 |
[시스템] 10. File Offset (0) | 2021.12.29 |