http://wiki.kldp.org/wiki.php/DocbookSgml/KernelAnalysis-HOWTO
// From include/asm/param.h
#ifndef HZ
#define HZ 100
#endif
// From include/asm/timex.h
#define CLOCK_TICK_RATE 1193180 /* Underlying HZ */
// From include/linux/timex.h
#define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ) /* For divider */
// From arch/i386/kernel/i8259.c
outb_p(0x34,0x43); /* binary, mode 2, LSB/MSB, ch 0 */
outb_p(LATCH & 0xff , 0x40); /* LSB */
outb(LATCH >> 8 , 0x40); /* MSB */
매 10 ms 마다 (HZ 값의 설정에 따라 다를 수 있음) 멀티태스킹 환경을 지원하도록 IRQ0 이 발생한다. 이 신호는 1.19318 MHz 의 주파수를 가지는 PIT 8253 클럭에 연결된 PIC 8259 (i386 이상에서) 칩에서 발생된다.
그래서 8253 PIT (Programmable Inteval Timer) 를 프로그래밍할 때 HZ 값이 100 인 경우 (기본값) LATCH 값을 11931.8 (1193180 / HZ) 로 설정한다. LATCH 값은 주파수를 결정하는 요소가 된다. (frequence divisor factor)
LATCH 를 11931.8 로 설정하는 것은 8253 의 출력값이 1193180/11931.8 = 100 HZ 의 주파수를 가지도록 한다. 따라서 주기는 10 ms 가 된다.
즉, 타임 슬라이스 값은 1/HZ 이다.
// From include/asm/param.h
#ifndef HZ
#define HZ 100
#endif
// From include/asm/timex.h
#define CLOCK_TICK_RATE 1193180 /* Underlying HZ */
// From include/linux/timex.h
#define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ) /* For divider */
// From arch/i386/kernel/i8259.c
outb_p(0x34,0x43); /* binary, mode 2, LSB/MSB, ch 0 */
outb_p(LATCH & 0xff , 0x40); /* LSB */
outb(LATCH >> 8 , 0x40); /* MSB */
매 10 ms 마다 (HZ 값의 설정에 따라 다를 수 있음) 멀티태스킹 환경을 지원하도록 IRQ0 이 발생한다. 이 신호는 1.19318 MHz 의 주파수를 가지는 PIT 8253 클럭에 연결된 PIC 8259 (i386 이상에서) 칩에서 발생된다.
그래서 8253 PIT (Programmable Inteval Timer) 를 프로그래밍할 때 HZ 값이 100 인 경우 (기본값) LATCH 값을 11931.8 (1193180 / HZ) 로 설정한다. LATCH 값은 주파수를 결정하는 요소가 된다. (frequence divisor factor)
LATCH 를 11931.8 로 설정하는 것은 8253 의 출력값이 1193180/11931.8 = 100 HZ 의 주파수를 가지도록 한다. 따라서 주기는 10 ms 가 된다.
즉, 타임 슬라이스 값은 1/HZ 이다.
'KB > linux' 카테고리의 다른 글
임베디드 리눅스 포팅 (0) | 2006.06.15 |
---|---|
리눅스 부팅 과정 (스크립트) (0) | 2006.06.15 |
Linux Kernel 문서 모음 (0) | 2006.06.13 |
Using as The GNU Assembler (0) | 2006.06.12 |
LINUX ASSEMBLER TUTORIAL (0) | 2006.06.12 |