




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
UNIX操作系統(tǒng)圖9-1UNIX的發(fā)展歷史§1UNIX操作系統(tǒng)的歷史和基本結(jié)構(gòu)圖9-2UNIX操作系統(tǒng)的基本結(jié)構(gòu)§2系統(tǒng)活動與系統(tǒng)調(diào)用UNIX的內(nèi)核為用戶態(tài)程序提供服務(wù)。每一次進(jìn)入內(nèi)核叫做一次系統(tǒng)活動,按引發(fā)這些活動的事件或動作,可分為以下幾類:
·系統(tǒng)調(diào)用;
·硬件中斷;
·硬件自陷;
·軟件引起的自陷或中斷。圖9-3系統(tǒng)調(diào)用是用戶態(tài)程序與系統(tǒng)內(nèi)核的接口§3進(jìn)程管理3.1UNIX進(jìn)程的兩種運(yùn)行狀態(tài)
在某些操作系統(tǒng)中,進(jìn)程分成兩大類:一類是系統(tǒng)進(jìn)程;另一類是用戶進(jìn)程。系統(tǒng)進(jìn)程執(zhí)行操作系統(tǒng)程序,用戶進(jìn)程執(zhí)行用戶程序。UNIX進(jìn)程在處理上既可執(zhí)行操作系統(tǒng)程序(內(nèi)核程序),也可執(zhí)行用戶程序,按照需要在一定時機(jī)進(jìn)行切換。由于操作系統(tǒng)要管理系統(tǒng)中的各種資源和各種活動,而用戶程序卻只應(yīng)在操作系統(tǒng)的管理和控制下,在一定的范圍內(nèi)活動,所以進(jìn)程在執(zhí)行操作系統(tǒng)程序和用戶程序時所處的環(huán)境和特權(quán)應(yīng)有所區(qū)別。3.2進(jìn)程映象和進(jìn)程結(jié)構(gòu)圖9-4UNIX進(jìn)程映象(1)進(jìn)程控制塊PCB在UNIX中可以包括兩部分信息。一部分是不管進(jìn)程是否正在處理機(jī)上運(yùn)行,系統(tǒng)都需要查詢和修改的一些控制信息,這部分信息就是proc數(shù)據(jù)結(jié)構(gòu),可稱其為進(jìn)程基本控制塊,另一部分則相反,當(dāng)進(jìn)程不在處理機(jī)上運(yùn)行時,系統(tǒng)不會對這部分信息進(jìn)行查詢和處理,這部分信息就構(gòu)成了另外一個稱為進(jìn)程擴(kuò)充控制塊的user數(shù)據(jù)結(jié)構(gòu)。
(2)共享正文段進(jìn)程執(zhí)行的程序若用純代碼形式的程序和常數(shù)編寫,則可為若干個進(jìn)程共享執(zhí)行,構(gòu)成共享正文段。
(3)數(shù)據(jù)段進(jìn)程執(zhí)行程序時用到的數(shù)據(jù)構(gòu)成數(shù)據(jù)段。
(4)工作區(qū)(即棧區(qū))進(jìn)程在核心態(tài)下運(yùn)行時的工作區(qū)為核心棧,在用戶態(tài)下運(yùn)行的工作區(qū)為用戶棧。圖9-54.3BSDUNIX進(jìn)程結(jié)構(gòu)表9-1進(jìn)程的proc結(jié)構(gòu)3.3進(jìn)程狀態(tài)表9-2UNIX進(jìn)程狀態(tài)圖9-6進(jìn)程狀態(tài)的變遷fork-建立一個子進(jìn)程,其主要任務(wù)是建立進(jìn)程映象。
swtch-其主要功能是選擇一個處于SRUN可運(yùn)行狀態(tài)、映象在內(nèi)存、并且優(yōu)先級最高的進(jìn)程,準(zhǔn)備將處理機(jī)占用權(quán)交給它。
exit-一個進(jìn)程在執(zhí)行結(jié)束時可調(diào)用exit使自己終止,同時通知父進(jìn)程。
wakeup-其功能是掃描整個proc表,把同一等待原因上的所有進(jìn)程喚醒,使它們變?yōu)镾RUN可運(yùn)行狀態(tài)。
sleep-它可使當(dāng)前執(zhí)行的進(jìn)程放棄處理機(jī),變成等待睡眠狀態(tài)。
stop-調(diào)用stop使處于執(zhí)行狀態(tài)的進(jìn)程進(jìn)入暫停狀態(tài)。
setrun-其主要功能是激活處于SSTOP暫停狀態(tài)的進(jìn)程置為SRUN可運(yùn)行狀態(tài)。3.4進(jìn)程環(huán)境切換及進(jìn)程調(diào)度
為實(shí)現(xiàn)CPU的有效共享,內(nèi)核在進(jìn)程之間進(jìn)行切換,稱為進(jìn)程環(huán)境切換。切換方式有二種:當(dāng)進(jìn)程由于請求一個緊缺資源而被暫停時,便發(fā)生自愿環(huán)境切換(如當(dāng)進(jìn)程向諸如終端一類的低速輸入設(shè)備請求數(shù)據(jù)時,一般該進(jìn)程就要被暫停);當(dāng)進(jìn)程用完了時間片或系統(tǒng)發(fā)現(xiàn)一個較高優(yōu)先級進(jìn)程要執(zhí)行時,便會發(fā)生不自愿的環(huán)境切換。每一種切換將通過不同的進(jìn)程控制原語實(shí)現(xiàn)。調(diào)用sleep()產(chǎn)生自愿環(huán)境切換,而通過直接調(diào)用swtch()可導(dǎo)致不自愿環(huán)境切換。sleep()將按下列步驟進(jìn)行操作:
(1)提高處理器優(yōu)先級,以防止可能產(chǎn)生進(jìn)程狀態(tài)變遷的那些中斷;
(2)確定該進(jìn)程應(yīng)進(jìn)入的睡眠隊(duì)列;
(3)設(shè)置進(jìn)程優(yōu)先級作為該進(jìn)程喚醒時的優(yōu)先級;
(4)把進(jìn)程放入上述選中的睡眠隊(duì)列的末端(見圖9-7(b));(5)調(diào)用swtch()以請求調(diào)度一個新進(jìn)程。
swtch()將按下列步驟進(jìn)行操作:
(1)尋找一個非空運(yùn)行隊(duì)列;
(2)如果有一個非空運(yùn)行隊(duì)列,則取出該隊(duì)列的第1個進(jìn)程(見圖9-7(a));
(3)設(shè)置切換標(biāo)志;
(4)調(diào)用resume()使新進(jìn)程執(zhí)行。
一個進(jìn)程的調(diào)度優(yōu)先級直接由proc結(jié)構(gòu)中的p-cpu和p-nice兩個數(shù)值決定。P-cpu提供了進(jìn)程最近使用CPU的估算值。P-nice值是用戶可設(shè)置的加權(quán)因子,數(shù)值范圍在-20到20之間,p-nice的正常值是0,負(fù)值增大一個進(jìn)程的優(yōu)先級,正值則減小進(jìn)程的優(yōu)先級。
VAX機(jī)每隔40s按下述的等式計算一次優(yōu)先級值,以進(jìn)行進(jìn)程的調(diào)度:3.5進(jìn)程的創(chuàng)建及終止fork()將按下列步驟進(jìn)行操作:
(1)為子進(jìn)程分配一個新的proc結(jié)構(gòu)并初始化;
(2)復(fù)制父進(jìn)程的環(huán)境給子進(jìn)程(為了復(fù)制進(jìn)程,需要請求內(nèi)核的存儲管理機(jī)構(gòu)為之服務(wù),以分配子進(jìn)程運(yùn)行時所需的全部資源)。
(3)調(diào)度子進(jìn)程運(yùn)行,把新的子進(jìn)程放在運(yùn)行隊(duì)列中。
進(jìn)程可以通過exit系統(tǒng)調(diào)用而自愿終止,也可以由于一個信號而不自愿終止。在這兩種情況中,進(jìn)程終止都將產(chǎn)生一個狀態(tài)標(biāo)識碼返回給終止進(jìn)程的父進(jìn)程。在內(nèi)核中,一個進(jìn)程通過調(diào)用exit()終止時,首先要按下列步驟清除該進(jìn)程在核心態(tài)下的執(zhí)行狀態(tài):
(1)取消任一正在進(jìn)行的計時器;
(2)釋放虛存資源;
(3)關(guān)閉所有打開的文件;
(4)處理所有停止的或被跟蹤的子進(jìn)程。3.6進(jìn)程通訊(1)利用基本通訊工具sleep和wakeup等來實(shí)現(xiàn)系統(tǒng)進(jìn)程之間的同步。
(2)利用內(nèi)核提供的“軟中斷”來實(shí)現(xiàn)同一用戶的諸進(jìn)程之間信息的傳輸和同步,這也是一種有效的通訊方式,可以按照預(yù)先規(guī)定好的信號或動作實(shí)行進(jìn)程之間通訊,但只是傳遞少量信息。
(3)利用文件系統(tǒng)生成pipe機(jī)構(gòu)來實(shí)現(xiàn)進(jìn)程通訊(即管理通訊),它可為進(jìn)程之間提供大量信息的傳輸。
(4)提供跟蹤功能。
(5)提供網(wǎng)絡(luò)通訊。圖9-8管套模型§4存儲管理1.VAX虛地址空間圖9-9VAX虛地址空間布局4.1VAX存儲管理硬件2.系統(tǒng)地址轉(zhuǎn)換圖9-10系統(tǒng)虛地址轉(zhuǎn)換3.用戶地址轉(zhuǎn)換圖9-11用戶虛地址轉(zhuǎn)換4.2請頁系統(tǒng)
一個內(nèi)存映象結(jié)構(gòu)具有如下功能:
(1)記錄一個頁組的當(dāng)前使用信息,該信息可用于地址轉(zhuǎn)換。
(2)用空閑頁的內(nèi)存映射表項(xiàng)鏈接在一起形成內(nèi)存空閑鏈表,這個空閑鏈保持LRU順序。
(3)通過內(nèi)存映象表結(jié)構(gòu)進(jìn)行以頁組為單位的封鎖和同步。如缺頁處理中正在進(jìn)行I/O時要封鎖內(nèi)存頁,又如進(jìn)行I/O操作直接讀寫進(jìn)程頁時也要封鎖內(nèi)存頁。
(4)通過內(nèi)存映象表結(jié)構(gòu)可找出內(nèi)容有用的空閑頁。2存儲管理程序
在請頁存儲管理技術(shù)中將使用到一些系統(tǒng)調(diào)用及存儲分配程序。在調(diào)用系統(tǒng)調(diào)用fork時,內(nèi)核復(fù)制父進(jìn)程所有頁的物理副本。緊接著調(diào)用系統(tǒng)調(diào)用exec,當(dāng)內(nèi)核從文件系統(tǒng)中將可執(zhí)行文件讀入內(nèi)存時,首先分配頁表和磁盤塊描述項(xiàng),然后用系統(tǒng)調(diào)用read讀入。內(nèi)存實(shí)際的分配是通過memall()來分配的。新分配的內(nèi)存當(dāng)映射到某些虛地址后才能使用,即本程序?qū)⑼ㄟ^填入一個虛地址范圍來實(shí)現(xiàn)。調(diào)用memall()的參數(shù)為指向該虛址范圍首址的相應(yīng)PTE的指針、頁數(shù)、建立內(nèi)存映象表用的進(jìn)程和類型。對該范圍的每一頁組,memall()通過摘出空閑內(nèi)存鏈的第一項(xiàng)來為其找到內(nèi)存。
內(nèi)存還可以通過vmemall()來分配,它與memall()的區(qū)別:若沒有足夠內(nèi)存可用時memall()返回失敗,而vmemall()則等待內(nèi)存被釋放。釋放內(nèi)存的程序也有兩個:memfree()回收分配給一個虛地址空間的所有內(nèi)存,它假定所有的頁都在內(nèi)存;而vmemfree()只回收一個虛地址范圍內(nèi)在內(nèi)存的那些頁,忽略不在內(nèi)存的頁。
缺頁處理將執(zhí)行pagein()程序,它負(fù)責(zé)所有的缺頁服務(wù)。每次調(diào)用pagein()時要給出產(chǎn)生缺頁的虛地址。pagein()首先找出缺頁地址的PTE并區(qū)分該頁是正文、數(shù)據(jù),還是棧,然后確定該頁可能的狀態(tài):①請求填入;②在內(nèi)存但無效;③被換出。確定頁的類型及狀態(tài)后,pagein()必須取出所需的數(shù)據(jù),把相應(yīng)的PTE置為有效,然后返回以重新執(zhí)行進(jìn)程。
缺頁服務(wù)和其它內(nèi)存要求有時可從空閑鏈中滿足,但漸漸地需要內(nèi)存的回收,因?yàn)?計算機(jī)沒有足夠的內(nèi)存來存放所有頁,因此有必要把某些頁移到外存-對換空間上。43BSD采用LRU算法實(shí)現(xiàn)頁淘汰,進(jìn)程的全部地址空間都可換頁,即使它保持著UNIX的正文、數(shù)據(jù)、棧段的結(jié)構(gòu)。4.3對換
發(fā)生下列情況之一就進(jìn)行對換:
(1)系統(tǒng)內(nèi)存嚴(yán)重短缺,換頁速度已跟不上內(nèi)存要求。
(2)系統(tǒng)頁表變?yōu)樗槠?無法為新進(jìn)程或擴(kuò)展進(jìn)程分配頁表空間。
(3)進(jìn)程已超過20s未活動。
就對換操作來說,主要挑選一個進(jìn)程對換進(jìn)來和選擇要對換出去的進(jìn)程。若有一個以上的被對換出去的進(jìn)程可運(yùn)行,則由swapper對換策略來確定要把哪個進(jìn)程對換進(jìn)來。這將按下列原則賦予一個優(yōu)先級:
(1)已對換出去的時間;
(2)對換出去的長度;
(3)它的p-nice值,以及自上次運(yùn)行以來的睡眠時間?!?I/O系統(tǒng)5.1內(nèi)核I/O結(jié)構(gòu)圖9-12內(nèi)核I/O結(jié)構(gòu)5.2塊設(shè)備緩沖區(qū)(快速緩存)管理及對盤塊的讀寫圖9-13緩沖區(qū)(快速緩存)格式圖9-14緩沖池結(jié)構(gòu)及瞬間映像5.3字符設(shè)備管理圖9-15字符緩沖區(qū)cblock圖9-16clist結(jié)構(gòu)
對字符緩沖區(qū)隊(duì)列可有如下幾種操作:
(1)可從空閑鏈表中分配一個cblock給一個驅(qū)動程序。
(2)可以釋放一個cblock歸還給空閑表。
(3)取字符:移出隊(duì)列中第一個字符,調(diào)正clist的計數(shù)值和首指針。如相應(yīng)的cblock已被取空,則釋放它。
(4)存字符:把一個字符放入該隊(duì)列的末尾,調(diào)正clist的計數(shù)值和尾指針。如果隊(duì)列中的最后一塊cblock已滿,則應(yīng)先分配一個新的cblock,將之鏈入該clist的末尾,并把字符放入新的cblock中去。
(5)內(nèi)核可以從隊(duì)列的開頭一次移走一組字符,即把首塊cblock中的字符全部移走。
(6)內(nèi)核可以把放有字符的一塊cblock鏈入該鏈的末尾?!?文件管理6.1目錄項(xiàng)與i節(jié)點(diǎn)
UNIX系統(tǒng)V的目錄項(xiàng)占用16字節(jié):前14個字節(jié)為文件名,后二個字節(jié)是i節(jié)點(diǎn)號。i節(jié)點(diǎn)(索引節(jié)點(diǎn))的各項(xiàng)內(nèi)容就是本書第六章中講的文件控制塊的主要內(nèi)容,它與目錄項(xiàng)分別駐在磁盤中不同的空間。若干目錄項(xiàng)組成目錄文件,若干i節(jié)點(diǎn)(每個節(jié)點(diǎn)有64個字節(jié))的集合是i節(jié)點(diǎn)區(qū)。如圖9-17所示。圖9-17目錄項(xiàng)與i節(jié)點(diǎn)圖9-184.3BSD目錄項(xiàng)格式6.2文件存儲空間的管理1.空白塊成組鏈接法圖9-19空白塊成組鏈接法
只有在下述兩種情況下,要求訪盤操作:(1)分配空白塊時,當(dāng)內(nèi)存專用區(qū)中索引表只剩下一個空白塊的情況。因該空白塊中存放了下一組各塊的塊號,因此不能立刻將該塊分配掉。這時必須將該塊中存放的下組塊號全部復(fù)制到內(nèi)存專用塊的索引表區(qū)之后,再分配該塊。(2)在釋放空白塊時,如果內(nèi)存專用區(qū)中索引表已存滿規(guī)定的塊數(shù)(如50塊),這時應(yīng)先把索引表的內(nèi)容存入被釋放的空白塊中,并清除索引表,將索引表塊計數(shù)器置1,然后將被釋放的空白塊的塊號記入內(nèi)存專用區(qū)的索引表中。
2.位示圖法
在4.3BSD文件系統(tǒng)結(jié)構(gòu)中,每個磁盤上包含一個或多個文件系統(tǒng)。而磁盤分區(qū)劃分為一個或多個區(qū)域,每一區(qū)域稱為一個柱面組,每個柱面組的塊位示圖以段為單位記錄柱面組可用空間。4.3BSD為確保文件在二次間接情況下創(chuàng)建文件可達(dá)232字節(jié),則確定一個文件可由多個4096字節(jié)的塊組成,這樣做與512或1024字節(jié)的塊長相比,每一次磁盤操作傳輸?shù)臄?shù)據(jù)就增加了若干倍。圖9-204096/1024文件系統(tǒng)塊和段分布的例子6.3打開文件
UNIX在系統(tǒng)內(nèi)存區(qū)設(shè)置了一個含有100個表目的活動i節(jié)點(diǎn)表并由系統(tǒng)動態(tài)分配。每個打開文件都占有一個表目,用來存放相應(yīng)的活動(內(nèi)存)i節(jié)點(diǎn)。一個活動i節(jié)點(diǎn)的主體是從對應(yīng)的盤i節(jié)點(diǎn)中復(fù)制而來。系統(tǒng)還在內(nèi)存設(shè)置了一個含有100個表目的系統(tǒng)打開文件表,表目項(xiàng)包含:活動i節(jié)點(diǎn)指針、文件操作方式、讀/寫位移量。多個系統(tǒng)打開文件表表目可對應(yīng)同一個活動i節(jié)點(diǎn)。UNIX為每個進(jìn)程在user結(jié)構(gòu)中設(shè)置了一個進(jìn)程打開文件表u-ofile[15],它含有15個表目,即允許一個進(jìn)程最多打開15個文件。表目內(nèi)容為文件指針fp,它指向系統(tǒng)打開文件表中的相應(yīng)表目。6.4文件卷的動態(tài)裝卸
UNIX允許文件卷動態(tài)裝卸,并允許將卷裝在任意一級文件目錄上,這給用戶提供了很大的靈活性。一個卷(存貯設(shè)備)可由高級用戶用系統(tǒng)調(diào)用命令為卷裝入文件目錄的某一級上建立一個特殊空文件,用來存放卷的根目錄。然后用戶就可以用mount系統(tǒng)調(diào)用將某個卷安裝于此空文件處,以后此卷就與文件系統(tǒng)融為一體。文件系統(tǒng)可以像在目錄的其他任何地方一樣在卷內(nèi)建立和撤銷文件。當(dāng)用戶不再使用此卷或要換上新卷時,可用系統(tǒng)調(diào)用umount將此卷卸掉。卷內(nèi)目錄上的所有文件都同時被卸下。文件系統(tǒng)內(nèi)不再有這些文件。用戶還可以再將新卷安裝于此處。因此,在使用卷內(nèi)文件前,用戶必須知道當(dāng)前安裝卷的內(nèi)容,裝錯了卷會找不到所需文件。圖9-21卷的安裝6.5文件保護(hù)
1.兩種用戶
UNIX把使用系統(tǒng)的人分成兩種用戶。一種是特權(quán)用戶,他們是用root名注冊進(jìn)入系統(tǒng)的人,或者用su命令從普通用戶轉(zhuǎn)為特權(quán)用戶的人。由于根目錄一般都有口令,因此,特權(quán)用戶應(yīng)當(dāng)知道根目錄的口令,而不準(zhǔn)他人進(jìn)入根目錄或改變其身份。特權(quán)用戶在屏幕上的提示符是“?!?。系統(tǒng)的另一種用戶是普通用戶,他們是用自己定義的名字注冊進(jìn)入系統(tǒng)的,是在“/usr”目錄下各自的目錄中工作的人。普通用戶和終端不是一一對應(yīng)的,他們可以使用任意一臺終端,即普通用戶的數(shù)量不受終端數(shù)量的限制。
2.文件的存取權(quán)及其改變所屬權(quán)的命令
UNIX系統(tǒng)對一個文件的操作規(guī)定有三種不同的存取權(quán),系統(tǒng)又把使用者分成三個等級。于是每個文件就能出現(xiàn)九種存取權(quán):§7系統(tǒng)初啟
1.系統(tǒng)自舉
圖9-22boot程序在內(nèi)存中的位置
2.內(nèi)核初始化
(1)初始化期間系統(tǒng)采取的第一步是由匯編語言代碼來實(shí)現(xiàn)的,這一工作與機(jī)器密切相關(guān),它包括:
·建立運(yùn)行棧;
·標(biāo)識執(zhí)行系統(tǒng)的CPU類型;
·計算物理內(nèi)存總量;
·使虛擬地址轉(zhuǎn)換硬件成為可用;
·初始化存儲管理硬件;
·初始化0#進(jìn)程的硬件環(huán)境;
·調(diào)用系統(tǒng)的C程序初始入口。
(2)與機(jī)器相關(guān)的初始化。在匯編語言代碼完成它的工作之后,它調(diào)用第一個用C語言寫的內(nèi)核程序main()。它的主要功能是清理內(nèi)存空間,對某些系統(tǒng)數(shù)據(jù)結(jié)構(gòu)進(jìn)行初始化處理,創(chuàng)建0#、1#進(jìn)程。
main()程序立即調(diào)用startup()程序去做與機(jī)器相關(guān)的初始化,其任務(wù)包括:
·信息緩沖區(qū)的初始化;
·為系統(tǒng)數(shù)據(jù)結(jié)構(gòu)分配內(nèi)存;
·系統(tǒng)的內(nèi)存分配程序的初始化;
·I/O設(shè)備的自動配置和初始化。在調(diào)用startup()返回以后,還要對機(jī)器的幾個專用硬件部分進(jìn)行初始化。
(3)與機(jī)器無關(guān)的初始化。經(jīng)過以上幾步,就為系統(tǒng)結(jié)束初始化過程并啟動某些進(jìn)程做好了準(zhǔn)備工作。上面提到的startup()程序,在其返回后,main()的第一個動作就是建立0#進(jìn)程的環(huán)境。UNIX操作系統(tǒng)是否能正常運(yùn)行在很大程度上依仗于0#和1#進(jìn)程的工作,它們與其它進(jìn)程不同,不是用系統(tǒng)調(diào)用fork,而是在本階段由核心創(chuàng)建的。0#進(jìn)程最終將實(shí)現(xiàn)虛存系統(tǒng)的對換策略,proc表中的第一項(xiàng)分配給0#進(jìn)程,并把該進(jìn)程標(biāo)記為可運(yùn)行,然后把它安裝為當(dāng)前運(yùn)行進(jìn)程(執(zhí)行狀態(tài))。
0#進(jìn)程建立好以后,調(diào)用有關(guān)程序去初始化每個系統(tǒng)數(shù)據(jù)結(jié)構(gòu):如用vminit()子程序建立請頁系統(tǒng)使用的各個參數(shù);磁盤限量資源控制系統(tǒng)初始化(如快速緩存的初始化);通過調(diào)用startrtclock()進(jìn)行時鐘初始化(43BSD按100Hz實(shí)時時鐘運(yùn)行);通過調(diào)用mbinit()來初始化網(wǎng)絡(luò)存儲管理系統(tǒng)等等。最后,系統(tǒng)為執(zhí)行用戶態(tài)程序做準(zhǔn)備,將通過調(diào)用newproc()創(chuàng)建1#進(jìn)程,然后系統(tǒng)把控制轉(zhuǎn)向1#進(jìn)程。為了使操作系統(tǒng)編制得比較緊湊,1#進(jìn)程被設(shè)計成一個一般的用戶進(jìn)程,在用戶態(tài)下運(yùn)行。3.各終端進(jìn)程的初啟
(1)執(zhí)行/etc/init程序。1#進(jìn)程生成時,它基本上復(fù)制了0#進(jìn)程的映象,沒有在用戶態(tài)下的運(yùn)行部分?,F(xiàn)在既然設(shè)計成用戶進(jìn)程,所以借助系統(tǒng)調(diào)用改變其映象,增加在用戶態(tài)下運(yùn)行部分。轉(zhuǎn)而執(zhí)行/etc/init程序,為每個終端創(chuàng)建一個子進(jìn)程,使用戶能獲得系統(tǒng)對他的服務(wù)。1#進(jìn)程執(zhí)行/etc/init時,先從/etc/ttys中讀出一個有效終端設(shè)備名,然后為其生成一個子進(jìn)程。這一子進(jìn)程打開了該終端設(shè)備,并形成了該進(jìn)程的標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和出錯信息輸出文件。
(2)執(zhí)行/etc/geffy程序。子進(jìn)程接著也要改換自己的映象轉(zhuǎn)而執(zhí)行/etc/getty。該程序主要功能是按照相應(yīng)終端的特性設(shè)置終端設(shè)備表中有關(guān)部分。(3)執(zhí)行/etc/login。getty最后讀入注冊名,并調(diào)用/etc/login程序完成注冊的一系列工作。login程序負(fù)責(zé)用戶登入系統(tǒng),它由/etc/getty調(diào)用,調(diào)用時帶有用戶的注冊名。login程序提示用戶打入口令,如果由用戶提供的口令加密后與記錄在總口令文件/etc/passwd中的值相同,login就在記帳文件中寫一個報到記錄,按照口令文件和/etc/group文件中所指定的內(nèi)容初始化用戶和組標(biāo)識符(uid和gid)。
(4)最后終端進(jìn)程又改換映象轉(zhuǎn)而執(zhí)行shell命令語言解釋程序,開始用戶和系統(tǒng)在鍵盤命令級上的對話過程。至此,完成了UNIX系統(tǒng)的初啟過程。一旦有某個用戶輸入一個命令后,則引起鍵盤輸入中斷,激活對應(yīng)的終端進(jìn)程。終端進(jìn)程再通過建立命令處理子進(jìn)程來執(zhí)行命令。這樣,整個系統(tǒng)就活動起來了。圖9-23UNIX初啟后進(jìn)程族§8shell(外殼)8.1shell命令的使用方式
shell命令行的一般格式是:commandarg1,arg2,…,argn其中,command是命令名,其后是參數(shù)表。有些命令是帶參數(shù)的,有些命令是可不帶參數(shù)的或參數(shù)是可選的。
用戶也可將若干shell命令編輯成一個命令文件,稱作shell過程。一個shell過程可被隨時調(diào)用執(zhí)行,當(dāng)需要執(zhí)行該過程時,使用命令行:$sh
comfile
或%csh
comfile其中,sh或csh是命令名,表示執(zhí)行shell過程,comfile是shell過程名。shell語言的一大特點(diǎn)是,它具有程序設(shè)計語言的一些基本特性,例如,shell支持if、then、case、while、for等控制流,還具有參數(shù)傳遞、變量和字符串替換等功能。
8.2shell命令的處理
UNIX采用生成子進(jìn)程的方法執(zhí)行shell命令。在系統(tǒng)初啟后,系統(tǒng)為每個用戶終端建立一個shell進(jìn)程,這個進(jìn)程的任務(wù)就是接收用戶鍵入的shell命令并執(zhí)行該命令。具體處理是,接收鍵入命令后,這個shell進(jìn)程將根據(jù)命令碼和參數(shù),建立一個子進(jìn)程。然后把自身掛起等待子進(jìn)程執(zhí)行結(jié)束。當(dāng)子進(jìn)程完成后,返回主進(jìn)程。以后主進(jìn)程又可接收下一條鍵入命令,再建立子進(jìn)程。一般情況下,整個對話過程都是按照這種方式進(jìn)行。在這種方式下,當(dāng)前命令未執(zhí)行結(jié)束之前,系統(tǒng)不能接收下一條命令。由于UNIX用建立子進(jìn)程代替一般系統(tǒng)轉(zhuǎn)入子程序的方法,因此,UNIX很容易實(shí)現(xiàn)命令并行處理。即主進(jìn)程建立子進(jìn)程后,不再掛起等待,而是立刻繼續(xù)運(yùn)行,接收下一條命令。子進(jìn)程轉(zhuǎn)入后臺繼續(xù)執(zhí)行。8.3shell的高級功能
具有轉(zhuǎn)入后臺執(zhí)行功能的命令稱為后臺命令。后臺命令的標(biāo)記是在一般shell命令的末尾,加上符號“&”。shell在處理中,遇到“&”字符時,主進(jìn)程不再掛起等待,并立刻輸出提示符(‘$’或‘%’)準(zhǔn)備接收下一條鍵入命令。實(shí)現(xiàn)了后臺命令和shell并發(fā)運(yùn)行。例如,我們希望在編譯C語言源程序pgm.c時,又希望編輯letter文件??纱蛉隿cpgm.c&$edletter2.標(biāo)準(zhǔn)I/O重新定向
(1)輸出改向。在shell命令行中,加入‘>filename’時,可把輸出標(biāo)準(zhǔn)設(shè)備改為filename所定義的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)生國防教育合作協(xié)議
- XX廣告噴繪制作合同5篇
- 醫(yī)療居間服務(wù)合同范本
- 華為配件采購合同范本
- 個人辭職申請報告
- 個人車位轉(zhuǎn)讓合同
- 護(hù)理學(xué)試題(含答案)
- 醫(yī)療房屋租賃合同范本
- 保健按摩師初級題庫+參考答案
- 公司美甲店入股合同范本
- 外研版小學(xué)英語五年級下冊課文翻譯
- 口語教程4整套課件完整版教學(xué)教程最全電子講義教案
- 高壓氧艙課件
- 加德納多元智能測評量表【復(fù)制】
- 譯林英語四年級下冊4B各單元教學(xué)反思
- QC成果提高大跨度多節(jié)點(diǎn)曲面鋼桁架一次安裝合格率
- 國家電網(wǎng)有限公司十八項(xiàng)電網(wǎng)重大反事故措施(修訂版)
- 環(huán)氧乙烷固定床反應(yīng)器課程設(shè)計
- 班、團(tuán)、隊(duì)一體化建設(shè)實(shí)施方案
- 如何建構(gòu)結(jié)構(gòu)性思維 課后測試
- 施工方案(行車拆除)
評論
0/150
提交評論