簡單地說,Bootloader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段程序,它類似于PC機(jī)中的BIOS程序。通過這段程序,可以完成硬件設(shè)備的初始化,并建立內(nèi)存空間的映射關(guān)系,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),為最終加載系統(tǒng)內(nèi)核做好準(zhǔn)備。
串口是計算機(jī)一種常用的接口,常用的串口有RS-232-C接口。它是于1970年由美國電子工業(yè)協(xié)會(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計算機(jī)終端生產(chǎn)廠家共同制定的用于串行通信的標(biāo)準(zhǔn),它的全稱是“數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通信設(shè)備(DCE)之間串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn)”。
在Linux中對目錄和設(shè)備的操作都等同于文件的操作,因此,大大簡化了系統(tǒng)對不同設(shè)備的處理,提高了效率。Linux中的文件主要分為4種:普通文件、目錄文件、鏈接文件和設(shè)備文件。
本章前面幾節(jié)所述的文件及I/O讀寫都是基于文件描述符的。這些都是基本的I/O控制,是不帶緩存的。而本節(jié)所要討論的I/O操作都是基于流緩沖的,它是符合ANSI C的標(biāo)準(zhǔn)I/O處理,這里有很多函數(shù)讀者已經(jīng)非常熟悉了(如printf()、scantf()函數(shù)等),因此本節(jié)中僅簡要介紹最主要的函數(shù)。
本書在第2章中介紹“ps”的命令時提到過管道,當(dāng)時指出了管道是Linux中一種很重要的通信方式,它是把一個程序的輸出直接連接到另一個程序的輸入,這里仍以第2章中的“ps –ef | grep ntp”為例,描述管道的通信過程,如圖8.2所示
本章首先講解了系統(tǒng)調(diào)用(System Call)、用戶函數(shù)接口(API)和系統(tǒng)命令之間的聯(lián)系和區(qū)別,這也是貫穿本書的一條主線,本書就是按照系統(tǒng)命令、用戶函數(shù)接口(API)系統(tǒng)調(diào)用的順序逐層深入講解,希望讀者能有一個較為深刻的認(rèn)識。
進(jìn)程的概念首先是在20世紀(jì)60年代初期由MIT的Multics系統(tǒng)和IBM的TSS/360系統(tǒng)引入的。在40多年的發(fā)展中,人們對進(jìn)程有過各種各樣的定義?,F(xiàn)列舉較為著名的幾種。
在Linux中創(chuàng)建一個新進(jìn)程的惟一方法是使用fork()函數(shù)。fork()函數(shù)是Linux中一個非常重要的函數(shù),和讀者以往遇到的函數(shù)有一些區(qū)別,因為它看起來執(zhí)行一次卻返回兩個值。難道一個函數(shù)真的能返回兩個值嗎?希望讀者能認(rèn)真地學(xué)習(xí)這一部分的內(nèi)容。
守護(hù)進(jìn)程,也就是通常所說的Daemon進(jìn)程,是Linux中的后臺服務(wù)進(jìn)程。它是一個生存期較長的進(jìn)程,通常獨(dú)立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。守護(hù)進(jìn)程常常在系統(tǒng)引導(dǎo)載入時啟動,在系統(tǒng)關(guān)閉時終止。
通過編寫多進(jìn)程程序,使讀者熟練掌握fork()、exec()、wait()和waitpid()等函數(shù)的使用,進(jìn)一步理解在Linux中多進(jìn)程編程的步驟。
本章主要介紹進(jìn)程的控制開發(fā),首先給出了進(jìn)程的基本概念,Linux下進(jìn)程的基本結(jié)構(gòu)、模式與類型以及Linux進(jìn)程管理。進(jìn)程是Linux中程序運(yùn)行和資源管理的最小單位,對進(jìn)程的處理也是嵌入式Linux應(yīng)用編程的基礎(chǔ),因此,讀者一定要牢牢掌握。
信號是UNIX中所使用的進(jìn)程通信的一種最古老的方法。它是在軟件層次上對中斷機(jī)制的一種模擬,是一種異步通信方式。信號可以直接進(jìn)行用戶空間進(jìn)程和內(nèi)核進(jìn)程之間的交互,內(nèi)核進(jìn)程也可以利用它來通知用戶空間進(jìn)程發(fā)生了哪些系統(tǒng)事件。它可以在任何時候發(fā)給某一進(jìn)程,而無需知道該進(jìn)程的狀態(tài)。
在多任務(wù)操作系統(tǒng)環(huán)境下,多個進(jìn)程會同時運(yùn)行,并且一些進(jìn)程之間可能存在一定的關(guān)聯(lián)。多個進(jìn)程可能為了完成同一個任務(wù)會相互協(xié)作,這樣形成進(jìn)程之間的同步關(guān)系。而且在不同進(jìn)程之間,為了爭奪有限的系統(tǒng)資源(硬件或軟件資源)會進(jìn)入競爭狀態(tài),這就是進(jìn)程之間的互斥關(guān)系。
可以說,共享內(nèi)存是一種最為高效的進(jìn)程間通信方式。因為進(jìn)程可以直接讀寫內(nèi)存,不需要任何數(shù)據(jù)的復(fù)制。為了在多個進(jìn)程間交換信息,內(nèi)核專門留出了一塊內(nèi)存區(qū)。這段內(nèi)存區(qū)可以由需要訪問的進(jìn)程將其映射到自己的私有地址空間。因此,進(jìn)程就可以直接讀寫這一內(nèi)存區(qū)而不需要進(jìn)行數(shù)據(jù)的復(fù)制,從而大大提高了效率。
學(xué)吧
夜是打火機(jī)
18713271819cxy
賈仁明
bu一樣的煙火
mikeniu
chris527
LBSEric
21CI2133
洛奇ing
SIASGUOJIe
逮到一只程序猿
zx66
zhaoyuan
建志的智
sdwfywl
cgyyds
云城a
shaolw
ti-funs
劉劍君
帶偷子
shaoniany
陳震偉
2334599288
helloyyll
怪打野題
liqinglong1023
cxk1998