life is egg
[PINTOS] 타이머 인터럽트의 주체는 본문
타이머 인터럽트
무엇이길래 다른 스레드나 프로세스가 코어를 점유하고 있어도 "timer_interrupt" 코드를 실행 시켜주는 지 궁금해졌다.
일단 찾아본 바로는
- 타이머 하드웨어에 의해서 인터럽트가 발생 , 즉 타이머 인터럽트의 주체는 하드웨어 타이머
- 하드웨어 타이머가 인터럽트 신호를 CPU에게 보냄, 현재 작업 잠시 중단
- 운영체제의 인터럽트 핸들러 or 인터럽트 서비스 루틴 을 실행하도록 요청
- 해당 인터럽트에 실행 될 코드 실행,
- 위의 과정은 모두 시스템의 커널 모드에서 실행, 즉 타이머 인터럽트는 하드웨어 타이머에 의해 발생하지만, 실제로는 인터럽트를 처리하는 코드(인터럽트 핸들러)는 운영체제 커널에 의해 실행.
타이머 인터럽트가 발생되면 실행되는 코드 이다
/* Timer interrupt handler. */
static void
timer_interrupt(struct intr_frame *args UNUSED)
{
ticks++;
thread_tick();
}
어디서 사용되는지 찾아보면
타이머 초기화시 intr_register_ext() 함수의 파라미터로 들어간다 .
void timer_init(void)
{
/* 8254 input frequency divided by TIMER_FREQ, rounded to
nearest. */
uint16_t count = (1193180 + TIMER_FREQ / 2) / TIMER_FREQ;
outb(0x43, 0x34); /* CW: counter 0, LSB then MSB, mode 2, binary. */
outb(0x40, count & 0xff);
outb(0x40, count >> 8);
intr_register_ext(0x20, timer_interrupt, "8254 Timer");
}
intr_register_ext()
무었이냐 이름만보면 외부 인터럽트 신호를 등록해주는 그런 느낌적인 느낌..
코드를 보면
/* Registers external interrupt VEC_NO to invoke HANDLER, which
is named NAME for debugging purposes. The handler will
execute with interrupts disabled. */
void intr_register_ext(uint8_t vec_no, intr_handler_func *handler,
const char *name)
{
ASSERT(vec_no >= 0x20 && vec_no <= 0x2f);
register_handler(vec_no, 0, INTR_OFF, handler, name);
}
- vev_no : 인터럽트 핸들러의 위치를 가리키는 인덱스
- intr_handler_func : 해당 인터럽트에 실행시킬 함수
- name : 디버깅시 구분편하라고 설정한 이름
intr_register_ext() 함수 내부에서 이제 찐으로 register_handler()를 호출하는데, 이 이상으로 살펴볼 마음은 안들지만..
register_handler의 파라미터중 INTR_OFF 가 들어간다는 것은 볼만한 정보 인듯하다
해당 인터럽트의 인터럽트 핸들러가 실행될 때 다른 인터럽트 요청을 차단해서. 핸들러 실행의 안정성과 신뢰성을 보장 할 수있기 때문
타고 타고 타고 들어가다보면 매크로를 만나게됨

IDT(Interrupt Descriptor Table)에 인터럽트 핸들러를 손쉽게 등록하게 해주는 매크로 무튼 그렇다.
결국 타이머 인터럽트의 주체는 하드웨어 타이머이고 그것을 처리하는건 운영체제의 커널..!
'sw정글 > C' 카테고리의 다른 글
| [PINTOS] 구조체 초기화 (0) | 2024.05.21 |
|---|---|
| [PINTOS] syn_read 와... 인터럽트 검증 관련 오류 (0) | 2024.05.14 |
| [PINTOS] priority conditon variable test (0) | 2024.05.03 |
| [Malloc] Implict (0) | 2024.04.18 |
| [Malloc] Malloc Lab 개요 (0) | 2024.04.14 |
Comments