家電維修班,手機(jī)維修班,電腦維修班,電工班,焊工班,液晶電視維修班,電動(dòng)工具維修班、電動(dòng)車(chē)摩托車(chē)維修班、網(wǎng)絡(luò)營(yíng)銷(xiāo)培訓(xùn)、網(wǎng)站設(shè)計(jì)培訓(xùn)、淘寶培訓(xùn)---全國(guó)招生 家電維修班,手機(jī)維修班,電腦維修班,電工班,焊工班,液晶電視維修班,電動(dòng)工具維修班、電動(dòng)車(chē)摩托車(chē)維修班、網(wǎng)絡(luò)營(yíng)銷(xiāo)培訓(xùn)、網(wǎng)站設(shè)計(jì)培訓(xùn)、淘寶培訓(xùn)---全國(guó)招生

中日欧洲精品视频在线-中日韩在线观看-中日韩一区二区三区-中日韩精品视频在线观看-狂野欧美老黑粗又硬-狂野猛交xxxx吃奶

您的位置:網(wǎng)站首頁(yè) > 電器維修資料網(wǎng) > 正文 >

Linux內(nèi)核的工作原理

★★★★★【文章導(dǎo)讀】:Linux內(nèi)核的工作原理具體內(nèi)容是:牛津字典中對(duì)"kernel"一詞的定義是:"較軟的、通常是一個(gè)堅(jiān)果可食用的部分。"當(dāng)然還有第二種定義:"某個(gè)東西核心或者 重要的部分。"對(duì)linux來(lái)說(shuō),它的kernel無(wú)疑屬于第二種解釋。讓我們來(lái)看看這個(gè)重要的東西是如何工…

來(lái)源: 日期:2013-11-27 21:58:34 人氣:標(biāo)簽:

Linux內(nèi)核的工作原理

    牛津字典中對(duì)"kernel"一詞的定義是:"較軟的、通常是一個(gè)堅(jiān)果可食用的部分。"當(dāng)然還有第二種定義:"某個(gè)東西核心或者 重要的部分。"對(duì)linux來(lái)說(shuō),它的kernel無(wú)疑屬于第二種解釋。讓我們來(lái)看看這個(gè)重要的東西是如何工作的,先從一點(diǎn)理論說(shuō)起。

      廣義地來(lái)說(shuō)kernel就是一個(gè)軟件,它在硬件和運(yùn)行在計(jì)算機(jī)(電腦)上的應(yīng)用程序之間提供了一個(gè)層。嚴(yán)格點(diǎn)從計(jì)算機(jī)(電腦)科學(xué)的角度來(lái)說(shuō),linux中的kernel指的是linus torvalds在90年代初期寫(xiě)的那點(diǎn)代碼。

      所有的你在linux各版本中看到的其他東西--bash shell、kde窗口管理器、web瀏覽器、x服務(wù)器、tux racer以及所有的其他,都不過(guò)是運(yùn)行在linux上的應(yīng)用而已,而不是操作系統(tǒng)自身的一部分。為了給大家一個(gè)更加直觀的感覺(jué),我來(lái)舉個(gè)例子,比如rhel5的安裝大概要占據(jù)2.5gb的硬盤(pán)(硬碟hdd存儲(chǔ)媒介之一)空間(具體多大當(dāng)然視你的選擇安裝來(lái)定),在這其中,kernel以及它的各個(gè)模塊組件,只有47mb,所占比例約為2%。

      那么kernel到底是如何工作的呢?如下面的圖表。kernel通過(guò)許多的進(jìn)入端口也就是我們從技術(shù)角度所說(shuō)的系統(tǒng)調(diào)用,來(lái)使得運(yùn)行在它上面的應(yīng)用程序可用。kernel使用的系統(tǒng)調(diào)用比如"讀"和"寫(xiě)"來(lái)提供你硬件的抽象(abstraction)。



      從程序員的視角來(lái)看,這些看起來(lái)只是普通的功能調(diào)用,然而實(shí)際上系統(tǒng)調(diào)用在處理器的操作模式上,從用戶(hù)空間到kernel空間有一個(gè)明顯的切換。同時(shí),系統(tǒng)調(diào)用提供了一個(gè)"linux虛擬機(jī)",可以被認(rèn)為是對(duì)硬件的抽象。

      kernel提供的更明顯的抽象之一是文件系統(tǒng)。舉例來(lái)說(shuō),這里有一段短的程序是用c寫(xiě)的,它打開(kāi)了一個(gè)文件并將內(nèi)容拷貝到標(biāo)準(zhǔn)的輸出:

#include <fcntl.h>
int main()
{
    int fd, count; char buf[1000];
    fd=open("mydata", o_rdonly);
    count = read(fd, buf, 1000);
    write(1, buf, count);
    close(fd);
}

    在這里,你可以看到四個(gè)系統(tǒng)調(diào)用的例子:打開(kāi)、讀、寫(xiě)和關(guān)閉。不談這段程序語(yǔ)法的細(xì)節(jié),重點(diǎn)是:通過(guò)這些系統(tǒng)調(diào)用linux kernel提供了一個(gè)文件的"錯(cuò)覺(jué)",而實(shí)際上它不過(guò)是一堆數(shù)據(jù)有了個(gè)名字,這樣一來(lái)你就不必去與硬件底層的堆棧、分區(qū)、頭和指針、分區(qū)等交涉了,而是直接以例子中的方式與硬件"交流",這也就是我們所說(shuō)的抽象(abstraction),將底層的東西以更易懂的方式表達(dá)出來(lái)。

      系統(tǒng)文件是kernel提供的較為明顯的一種抽象。還有一些特性不是這么的明顯,比如進(jìn)程調(diào)度。任何一個(gè)時(shí)間,都可能有好幾個(gè)進(jìn)程或者程序等待著運(yùn)行。kernel的時(shí)間調(diào)度給每個(gè)進(jìn)程分配cpu時(shí)間,所以就一段時(shí)間內(nèi)來(lái)說(shuō),我們會(huì)有種錯(cuò)覺(jué):電腦(計(jì)算機(jī)(電腦))同一時(shí)間運(yùn)行好幾個(gè)程序。這是另外一個(gè)c程序:

#include <stdlib.h>
main()
{
  if (fork()) {
    write(1, "parent\n", 7);
    wait(0);
    exit(0);
  }
  else {
    write(1, "child\n", 6);
    exit(0);
  }
}
   
      在這個(gè)程序中創(chuàng)建了一個(gè)新進(jìn)程,而原來(lái)的進(jìn)程(父進(jìn)程)和新進(jìn)程(子進(jìn)程)都編寫(xiě)了標(biāo)準(zhǔn)輸出然后結(jié)束。注意系統(tǒng)調(diào)用fork(), exit() 以及 wait()執(zhí)行程序的創(chuàng)建、結(jié)束和各自同步。這是進(jìn)程管理和調(diào)度中 典型的簡(jiǎn)單調(diào)用。

      kernel還有一個(gè)更加不易見(jiàn)到的功能,連程序員都不易察覺(jué),那就是存儲(chǔ)管理。每個(gè)程序運(yùn)行得都好像它有個(gè)自己的地址空間來(lái)調(diào)用一樣,實(shí)際上它跟其他進(jìn)程一樣共享計(jì)算機(jī)(電腦)的物理存儲(chǔ),如果系統(tǒng)運(yùn)行的存儲(chǔ)過(guò)低,它的地址空間甚至?xí)淮疟P(pán)的交互區(qū)暫時(shí)寄用。存儲(chǔ)管理的另外一個(gè)方面是防止一個(gè)進(jìn)程訪問(wèn)其他進(jìn)程的地址空間--對(duì)于多進(jìn)程操作系統(tǒng)來(lái)說(shuō)這是很必要的一個(gè)防范措施。

      kernel同樣還配置網(wǎng)絡(luò)鏈接協(xié)議比如ip、tcp和udp等,它們?cè)诰W(wǎng)絡(luò)上提供機(jī)器對(duì)機(jī)器(machine-to-machine)和進(jìn)程對(duì)進(jìn)程(process-to-process)的通信。這里又會(huì)造成一種假象,即tcp在兩個(gè)進(jìn)程之間提供了一個(gè)固定連接--就好像連接兩個(gè)電話的銅線一樣,實(shí)際中卻并沒(méi)有固定的連接,特殊的引用協(xié)議比如ftp、dns和http是通過(guò)用戶(hù)級(jí)程序來(lái)實(shí)施的,而并非kernel的一部分。

      linux(像之前的unix)在安全方面口碑很好,這是因?yàn)閗ernel跟蹤記錄了每個(gè)運(yùn)行進(jìn)程的user id和group id,每次當(dāng)一個(gè)應(yīng)用企圖訪問(wèn)資源(比如打開(kāi)一個(gè)文件來(lái)寫(xiě)入)的時(shí)候,kernel就會(huì)核對(duì)文件上的訪問(wèn)許可然后做出允許/禁止的命令。這種訪問(wèn)控制模式 終對(duì)整個(gè)linux系統(tǒng)的安全作用很大。

      kernel還提供了一大套模塊的集合,其功能包括如何處理與硬件設(shè)備交流的諸多細(xì)節(jié)、如何從磁盤(pán)讀取一個(gè)分區(qū)、如果從網(wǎng)絡(luò)接口卡獲取數(shù)據(jù)包等。有時(shí)我們稱(chēng)這些為設(shè)備驅(qū)動(dòng)。

      模塊化的kernel

      現(xiàn)在我們隊(duì)kernel是做什么的已經(jīng)有了一些了解,讓我們?cè)賮?lái)簡(jiǎn)單看下它的物理組成。早期版本的linux kernel是整體式的,也就是說(shuō)所有的部件都靜態(tài)地連接成一個(gè)(很大的)執(zhí)行文件。

相比較而言,現(xiàn)在的linux kernel是模塊化的:許多功能包含在模塊內(nèi),然后動(dòng)態(tài)地載入kernel中。這使得kernel的內(nèi)核很小,而且在運(yùn)行kernel時(shí)可以不必reboot就能載入和替代模塊。

kernel的內(nèi)核在boot time時(shí)從位于/boot 目錄的一個(gè)文件加載進(jìn)存儲(chǔ)中,通常這個(gè)/boot 目錄會(huì)被叫做kernelversion,kernelversion與kernel版本有關(guān)。(如果你想知道你的kernel版本是什么,運(yùn)行命令行顯示系統(tǒng)信息-r。)kernel的模塊位于目錄/lib/modules/kernelversion之下,所有的組件都會(huì)在kernel安裝時(shí)被拷貝。

管理模塊

大部分情況下,linux管理它的模塊不需要你的幫忙,但是如果必要的時(shí)候有命令行可以來(lái)手動(dòng)檢查和管理模塊。比如,為了查清楚當(dāng)前到底哪個(gè)模塊在載入kernel。這里有一個(gè)輸出的例子:

# lsmod
pcspkr              4224  0
hci_usb            18204  2
psmouse            38920  0
bluetooth          55908  7 rfcomm,l2cap,hci_usb
yenta_socket      27532  5
rsrc_nonstatic    14080  1 yenta_socket
isofs              36284  0

輸出的內(nèi)容包括:模塊的名字、大小、使用次數(shù)和依賴(lài)于它的模塊列表。使用次數(shù)對(duì)防止卸載當(dāng)前活躍的模塊非常總要。linux只允許使用次數(shù)為零的模塊被移除。

你可以使用modprobe來(lái)手動(dòng)加載和卸載模塊,(還有兩個(gè)命令行叫做insmod和rmmod,但modprobe更易于使用因?yàn)樗詣?dòng)移除了模塊依賴(lài))。比如lsmod的輸出在我們的電腦(計(jì)算機(jī)(電腦))上顯示了一個(gè)名叫isofs的卸載模塊,它的使用次數(shù)是零而且沒(méi)有依賴(lài)模塊,(isofs是一個(gè)模塊,它支持cd上使用的iso系統(tǒng)文件格式)這種情況下,kernel會(huì)允許我們卸載模塊:

# modprobe -r isofs

現(xiàn)在,isofs不再顯示在ismod的輸出中,kernel由此節(jié)省了36,284字節(jié)的存儲(chǔ)。如果你放入cd并且讓它自動(dòng)安裝,kernel將自動(dòng)重新載入isofs模塊,而且isofs的使用次數(shù)增加到1次。如果這時(shí)候你還試圖移除模塊,就不會(huì)成功了因?yàn)樗诒皇褂茫?br />
# modprobe -r isofs
fatal: module isofs is in use.
   
lsmod只是列出了當(dāng)前被載入的模塊,modprobe則將列出所有可用的模塊,它實(shí)際上輸出了/lib/modules/kernelversion目錄下所有的模塊,名單會(huì)很長(zhǎng)!

實(shí)際上,使用modprobe來(lái)手動(dòng)加載一個(gè)模塊并不常見(jiàn),但確實(shí)可以通過(guò)modprobe命令行來(lái)對(duì)模塊設(shè)置參數(shù),例如:

# modprobe usbcore blinkenlights=1

我們并不是在創(chuàng)建blinkenlights,而是usbcore模塊的實(shí)參數(shù)。

那么如何知道一個(gè)模塊會(huì)接受什么參數(shù)呢?一個(gè)比較好的方法是使用modinfo命令,它列出了關(guān)于模塊的種種信息。這里有一個(gè)關(guān)于模塊snd-hda-intel的例子

# modinfo snd-hda-intel
filename:      /lib/modules/2.6.20-16-generic/kernel/sound/pci/hda/snd-hda-intel.ko
description:    intel hda driver
license:        gpl
srcversion:    a3552b2df3a932d88ffc00c
alias:          pci:v000010ded0000055dsv*sd*bc*sc*i*
alias:          pci:v000010ded0000055csv*sd*bc*sc*i*
depends:        snd-pcm,snd-page-alloc,snd-hda-codec,snd
vermagic:      2.6.20-16-generic smp mod_unload 586
parm:          index:index value for intel hd audio interface. (int)
parm:          id:id string for intel hd audio interface. (charp)
parm:          model:use the given board model. (charp)
parm:          position_fix:fix dma pointer (0 = auto, 1 = none, 2 = posbuf, 3 = fifo size). (int)
parm:          probe_mask:bitmask to probe codecs (default = -1). (int)
parm:          single_cmd:use single command to communicate with codecs (for debugging only). (bool)
parm:          enable_msi:enable message signaled interrupt (msi) (int)
parm:          enable:bool

對(duì)我們來(lái)說(shuō)比較有興趣的以"parm"開(kāi)頭的那些部分:顯示了模塊所接受的參數(shù)。這些描述都比較簡(jiǎn)明,如果想要更多的信息,那就安裝kernel的源代碼,在類(lèi)似于/usr/src/kernelversion/documentation的目錄下你會(huì)找到。

里面會(huì)有一些有趣的東西,比如文件/usr/src/kernelversion/documentation/sound/alsa/alsa-configuration.txt描述的是被許多alsa聲音模塊承認(rèn)的參數(shù);/usr/src/kernelversion/documentation/kernel-parameters.txt這個(gè)文件也很有用。

前幾天在ubuntu論壇有一個(gè)例子,說(shuō)的是如何將參數(shù)傳遞到一個(gè)模塊(詳見(jiàn)https://help.ubuntu.com/community/hdaintelsoundhowto)。實(shí)際上問(wèn)題的關(guān)鍵是snd-hda-intel參數(shù)在正確驅(qū)動(dòng)聲音硬件時(shí)需要一點(diǎn)操作,而且在boot time加載時(shí)會(huì)中止。解決方法的一部分是將probe_mask=1選項(xiàng)賦給模塊,如果你是手動(dòng)加載模塊,你需要輸入:

# modprobe snd-hda-intel probe_mask=1

更有可能,你在文件/etc/modprobe.conf中放置這樣類(lèi)似的一行:options snd-hda-intel probe_mask=1

這"告訴"modprobe每次在加載snd-hda-intel模塊時(shí)包含probe_mask=1選項(xiàng)。現(xiàn)在的有些linux版本將這一信息分離進(jìn)/etc/modprobe.d下的不同文件中了,而不是放入modprobe.conf中。

/proc系統(tǒng)文件

linux kernel同樣通過(guò)/proc系統(tǒng)文件來(lái)展示了許多細(xì)節(jié)。為了說(shuō)明/proc,我們首先需要擴(kuò)展我們對(duì)于文件的理解。除了認(rèn)為文件就是存儲(chǔ)在硬盤(pán)(硬碟hdd存儲(chǔ)媒介之一)或者cd或者存儲(chǔ)空間上的持久信息之外,我們還應(yīng)當(dāng)把它理解為任何可以通過(guò)傳統(tǒng)系統(tǒng)調(diào)用如:打開(kāi)、讀、寫(xiě)、關(guān)閉等訪問(wèn)的信息,當(dāng)然它也可以被常見(jiàn)的程序訪問(wèn)。

/proc之下的"文件"完全是kernel虛擬的一個(gè)部分,給我們一個(gè)視角可以看到kernel內(nèi)部的數(shù)據(jù)結(jié)構(gòu)。實(shí)際上,許多l(xiāng)inux的報(bào)告工具均能夠很好地呈現(xiàn)在/proc下的文件中尋到的格式化版本的信息。比如,一列/proc/modules將展示一列當(dāng)前加載的模塊。

同樣的,/proc/meminfo提供了關(guān)于虛擬存儲(chǔ)系統(tǒng)當(dāng)前狀態(tài)的更多細(xì)節(jié)信息,而類(lèi)如vmstat的工具則是以一種更加可理解的方式提供了相同的一些信息;/proc/net/arp顯示了系統(tǒng)arp cache的當(dāng)前內(nèi)容,從命令行來(lái)說(shuō),arp -a顯示的也是相同的信息。

尤其有意思的是/proc/sys下的"文件"。/proc/sys/net/ipv4/ip_forward下的設(shè)置告訴我們kernel是否將轉(zhuǎn)發(fā)ip數(shù)據(jù)包,也就是說(shuō)是否扮演網(wǎng)關(guān)的作用。現(xiàn)在,kernel告訴我們這是關(guān)閉的:

# cat /proc/sys/net/ipv4/ip_forward
0

當(dāng)你發(fā)現(xiàn)你可以對(duì)這些文件寫(xiě)入的時(shí)候,你會(huì)覺(jué)得更加有意思。繼續(xù)舉例來(lái)說(shuō):

# echo 1 > /proc/sys/net/ipv4/ip_forward

將在運(yùn)行的kernel中打開(kāi)ip 轉(zhuǎn)發(fā)(ip forwarding)

除了使用cat和echo來(lái)檢查和更正/proc/sys下的設(shè)置以外,你也可以使用sysctl命令:

# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

這等同于:
# cat /proc/sys/net/ipv4/ip_forward
0

也等同于:
# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

還等同于:
# echo 1 > /proc/sys/net/ipv4/ip_forward
   

需要注意的是,以這種方式你所做的設(shè)置改變只能影響當(dāng)前運(yùn)行的kernel的,當(dāng)reboot的時(shí)候就不再有效。如果想讓設(shè)置永久有效,將它們放置在/etc/sysctl.conf文件中。在boot time時(shí),sysctl將自動(dòng)重新確定它在此文件下找到的任何設(shè)置。

/etc/sysctl.conf下的代碼行大概是這樣的:net.ipv4.ip_forward=1

性能調(diào)優(yōu)(performance tuning)

有這樣一個(gè)說(shuō)法:/proc/sys下可寫(xiě)入的參數(shù)孕育了整個(gè)linux性能調(diào)優(yōu)的亞文化。我個(gè)人覺(jué)得這種說(shuō)法有點(diǎn)過(guò)夸,但這里會(huì)有幾個(gè)你確實(shí)很想一試的例子:oracle 10g的安裝說(shuō)明(www.oracle.com/technology/obe/obe10gdb/install/linuxpreinst/linuxpreinst.htm)要求你設(shè)置一組參數(shù),包括:kernel.shmmax=2147483648 這將公用存儲(chǔ)器的大小設(shè)置為2gb。(公用存儲(chǔ)器是處理期內(nèi)的通信機(jī)制,允許存儲(chǔ)單元在多個(gè)進(jìn)程的地址空間內(nèi)同時(shí)可用)

ibm 'redpaper'在linux性能和調(diào)優(yōu)方面的說(shuō)明(www.redbooks.ibm.com/abstracts/redp4285.html)在調(diào)教/proc/sys下的參數(shù)方面給出了不少建議,包括:vm.swappiness=100 這個(gè)參數(shù)控制著存儲(chǔ)頁(yè)如何被交換到磁盤(pán)。

一些參數(shù)可以被設(shè)置從而提高安全性,如net.ipv4.icmp_echo_ignore_broadcasts=1 它"告訴"kernel不必響應(yīng)icmp請(qǐng)求,從而使得你的網(wǎng)絡(luò)免受類(lèi)如smurf攻擊之類(lèi)的拒絕服務(wù)器(server網(wǎng)絡(luò)資源下載)(denial-of-service)型攻擊。
net.ipv4.conf.all.rp_filter=1 則是"告訴"kernel加強(qiáng)入站過(guò)濾(ingress filtering)和出站過(guò)濾(egress filtering)
【看看這篇文章在百度的收錄情況】

相關(guān)文章

聯(lián)系方式

  • 0731-85579057 , 13308461099
  • 點(diǎn)擊這里給我發(fā)消息點(diǎn)擊這里給我發(fā)消息點(diǎn)擊這里給我發(fā)消息
網(wǎng)站欄目導(dǎo)航: 培訓(xùn)課程 手機(jī)硬件 手機(jī)軟件 綜合維修 學(xué)校資訊 考證指南 就業(yè)導(dǎo)航 招生指南 教學(xué)管理 入學(xué)須知 學(xué)校圖片 教學(xué)大綱 師資力量 學(xué)生感言 學(xué)校概況 教學(xué)實(shí)景 手機(jī)維修培訓(xùn)資訊 電腦維修培訓(xùn) 維修間故事 手機(jī)維修培訓(xùn) 液晶電視維修培訓(xùn) 家電維修資料網(wǎng) 電器維修資料網(wǎng) 招生地區(qū) 刷機(jī)教程 家電維修 手機(jī)技巧 老版網(wǎng)站 招生平臺(tái)網(wǎng)絡(luò)工程
友情鏈接: 監(jiān)控安裝培訓(xùn) 電動(dòng)工具維修 家電維修學(xué)校 電工培訓(xùn)學(xué)校 液晶電視維修 焊工培訓(xùn)學(xué)校 電工焊工學(xué)校 電腦維修學(xué)校 家電維修培訓(xùn) 電腦維修培訓(xùn) 家裝電工培訓(xùn)網(wǎng)絡(luò)安裝維護(hù) 主板維修 液晶顯示器 筆記本電腦維修 電腦組裝維護(hù) 電腦硬件維修 電腦維修 電工考證 電工證 裝修電工 水電工 維修電工 電工 焊接技術(shù) 電焊工 焊工 電動(dòng)設(shè)備維修 電動(dòng)工具維修 制冷維修 空調(diào)維修 冰箱維修  更多>>
陽(yáng)光-手機(jī)維修教育品牌學(xué)校
點(diǎn)擊這里給我發(fā)消息 點(diǎn)擊這里給我發(fā)消息 點(diǎn)擊這里給我發(fā)消息
電工培訓(xùn)學(xué)校 電動(dòng)車(chē)維修學(xué)校 摩托車(chē)維修學(xué)校 摩托車(chē)維修培訓(xùn) 手機(jī)維修培訓(xùn) 家電維修培訓(xùn) 電腦維修培訓(xùn) 電動(dòng)工具維修培訓(xùn) 液晶電視維修培訓(xùn) 安防監(jiān)控培訓(xùn) 空調(diào)維修培訓(xùn) 網(wǎng)絡(luò)營(yíng)銷(xiāo)培訓(xùn) 網(wǎng)站設(shè)計(jì)培訓(xùn) 淘寶網(wǎng)店培訓(xùn) 電器維修培訓(xùn) 家電維修學(xué)校 電工培訓(xùn) 焊工培訓(xùn) 電工學(xué)校 電工培訓(xùn)學(xué)校 電動(dòng)車(chē)維修學(xué)校 摩托車(chē)維修學(xué)校 摩托車(chē)維修培訓(xùn) 手機(jī)維修培訓(xùn) 家電維修培訓(xùn) 電腦維修培訓(xùn) 電動(dòng)工具維修培訓(xùn) 液晶電視維修培訓(xùn) 安防監(jiān)控培訓(xùn) 空調(diào)維修培訓(xùn) 網(wǎng)絡(luò)營(yíng)銷(xiāo)培訓(xùn) 網(wǎng)站設(shè)計(jì)培訓(xùn) 淘寶網(wǎng)店培訓(xùn) 電器維修培訓(xùn) 家電維修學(xué)校 電工培訓(xùn) 焊工培訓(xùn) 電工學(xué)校 電工培訓(xùn)學(xué)校 電動(dòng)車(chē)維修學(xué)校 摩托車(chē)維修學(xué)校 摩托車(chē)維修培訓(xùn) 手機(jī)維修培訓(xùn) 家電維修培訓(xùn) 電腦維修培訓(xùn) 電動(dòng)工具維修培訓(xùn) 液晶電視維修培訓(xùn) 安防監(jiān)控培訓(xùn) 空調(diào)維修培訓(xùn) 網(wǎng)絡(luò)營(yíng)銷(xiāo)培訓(xùn) 網(wǎng)站設(shè)計(jì)培訓(xùn) 淘寶網(wǎng)店培訓(xùn) 電器維修培訓(xùn) 家電維修學(xué)校 電工培訓(xùn) 焊工培訓(xùn) 電工學(xué)校 電工培訓(xùn)學(xué)校 電動(dòng)車(chē)維修學(xué)校 摩托車(chē)維修學(xué)校 摩托車(chē)維修培訓(xùn) 手機(jī)維修培訓(xùn) 家電維修培訓(xùn) 電腦維修培訓(xùn) 電動(dòng)工具維修培訓(xùn) 液晶電視維修培訓(xùn) 安防監(jiān)控培訓(xùn) 空調(diào)維修培訓(xùn) 網(wǎng)絡(luò)營(yíng)銷(xiāo)培訓(xùn) 網(wǎng)站設(shè)計(jì)培訓(xùn) 淘寶網(wǎng)店培訓(xùn) 電器維修培訓(xùn) 家電維修學(xué)校 電工培訓(xùn) 焊工培訓(xùn) 電工學(xué)校
中山市,固原市,銀川市,玉樹(shù),海東,隴南市,酒泉市,張掖市,天水市,金昌市,蘭州市,榆林市,延安市,渭南市,銅川市,阿里,山南,拉薩市,怒江,文山州,楚雄州,普洱市,昭通市,玉溪市,昆明市,畢節(jié),銅仁,遵義市,貴陽(yáng)市,甘孜州,資陽(yáng)市,達(dá)州市,宜賓市,南充市,遂寧市,綿陽(yáng)市,瀘州市,自貢市,三亞市,崇左市,河池市,玉林市,欽州市,梧州市,柳州市,梅州市,肇慶市,湛江市,佛山市,珠海市,韶關(guān)市,湘西州,懷化市,郴州市,張家界市,邵陽(yáng)市,株洲市,仙桃市,隨州市,荊州市,荊門(mén)市,襄樊市,黃石市,駐馬店市,信陽(yáng)市,南陽(yáng)市,漯河市,中衛(wèi)市,石嘴山市,海西,海南藏州,黃南州,海北,甘南,慶陽(yáng)市,平?jīng)鍪?武威市,白銀市,嘉峪關(guān)市,安康市,漢中市,咸陽(yáng)市,寶雞市,林芝,日喀則,昌都,迪慶,德宏,大理,西雙版納,紅河州,臨滄市,麗江市,保山市,曲靖市,黔東州,黔西州,安順市,六盤(pán)水市,涼山州,阿壩州,雅安市,廣安市,眉山市,內(nèi)江市,廣元市,德陽(yáng)市,攀枝花市,成都市,海口市,來(lái)賓市,百色市,貴港市,北海市,桂林市,南寧市,云浮市,揭陽(yáng)市,潮州市,清遠(yuǎn)市,陽(yáng)江市,汕尾市,惠州市,茂名市,江門(mén)市,汕頭市,深圳市,廣州市,婁底市,永州市,益陽(yáng)市,岳陽(yáng)市,湘潭市,長(zhǎng)沙市,恩施州,黃岡市,孝感市,鄂州市,十堰市,武漢市,周口市,商丘市,三門(mén)峽市,許昌市,焦作市,安陽(yáng)市,鶴壁市,平頂山市,開(kāi)封市,鄭州市,聊城市,濱州市,德州市,萊蕪市,日照市,泰安市,煙臺(tái)市,濰坊市,東營(yíng)市,淄博市,上饒市,濟(jì)南市,撫州市,宜春市,贛州市,新余市,九江市,景德鎮(zhèn)市,寧德市,南平市,泉州市,莆田市,廈門(mén)市,宣城市,亳州市,六安市,宿州市,黃山市,滁州市,安慶市,淮北市,馬鞍山市,蚌埠市,蕪湖市,合肥市,麗水市,舟山市,衢州市,金華市,湖州市,嘉興市,寧波市,宿遷市,鎮(zhèn)江市,鹽城市,連云港市,蘇州市,徐州市,南京市,綏化市,牡丹江市,佳木斯市,大慶市,鶴崗市,哈爾濱市,白城市,白山市,遼源市,吉林市,葫蘆島市,鐵嶺市,盤(pán)錦市,阜新市,錦州市,本溪市,鞍山市,沈陽(yáng)市,錫林郭勒盟,通遼市,烏海市,呂梁市,忻州市,晉中市,晉城市,陽(yáng)泉市,太原市,廊坊市,承德市,保定市,邯鄲市,唐山市,寧夏,甘肅省,西藏,貴州省,重慶市,廣西,湖南省,河南省,江西省,安徽省,江蘇省,黑龍江省,遼寧省,山西省,天津市,四平市,內(nèi)蒙古,吳忠市,果洛,西寧市,定西市,商洛市,西安市,那曲,黔南州,巴中市,樂(lè)山市,賀州市,防城港市,東莞市,河源市,常德市,衡陽(yáng)市,咸寧市,宜昌市,濮陽(yáng)市,新鄉(xiāng)市,洛陽(yáng)市,菏澤市,臨沂市,威海市,濟(jì)寧市,棗莊市,青島市,吉安市,鷹潭市,萍鄉(xiāng)市,南昌市,龍巖市,漳州市,三明市,福州市,池州市,巢湖市,阜陽(yáng)市,銅陵市,淮南市,臺(tái)州市,紹興市,溫州市,杭州市,泰州市,揚(yáng)州市,淮安市,南通市,常州市,無(wú)錫市,大興安嶺,黑河市,七臺(tái)河市,伊春市,雙鴨山市,雞西市,齊齊哈爾市,延邊,松原市,通化市,長(zhǎng)春市,朝陽(yáng)市,遼陽(yáng)市,營(yíng)口市,丹東市,撫順市,大連市,阿拉善盟,興安盟,烏蘭察布市,巴彥淖爾市,呼倫貝爾市,鄂爾多斯市,赤峰市,包頭市,呼和浩特市,臨汾市,運(yùn)城市,朔州市,長(zhǎng)治市,大同市,衡水市,滄州市,張家口市,邢臺(tái)市,秦皇島市,石家莊市,青海省,陜西省,云南省,四川省,海南省,廣東省,湖北省,山東省,福建省,浙江省,上海市,吉林省,河北省,北京市 主站蜘蛛池模板: 动漫人物差差差30分钟免费看 | 国产毛片女人18水多 | 玩高中女同桌肉色短丝袜脚文 | 国产高清视频a在线大全 | 爽爽影院线观看免费 | 扒开屁股眼往里面夹东西 | 亚洲高清国产拍精品5g | 高清国语自产拍免费 | 午夜影院和视费x看 | 777米奇色狠狠俺去啦 | 国产亚洲精品久久久久久国 | 月夜直播视频免费观看 | 在线免费观看成年人视频 | 护士WC女子撒尿 | 久久精品亚洲牛牛影视 | 啪啪漫画无遮挡全彩h同人 啪啪激情婷婷久久婷婷色五月 | 99热这里只就有精品22 | 女教师公车痴汉在线播放 | my pico未删减在线观看 | 国产亚洲精品久久久久 | 百度影音第四色 | 我半夜摸妺妺的奶C了她软件 | 国产婷婷午夜精品无码A片 国产婷婷色综合AV蜜臀AV | 国产又色又爽又刺激在线播放 | 老师机影院 | 色色色999| 浴室里强摁做开腿呻吟的漫画男男 | 午夜福利免费视频921000电影 | 亚洲成色WWW久久网站夜月 | 国产啪视频在线播放观看 | 国产一区二区内射最近更新 | 在线亚洲国产日韩欧洲专区 | 欧美极限变态扩张video | 国产精品美女久久久久AV超清 | 国产成人久久AV免费看澳门 | 国产亚洲精品久久无亚洲 | 美女被爆羞羞天美传媒 | 强行撕开衣服捏胸黄文 | 性色无码AV久久蜜臀 | 久久99re6国产在线播放 | 久久不射电影网 |