系統(tǒng)加電,Power ---up /Reset
創(chuàng)新互聯(lián):于2013年創(chuàng)立為各行業(yè)開拓出企業(yè)自己的“網(wǎng)站建設(shè)”服務(wù),為1000+公司企業(yè)提供了專業(yè)的網(wǎng)站設(shè)計制作、網(wǎng)站制作、網(wǎng)頁設(shè)計和網(wǎng)站推廣服務(wù), 按需網(wǎng)站制作由設(shè)計師親自精心設(shè)計,設(shè)計的效果完全按照客戶的要求,并適當?shù)奶岢龊侠淼慕ㄗh,擁有的視覺效果,策劃師分析客戶的同行競爭對手,根據(jù)客戶的實際情況給出合理的網(wǎng)站構(gòu)架,制作客戶同行業(yè)具有領(lǐng)先地位的。
system startup --- BIOS/bootmonitor
stage 1 bootloader --- Master Boot Record
stage 2 bootloader --- Grub,LILO,etc.(其中Grub將stage2分為1.5和2)
kernel --- linux 內(nèi)核空間
init --- user-sapce 用戶空間
Operation
系統(tǒng)首次引導或重啟時加電的瞬間處理器(cpu)執(zhí)行存在于BIOS中的一段已知代碼,而后選擇一個可引導設(shè)備,pc可用來做引導的設(shè)備多樣(靈活),BIOS需確定使用哪個設(shè)備來引導
將stage 1 的引導加載程序(bootloader)加載至RAM執(zhí)行.bootloader大小小于512Bytes(一個扇區(qū)sector),主要工作是加載stage 2 的引導加載程序
stage2第二階bootloader加載至RAM執(zhí)行,通常屏幕有顯示動畫,將linux內(nèi)核壓縮形態(tài)映像和一個可選的初始RAM磁盤(initramfs臨時根文件系統(tǒng))加載至內(nèi)存.stage2 bootloader控制權(quán)交給內(nèi)核映像,解壓和初始化,此階段stage2 bootloader會檢測系統(tǒng)硬件,枚舉 系統(tǒng)鏈接的硬件設(shè)備,掛載根設(shè)備,加載內(nèi)核必要的modules內(nèi)核模塊.
啟動第一個用戶空間程序(init).執(zhí)行高級系統(tǒng)初始化工作.
cpu加電瞬間自動尋找BISO存放位置,在此之前不依靠任何軟件純硬件執(zhí)行,開始執(zhí)行BISO的第一步加電自檢(POST):POST對硬件檢測,BIOS第二步本地設(shè)備枚舉和初始化.
BIOS有兩部分組成:POST代碼和運行時服務(wù). POST完成后從內(nèi)存清理出來;運行時服務(wù)依然存在于內(nèi)存,目標操作系統(tǒng)能夠繼續(xù)使用BIOS運行時服務(wù)所提供的服務(wù).
要引導一個操作系統(tǒng),BIOS運行時會依據(jù)CMOS的設(shè)置定義的順序來搜索處于激活狀態(tài)并可以引導的設(shè)備.可引導設(shè)備可以是軟盤、硬盤、CD-ROM、硬盤上的分區(qū)、網(wǎng)絡(luò)上的設(shè)備.
搜索到可引導的硬盤(通常是硬盤)后,主引導記錄(MBR)中包含主引導加載程序.(MBR是512Btyes的一個扇區(qū)(sector),位于磁盤的第一個扇區(qū)(0磁道0柱面1扇區(qū)))將MBR加載至RAM(Random Access Memory,隨機存儲器,與cpu直接交互數(shù)據(jù),速度快),BIOS將控制權(quán)交給MBR.
MBR中的主引導加載程序(bootloader)是512Bytes的映像,其中包含bootloader程序代碼和一個分區(qū)表.前446Bytes是主引導加載程序--其中包含可執(zhí)行bootloader代碼和錯誤消息文本.接下來64Bytes是分區(qū)表,共包含4個分區(qū)記錄(每個分區(qū)64/4=16Bytes).MBR以2Bytes特殊字節(jié)(0xAA55)(magic number,魔數(shù),多用來檢測完整性)結(jié)束.用來檢測MBR的有效性.
centos6 備份MBR的信息的方法: dd if=/dev/sda of=MBR.bak bs=1 conut=512 od -xa MBR.bak 查看以十六進制和ASCII碼打印二進制文件
MBR中的主引導加載程序主要的工作是查找并加載次引導加載程序(即stage 2 bootloader),通過在分區(qū)表中查找一個激活分區(qū)后,掃描分區(qū)中的其他分區(qū)確保其他都是非活動的,此后將激活分區(qū)中的引導記錄從設(shè)備中加載至RAM并執(zhí)行.
次引導加載程序可形象的稱為內(nèi)核加載程序.主要任務(wù)是加載linux kernel和可選的初始RAM磁盤.
一般的pc機中,stage 1 bootloader和stage 2 bootloader統(tǒng)稱為GRand Unified Bootloader(GRUB)或Linux Loader(LILO).
GRUB階段的引導加載程序:
/boot/grub中包含了stage1,stage1.5,stage2引導加載程序,和其他引導加載程序及kernel,initramfs.
GRUB通過將兩個階段轉(zhuǎn)化為三個階段的引導加載程序?qū)崿F(xiàn)的.
stage 1:MBR引導了一個1.5階段的引導加載程序加載并運行(而不是直接將stage2中的次引導加載程序引導過來)
stage 1.5:引導加載程序,可以理解包含Linux內(nèi)核映像的特殊文件系統(tǒng).(比如/boot/grub/e2fs_stage1_5要從ext2或ext3中加載)
stage 2:等待stage1.5引導加載完成后stage2次引導加載器開始加載,完成之后,GRUB可以在接受請求的顯示內(nèi)核列表(在/etc/grub.conf中定義,軟符號鏈接/etc/grub/menu.lst和/etc/grub.conf),可以選擇內(nèi)核和修改內(nèi)核參數(shù).甚至可是使用Grub命令行提供的命令對引導過程進行手工定義啟動.
grub手工自定義:可以用initrd的映像引導一個kernel
grub>root (hd0,0) #定義可啟動的設(shè)備 grub>kernel /vmlinuz #定義啟動時的內(nèi)核 grub>initrd /initramfs.img #定義initramfs鏡像 grub>boot #按照手工定義的方式啟動
將stage2的bootloader加載至內(nèi)存后,就可以對文件系統(tǒng)進行查詢,將默認的內(nèi)核映像和initrd映像加載至內(nèi)存中.當映像文件準備好之后,stage 2 bootloader調(diào)用內(nèi)核映像.
內(nèi)核映像被加載至內(nèi)存中,stage2 bootloader控制權(quán)釋放后,kernel 階段開始.內(nèi)核映像不是可執(zhí)行的內(nèi)核,是被壓縮的kernel映像,通常是vmlinuz.在這個內(nèi)核映像的前面是一個例程,實現(xiàn)少量的硬件設(shè)置,并從包含內(nèi)核的映像中將kernel解壓縮出來,而后將內(nèi)核加載至高端內(nèi)存中,如果有初始RAM磁盤映像,則將其一起加載至內(nèi)存,并標明供以后使用.此后,該例程會調(diào)用內(nèi)核,并開始啟動內(nèi)核引導的過程.
啟動init.即第一個用戶空間進程(user-sapce process).通過啟用中斷,搶占式的調(diào)度器就可以周期性的接管控制權(quán),從而提供多任務(wù)能力.
在內(nèi)核引導的過程中,初始RAM磁盤(initrd)是由stage 2 bootloader加載至內(nèi)存中,被復制到RAM中并掛載到系統(tǒng)上.initrd會作為RAM中的臨時根文件系統(tǒng)使用,允許內(nèi)核在沒有掛載任何物理磁盤的情況下完整的實現(xiàn)引導,由于與外圍設(shè)備交互的模塊可能是initrd的一部分,所以內(nèi)核可以很小,但仍需要支持大量的可能的硬件配置,內(nèi)核引導完成之后就可以將initrd根文件系統(tǒng)卸載掉,并掛載真正的文件系統(tǒng).
當內(nèi)核引導并初始化之后,內(nèi)核就可以啟動自己的第一個用戶空間應(yīng)用程序了,這是第一個調(diào)用標準函數(shù)庫編譯的程序.桌面系統(tǒng)中第一個啟動的程序通常是/sbin/init進程.到這里系統(tǒng)準備就緒了.
centos5:SysV init 配置文件:/etc/inittab centos6:upstart 配置文件:/etc/inittab /etc/init/*.conf centos7:systemd 配置文件:/usr/lib/systemd/system,/etc/systemd/system
init相關(guān)的配置文件:/etc/inittab
每行定義一種action以及對應(yīng)的process id:runlevel:action:process id: 一個任務(wù)的標志符 runlevel: 運行級別,空則標識所有的進程 action:定義任務(wù)的啟動條件 process:任務(wù) action: wait:等待切換至此級別是執(zhí)行一次 respawn:一旦此任務(wù)終止,就自動重新啟動 initdefualt:設(shè)定默認啟動級別 sysinit:設(shè)定系統(tǒng)初始化的方式,此處一般指定/etc/rc.d/rc.sysinit
/etc/rc.d/rc 接受數(shù)字為參數(shù)
K##string:開機停止 (先KILL后start)數(shù)字越小越優(yōu)先,依賴的服務(wù)先關(guān)閉,被依賴的后關(guān)閉 S##string:開機啟動
/etc/init.d/
讓程序接受chkconfig的管理 chkconfig --add services_name 不再接受chkconfig管理 chkconfig --del services_name 能被cokconfig所識別 #chkconfig: 運行級別 啟動級別 關(guān)閉級別 chkconfig: --list name 顯示單個的服務(wù)情況 修改控制的級別: --level LEVELS 默認2345 注:正常情況下,最后一個服務(wù)S99local沒有連接至/etc/init.d下,而是直接指向了/etc/rc.local下,因此自定義的開機啟動腳本直接放到/etc/rc.local中即可 /sbin/mingetty 會調(diào)用login程序; 打開基于vga的虛擬終端的還有g(shù)etty等也可以.
以上次shell程序自動化編譯的apache service為例(腳本實現(xiàn)apache批量自動化編譯移步http://cityx.blog.51cto.com/9857477/1918435):
按照系統(tǒng)啟動的流程及chkconfig的特性實現(xiàn):
開機系統(tǒng)會運行/etc/init.d/下的腳本或程序,那么將自定義的腳本或程序放入該目錄下就可以開機時被執(zhí)行,當然將腳本的路徑加入到rc.local下開機時也會被執(zhí)行一般情況下值執(zhí)行一次,我們的需求是作為可控的服務(wù).
符合被chkconfig管理的服務(wù)腳本要求
# chkconfig: 2345 11 88 #腳本中需存在的格式 # description: This starts the Apache Daemon #centos6 可省
下面是我httpd服務(wù)(程序名為httpd)的腳本:將此腳本放入/etc/init.d下即可,留作下步用.
#!/bin/bash # # chkconfig: 345 98 01 # httpdir=/app/apache/httpd pidfile() { pgrep httpd > /app/apache/httpd/httpd.pid } VarVerification() { if [ -z $httpdir ] ;then httpdir=/app/apache/httpd fi } case $1 in start) VarVerification $httpdir/bin/apachectl start 1>/dev/null 2>$httpdir/start.log if [ $? -eq 0 ] ;then if [ -d /app/apache/httpd ] ;then pidfile else echo "The file 'httpd.pid' is not exist!" exit 10 fi else exit 11 fi ;; stop) VarVerification if [ -f $httpdir/httpd.pid ];then $httpdir/bin/apachectl stop if [ $? -eq 0 ] ;then mv $httpdir/httpd.pid /tmp &>/dev/null fi else pgrep httpd &>/dev/null if [ $? -eq 0 ];then $httpdir/bin/apachectl stop fi fi ;; restart) VarVerification $httpdir/bin/apachectl restart if [ $? -eq 0 ] ;then pidfile else mv $httpdir/httpd.pid /tmp fi ;; status) VarVerification if [ -f $httpdir/httpd.pid ];then echo "Apache service is running..." else echo "Apache service is DOWN!" fi esac
[root init.d]# chkconfig --add httpd #接受chkconfig的支配 chkconfig --del httpd #不再接受chkconfig的支配 chkconifg --level 2345 httpd on #指定2345模式下開機自啟動 [root init.d]# service httpd start #啟動apache服務(wù)
[root init.d]# netstat -ntl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 :::80 :::* LISTEN [root init.d]# service httpd {stop|start|restart|status} 停止,啟動,重啟,狀態(tài)
名稱欄目:centos啟動流程及實現(xiàn)service管理apache服務(wù)
當前路徑:http://chinadenli.net/article38/jgipsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、微信公眾號、企業(yè)建站、定制網(wǎng)站、營銷型網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)