




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
UNIX系統內核結構10.1UNIX系統概述10.1.1UNIX系統的發展史1.UNIX系統的發展2.兩大集團對峙3.網路操作系統UNIX10.1.2UNIX系統的特徵開放性2)多用戶、多任務環境3)功能強大,實現高效4)提供了豐富的網路功能5)支持多處理器功能10.1.3UNIX系統的內核結構圖10-1UNIX核心的框圖1.進程控制子系統進程控制。(2)進程通信。(3)記憶體管理。(4)進程調度。2.檔子系統檔管理。(2)高速緩衝機制。(3)設備驅動程式。10.2進程的描述和控制10.2.1進程控制塊PCB在UNIX系統Ⅴ中,把進程控制塊分為四部分:(1)進程表項。(2)U區。(3)進程區表。(4)系統區表。1.進程表項(ProcessTableEntry)
進程識別字(PID)。(2)用戶識別字(UID)。(3)進程狀態。(4)事件描述符。(5)進程和U區在內存或外存的地址。(6)軟中斷資訊。(7)計時域。(8)進程的大小。(9)偏置值nice。(10)P-Link指針。(11)指向U區進程正文、數據及棧在內存區域的指針。2.U區(UArea)進程表項指針。(2)真正用戶識別字u-ruid(realuserID)。(3)有效用戶識別字u-euid(effectiveuserID)。(4)用戶檔描述符表。(5)當前目錄和當前根。(6)計時器。(7)內部I/O參數。(8)限制字段。(9)差錯字段。(10)返回值。(11)信號處理數組。3.系統區表(SystemRegionTable)區的類型和大小。(2)區的狀態。(3)區在物理記憶體中的位置。(4)引用計數。(5)指向檔索引結點的指針。4.本進程區表(PerProcessRegionTable)
圖10-2進程區表項、系統區表項和區的關係圖10-3進程的數據結構10.2.2進程狀態與進程映像1.進程狀態圖10-4進程的狀態轉換2.進程映像用戶級上下文2)寄存器上下文程式寄存器。(2)處理機狀態寄存器(PSR)。(3)棧指針。(4)通用寄存器。3)系統級上下文靜態部分。(2)動態部分。10.2.3進程控制1.fork系統調用為新進程分配一個進程表項和進程識別字。(2)檢查同時運行的進程數目。(3)拷貝進程表項中的數據。(4)子進程繼承父進程的所有檔。(5)為子進程創建進程上下文。(6)子進程執行。2.exec系統調用圖10-5execⅤ的參數組織方式3.exit系統調用
通常,父進程在創建子進程時,應在進程的末尾安排一條exit,使子進程能自我終止。內核須為exit完成以下操作:(1)關閉軟中斷。(2)回收資源。(3)寫記賬資訊。(4)置進程為“僵死”狀態。4.wait系統調用wait系統調用用於將調用進程掛起,直至其子進程因暫停或終止而發來軟中斷信號為止。如果在wait調用前,已有子進程暫停或終止,則調用進程做適當處理後便返回。核心對wait調用做以下處理:核心查找調用進程是否還有子進程,若無,便返回出錯碼;如果找到一個處於“僵死”狀態的子進程,便將子進程的執行時間加到其父進程的執行時間上,並釋放該子進程的進程表項;如果未找到處於“僵死”狀態的子進程,則調用進程便在可被中斷的優先順序上睡眠,等待其子進程發來軟中斷信號時被喚醒。10.2.4進程調度與切換1.引起進程調度的原因首先,由於UNIX系統是分時系統,因而其時鐘中斷處理程式須每隔一定時間,便對要求進程調度程式進行調度的標誌runrun予以置位,以引起調度程式重新調度。其次,當進程執行了wait、exit及sleep等系統調用後要放棄處理機時,也會引起調度程式重新進行調度。此外,當進程執行完系統調用功能而從核心態返回到用戶態時,如果系統中又出現了更高優先順序的進程在等待處理機時,內核應搶佔當前進程的處理機,這也會引起調度。2.調度演算法進程調度,在此是採用動態優先數輪轉調度演算法。調度程式在進行調度時,首先從處於“記憶體就緒”或“被搶佔”狀態的進程中,選擇一個其優先數最小(優先順序最高)的進程。若此時系統中(同時)有多個進程都具有相同的最高優先順序,則內核將選擇其中處於就緒狀態或被搶佔狀態最久的進程,將它從其所在佇列中移出,並進行進程上下文的切換,恢復其運行。
3.進程優先順序的分類
UNIX系統把進程的優先順序分成兩類,第一類是核心優先順序,又可進一步把它分為可中斷和不可中斷兩種。當一個軟中斷信號到達時,若有進程正在可中斷優先順序上睡眠,該進程將立即被喚醒;若有進程處於不可中斷優先順序上,則該進程繼續睡眠。對諸如“對換”、“等待磁片I/O”、“等待緩衝區”等幾個優先順序,都屬於不可中斷優先順序;而“等待輸入”、“等待終端輸出”、“等待子進程退出”的幾個優先順序,都是可中斷優先順序。另一類是用戶優先順序,它又被分成n+1級,其中第0級為最高優先順序,第n級的優先順序最低。4.進程優先數的計算
其中,基本用戶優先數即proc結構中的偏移值nice,可由用戶將它設置成0~40中的任一個數。一旦設定後,用戶僅能使其值增加,特權用戶才有權減小nice的值。而最近使用CPU的時間,則是指當前佔有處理機的進程本次使用CPU的時間。內核每隔16.667ms,便對該時間做加1操作,這樣,佔有CPU的進程其優先數將會隨著它佔有CPU時間的增加而加大,相應地,其優先順序便隨之降低。5.進程切換
在OS中,凡要進行中斷處理和執行系統調用時,都將涉及到進程上下文的保存和恢復問題,此時系統所保存或恢復的上下文都是屬於同一個進程的。而在進程調度之後,內核所應執行的是進程上下文的切換,即內核是把當前進程的上下文保存起來,而所恢復的則是進程調度程式所選中的進程的上下文,以使該進程能恢復執行。10.3進程的同步與通信10.3.1sleep與wakeup同步機制1.sleep過程
進入sleep過程後,核心首先保存進入睡眠時的處理機運行級,再提高處理機的運行優先順序,來遮罩所有的中斷,接著將該進程置為“睡眠”狀態,將睡眠地址保存在進程表項中,並將該進程放入睡眠佇列中。如果進程的睡眠是不可中斷的,做了進程上下文的切換後,進程便可安穩地睡眠。當進程被喚醒並被調度執行時,將恢復處理機的運行級為進入睡眠時的值,此時允許中斷處理機。2.wakeup過程該過程的主要功能,是喚醒在指定事件佇列上睡眠的所有進程,並將它們放入可被調度的進程佇列中。如果進程尚未被裝入記憶體,應喚醒對換進程;如果被喚醒進程的優先順序高於當前進程的優先順序,則應重置調度標誌。最後,在恢復處理機的運行級後返回。10.3.2信號(signal)機制
1.信號機制的基本概念
信號機制主要是作為在同一用戶的諸進程之間通信的簡單工具。信號本身是一個1~19中的某個整數,用來代表某一種事先約定好的簡單消息。信號機制是對硬中斷的一種模擬。
信號機制與中斷機制之間的相似之處表現為:信號和中斷都同樣採用非同步通信方式,在檢測出有信號或有中斷請求時,兩者都是暫停正在執行的程式而轉去執行相應的處理程式,處理完後都再返回到原來的中斷點;再有是兩者對信號或中斷都可加以遮罩。信號與中斷兩機制之間的差異是:中斷有優先順序,而信號機制則沒有,即所有的信號都是平等的;再者是信號處理程式是在用戶態下運行的,而中斷處理程式則是在核心態下運行;還有,中斷回應是及時的,而對信號的回應通常都有較長的時間延遲。2.信號機制的功能1)發送信號
2)設置對信號的處理方式
(1)func=1時,進程對sig類信號不予理睬,亦即遮罩了該信號。
(2)func=0,即為缺省值時,進程在收到sig信號後應自我終止。
(3)func為非0、非1類整數時,就把func的值作為指向某信號處理程式的指針。
3)對信號的處理10.3.3管道機制管道的類型無名管道(UnnamedPipes)
2)有名管道(NamedPipes)
2.對無名管道的讀寫對pipe檔大小的限制2)進程互斥3)進程寫管道4)進程讀管道10.3.4消息機制1.消息和消息佇列1)消息(message)圖10-6消息機制中的數據結構2)消息佇列
當一個進程收到由其他多個進程發來的消息時,可將這些消息排成一個消息佇列,每個消息佇列有一個稱為關鍵字key的名稱,它是由用戶指定的。每個消息佇列還有一個消息佇列描述符,其作用與用戶檔描述符一樣,以方便用戶和系統對消息佇列的訪問。在一個系統中可能有若干個消息佇列,由所有的消息佇列的頭標組成一個頭標數組。2.消息佇列的建立與操作1)消息佇列的建立在一個進程要利用消息機制與其它進程通信之前,應利用系統調用msgget()先建立一個指名的消息佇列。對於該系統調用,核心將搜索消息佇列頭標表,確定是否有指定名字的消息佇列。若無,核心將分配一個新的消息佇列頭標,並對它進行初始化,然後給用戶返回一個消息佇列描述符;否則,它只是檢查該消息佇列的許可權後便返回。2)消息佇列的操縱(1)用於查詢有關消息佇列的情況,如佇列中的消息數目、佇列中的最大字節數、最後一個發送消息的進程的識別字、發送時間等。
(2)用於設置和改變有關消息佇列的屬性,如改變消息佇列的用戶識別字、或用戶組識別字、消息佇列的許可權等。
(3)消除消息佇列的識別字。3.消息的發送和接收
1)消息的發送當進程要與其它進程通信時,可利用msgsnd()系統調用來發送消息。對於msgsnd()系統調用,核心檢查消息佇列描述符和許可權是否合法、消息長度是否超過系統規定的長度。通過檢查後,核心為消息分配消息數據區,並將消息從用戶消息緩衝區拷貝到消息數據區。分配消息首部,將它鏈入消息佇列的末尾;在消息首部中填寫消息的類型、大小以及指向消息數據區的指針等;還要修改消息佇列頭標中的數據(如消息佇列中的消息數、位元組數等。然後,喚醒在等待消息到來的睡眠進程。2)消息的接收進程可利用msgrcv()系統調用,從指定消息佇列中讀一個消息。對於msgrcv()系統調用,是先由核心檢查消息佇列識別字和許可權,繼而根據用戶指定的消息類型做相應的處理。消息類型msgtyp的參數可能有三種情況:當msgtyp=0時,核心尋找消息佇列中的第一個消息,並將它返回給調用進程;當msgtyp為正整數時,核心返回指定類型的第一個消息;當msgtyp為負整數時,核心應在其類型值小於或等於msgtyp絕對值的所有消息中,選出類型值最低的第一個消息返回。如果所返回消息的大小等於或小於用戶的請求,核心便將消息正文拷貝到用戶區,再從佇列中刪除該消息,並喚醒睡眠的發送進程;如果消息長度比用戶要求的大,則系統返回出錯資訊。10.3.5共用存儲區機制1.共用存儲區圖10-7利用共用存儲區進行通信2.共用存儲區的建立與操縱1)共用存儲區的建立當進程要利用共用存儲區與另一進程進行通信時,須先利用系統調用shmget()建立一塊共用存儲區,並提供該共用存儲區的名字key和共用存儲區以位元組為單位的長度size等參數。若系統中已經建立了指名的共用存儲區,則該系統調用將返回該共用存儲區的描述符shmid;若尚未建立,便為進程建立一個指定大小的共用存儲區。2)共用存儲區的操縱如同消息機制一樣,可以用shmctl()系統調用對共用存儲區的狀態資訊進行查詢,如其長度、所連接的進程數、創建者識別字等;也可設置或修改其屬性,如共用存儲區的許可權、當前連接的進程計數等;還可用來對共用存儲區加鎖或解鎖,以及修改共用存儲區識別字等。3.共用存儲區的附接與斷開
在進程已經建立了共用存儲區或已獲得了其描述符後,還須利用系統調用shmat()將該共用存儲區附接到用戶給定的某個進程的虛地址shmaddr上,並指定該存儲區的訪問屬性即指明該區是只讀,還是可讀可寫。此後,此共用存儲區便成為該進程虛地址空間的一部分。進程可採取與對其他虛地址空間一樣的存取方法來訪問。當進程不再需要該共用存儲區時,再利用系統調用shmdt()把該區與進程斷開。10.3.6信號量集機制1.信號量與信號量集1)信號量在UNIX系統中規定,每個信號量有一個可用來表示某類資源數目的信號量值和一個操作值,該操作值可為正整數、零或負整數三種情況之一。傳統的信號量機構是對信號量施加wait及signal操作。而在UNIX系統中則並未採用wait及signal,而是利用semop()系統調用對指定的信號量施加操作。此外,還可利用semget()來建立信號量及利用semctl()系統調用對信號量進行操縱。2)信號量集在一個信號量集中,通常都包含有若干個信號量。對這組信號量的操作方式應當是原子操作方式,此即,把對這組信號量視為一個整體,要麼全做,要麼全不做。如果核心不能完成對這組所有信號量的操作,則核心應將已經操作過的信號量恢復到操作前的狀態,這樣便可實現要麼全做、要麼全不做的原子操作方式。2.信號量集的數據結構1)信號量表信號量表是信號量的結構數組。在系統Ⅴ中,每個信號量用一個信號量結構表示。其中,包括信號量值semval及最近一次對信號量進行操作的進程識別字sempid、等待該信號量值增加的進程數等。2)信號量集表圖10-8信號量集表與信號量表3.系統調用
在信號量機制中,同樣也提供了若干條系統調用,分別用於對信號量執行各種操作。
1)semget()系統調用用戶可利用該系統調用來建立信號量集。用戶應提供信號量的名字、信號量集中信號量的數目等。若信號量集的建立成功,將返回信號量集的描述符semid。2)semop()系統調用該系統調用可用來對信號量集進行操作。用戶需提供信號量集的描述符、信號量的編號,即信號量在信號量集中的序號,以及所要施加操作的運算元semop。內核根據semop來改變信號量的值。當semop為正值時,便將該正值加到信號量的值上。當semop為負值時,若信號量的值大於semop的絕對值,應將該負值加到信號量值上;否則,操作失敗,內核將已經操作過的信號量恢復到該系統調用開始執行時的值。10.4存儲器管理10.4.1請求調頁管理的數據結構1.頁表和磁片描述表1)頁表圖10-9頁表項和磁片描述表項物理頁號年齡寫時拷貝修改位訪問位有效位保護(a)頁表項對換設備號設備塊號記憶體類型(b)盤塊說明2.頁框數據表和對換使用表1)頁框數據表
·頁狀態:指示該頁的拷貝是在對換設備上,還是在可執行檔中。
·記憶體引用計數:指出引用該頁面的進程數目。
·邏輯設備:指含有此拷貝的邏輯設備,它可以是對換設備,也可以是檔系統。
·塊號:當邏輯設備為對換設備時,這是盤塊號;而當邏輯設備為檔系統時,這是指檔的邏輯塊號。
·指針1:指向空閒頁鏈表中的下一個頁框數據表的指針。
·指針2:指向散列隊列中下一個頁框數據表的指針。圖10-10頁框數據表項及其散列隊列2)對換使用表圖10-11四種數據結構之間的關係10.4.2換頁進程1.增加有效頁的年齡一個頁可計數的最大年齡,取決於它的硬體設施。對於只設置兩位作為年齡域的頁,其有效頁的年齡只能取值為0、1、2和3。當該頁的年齡為0、1、2時,該頁處於不可換出狀態;而當其年齡達到3時,該頁便為換出狀態。每當記憶體中的空閒頁面數低於某規定的低限時,核心便喚醒換頁進程,由換頁進程去檢查記憶體中的每一個活動的、非上鎖的區,對所有有效頁的年齡字段加1。對於那些其年齡已增至3的頁,便不再加1,而是將它們換出。如果這種頁已被進程訪問過,便將其年齡域中的年齡降為0。2.對換出頁的幾種處理方式(1)若在對換設備上已有被換出頁的拷貝,且該頁的內容未被修改,此時,核心只須將該頁頁表項中的有效位清零,並將頁框數據表項中的引用計數減1,最後將該頁表項放入空閒頁鏈表中。
(2)若在對換設備上沒有被換出頁的拷貝,則換出進程應將該頁寫到對換設備上。
(3)雖然在對換設備上已有換出頁的副本,但該頁的內容已被修改過,此時核心應將該頁在對換設備上原來佔有的空間釋放,再重新將該頁拷貝到對換設備上,使在對換設備上的拷貝內容總是最新的。3.將換出頁面寫到對換設備上
當在換出頁面鏈表中的頁面數已達到規定值時,核心應將它們換出。為此,應首先為它們分配一個連續的對換空間,以便一起將它們換出;但如果在對換設備上沒有足夠大的連續空間,而其空閒存儲空間的總和又大於64KB時,核心可採取每次換出一頁的方式將它們換出。每當核心向對換設備上寫一個頁時,須首先清除該頁頁表項的有效位,並將頁框數據表項中的引用計數減1。若引用計數為0,表明已無其他進程再引用該頁,核心便將其頁框數據表項鏈入空閒頁鏈表的尾部。若雖引用計數不為0,表明仍有進程共用該頁,但如果該頁已長期未被訪問過,則也須將該頁換出。最後,核心將分配給該頁的對換空間的地址填入相應的磁片描述表項中,並將對換使用表中的計數加1。10.4.3請求調頁缺頁在可執行檔上2.缺頁在對換設備上3.缺頁在內存頁面緩衝區中10.5設備管理10.5.1字元設備緩衝區管理1.空閒字元緩衝區佇列圖10-12空閒字元緩衝區佇列2.空閒字元緩衝區的分配與回收在字元設備進行I/O時,內核可利用getcf過程從空閒字元緩衝區佇列中取得一個空閒緩衝區,若佇列空,表明已無空閒緩衝區可提供,便返回;否則,從隊首取得一個空閒緩衝區,並把指向該緩衝區的指針bp返回給調用者。由於空閒緩衝區佇列屬於臨界資源,故還須採取互斥訪問措施,即,在過程開始處,將處理機的優先順序提升為6,在取得空緩衝區之後,再恢復處理機的優先順序。3.設備的字元緩衝區佇列(1)getc過程。該過程用於從一個clist結構的隊首指針所指示的字元緩衝佇列中,取出為首的字元,然後修改該隊列的可用字元計數和隊首指針。當取完一個緩衝區中的所有字元時,將釋放該緩衝區。該過程的返回值是取出的字元。
(2)putc過程。該過程用於將一個字元C放入設備的指定字元緩衝區佇列的末尾。若此時該隊列空、或佇列的最後一個緩衝區已滿,且空閒字元緩衝區佇列也空,該過程無法將字元放入隊列中,則返回“-1”。(3)getcb過程。該過程用於從指定的設備字元緩衝區佇列中,取出第一個緩衝區,並將該隊列的可用字元計數減去第一個緩衝區中的字元數,然後返回指向該緩衝區的指針bp。若該緩衝區已是該隊列中惟一的緩衝區,則置隊尾指針為空。
(4)putcb過程。該過程用於將由bp所指向的緩衝區放入指定的設備字元緩衝區佇列的末尾,然後將該隊列的可用字元計數加上bp緩衝區中的字元數後返回。10.5.2塊設備緩衝區管理1.盤塊緩衝區及其首部圖10-13緩衝首部設備號塊號狀態緩衝區指針散列隊列的前向指針散列隊列的後向指針空閒表上的前向指針空閒表上的後向指針2.盤塊緩衝池結構圖10-14空閒佇列(鏈)及散列隊列3.盤塊緩衝區的分配(1)getblk()過程。該過程用於從空閒緩衝區佇列中獲得任一空閒緩衝區。該過程首先檢查空閒塊緩衝佇列是否為空,若空,便調用sleep過程睡眠等待,直至在空閒塊緩衝佇列中出現空閒緩衝區為止;否則,從空閒塊緩衝佇列中摘下第一個緩衝區。若在其緩衝首部中還有延遲寫標誌,則還須調用bdwrite過程,將此緩衝區中的數據寫回到磁片中,再從空閒佇列中取得一個空緩衝區;否則,便將b-flag中的b[CD*2]busy標誌置為1,並返回指向該緩衝區的指針bp。(2)getblk(dev,blkno)過程。該過程用於為指定設備dev和盤塊號為blkno的盤塊申請一個緩衝區。核心首先檢查要讀入的盤塊內容是否已在某個緩衝區中,若發現已在某緩衝區中,便不再從磁片上讀;否則,核心須從磁片上將數據讀入,這時才需為其分配一個空緩衝區。類似地,當要把數據寫入一特定盤塊時,核心先檢查該盤塊的內容是否已在某緩衝區,僅當該塊的內容尚不在緩衝區中時,才需調用getblk()過程,分配一個空緩衝區。4.盤塊緩衝區的回收當核心用完某緩衝區時,可調用brelse過程將之收回。此前,可能有些進程因等待使用該緩衝區而睡眠,此時,釋放者進程應將睡眠佇列的隊首進程喚醒。此外,還有可能有進程因空閒鏈表空而處於等待狀態,同樣也應將之喚醒。如果在所釋放的緩衝區中的數據是有效的,為使以後在某進程需要它時,也能直接從緩衝區中讀出而不必啟動磁片的I/O操作,可將該緩衝區鏈入空閒鏈表的末尾;否則(緩衝區中數據無效),應將它鏈入空閒佇列的頭部。空閒鏈表屬於臨界資源,為了保證對它操作的互斥性,UNIX系統通過提高處理機的運行級對中斷加以遮罩的方法來實現。10.5.3內核與驅動程式介面1.設備開關表的作用圖10-15設備開關表及系統調用和驅動程式間的介面2.塊設備開關表
函數表項openclosestrategy01gdopengtopengdclosegtclosegdstrategygtstrategy…………圖10-16塊設備開關表3.字元設備開關表
函數表項openclosereadwriteIoctl0ConopenConcloseConrdadConwriteConioctl1DzbopenDzbcloseDzbreadDzbwriteDzbioctl2Syopennulldevsyreadsywritesyioctl圖10-17字元設備開關表10.5.4磁片驅動程式1.打開磁片驅動器的過程gdopen
在UNIX系統中,設備被看作是一種特殊類型的檔,因而在使用該檔之前,也須先將它打開。gdopen便是用於打開磁片驅動器的過程,該過程的輸入參數是設備號,無輸出參數。進入該過程後,首先檢查系統中是否有由輸入參數dev所指定類型的磁片驅動器,若有,再檢查它是否已被打開,如果尚未打開,便將此驅動器打開,亦即,將該磁片控制器表中的標誌b-flag設置為B-ONCE;再調用gdtimer過程啟動對應的控制器和設備短期時鐘鬧鐘,用於控制磁片驅動器的執行時間。若系統中無指定類型的磁片驅動器,則置相應的出錯資訊後返回。2.啟動磁片控制器的過程
該過程的輸入參數是控制器號ctl,無輸出參數。進入該過程後,先從磁片設備控制表中找到I/O佇列的隊首指針,若它為0,表示I/O佇列空,無I/O緩衝區可取,於是返回;否則,將控制器表中的忙閑標誌b-active置“1”。設置磁片控制器中的各寄存器,如磁片地址寄存器、記憶體匯流排地址寄存器、控制狀態寄存器、字計數器等,最後啟動磁片控制器讀(或寫)後返回。而gdstartegy過程的主要功能,則是把指定的緩衝首部排在磁片控制器I/O佇列的末尾,並啟動磁片控制器。3.磁片中斷處理過程gdintr
當磁片I/O傳送完成併發出中斷請求信號時,CPU回應後將通過中斷總控程式進入磁片中斷處理過程gdintr。該過程的輸入參數是控制器號ctl。進入該過程後,先檢查磁片是否已經啟動,若尚未啟動,程式便不予理睬即返回;若已啟動,則還須先通過對狀態寄存器的檢查,來瞭解本次傳送是否出錯。若已出錯,便在控制終端上顯示出錯資訊。由於磁片的出錯率較高,因而並不採取一旦出錯便停止傳送的策略,而是做好重新執行的準備,然後再傳送。僅當重試多次都失敗、且超過規定的執行時間時,才設置出錯標誌。如未出錯,則繼續傳送下一個緩衝區中的數據。10.5.5磁片讀、寫程式1)讀方式在UNIX系統中有兩種讀方式:一般讀方式:只把盤塊中的資訊讀入緩衝區,由bread過程完成。提前讀方式:當一個進程要順序地讀一個檔所在的各個盤塊時,會預見到所要讀的下一個盤塊,因而在讀出指定盤塊(作為當前塊)的同時,可要求提前將下一個盤塊(提前塊)中的資訊讀入緩衝區。這樣,當以後需要該盤塊的數據時,由於它已在內存,故而可縮短讀這塊數據的時間,從而改善了系統性能。提前讀功能由breada過程完成。2)寫方式一般寫方式:這是真正把緩衝區中的數據寫到磁片上,且進程須等待寫操作完成,由bwrite過程完成。非同步寫方式:進程無須等待寫操作完成便可返回,非同步寫過程是bawrite。延遲寫方式:該方式並不真正啟動磁片,而只是在緩衝首部設置延遲寫標誌,然後便釋放該緩衝區,並將之鏈入空閒鏈表的末尾。以後,當有進程申請到該緩衝區時,才將其內容寫入磁片。引入延遲寫的目的是為了減少不必要的磁片I/O,因為只要沒有進程申請到此緩衝區,其中的數據便不會被寫入磁片,倘若再有進程需要訪問其中的數據時,便可直接從空閒鏈表中摘下該緩衝區,而不必從磁片讀入。延遲寫方式由過程bdwrite完成。2.讀過程bread和breada一般讀過程bread2)提前讀過程breada3.寫過程bwrite、
bawrite和bdwrite1)一般寫過程bwrite
該過程的輸入參數是緩衝區指針bp。進入該過程後,根據bp指針找到緩衝區首部,設置緩衝區首部的初值,通過設備開關表轉入策略過程,啟動磁片。如是一般寫,應等待I/O完成,為此,須調用sleep過程使自己睡眠。I/O完成後才被喚醒,再調用brelse過程釋放該緩衝區。如是非同步寫、且有延遲寫標誌,則在給緩衝區打上標誌後,將之放入空閒鏈表的首部。2)非同步寫過程bawrite
它與一般寫過程很相似,但不須等待I/O完成即可返回。進入bawrite過程後,設置非同步寫標誌,再調用bwrite過程實現之。
3)延遲寫過程bdwrite
延遲寫過程也很簡單。這裏只須設置延遲寫標誌及數據有效標誌,再調用brelse過程,將該緩衝區釋放,並鏈入空閒鏈表的尾部。以後,當某進程調用getblk獲得該緩衝區時,再用非同步寫方式將緩衝區內容寫入磁片。10.6文件管理10.6.1UNIX檔系統概述1.UNIX檔系統的特點檔系統的組織是分級樹形結構。(2)檔的物理結構為混合索引式檔結構。(3)採用了成組鏈接法管理空閒盤塊。2.檔系統的結構圖10-18UNIX檔系統的結構3.檔系統的資源管理當檔處於“未打開”狀態時,檔需佔用三種資源:一個目錄項。(2)一個磁片索引結點項。(3)若干個盤塊。當檔被引用或“打開”時,須再增加三種資源:(1)一個記憶體索引結點項。它駐留在內存中。(2)檔表中的一個登記項。(3)用戶檔描述符表中的一個登記項。
由於對檔的讀寫管理,必須涉及到上述各種資源,因而使對檔的讀寫管理,又在很大程度上依賴於對這些資源的管理,故可從資源管理觀點上來介紹檔系統。這樣,對檔的管理就必然包括:①對索引結點的管理;②對空閒盤塊的管理;③對目錄檔的管理;④對檔表和描述符表的管理;⑤對檔的使用。10.6.2檔的物理結構1.尋址方式
(1)直接尋址。(2)一次間接尋址方式。(3)多次間接尋址。圖10-19直接尋址和間接尋址2.地址轉換將位元組偏移量轉換為檔邏輯塊號2)把檔邏輯塊號轉換為物理盤塊號直接尋址。(2)一次間址。(3)多次間址。圖10-20檔的地址映射示例10.6.3索引結點的管理1.超級塊(Superblock)(1)檔系統的盤塊數目。(2)空閒盤塊號棧。(3)當前空閒盤塊號數目。(4)空閒磁片i結點號棧。(5)空閒磁片i結點數目。(6)空閒盤塊編號棧的鎖字段。(7)空閒磁片i結點棧的鎖字段。(8)超級塊修改標誌。(9)修改時間。
2.磁片索引結點的分配與回收分配過程ialloc檢查超級塊上鎖否。(2)檢索i結點棧空否。(3)從空閒i結點編號棧中分配一個i結點,並且加以初始化,填寫有關檔的屬性。(4)分配記憶體i結點。(5)將磁片i結點總數減1,並在置超級塊的修改標誌後返回。
2)回收過程ifree
檢查超級塊上鎖否。(2)檢查i結點編號棧滿否。(3)若i結點編號棧未滿,便將回收的i結點的編號進棧,並使當前空閒i結點數加1。(4)置超級塊修改標誌後返回。3.記憶體索引結點的分配與回收1)分配過程iget
該過程的主要功能,是在打開檔時,為之分配記憶體i結點。由於允許檔被共用,因此,如果一檔早已被其他用戶打開並有了記憶體i結點,此時便只須將該i結點中的引用計數加1;如果檔尚未被其他用戶打開,則由iget過程為該檔分配一個
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园体育运动安全知识
- 华东师范大学《合唱与指挥Ⅳ》2023-2024学年第一学期期末试卷
- 天津医科大学临床医学院《ED照明基础理论与实践》2023-2024学年第二学期期末试卷
- 教师层面诊断
- 心脏介入治疗围手术期护理
- 2025《房地产制度法规政策》房地产估价师考前冲刺必会300题-含详解
- 电工电子技术 课件 21.铁心线圈电路-30.直流电动机的结构和工作原理
- 公司环保监管培训
- 幼儿园获奖公开课:小班安全《宝宝过家家》课件
- 防震减灾主题班会
- 健康管理中的健康教育与健康促进研究
- 2024年中考化学复习把握中考方向共研备考策略
- 数控铣床加工中心编程及加工中职PPT完整全套教学课件
- 江苏省建筑工程质量通病防治手册
- 新闻宣传“三审三校”审查表
- 电缆井施工方案
- 2023上海虹口区初三二模英语试题及答案
- 四川外国语大学《245法语》历年考研真题及详解
- 新西兰介绍课件
- 拐杖的使用课件
- ChatGPT人工智能技术介绍PPT
评论
0/150
提交评论