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

FreeBSD 內(nèi)核中的SYSINIT分析( 三 )



初始化過(guò)程的調(diào)用被安排在內(nèi)核;/sys/kern/init_main.c的mi_startup函數(shù)中,;mi_startup;是系統(tǒng)啟動(dòng)過(guò)程中,;第一個(gè)被執(zhí)行的C語(yǔ)言函數(shù),;它做的第一件事情就是調(diào)用這些初始化函數(shù),;開(kāi)始時(shí)對(duì)所有的初始化過(guò)程做優(yōu)先級(jí)排序,;然后順序調(diào)用它們.;

void;;;;
mi_startup(void)
{;;;;;;;

register;struct;sysinit;**sipp;;/*;system;initialization*/
register;struct;sysinit;**xipp;;/*;interior;loop;of;sort*/
register;struct;sysinit;*save;;;/*;bubble*/

restart:

這是優(yōu)先級(jí)別排序,;這里沒(méi)有使用那個(gè)在setdef0.c中定義的計(jì)數(shù)器,;而是使用
了setdef1.c中定義的空指針作為結(jié)束標(biāo)志.

/*;;;;;;
*;Perform;a;bubble;sort;of;the;system;initialization;objects;by
*;their;subsystem;(primary;key);and;order;(secondary;key).
*/;;;;;
for;(sipp;=;sysinit;;*sipp;;sipp);{
for;(xipp;=;sipp; ;1;;*xipp;;xipp);{
if;((*sipp)->subsystem;< (*xipp)->subsystem;||
((*sipp)->subsystem;==;(*xipp)->subsystem;&&
(*sipp)->order;<= (*xipp)->order))
continue/*;skip*/
save;=;*sipp;
*sipp;=;*xipp;
*xipp;=;save;
}
}

/*
*;Traverse;the;(now);ordered;list;of;system;initialization;tasks.
*;Perform;each;task,;and;continue;on;to;the;next;task.
*
*;The;last;item;on;the;list;is;expected;to;be;the;scheduler,
*;which;will;not;return.
*/
for;(sipp;=;sysinit;;*sipp;;sipp);{

if;((*sipp)->subsystem;==;SI_SUB_DUMMY)
continue/*;skip;dummy;task(s)*/


這是按順序調(diào)用:
/*
*;Traverse;the;(now);ordered;list;of;system;initialization;tasks.
*;Perform;each;task,;and;continue;on;to;the;next;task.
*
*;The;last;item;on;the;list;is;expected;to;be;the;scheduler,
*;which;will;not;return.
*/
for;(sipp;=;sysinit;;*sipp;;sipp);{

if;((*sipp)->subsystem;==;SI_SUB_DUMMY)
continue/*;skip;dummy;task(s)*/

if;((*sipp)->subsystem;==;SI_SUB_DONE)
continue;

/*;Call;function;*/
(*((*sipp)->func))((*sipp)->udata);

/*;Check;off;the;one;we"re;just;done;*/
(*sipp)->subsystem;=;SI_SUB_DONE;

/*;Check;if;we"ve;installed;more;sysinit;items;via;KLD;*/
if;(newsysinit;!=;NULL);{
if;(sysinit;!=;(struct;sysinit;**)sysinit_set.ls_items)
free(sysinit,;M_TEMP);
sysinit;=;newsysinit;
newsysinit;=;NULL;
goto;restart;
}
}

panic("Shouldn"t;get;here!");
}

推薦閱讀