' Interrupt & system call ' in Linux kernel
Operating System & Computer Architecture/Linux 2017. 12. 28. 21:01인터럽트발생 -> idt_table을 참조하여 해당인터럽트 실행
1.시스템콜 -> 시스템콜 테이블참조하여 시스템함수실행
2.인터럽트번호 32~255-> irq_desc참조하여 그 함수실행
ex) 키보드입력
키보드 눌림 -> 인터럽트33번 cpu에게전달 -> cpu는처음 운영체제가 시작할때 메모리에 할당해준 IDT를 참조 -> 33번이기때문에 irq_desc로감 -> 33번에해당하는 irq_desc[1]을 부름-> irq_desc[1] 는 atkbd함수를 호출 -> atkbd함수실행
128번은 system_call 인터럽트 이고 타이머인터럽트,페이지폴트,키보드입력(그림에는없지만 아마 33)은 다른번호에 배정받아있다.
System_call일때는 IDT넘버가 128번이고 sys_call_table을 참조하여 그에해당하는 커널함수를 알수있다.
fork가 실행될때 간단설명
-
mov eax 4 //시스템콜번호를 레지스터에저장
INT 128 - IDT[128] //idt테이블에서 128번으로가라 = system_call()
- sys_call_table[4] //sys_call_tale 4번으로가서 실행해라.
'Operating System & Computer Architecture > Linux' 카테고리의 다른 글
System call in Linux kernel - (1)시스템콜 수정,추가해보기 (0) | 2017.12.29 |
---|---|
Interrupt in Linux kernel - (2) 키보드입력,kernel_init 변경 (0) | 2017.12.28 |
Interrupt in Linux kernel - (1) atkbd.c 변경실험 (0) | 2017.12.28 |
Interrupt -(2) 커널영역,인터럽트 종류 (0) | 2017.12.27 |
Interrupt -(1) 인터럽트 (0) | 2017.12.27 |