日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

FreeBSD的Loader和內(nèi)核初始化( 五 )


第一個(gè)用戶進(jìn)程是init,由sysinit對象init建立:sys/kern/init_main.c:
static void
create_init(const void *udata __unused)
{
int error;
int s;
s = splhigh();
error = fork1(&proc0, RFFDG | RFPROC, &initproc);
if (error)
panic("cannot fork init: %dn", error);
initproc->p_flag |= P_INMEM | P_SYSTEM;
CPU_set_fork_handler(initproc, start_init, NULL);
remrunqueue(initproc);
splx(s);
}
SYSINIT(init,SI_SUB_CREATE_INIT, SI_ORDER_FIRST, create_init, NULL)
create_init()通過調(diào)用fork1()分配一個(gè)新的進(jìn)程,但并不將其標(biāo)記為可運(yùn)行 。
當(dāng)這個(gè)新進(jìn)程被調(diào)度器調(diào)度執(zhí)行時(shí),start_init()將會(huì)被調(diào)用 。
那個(gè)函數(shù)定義在init_main.c中 。它嘗試裝載并執(zhí)行二進(jìn)制代碼init,
先嘗試/sbin/init,然后是/sbin/oinit,/sbin/init.bak,
最后是/stand/sysinstall:sys/kern/init_main.c:
【FreeBSD的Loader和內(nèi)核初始化】static char init_path[MAXPATHLEN] =
#ifdef INIT_PATH
__XSTRING(INIT_PATH);
#else
"/sbin/init:/sbin/oinit:/sbin/init.bak:/stand/sysinstall";
#endif

推薦閱讀