zoukankan      html  css  js  c++  java
  • kernel_thread简析

    1.3.100
    static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
    {
        long retval;

        __asm__ __volatile__(
            "movl %%esp,%%esi "
            "int $0x80 "        /* Linux/i386 system call */
            "cmpl %%esp,%%esi "    /* child or parent? */
            "je 1f "        /* parent - jump */
            "pushl %3 "        /* push argument */
            "call *%4 "        /* call fn */
            "movl %2,%0 "    /* exit */
            "int $0x80 "
            "1: "
            :"=a" (retval)
            :"0" (__NR_clone), "i" (__NR_exit),
             "r" (arg), "r" (fn),
             "b" (flags | CLONE_VM)
            :"si");
        return retval;
    }

    1. 执行系统调用 __NR_clone
    2. 父进程走1f,子进程调fn
    3. fn完成后执行__NR_exit系统调用
    4.注:%eax=__NR_clone, %ebx是参数,flags带上了CLONE_VM

  • 相关阅读:
    课时作业
    第八周学习进度
    第一次nabcd编写
    第七周学习进度
    第六天进度
    第五天进度
    第四天进度
    第一篇
    1.Windows 系统下安装 IntelliJ IDEA
    Java开发环境(含IDE)的搭建
  • 原文地址:https://www.cnblogs.com/mull/p/7997523.html
Copyright © 2011-2022 走看看