• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 200, comments - 8, trackbacks - 0, articles - 0
                  引導(dǎo)流程解析共分成三個(gè)部分,分別是linux引導(dǎo)流程、linux運(yùn)行級(jí)別、linux啟動(dòng)服務(wù)管理。下面一個(gè)一個(gè)來(lái):

              上
                 上圖就是系統(tǒng)引導(dǎo)流程的流程圖,我們一個(gè)部分一個(gè)部分來(lái)分別介紹:

                  一、固件:電腦按下電源以后,首先都是加載固件,叫做firmwall,PC上面應(yīng)用最多的就是CMOS/BIOS(CMOS是固化在硬件上的那段程序,BIOS是基于這個(gè)程序的圖形化管理界面),它既不是硬件也不是軟件,它主要的功能是在硬件層面進(jìn)行加電自檢(通常是檢查線連上沒(méi),硬件可以識(shí)別沒(méi))。在SUN的系統(tǒng)里不叫cmos而叫prom,也不叫bios而叫openbooter,所以名字雖然不同但是原理是差不多的,要學(xué)習(xí)這些固件,在購(gòu)買(mǎi)服務(wù)器的時(shí)候,會(huì)有操作手冊(cè),上面會(huì)有各種命令的解釋。固件設(shè)置里面只講一點(diǎn)就是硬件時(shí)鐘和軟件時(shí)鐘的設(shè)置(hwclock與date)。

                  二、自居程序:在進(jìn)行完加電自檢,電腦會(huì)開(kāi)始讀硬盤(pán),首先讀的是MBR(master boot recorder)主引導(dǎo)記錄,主引導(dǎo)記錄在0柱面0磁頭1扇區(qū)的位置。主引導(dǎo)記錄分3個(gè)部分:自居程序bootloader,磁盤(pán)分區(qū)表Partition table,結(jié)束標(biāo)志字magic number。
            自居程序在所有的操作系統(tǒng)里面都有,在linux自居程序中廣泛應(yīng)用的是grub(windows的自居程序在C盤(pán)可以查看到,NTloader)。那自居程序grub有什么用呢?它最重要的作用就是載入內(nèi)核。其實(shí)內(nèi)核在/boot文件夾是可以查看到的,內(nèi)核其實(shí)是一個(gè)可執(zhí)行文件而不是一堆文件。一堆文件的那個(gè)是內(nèi)核的源代碼文件而不是可以使用的內(nèi)核程序。內(nèi)核的版本號(hào)和名字等配置信息可以在/etc/grab.conf配置文件查看,該配置文件具體的內(nèi)容將在后續(xù)中詳細(xì)剖析。

             

                  三、載入內(nèi)核:在載入內(nèi)核以后,工作就交給了內(nèi)核。內(nèi)核在引導(dǎo)期間,其實(shí)最主要只做兩個(gè)事情:1.首先是驅(qū)動(dòng)硬件,所謂驅(qū)動(dòng)就是使系統(tǒng)認(rèn)識(shí)硬件,并調(diào)用硬件。一個(gè)系統(tǒng)最龐大的部分就是驅(qū)動(dòng),通常根據(jù)需要對(duì)驅(qū)動(dòng)進(jìn)行裁剪,就成了裁決系統(tǒng)。2然后就是啟動(dòng)一個(gè)進(jìn)程,叫做init進(jìn)程。它應(yīng)該是系統(tǒng)存在的第一個(gè)進(jìn)程。

                  四、啟動(dòng)進(jìn)程init:該進(jìn)程的的PID(進(jìn)程ID)恒為1,一般情況下PID是隨即分配的,但是init進(jìn)程是固定的。PPID稱為父進(jìn)程ID,可以看出init進(jìn)程的父進(jìn)程的PID為0,其實(shí)PID為0的進(jìn)程是內(nèi)核調(diào)度器(kernel scheduler)它負(fù)責(zé)對(duì)進(jìn)程進(jìn)行調(diào)度,即CPU時(shí)間片的分配。

            在父子進(jìn)程關(guān)系中,按道理父進(jìn)程死了,子進(jìn)程必須死。但是有時(shí)候父進(jìn)程死了,但是子進(jìn)程因?yàn)槟撤N特殊情況并沒(méi)有死,這樣子進(jìn)程就成了孤兒進(jìn)程,linux檢查到孤兒進(jìn)程,會(huì)把該孤兒進(jìn)程的PPID變成1。另外一種情況,就是子進(jìn)程死了,父進(jìn)程不知道,導(dǎo)致子進(jìn)程變成僵尸進(jìn)程。

                 五、讀取配置文件inittab:在啟動(dòng)進(jìn)程init以后,就會(huì)讀取/etc/inittab配置文件。使用more /etc/inittab打開(kāi)inittab文件,首先看到的是關(guān)于系統(tǒng)運(yùn)行級(jí)別的信息。

            Linux運(yùn)行級(jí)別(runlevel)一共有7種:

            0halt(關(guān)機(jī))

            1.Singgle user mode(但用戶,類似windows的安全模式)

            2.Multiuser(沒(méi)有NFS網(wǎng)絡(luò)文件共享服務(wù)的多用戶模式,命令行)

            3.Full multiuer mode(和3一樣,多加了NFS)

            4.Unuerd(還未使用)

            5.X11(默認(rèn)使用,圖形界面)

            6.Reboot(重啟)

                 如上所述默認(rèn)的一般是5.通過(guò)命令runlevel可以查看當(dāng)前運(yùn)行級(jí)別。通過(guò)init num或者telinit num可以動(dòng)態(tài)切換運(yùn)行界別。(其實(shí)通過(guò)ls -l 'which telinit'可以得知telinit是init的一個(gè)軟鏈接)。

                 接著繼續(xù)學(xué)習(xí)inittab配置文件,使用grep -v '^#' /etc/inittab | more 得到?jīng)]有注釋的配置文件。通過(guò)man init可以得知,所有init配置文件里面的每行都是通過(guò)格式

            id : runlevels : action : process

            id:標(biāo)識(shí)符,標(biāo)記條目的唯一性,一般為兩位字母或者數(shù)字

            runlevels:指定運(yùn)行級(jí)別,如果為空,表示所有運(yùn)行級(jí)別都可以。

            action:指定腳本或者命令的運(yùn)行狀態(tài)

            process:指定要運(yùn)行的腳本或者命令

                下面對(duì)action的取值進(jìn)行介紹:

            1.initdefault:指定系統(tǒng)缺省啟動(dòng)的運(yùn)行級(jí)別

            2.sysinit:系統(tǒng)啟動(dòng)時(shí),執(zhí)行process指定的腳本或命令


            3.wait:執(zhí)行process指定的命令或者腳本,并在執(zhí)行完成以后才運(yùn)行其他的條目.

            4.once:執(zhí)行process命令或者腳本,但不等待其結(jié)束。

            5.Ctrlaltdel:按下ctrl+alt+del鍵,執(zhí)行process

            6.Respawn:一旦該process終止,則重新運(yùn)行該process指定的命令或。

            7.Powerfail:電源出錯(cuò)執(zhí)行process

            8.Powerokwait:電源恢復(fù)執(zhí)行的process


                  上述第三個(gè)action值wait的例子中,其實(shí)通過(guò)ls -l /etc/rc.d/rc可以得知,rc其實(shí)是一個(gè)可執(zhí)行文件(其實(shí)也是腳本)。在rc.d這個(gè)目錄下其實(shí)并不只有rc這一個(gè)文件,還有許多文件或者目錄。
                  可以看到有從rc0.d到rc6.d共7個(gè)目錄。他們是相應(yīng)運(yùn)行級(jí)別需要啟動(dòng)的服務(wù)目錄文件。系統(tǒng)是通過(guò)action:initdefault的運(yùn)行級(jí)別來(lái)匹配這里的服務(wù)目錄的。現(xiàn)在以rc3.d為例:

                  可以看到rc3.d目錄下有很多服務(wù)程序,從他們的名稱中,我可以可以得知它們的作用,名稱都是有3個(gè)部分組成:

                                         第一個(gè)大寫(xiě)字母+數(shù)字+名字

                  第一個(gè)大寫(xiě)字母S(start)表示啟動(dòng)服務(wù),K(kill)表示殺死服務(wù)

            數(shù)字表示啟動(dòng)順序,數(shù)字越小越先啟動(dòng),數(shù)字相同,按照創(chuàng)建時(shí)間啟動(dòng),名字根據(jù)作用而定。

                  所以在這里我們可以根據(jù)自己應(yīng)用的需要,把有用的進(jìn)程開(kāi)啟,無(wú)用的關(guān)閉,比如如果無(wú)用的不想開(kāi)啟,可以把S改成s,就不會(huì)啟動(dòng)了。

                 此處加一個(gè)專題,就是我們?nèi)绾卧谙到y(tǒng)啟動(dòng)好以后來(lái)動(dòng)態(tài)開(kāi)啟和關(guān)閉服務(wù)呢?
                 首先我們要知道,系統(tǒng)所有的服務(wù)都是在/etc/rc.d/init.d目錄下。我們可以通過(guò)start、stop、restart、status來(lái)啟動(dòng)、終止、重新啟動(dòng)、查看狀態(tài)來(lái)操作服務(wù)。例如:用sshd服務(wù)為例:

                  現(xiàn)在我們?nèi)绻岩粋€(gè)服務(wù)變成開(kāi)機(jī)啟動(dòng)有3種方法:

            (1)第一個(gè)就是在/etc/rc.d/rcn.d的服務(wù)目錄中創(chuàng)建一個(gè)名為SXXX的軟鏈接,指向一個(gè)腳本就可以了。


            (2)使用chkconfig命令設(shè)置進(jìn)程是否啟動(dòng)

            (3)使用ntsysv進(jìn)入圖形化設(shè)置進(jìn)程是否啟動(dòng) 

            欧美日韩久久中文字幕| 99久久人人爽亚洲精品美女| 久久久久国产亚洲AV麻豆| 国产精品美女久久久久| 久久亚洲国产成人精品性色| 无码精品久久久天天影视| 久久Av无码精品人妻系列| 久久综合国产乱子伦精品免费| 波多野结衣AV无码久久一区| 久久精品国产亚洲AV影院| 伊人久久综合成人网| 亚洲乱码中文字幕久久孕妇黑人| 成人久久免费网站| 久久电影网2021| 国产高潮国产高潮久久久91| 久久久不卡国产精品一区二区| 欧美激情精品久久久久久| 久久丫忘忧草产品| 国产综合久久久久| 久久久久国产日韩精品网站| 久久免费看黄a级毛片| 久久99国产精品一区二区| 久久精品国产99国产精品| 欧美日韩久久中文字幕| 91精品国产综合久久婷婷| 久久黄色视频| 日韩精品久久久久久免费| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 精品无码久久久久久国产| 亚洲一级Av无码毛片久久精品| 欧美黑人又粗又大久久久| 99久久国产热无码精品免费久久久久 | 久久久久亚洲AV无码去区首| 久久久久久精品久久久久| 久久国产精品99久久久久久老狼 | 久久午夜无码鲁丝片| 天天久久狠狠色综合| 欧美国产成人久久精品| 国产成人精品久久| 久久久久久亚洲Av无码精品专口| 精品久久久久久无码国产|