中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

商洛免費(fèi)做網(wǎng)站百度廣告聯(lián)系方式

商洛免費(fèi)做網(wǎng)站,百度廣告聯(lián)系方式,山西教育平臺(tái)網(wǎng)站建設(shè),上海 裝修公司推薦接前一篇文章:QEMU源碼全解析34 —— Machine(4) 本文內(nèi)容參考: 《趣談Linux操作系統(tǒng)》 —— 劉超,極客時(shí)間 《QEMU/KVM》源碼解析與應(yīng)用 —— 李強(qiáng),機(jī)械工業(yè)出版社 特此致謝! 上回書(shū)說(shuō)到有3…

接前一篇文章:QEMU源碼全解析34 —— Machine(4)

本文內(nèi)容參考:

《趣談Linux操作系統(tǒng)》 —— 劉超,極客時(shí)間

《QEMU/KVM》源碼解析與應(yīng)用 —— 李強(qiáng),機(jī)械工業(yè)出版社

特此致謝!

上回書(shū)說(shuō)到有3個(gè)函數(shù)需要弄清楚:(1)object_class_get_list_tramp;(2)object_foreach_tramp;(3)type_table_get。本回對(duì)于這3個(gè)函數(shù)進(jìn)行解析。

為了便于理解,再次貼出qom/object.c中的object_class_get_list函數(shù)以及其調(diào)用的同文件中的object_class_foreach函數(shù),代碼分別如下:

GSList *object_class_get_list(const char *implements_type,bool include_abstract)
{GSList *list = NULL;object_class_foreach(object_class_get_list_tramp,implements_type, include_abstract, &list);return list;
}
void object_class_foreach(void (*fn)(ObjectClass *klass, void *opaque),const char *implements_type, bool include_abstract,void *opaque)
{OCFData data = { fn, implements_type, include_abstract, opaque };enumerating_types = true;g_hash_table_foreach(type_table_get(), object_class_foreach_tramp, &data);enumerating_types = false;
}

先來(lái)看第1個(gè)函數(shù)type_table_get,也在qom/object.c中,代碼如下:

static GHashTable *type_table_get(void)
{static GHashTable *type_table;if (type_table == NULL) {type_table = g_hash_table_new(g_str_hash, g_str_equal);}return type_table;
}

在全局表type_table_get()即返回的type_table中,對(duì)于每一項(xiàng)TypeImpl,都執(zhí)行object_class_foreach_tramp。

再來(lái)看第2個(gè)函數(shù)object_class_foreach_tramp,從名字上就能看出來(lái),它也是在qom/object.c中。代碼如下:

static void object_class_foreach_tramp(gpointer key, gpointer value,gpointer opaque)
{OCFData *data = opaque;TypeImpl *type = value;ObjectClass *k;type_initialize(type);k = type->class;if (!data->include_abstract && type->abstract) {return;}if (data->implements_type && !object_class_dynamic_cast(k, data->implements_type)) {return;}data->fn(k, data->opaque);
}

object_class_foreach_tramp函數(shù)的參數(shù)OCFData *data實(shí)際指向了object_class_foreach函數(shù)中的data,即OCFData data = { fn, implements_type, include_abstract, opaque }。代入上下文的實(shí)際值GSList *machines = object_class_get_list(TYPE_MACHINE, false),最終是:OCFData data = { fn, TYPE_MACHINE, false, &list?}。

我們?cè)谇拔臅?shū)講QOM的時(shí)候詳細(xì)解析過(guò)type_initialize函數(shù),其作用是類的初始化,這里當(dāng)然是對(duì)TYPE_MACHINE即"machine"類的初始化。type_initialize函數(shù)中會(huì)調(diào)用class_init函數(shù)將紙面上的class即TypeImpl轉(zhuǎn)變?yōu)镺bjectClass。前文書(shū)也提到過(guò),ObjectClass是所有Class類的祖先,而這里的MachineClass是其子類。

函數(shù)最后的data->fn(k, data->opaque)代入實(shí)際值為object_class_get_list_tramp(type->class, &list)。

最后看第3個(gè)函數(shù)object_class_get_list_tramp,其也在qom/object.c中,代碼如下:

static void object_class_get_list_tramp(ObjectClass *klass, void *opaque)
{GSList **list = opaque;*list = g_slist_prepend(*list, klass);
}

在命令行中傳入"-machine xx-xxx-xxx"也好,不指定相關(guān)值而使用默認(rèn)值也罷,最終都能夠找到之前已注冊(cè)過(guò)的TypeImpl,并調(diào)用它的class_init函數(shù)。因而pc_machine_##suffix##class_init即“.class_init = pc_machine_v7_1_class_init”會(huì)被調(diào)用。再次給出相關(guān)代碼,如下:

static void pc_init_v7_1(MachineState *machine)
{void (*compat)(MachineState *m) = (NULL);if (compat) {compat(machine);}pc_init1(machine, TYPE_I440FX_PCI_HOST_BRIDGE, \TYPE_I440FX_PCI_DEVICE);
}static void pc_machine_v7_1_class_init(ObjectClass *oc, void *data)
{MachineClass *mc = MACHINE_CLASS(oc);pc_i440fx_7_1_machine_options(mc);mc->init = pc_init_v7_1;
}
static const TypeInfo pc_machine_type_v7_1 = {.name       = "pc-i440fx-7.1" TYPE_MACHINE_SUFFIX,.parent     = TYPE_PC_MACHINE,.class_init = pc_machine_v7_1_class_init,
};
static void pc_machine_init_v7_1(void)
{type_register(&pc_machine_type_v7_1);
}

在pc_machine_##suffix##class_init即pc_machine_v7_1_class_init函數(shù)中,pc_i440fx_7_1_machine_options函數(shù)才真正被調(diào)用以初始化MachineClass,并將MachineClass的init函數(shù)設(shè)置為pc_init##suffix即pc_init_v7_1。也即,當(dāng)select_machine執(zhí)行完畢后,就有一個(gè)MachineClass了。

pc_i440fx_7_1_machine_options函數(shù)在hw/i386/pc_piix.c中,代碼如下:

static void pc_i440fx_7_1_machine_options(MachineClass *m)
{PCMachineClass *pcmc = PC_MACHINE_CLASS(m);pc_i440fx_machine_options(m);m->alias = "pc";m->is_default = true;pcmc->default_cpu_version = 1;pcmc->legacy_no_rng_seed = true;
}

pc_i440fx_machine_options函數(shù)就在上邊,代碼如下:

static void pc_i440fx_machine_options(MachineClass *m)
{PCMachineClass *pcmc = PC_MACHINE_CLASS(m);pcmc->default_nic_model = "e1000";pcmc->pci_root_uid = 0;m->family = "pc_piix";m->desc = "Standard PC (i440FX + PIIX, 1996)";m->default_machine_opts = "firmware=bios-256k.bin";m->default_display = "std";machine_class_allow_dynamic_sysbus_dev(m, TYPE_RAMFB_DEVICE);machine_class_allow_dynamic_sysbus_dev(m, TYPE_VMBUS_BRIDGE);
}

本回內(nèi)容較多,需要認(rèn)真結(jié)合前文反復(fù)理解,也算作一個(gè)對(duì)前文的復(fù)習(xí)回顧。介紹完了這3個(gè)函數(shù)后,回到select_machine函數(shù)中,繼續(xù)往下進(jìn)行解析。詳情請(qǐng)看下文。

http://www.risenshineclean.com/news/48835.html

相關(guān)文章:

  • 豐金網(wǎng)絡(luò) 做網(wǎng)站數(shù)字營(yíng)銷網(wǎng)站
  • 怎么做培訓(xùn)班網(wǎng)站石家莊關(guān)鍵詞優(yōu)化軟件
  • 什么是網(wǎng)絡(luò)營(yíng)銷包含哪些內(nèi)容全網(wǎng)營(yíng)銷與seo
  • 清理網(wǎng)站數(shù)據(jù)庫(kù)源碼交易平臺(tái)
  • 南昌那個(gè)公司做網(wǎng)站好今日最新國(guó)際新聞?lì)^條
  • 金昌網(wǎng)站seo合肥seo推廣培訓(xùn)班
  • 蘇州專業(yè)做網(wǎng)站公司有哪些小說(shuō)推廣關(guān)鍵詞怎么弄
  • 做網(wǎng)站需要的照片網(wǎng)站建設(shè)公司哪個(gè)好呀
  • 建站公司 萬(wàn)維科技外鏈交換平臺(tái)
  • 網(wǎng)站設(shè)置密碼百度網(wǎng)站域名注冊(cè)
  • 給企業(yè)做宣傳網(wǎng)站的好處百度上如何發(fā)廣告
  • 開(kāi)發(fā)平臺(tái)游戲名詞解釋搜索引擎優(yōu)化
  • 貴陽(yáng)疫情最新消息今天寧波seo排名優(yōu)化培訓(xùn)
  • 網(wǎng)站建設(shè)公司信息搜索引擎營(yíng)銷的優(yōu)勢(shì)和劣勢(shì)
  • 織夢(mèng)的手機(jī)端網(wǎng)站模板技能培訓(xùn)有哪些科目
  • 破解版下載大全免費(fèi)下載seo優(yōu)化軟件有哪些
  • 湛江免費(fèi)建站哪里有淘寶聯(lián)盟怎么推廣
  • 鄭州網(wǎng)站開(kāi)發(fā)設(shè)計(jì)公司電話個(gè)人如何優(yōu)化網(wǎng)站有哪些方法
  • 如何建立網(wǎng)站做微商企業(yè)網(wǎng)站模板 免費(fèi)
  • 多語(yǔ)種網(wǎng)站建設(shè)手機(jī)版怎么用百度快照
  • 馬鞍山住房和城鄉(xiāng)建設(shè)局網(wǎng)站免費(fèi)發(fā)帖論壇大全
  • 國(guó)內(nèi)ip地址代理免費(fèi)信息流優(yōu)化師簡(jiǎn)歷怎么寫(xiě)
  • 建立網(wǎng)站站點(diǎn)的步驟技術(shù)培訓(xùn)平臺(tái)
  • 做電影網(wǎng)站服務(wù)器需求seo導(dǎo)航站
  • 給網(wǎng)站做接口企業(yè)培訓(xùn)考試系統(tǒng)
  • 廬江有做網(wǎng)站的嗎財(cái)經(jīng)新聞每日財(cái)經(jīng)報(bào)道
  • 連江網(wǎng)站建設(shè)服務(wù)index百度指數(shù)
  • 高德地圖有外資背景嗎優(yōu)化大師官方
  • 煙臺(tái)網(wǎng)站建設(shè).comseo自然搜索優(yōu)化排名
  • 網(wǎng)站域名過(guò)期怎么做重慶網(wǎng)站快速排名提升