[lkml]   [2002]   [Feb]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectQn: kernel_thread()
    In the code of 
    int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
    in arch/i386/kernel/process.c

    as can be seen in the code here, a system call is made by trigerring the 0x80 interrupt.
    this function kernel_thread() is used to launch the init process during booting by
    start_kernel() //in init/main.c
    But at that time, the process 0 which calls kernel_thread is executing in Kernel mode, so why should some process in kernel mode make a system call??

    int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
    long retval, d0;

    __asm__ __volatile__(
    "movl %%esp,%%esi\n\t"
    "int $0x80\n\t" /* Linux/i386 system call */
    "cmpl %%esp,%%esi\n\t" /* child or parent? */
    "je 1f\n\t" /* parent - jump */
    /* Load the argument into eax, and push it. That way, it does
    * not matter whether the called function is compiled with
    * -mregparm or not. */
    "movl %4,%%eax\n\t"
    "pushl %%eax\n\t"
    "call *%5\n\t" /* call fn */
    "movl %3,%0\n\t" /* exit */
    "int $0x80\n"
    :"=&a" (retval), "=&S" (d0)
    :"0" (__NR_clone), "i" (__NR_exit),
    "r" (arg), "r" (fn),
    "b" (flags | CLONE_VM)
    : "memory");
    return retval;

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2005-03-22 13:23    [W:0.026 / U:19.932 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site