UNIX操作系统课件_第1页
UNIX操作系统课件_第2页
UNIX操作系统课件_第3页
UNIX操作系统课件_第4页
UNIX操作系统课件_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

UNIX操作系統圖9-1UNIX的發展歷史§1UNIX操作系統的歷史和基本結構圖9-2UNIX操作系統的基本結構§2系統活動與系統調用UNIX的內核為用戶態程式提供服務。每一次進入內核叫做一次系統活動,按引發這些活動的事件或動作,可分為以下幾類:

·系統調用;

·硬體中斷;

·硬體自陷;

·軟體引起的自陷或中斷。圖9-3系統調用是用戶態程式與系統內核的介面§3進程管理3.1UNIX進程的兩種運行狀態

在某些操作系統中,進程分成兩大類:一類是系統進程;另一類是用戶進程。系統進程執行操作系統程式,用戶進程執行用戶程式。UNIX進程在處理上既可執行操作系統程式(內核程式),也可執行用戶程式,按照需要在一定時機進行切換。由於操作系統要管理系統中的各種資源和各種活動,而用戶程式卻只應在操作系統的管理和控制下,在一定的範圍內活動,所以進程在執行操作系統程式和用戶程式時所處的環境和特權應有所區別。3.2進程映象和進程結構圖9-4UNIX進程映象(1)進程控制塊PCB在UNIX中可以包括兩部分資訊。一部分是不管進程是否正在處理機上運行,系統都需要查詢和修改的一些控制資訊,這部分資訊就是proc數據結構,可稱其為進程基本控制塊,另一部分則相反,當進程不在處理機上運行時,系統不會對這部分資訊進行查詢和處理,這部分資訊就構成了另外一個稱為進程擴充控制塊的user數據結構。

(2)共用正文段進程執行的程式若用純代碼形式的程式和常數編寫,則可為若干個進程共用執行,構成共用正文段。

(3)數據段進程執行程式時用到的數據構成數據段。

(4)工作區(即棧區)進程在核心態下運行時的工作區為核心棧,在用戶態下運行的工作區為用戶棧。圖9-54.3BSDUNIX進程結構表9-1進程的proc結構3.3進程狀態表9-2UNIX進程狀態圖9-6進程狀態的變遷fork-建立一個子進程,其主要任務是建立進程映象。

swtch-其主要功能是選擇一個處於SRUN可運行狀態、映象在內存、並且優先順序最高的進程,準備將處理機佔用權交給它。

exit-一個進程在執行結束時可調用exit使自己終止,同時通知父進程。

wakeup-其功能是掃描整個proc表,把同一等待原因上的所有進程喚醒,使它們變為SRUN可運行狀態。

sleep-它可使當前執行的進程放棄處理機,變成等待睡眠狀態。

stop-調用stop使處於執行狀態的進程進入暫停狀態。

setrun-其主要功能是啟動處於SSTOP暫停狀態的進程置為SRUN可運行狀態。3.4進程環境切換及進程調度

為實現CPU的有效共用,內核在進程之間進行切換,稱為進程環境切換。切換方式有二種:當進程由於請求一個緊缺資源而被暫停時,便發生自願環境切換(如當進程向諸如終端一類的低速輸入設備請求數據時,一般該進程就要被暫停);當進程用完了時間片或系統發現一個較高優先順序進程要執行時,便會發生不自願的環境切換。每一種切換將通過不同的進程控制原語實現。調用sleep()產生自願環境切換,而通過直接調用swtch()可導致不自願環境切換。sleep()將按下列步驟進行操作:

(1)提高處理器優先順序,以防止可能產生進程狀態變遷的那些中斷;

(2)確定該進程應進入的睡眠佇列;

(3)設置進程優先順序作為該進程喚醒時的優先順序;

(4)把進程放入上述選中的睡眠佇列的末端(見圖9-7(b));(5)調用swtch()以請求調度一個新進程。

swtch()將按下列步驟進行操作:

(1)尋找一個非空運行佇列;

(2)如果有一個非空運行佇列,則取出該隊列的第1個進程(見圖9-7(a));

(3)設置切換標誌;

(4)調用resume()使新進程執行。

一個進程的調度優先順序直接由proc結構中的p-cpu和p-nice兩個數值決定。P-cpu提供了進程最近使用CPU的估算值。P-nice值是用戶可設置的加權因數,數值範圍在-20到20之間,p-nice的正常值是0,負值增大一個進程的優先順序,正值則減小進程的優先順序。

VAX機每隔40s按下述的等式計算一次優先順序值,以進行進程的調度:3.5進程的創建及終止fork()將按下列步驟進行操作:

(1)為子進程分配一個新的proc結構並初始化;

(2)複製父進程的環境給子進程(為了複製進程,需要請求內核的存儲管理機構為之服務,以分配子進程運行時所需的全部資源)。

(3)調度子進程運行,把新的子進程放在運行佇列中。

進程可以通過exit系統調用而自願終止,也可以由於一個信號而不自願終止。在這兩種情況中,進程終止都將產生一個狀態標識碼返回給終止進程的父進程。在內核中,一個進程通過調用exit()終止時,首先要按下列步驟清除該進程在核心態下的執行狀態:

(1)取消任一正在進行的計時器;

(2)釋放虛存資源;

(3)關閉所有打開的檔;

(4)處理所有停止的或被跟蹤的子進程。3.6進程通訊(1)利用基本通訊工具sleep和wakeup等來實現系統進程之間的同步。

(2)利用內核提供的“軟中斷”來實現同一用戶的諸進程之間資訊的傳輸和同步,這也是一種有效的通訊方式,可以按照預先規定好的信號或動作實行進程之間通訊,但只是傳遞少量資訊。

(3)利用檔系統生成pipe機構來實現進程通訊(即管理通訊),它可為進程之間提供大量資訊的傳輸。

(4)提供跟蹤功能。

(5)提供網路通訊。圖9-8管套模型§4存儲管理1.VAX虛地址空間圖9-9VAX虛地址空間佈局4.1VAX存儲管理硬體2.系統地址轉換圖9-10系統虛地址轉換3.用戶地址轉換圖9-11用戶虛地址轉換4.2請頁系統

一個記憶體映象結構具有如下功能:

(1)記錄一個頁組的當前使用資訊,該資訊可用於地址轉換。

(2)用空閒頁的記憶體映射表項鏈接在一起形成記憶體空閒鏈表,這個空閒鏈保持LRU順序。

(3)通過記憶體映象表結構進行以頁組為單位的封鎖和同步。如缺頁處理中正在進行I/O時要封鎖記憶體頁,又如進行I/O操作直接讀寫進程頁時也要封鎖記憶體頁。

(4)通過記憶體映象表結構可找出內容有用的空閒頁。2存儲管理程式

在請頁存儲管理技術中將使用到一些系統調用及存儲分配程式。在調用系統調用fork時,內核複製父進程所有頁的物理副本。緊接著調用系統調用exec,當內核從檔系統中將可執行檔讀入記憶體時,首先分配頁表和磁片塊描述項,然後用系統調用read讀入。記憶體實際的分配是通過memall()來分配的。新分配的記憶體當映射到某些虛地址後才能使用,即本程式將通過填入一個虛地址範圍來實現。調用memall()的參數為指向該虛址範圍首址的相應PTE的指針、頁數、建立記憶體映象表用的進程和類型。對該範圍的每一頁組,memall()通過摘出空閒記憶體鏈的第一項來為其找到記憶體。

記憶體還可以通過vmemall()來分配,它與memall()的區別:若沒有足夠記憶體可用時memall()返回失敗,而vmemall()則等待記憶體被釋放。釋放記憶體的程式也有兩個:memfree()回收分配給一個虛地址空間的所有記憶體,它假定所有的頁都在內存;而vmemfree()只回收一個虛地址範圍內在記憶體的那些頁,忽略不在內存的頁。

缺頁處理將執行pagein()程式,它負責所有的缺頁服務。每次調用pagein()時要給出產生缺頁的虛地址。pagein()首先找出缺頁地址的PTE並區分該頁是正文、數據,還是棧,然後確定該頁可能的狀態:①請求填入;②在內存但無效;③被換出。確定頁的類型及狀態後,pagein()必須取出所需的數據,把相應的PTE置為有效,然後返回以重新執行進程。

缺頁服務和其他記憶體要求有時可從空閒鏈中滿足,但漸漸地需要記憶體的回收,因為,電腦沒有足夠的記憶體來存放所有頁,因此有必要把某些頁移到外存-對換空間上。43BSD採用LRU演算法實現頁淘汰,進程的全部地址空間都可換頁,即使它保持著UNIX的正文、數據、棧段的結構。4.3對換

發生下列情況之一就進行對換:

(1)系統記憶體嚴重短缺,換頁速度已跟不上記憶體要求。

(2)系統頁表變為碎片,無法為新進程或擴展進程分配頁表空間。

(3)進程已超過20s未活動。

就對換操作來說,主要挑選一個進程對換進來和選擇要對換出去的進程。若有一個以上的被對換出去的進程可運行,則由swapper對換策略來確定要把哪個進程對換進來。這將按下列原則賦予一個優先順序:

(1)已對換出去的時間;

(2)對換出去的長度;

(3)它的p-nice值,以及自上次運行以來的睡眠時間。§5I/O系統5.1內核I/O結構圖9-12內核I/O結構5.2塊設備緩衝區(快速緩存)管理及對盤塊的讀寫圖9-13緩衝區(快速緩存)格式圖9-14緩衝池結構及瞬間映像5.3字元設備管理圖9-15字元緩衝區cblock圖9-16clist結構

對字元緩衝區佇列可有如下幾種操作:

(1)可從空閒鏈表中分配一個cblock給一個驅動程式。

(2)可以釋放一個cblock歸還給空閒表。

(3)取字元:移出佇列中第一個字元,調正clist的計數值和首指針。如相應的cblock已被取空,則釋放它。

(4)存字元:把一個字元放入該隊列的末尾,調正clist的計數值和尾指針。如果佇列中的最後一塊cblock已滿,則應先分配一個新的cblock,將之鏈入該clist的末尾,並把字元放入新的cblock中去。

(5)內核可以從佇列的開頭一次移走一組字元,即把首塊cblock中的字元全部移走。

(6)內核可以把放有字元的一塊cblock鏈入該鏈的末尾。§6文件管理6.1目錄項與i節點

UNIX系統V的目錄項佔用16位元組:前14個位元組為檔案名,後二個位元組是i節點號。i節點(索引節點)的各項內容就是本書第六章中講的檔控制塊的主要內容,它與目錄項分別駐在磁片中不同的空間。若干目錄項組成目錄檔,若干i節點(每個節點有64個位元組)的集合是i節點區。如圖9-17所示。圖9-17目錄項與i節點圖9-184.3BSD目錄項格式6.2檔存儲空間的管理1.空白塊成組鏈接法圖9-19空白塊成組鏈接法

只有在下述兩種情況下,要求訪盤操作:(1)分配空白塊時,當記憶體專用區中索引表只剩下一個空白塊的情況。因該空白塊中存放了下一組各塊的塊號,因此不能立刻將該塊分配掉。這時必須將該塊中存放的下組塊號全部複製到記憶體專用塊的索引表區之後,再分配該塊。(2)在釋放空白塊時,如果記憶體專用區中索引表已存滿規定的塊數(如50塊),這時應先把索引表的內容存入被釋放的空白塊中,並清除索引表,將索引表塊計數器置1,然後將被釋放的空白塊的塊號記入記憶體專用區的索引表中。

2.位示圖法

在4.3BSD檔系統結構中,每個磁片上包含一個或多個檔系統。而磁片分區劃分為一個或多個區域,每一區域稱為一個柱面組,每個柱面組的塊位示圖以段為單位記錄柱面組可用空間。4.3BSD為確保檔在二次間接情況下創建檔可達232位元組,則確定一個檔可由多個4096位元組的塊組成,這樣做與512或1024位元組的塊長相比,每一次磁片操作傳輸的數據就增加了若干倍。圖9-204096/1024檔系統塊和段分佈的例子6.3打開檔

UNIX在系統記憶體區設置了一個含有100個表目的活動i節點表並由系統動態分配。每個打開檔都佔有一個表目,用來存放相應的活動(記憶體)i節點。一個活動i節點的主體是從對應的盤i節點中複製而來。系統還在內存設置了一個含有100個表目的系統打開檔表,表目項包含:活動i節點指針、檔操作方式、讀/寫位移量。多個系統打開檔表表目可對應同一個活動i節點。UNIX為每個進程在user結構中設置了一個進程打開檔表u-ofile[15],它含有15個表目,即允許一個進程最多打開15個檔。表目內容為檔指針fp,它指向系統打開檔表中的相應表目。6.4檔卷的動態裝卸

UNIX允許檔卷動態裝卸,並允許將卷裝在任意一級檔目錄上,這給用戶提供了很大的靈活性。一個卷(存貯設備)可由高級用戶用系統調用命令為卷裝入檔目錄的某一級上建立一個特殊空文件,用來存放卷的根目錄。然後用戶就可以用mount系統調用將某個卷安裝於此空文件處,以後此卷就與檔系統融為一體。檔系統可以像在目錄的其他任何地方一樣在卷內建立和撤銷檔。當用戶不再使用此卷或要換上新卷時,可用系統調用umount將此卷卸掉。卷內目錄上的所有檔都同時被卸下。檔系統內不再有這些檔。用戶還可以再將新卷安裝於此處。因此,在使用卷內檔前,用戶必須知道當前安裝卷的內容,裝錯了卷會找不到所需檔。圖9-21卷的安裝6.5檔保護

1.兩種用戶

UNIX把使用系統的人分成兩種用戶。一種是特權用戶,他們是用root名註冊進入系統的人,或者用su命令從普通用戶轉為特權用戶的人。由於根目錄一般都有口令,因此,特權用戶應當知道根目錄的口令,而不准他人進入根目錄或改變其身份。特權用戶在螢幕上的提示符是“#”。系統的另一種用戶是普通用戶,他們是用自己定義的名字註冊進入系統的,是在“/usr”目錄下各自的目錄中工作的人。普通用戶和終端不是一一對應的,他們可以使用任意一臺終端,即普通用戶的數量不受終端數量的限制。

2.檔的存取權及其改變所屬權的命令

UNIX系統對一個檔的操作規定有三種不同的存取權,系統又把使用者分成三個等級。於是每個檔就能出現九種存取權:§7系統初啟

1.系統自舉

圖9-22boot程式在內存中的位置

2.內核初始化

(1)初始化期間系統採取的第一步是由組合語言代碼來實現的,這一工作與機器密切相關,它包括:

·建立運行棧;

·標識執行系統的CPU類型;

·計算物理記憶體總量;

·使虛擬地址轉換硬體成為可用;

·初始化存儲管理硬體;

·初始化0#進程的硬體環境;

·調用系統的C程式初始入口。

(2)與機器相關的初始化。在組合語言代碼完成它的工作之後,它調用第一個用C語言寫的內核程式main()。它的主要功能是清理記憶體空間,對某些系統數據結構進行初始化處理,創建0#、1#進程。

main()程式立即調用startup()程式去做與機器相關的初始化,其任務包括:

·資訊緩衝區的初始化;

·為系統數據結構分配記憶體;

·系統的記憶體分配程式的初始化;

·I/O設備的自動配置和初始化。在調用startup()返回以後,還要對機器的幾個專用硬體部分進行初始化。

(3)與機器無關的初始化。經過以上幾步,就為系統結束初始化過程並啟動某些進程做好了準備工作。上面提到的startup()程式,在其返回後,main()的第一個動作就是建立0#進程的環境。UNIX操作系統是否能正常運行在很大程度上依仗於0#和1#進程的工作,它們與其它進程不同,不是用系統調用fork,而是在本階段由核心創建的。0#進程最終將實現虛存系統的對換策略,proc表中的第一項分配給0#進程,並把該進程標記為可運行,然後把它安裝為當前運行進程(執行狀態)。

0#進程建立好以後,調用有關程式去初始化每個系統數據結構:如用vminit()副程式建立請頁系統使用的各個參數;磁片限量資源控制系統初始化(如快速緩存的初始化);通過調用startrtclock()進行時鐘初始化(43BSD按100Hz即時時鐘運行);通過調用mbinit()來初始化網路存儲管理系統等等。最後,系統為執行用戶態程式做準備,將通過調用newproc()創建1#進程,然後系統把控制轉向1#進程。為了使操作系統編制得比較緊湊,1#進程被設計成一個一般的用戶進程,在用戶態下運行。3.各終端進程的初啟

(1)執行/etc/init程式。1#進程生成時,它基本上複製了0#進程的映象,沒有在用戶態下的運行部分。現在既然設計成用戶進程,所以借助系統調用改變其映象,增加在用戶態下運行部分。轉而執行/etc/init程式,為每個終端創建一個子進程,使用戶能獲得系統對他的服務。1#進程執行/etc/init時,先從/etc/ttys中讀出一個有效終端設備名,然後為其生成一個子進程。這一子進程打開了該終端設備,並形成了該進程的標準輸入、標準輸出和出錯資訊輸出檔。

(2)執行/etc/geffy程式。子進程接著也要改換自己的映象轉而執行/etc/getty。該程式主要功能是按照相應終端的特性設置終端設備表中有關部分。(3)執行/etc/login。getty最後讀入註冊名,並調用/etc/login程式完成註冊的一系列工作。login程式負責用戶登入系統,它由/etc/getty調用,調用時帶有用戶的註冊名。login程式提示用戶打入口令,如果由用戶提供的口令加密後與記錄在總口令檔/etc/passwd中的值相同,login就在記帳檔中寫一個報到記錄,按照口令檔和/etc/group檔中所指定的內容初始化用戶和組識別字(uid和gid)。

(4)最後終端進程又改換映象轉而執行shell命令語言解釋程式,開始用戶和系統在鍵盤命令級上的對話過程。至此,完成了UNIX系統的初啟過程。一旦有某個用戶輸入一個命令後,則引起鍵盤輸入中斷,啟動對應的終端進程。終端進程再通過建立命令處理子進程來執行命令。這樣,整個系統就活動起來了。圖9-23UNIX初啟後進程族§8shell(外殼)8.1shell命令的使用方式

shell命令行的一般格式是:commandarg1,arg2,…,argn其中,command是命令名,其後是參數表。有些命令是帶參數的,有些命令是可不帶參數的或參數是可選的。

用戶也可將若干shell命令編輯成一個命令檔,稱作shell過程。一個shell過程可被隨時調用執行,當需要執行該過程時,使用命令行:$sh

comfile

或%csh

comfile其中,sh或csh是命令名,表示執行shell過程,comfile是shell過程名。shell語言的一大特點是,它具有程式設計語言的一些基本特性,例如,shell支持if、then、case、while、for等控制流,還具有參數傳遞、變數和字串替換等功能。

8.2shell命令的處理

UNIX採用生成子進程的方法執行shell命令。在系統初啟後,系統為每個用戶終端建立一個shell進程,這個進程的任務就是接收用戶鍵入的shell命令並執行該命令。具體處理是,接收鍵入命令後,這個shell進程將根據命令碼和參數,建立一個子進程。然後把自身掛起等待子進程執行結束。當子進程完成後,返回主進程。以後主進程又可接收下一條鍵入命令,再建立子進程。一般情況下,整個對話過程都是按照這種方式進行。在這種方式下,當前命令未執行結束之前,系統不能接收下一條命令。由於UNIX用建立子進程代替一般系統轉入副程式的方法,因此,UNIX很容易實現命令並行處理。即主進程建立子進程後,不再掛起等待,而是立刻繼續運行,接收下一條命令。子進程轉入後臺繼續執行。8.3shell的高級功能

具有轉入後臺執行功能的命令稱為後臺命令。後臺命令的標記是在一般shell命令的末尾,加上符號“&”。shell在處理中,遇到“&”字元時,主進程不再掛起等待,並立刻輸出提示符(‘$’或‘%’)準備接收下一條鍵入命令。實現了後臺命令和shell併發運行。例如,我們希望在編譯C語言根源程式pgm.c時,又希望編輯letter檔。可打入ccpgm.c&$edletter2.標準I/O重新定向

(1)輸出改向。在shell命令行中,加入‘>filename’時,可把輸出標準設備改為

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论