新聞中心
Linux是一種流行的操作系統(tǒng)內(nèi)核,它支持多種類型的程序開發(fā),并且擁有非常廣泛的應(yīng)用領(lǐng)域。如果你正在進行Linux程序開發(fā),了解它的啟動方式是很重要的。本文將深入探討Linux程序啟動的方式,以幫助您更高效地進行開發(fā)工作。

成都創(chuàng)新互聯(lián)公司是一家專注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷策劃、微信小程序、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動互聯(lián)開發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立十年以來,已經(jīng)為上1000家攪拌罐車各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)?,F(xiàn)在,服務(wù)的上1000家客戶與我們一路同行,見證我們的成長;未來,我們一起分享成功的喜悅。
介紹
Linux程序啟動可以分為兩種基本類型:服務(wù)啟動和應(yīng)用程序啟動。服務(wù)啟動是指在Linux操作系統(tǒng)上運行的后臺程序,這些程序通常在系統(tǒng)啟動時啟動并一直運行直到關(guān)閉系統(tǒng)。應(yīng)用程序啟動是指用戶在需要使用它們時手動啟動的程序。
服務(wù)啟動
Linux系統(tǒng)啟動時會自動啟動許多服務(wù),例如,網(wǎng)絡(luò)、防火墻、系統(tǒng)監(jiān)控和文件系統(tǒng)等。這些服務(wù)由系統(tǒng)自帶的服務(wù)管理器提供支持。服務(wù)管理器啟動服務(wù)時,系統(tǒng)會檢查該服務(wù)的啟動腳本,這個腳本通常位于“/etc/init.d/”路徑下。每個服務(wù)啟動腳本都必須定義以下三個操作:
– start:啟動服務(wù)
– stop:停止服務(wù)
– restart:重新啟動服務(wù)
這些操作的文件可以存儲在以下路徑中:
– /etc/rc.d/init.d
– /etc/rc.d/rcX.d
(其中 X 是系統(tǒng)運行等級)
在最新的Linux系統(tǒng)版本中,基于systemd的服務(wù)管理器已經(jīng)成為標準,它可以更好地管理服務(wù)和監(jiān)視系統(tǒng)狀態(tài)?;趕ystemd的服務(wù)管理器可以自動啟動和管理服務(wù),并監(jiān)視它們的資源消耗,更加適合于現(xiàn)代高負載系統(tǒng)的使用。
應(yīng)用程序啟動
應(yīng)用程序啟動時沒有系統(tǒng)啟動的要求。當用戶想要運行應(yīng)用程序時,可以將其載入內(nèi)存并啟動。在Linux中,可以使用許多方法來啟動應(yīng)用程序。這里列出了一些最常用的方法。
命令行啟動
使用命令行啟動應(yīng)用程序是最簡單的方法之一。在Linux命令行終端中,輸入應(yīng)用程序名稱即可啟動它,例如,打開終端并輸入firefox就可以打開Firefox瀏覽器。
圖形界面啟動
在Linux桌面環(huán)境中,你可以使用應(yīng)用程序管理器來啟動應(yīng)用程序。只需單擊應(yīng)用程序管理器中的圖標即可啟動該應(yīng)用程序。這是最常用的啟動方式之一,因為它不需要任何特殊技能或知識,而且很容易訪問和使用。
使用啟動腳本
啟動腳本是一種開發(fā)者常用的方法,它可以簡化應(yīng)用程序的啟動過程并自動執(zhí)行其它程序。啟動腳本通常寫在腳本文件中,并使用特定的語言編寫。其中,最常見的語言是shell和python。啟動腳本可以指定應(yīng)用程序在啟動時執(zhí)行的命令,例如開啟一系列服務(wù)或操作系統(tǒng)級別的設(shè)置。
在Linux平臺上,程序啟動方式可以分為服務(wù)啟動和應(yīng)用程序啟動兩種類型。服務(wù)啟動時由系統(tǒng)自動啟動的后臺程序,而應(yīng)用程序啟動則需要用戶或其他應(yīng)用程序在需要時手動執(zhí)行。開發(fā)人員通常使用命令行啟動、圖形界面啟動或使用啟動腳本等方法啟動應(yīng)用程序?,F(xiàn)在,隨著基于systemd的服務(wù)管理器成為標準,開發(fā)人員將會有更多的工具來管理服務(wù)和啟動應(yīng)用程序。理解linux程序啟動方式可以讓我們更高效地進行開發(fā),并更好地了解Linux操作系統(tǒng)的本質(zhì)。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,響應(yīng)式網(wǎng)站制作,設(shè)計師量身打造品牌風(fēng)格,熱線:028-86922220linux操作系統(tǒng)的詳細啟動過程,謝謝(硬件啟動的先后順序)
1983年,理察·馬修·斯托曼(Richard Stallman)創(chuàng)立了GNU計劃(GNU Project)。這個計劃有一個目標是為了發(fā)展一個完全免費自由的 Unix-like 操作系統(tǒng)。自1990年代發(fā)起這個計劃以來,GNU 開始大量的產(chǎn)生或收集各種系統(tǒng)所必備的元件昌敬,像是——函式庫(libraries)、編譯器(compilers)、偵錯工具(debuggers)、文字耐爛慎編輯器(text editors)、網(wǎng)頁服務(wù)器(web server),以及一個Unix的使用者接口(Unix shell)——除了執(zhí)行核心(kernel)仍然付闕外。1990年,GNU計劃開始在馬赫微核(Mach microkernel)的架構(gòu)之上開發(fā)系統(tǒng)核心,也就是所謂的GNU Hurd,但是這個基于Mach的設(shè)計異常復(fù)雜,發(fā)展進度則相對緩慢。
Linux的基本思想有兩點:之一,一切都是文件;第二,每個軟件都有確定的用途,同時它們都盡可能被編寫得更好。其中之一條詳細來講就是系統(tǒng)歷橘中的所有都歸結(jié)為一個文件,包括命令、硬件和軟件設(shè)備、操作系統(tǒng)、進程等等對于操作系統(tǒng)內(nèi)核而言,都被視為擁有各自特性或類型的文件。至于說Linux是基于Unix的,很大程度上也是因為這兩者的基本思想十分相近。
當稿液升用戶打開PC的電源,BIOS開機自檢,按BIOS中設(shè)置的啟動設(shè)備(通常是硬盤)啟動,
接著啟動設(shè)備上安裝的引導(dǎo)程序lilo或grub開始引導(dǎo)Linux,Linux首先進行內(nèi)核的引導(dǎo),
接下來執(zhí)行init程序,init程序調(diào)用了rc.sysinit和rc等程序,rc.sysinit和rc當完成系
統(tǒng)初始化和運行服務(wù)的任務(wù)后,返回init;init啟動了mingetty后,打開了終端供用戶登
錄系統(tǒng),用戶登錄成功后進入了Shell,這樣就完成了從開機到登錄的整個啟動過程。
加載內(nèi)核
LILO啟動之后,如果你選擇了Linux作為準備引導(dǎo)的操作系統(tǒng),之一個被加載的東西就是內(nèi)核。請記住此時的計算機內(nèi)存中還不存在任何操作系統(tǒng), PC(因為它們天然的設(shè)計缺陷)也還沒有辦法存取機器上全部的內(nèi)存。因此埋慶,內(nèi)核就必須完整地加載到可用RAM的之一個兆字節(jié)之內(nèi)。為了實現(xiàn)這個目的,內(nèi)核是被壓縮鍵老了的。這個文件的頭部包含著必要的代碼,先設(shè)置CPU進入安全模式(以此解除內(nèi)存限制),再對內(nèi)核的剩余部分進行解壓縮。
執(zhí)行內(nèi)核
內(nèi)核在內(nèi)存中解壓縮之后,就可以開始運行了。此時的內(nèi)核只知道它本身內(nèi)建的各種功能,也就是說被編譯為模塊的內(nèi)核部分還不能使用。最基本的是,內(nèi)核必須有足夠的代碼設(shè)置自己的虛擬內(nèi)存子系統(tǒng)和根文件系統(tǒng)(通常就是ext2文件系統(tǒng))。一旦內(nèi)核啟動運行,對硬件的檢測就會決定需要對哪些設(shè)備驅(qū)動程序進行初始化。從這里開始,內(nèi)核就能夠掛裝根文件系統(tǒng)(這個過程類似于Windows識別并存取C盤的過程)。內(nèi)核掛裝了根文件系統(tǒng)之后,將啟動并運行一個叫做 init的程序。
注意:在這里我們故意略去了Linux內(nèi)核啟動的許多細節(jié),這些細節(jié)只有內(nèi)核開發(fā)人員才感興趣。如果你好奇的話,可以訪問http://
www.redhat.com:8080
地址處的 “Kernel Hackers Guide”。
init進程
init進程是非內(nèi)核進程中之一個被啟動運行的,因此它的進程編號PID的值總是1。init讀它的配置文件/etc/inittab,決定需要啟動的運行級別(Runlevel)。從根本上說,運行級別規(guī)定了整個系統(tǒng)的行為,每個級別(分別由0到6的整數(shù)表示)滿足特定的目的。如果定義了 initdefault級別,這個值就直接被選中,否則需要由用戶輸入一個代表運行級別的數(shù)值。
輸入代表運行級別的數(shù)字之后,init根據(jù)/etc/inittab文件中的定義執(zhí)行一個命令腳本程序。缺省的運行級別取決于安裝階段對登錄程序的選擇:是使用基于文本的,還是使用基于X-Window的登錄程序。
rc命令腳本程序
我們已經(jīng)知道,當運行級別發(fā)生改變時,將由/etc/inittab文件定義需要運行哪一個命令腳本程序。這些命令腳本程序負責(zé)啟動或者停止該運行級別特定的各種服務(wù)。由于需要管理的服務(wù)數(shù)量很多,因此需要使用rc命令腳本程序。其中,最主要的一個是/etc/rc.d/rc,它負責(zé)為每一個運行級別按照正確的順序調(diào)用相應(yīng)的命令腳本程序。我們可以想象,這樣一個命令腳本程序很容易變得難以控制!為了防止這類事件的發(fā)生,需要使用精心設(shè)計的方案。
對每一個運行級別來說,在/etc/rc.d子目錄中都有一個對應(yīng)的下級目錄。這些運行級別的下級子目錄的命名方法是rcX.d,其中的X就是代表運行級別的數(shù)字。比如說,運行級別3的全部命令腳本程序都保存在/etc/rc.d/rc3.d子目錄中。
在各個運行級別的子目錄中,都建立有到/etc/rc.d/init.d子目錄中命令腳本程序的符號鏈接,但是,這些符號鏈接并不使用命令腳本程序在 /etc/rc.d/init.d子目錄中原來的名字。如果命令腳本程序是用來啟動一個服務(wù)的,其符號鏈接的名字就以字母S打頭;如果命令腳本程序是用來關(guān)閉一個服務(wù)的,其符號鏈接的名字就以字母K打頭。
許多情況下,這些命令腳本程序的執(zhí)行順序都很重要。如果沒有先配置網(wǎng)絡(luò)接口,就沒有辦法使用DNS服務(wù)解析主機名!為了安排它們的執(zhí)行順序,在字母S 或者K的后面緊跟著一個兩位數(shù)字,數(shù)值小的在數(shù)值大的前面執(zhí)行。比如:/etc/rc.d/rc3.d/S50inet就會在 /etc/rc.d/rc3.d/S55named之前執(zhí)行(S50inet配置網(wǎng)絡(luò)設(shè)置,S55named啟動DNS服務(wù)器)。
存放在/etc/rc.d/init.d子目錄中的、被符號鏈接上的命令腳本程序是真正的實干家,是它們完成了啟動或者停止各種服務(wù)的操作過程。當 /etc/rc.d/rc運行通過每個特定的運行級別子目錄的時候,它會根據(jù)數(shù)字的順序依次調(diào)用各個命令腳本程序執(zhí)行。它先運行以字母K打頭的命令腳本程序,然后再運行以字母S打頭的命令腳本程序。對以字母K打頭的命令腳本程序來說,會傳遞Stop參數(shù);類似地對以字母S打頭的命令腳本程序來說,會傳遞 Start參數(shù)。
編寫自己的rc命令腳本
在維護Linux系統(tǒng)運轉(zhuǎn)的日子里,肯定會遇到需要系統(tǒng)管理員對開機或者關(guān)機命令腳本進行修改的情況。有兩種方法可以用來實現(xiàn)修改的目的:
● 如果所做的修改只在引導(dǎo)開機的時候起作用,并且改動不大的話,可以考慮簡單地編輯一下/etc/rc.d/rc.local腳本。這個命令腳本程序是在引導(dǎo)過程的最后一步被執(zhí)行的。
● 如果所做的修改比較細致,或者還要求關(guān)閉進程使之明確地停止運行,則需要在/etc/rc.d/init.d子目錄中添加一個命令腳本程序。這個命令腳本程序必須可以接受Start和Stop參數(shù)并完成相應(yīng)的操作。
之一種方法,編輯/etc/rc.d/rc.local腳本,當然是兩種方法中比較簡單的。如果想在這個命令腳本程序中添加內(nèi)容,只需要使用喜歡的編輯器程序打開它,再把打算執(zhí)行的命令附加到文件的末尾就可以了。這對一兩行的修改來說的確很便利。
如果確實需要使用一個命令腳本程序,這時必須選擇第二個方法。編寫一個rc命令腳本程序的過程并不像想象中那么困難。我們下面就給出一個例子,看看它是怎樣實現(xiàn)的(順便說一句,你可以把我們的例子當作范本,按照自己的需要進行修改和添加)。
假設(shè)你打算每隔60分鐘調(diào)用一個特殊的程序來彈出一條消息,提醒自己需要從鍵盤前面離開休息一會兒,命令腳本程序?qū)ㄏ旅鎺讉€部分:
● 關(guān)于這個命令腳本程序功能的說明(這樣就不會在一年之后忘記它);
● 在試圖運行它之前驗證這個命令腳本程序確實存在;
● 接受start和stop參數(shù)并執(zhí)行要求的動作。
參數(shù)給定后,我們就可以編寫命令的腳本程序。這個程序很簡單,大家可以自己編寫一下,我在這里就不給出了。
編寫好新的命令腳本程序之后,再從相關(guān)的運行級別子目錄中加上必要的符號鏈接,來控制這個命令腳本程序的啟動或者停止。在我的印象中,只想讓它在運行級別3或者運行級別5中啟動,原因是我認為只有這兩個運行級別才是日常工作的地方。最后,希望這個命令腳本程序在進入運行級別6(重啟動)的時候被關(guān)閉。
激活或者禁止服務(wù)項目
有的時候會發(fā)現(xiàn),在引導(dǎo)的時候并不需要某個特定的服務(wù)被啟動。如果你正在考慮使用Linux替換Windows NT的文件和打印服務(wù)器,就更是如此。
我們已經(jīng)知道,在特定的運行級別子目錄中給符號鏈接改個名稱,就可以讓該服務(wù)不被啟動,如把其名稱的之一個字母由S改為K。一旦熟練掌握了命令行和符號鏈接,就會發(fā)現(xiàn)這是激活或者禁止服務(wù)的最快辦法。
在學(xué)習(xí)這個改名方法的時候,可能會覺得圖形化的操作界面ksysv比較容易掌握。雖然它原來是設(shè)計使用在KDE環(huán)境里的,但在 Red Hat Linux 7.2下缺省安裝的GNOME環(huán)境里也運行得很好。如果想啟動它,只需簡單地打開一個xterm窗口,并輸入ksysv命令就可以了。屏幕上會出現(xiàn)一個窗口,其中列出了能夠修改的全部參數(shù),需要時還包括在線幫助。
警告:如果是在一個現(xiàn)實中的系統(tǒng)上學(xué)習(xí)本文的知識,要多多運用常識。當試著對啟動腳本程序進行修改的時候,要記住所做的修改可能會造成你的系統(tǒng)不能正常工作,而且無法采用重啟動的方法恢復(fù)。不要在正常運轉(zhuǎn)的系統(tǒng)上實驗新的設(shè)置,對你準備修改的文件要全部進行備份。最重要的是,在手邊要準備一張引導(dǎo)盤以防不測
在啟動之前,各個系統(tǒng)應(yīng)該是沒什么差別的
之一步: 當我們按下電源開關(guān)時,電源就開始向主板和其它設(shè)備供電,此時電壓還不太穩(wěn)定,主板上的控制芯片組會向CPU發(fā)出并保持一個RESET(重置)信號,讓CPU內(nèi)部自動恢復(fù)到初始狀態(tài),但CPU在此刻不會馬上執(zhí)行指令。當芯片組檢測到電源已經(jīng)開始穩(wěn)定供電了(當然從不穩(wěn)定到穩(wěn)定的過程只是一瞬間的事情),它便撤去RESET信號(如果是手工按下計算機面板上的Reset按鈕來重啟機器,那么松開該按鈕時芯片組就會撤去RESET信號),CPU馬上就從地址FFFF0H處開始執(zhí)行指令,從前面的介紹可知,這個地址實際上在系統(tǒng)BIOS的地址范圍內(nèi),無論是Award BIOS還是AMI BIOS,放在這里的只是一條跳轉(zhuǎn)指令,跳到系統(tǒng)BIOS中真正的啟動代碼處。
第二步: 系統(tǒng)BIOS的啟動代碼首先要做的事情就是進行POST(Power-On Self Test,加電后自檢),POST的主要任務(wù)是檢測系統(tǒng)中一些關(guān)鍵設(shè)備是否存在和能否正常工作,例如內(nèi)存和顯卡等設(shè)備。搏好廳由于POST是最早進行的檢測過程,此時顯卡還沒有初始化,如果系統(tǒng)BIOS在進行POST的過程中發(fā)現(xiàn)了一些致命錯誤,例如沒有找到內(nèi)存或者內(nèi)存有問題(此時只會檢查640K常規(guī)內(nèi)存),那么系統(tǒng)BIOS就會直接控制喇叭發(fā)聲來報告錯誤,聲音的長短和次數(shù)代表了錯誤的類型。在正常情況下,POST過程進行得非??欤覀儙缀鯚o法感覺到它的存在,POST結(jié)束之后就會調(diào)用其它代碼來進行更完整的硬件檢測。
第三步: 接下來系統(tǒng)BIOS將查找顯卡的BIOS,前面說過,存放顯卡BIOS的ROM芯片的起始地址通常設(shè)在C0000H處,系統(tǒng)BIOS在這個地方找到顯卡BIOS之后就調(diào)用它的初始化代碼,由顯卡BIOS來初始化顯卡,此時多數(shù)顯卡都會在屏幕上顯示出一基隱些初始化信息,介紹生產(chǎn)廠商、圖形芯片類型等內(nèi)容,不過這個畫面幾乎是一閃而過。系統(tǒng)BIOS接著會查找其它設(shè)備的BIOS程序,找到之后同樣要調(diào)用這些BIOS內(nèi)部的初始化代碼來初始化相關(guān)的設(shè)備。
第四步: 查找完所有其它設(shè)備的BIOS之后,系統(tǒng)BIOS將顯示出它自己的啟動畫面,其中包括有系統(tǒng)BIOS的類型、序列號和版本號等內(nèi)容。
第五步: 接著系統(tǒng)BIOS將檢測和顯示CPU的類型和工作頻率,然后開始測試所有的RAM,并同時在屏幕上顯示內(nèi)存測試的進度,我們可以在CMOS設(shè)置中自行決定使用簡單耗時少或者詳細耗時多的測試方式。
第六步: 內(nèi)存測試通過之后,系統(tǒng)BIOS將開始檢測系統(tǒng)中安裝的一些標準硬件設(shè)備,包括硬盤、CD-ROM、串口、并口、軟驅(qū)等設(shè)備,另外絕大多數(shù)較新版本的系統(tǒng)BIOS在這一過程中還要自動檢測和設(shè)置內(nèi)存的定時參數(shù)、硬盤參數(shù)和訪問模式等。
第七步: 標準設(shè)備檢測完畢后,系統(tǒng)BIOS內(nèi)部的支持即插即用的代碼將開始檢測和配置系統(tǒng)中安裝的即插即用設(shè)備,每找到一個設(shè)備之后,系統(tǒng)BIOS都會在屏幕上顯示出設(shè)備的名稱和型號等信息,同時為該設(shè)備分配中斷、DMA通道和I/O端口等資源。
第八步: 到這一步為止,所有硬件都已經(jīng)檢測配置完畢了,多數(shù)系統(tǒng)BIOS會重新清屏并在屏幕上方顯示出一個表格,其中概略地列出了系統(tǒng)中安裝的各種標準硬件設(shè)備,以及它們使用的資源和一些相關(guān)工作參數(shù)。
第九步: 接下來系統(tǒng)BIOS將更新ESCD(Extended System Configuration Data,擴展系統(tǒng)配置數(shù)據(jù))。ESCD是系統(tǒng)BIOS用來與操作系統(tǒng)交換硬件配置信息的一種手段,這些數(shù)據(jù)被存放在CMOS(一小塊特殊的RAM,由主板上的電池來供電)之中。
通常ESCD數(shù)據(jù)只在系統(tǒng)硬件配置發(fā)生改變后才會更新,所以不是每次啟動機器時我們都能夠看到“Update ESCD… Success”這樣的信息,不過,某些主板的系統(tǒng)BIOS在保存ESCD數(shù)襪判據(jù)時使用了與Windows系統(tǒng)不相同的數(shù)據(jù)格式,于是Windows在它自己的啟動過程中會把ESCD數(shù)據(jù)修改成自己的格式,但在下一次啟動機器時,即使硬件配置沒有發(fā)生改變,系統(tǒng)BIOS也會把ESCD的數(shù)據(jù)格式改回來,如此循環(huán),將會導(dǎo)致在每次啟動機器時,系統(tǒng)BIOS都要更新一遍ESCD,這就是為什么有些機器在每次啟動時都會顯示出相關(guān)信息的原因。
第十步: ESCD更新完畢后,系統(tǒng)BIOS的啟動代碼將進行它的最后一項工作,即根據(jù)用戶指定的啟動順序從軟盤、硬盤或光驅(qū)啟動。
關(guān)于linux程序啟動方式的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)【028-86922220】值得信賴的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌建站設(shè)計,成都高端網(wǎng)站制作開發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營銷讓企業(yè)網(wǎng)站產(chǎn)生價值。
分享文章:深入了解Linux程序啟動方式,讓你的開發(fā)工作更高效!(linux程序啟動方式)
文章分享:http://fisionsoft.com.cn/article/djijggd.html


咨詢
建站咨詢
