kernel_init은 처음 부팅될때 돌아가는 함수

init/main.c에찾아볼수있다.



int switch=0;
void kernel_init(){
    ......
    do_basic_setup();
    my_atk_func();//
    ......
}

my_atk_func에는 무한루프로 1초씩 msleep를하면서switch가 on이됬는지 검사


에서 키보드입력이 들어오면 switch를 on시키도록
if( code==19)
{
    switch=1;
}


결과





설명:
커널초기화중일때 무한루프상태로 msleep(1) 씩주기로 프로세스가 강제로 스위칭되어 바뀌며 switch 1인지 검사
->계속 검사하던도중 내가 키보드 r을 입력하면 키보드인풋으로 키보드 인터럽트가 날라옴 cpu는 하는일 중단하고 먼저 인터럽트처리 
->그 인터럽트 처리함수로가서 실행되는데 이때  값이 내가 설정해둔 값을때switch  0에서 1로바꿈
->인터럽트처리 끝나서 우선스케줄링된 프로세스부터 실행(인터럽트전 중단된프로세스 일수도있고 알고리즘에따라 다름)
->아까중단된 프로세스가 스케줄되서 kernerinit안에 my_atk_func 함수는 if문을 탈출하게 된다.



블로그 이미지

pringlee

하드코어보단 캐주얼!

,