緒論
存儲程序式計算機
- 馮·諾依曼計算機體系結構
從20世紀40年代至今,計算機體系結構不斷地發展變化,但馮·諾依曼計算機體系結構定義的一個存儲程序式計算機的家族,幾乎是當代所有計算機系統的構成基礎(除專門設計用於處理特殊任務的計算機外)。存儲程序式計算機由中央處理器(處理器(CPU))、存儲器和輸入/輸出設備組成。所有的單元都通過總線連接,總線分為地址總線和數據總線,分別連接不同的部件。
由於馮·諾依曼型計算機的計算模型是順序過程計算模型,所以它的特點是集中順序過程,在當代的CPU中,可有32~64個通用寄存器,每個寄存器能夠保存一個32位(bit)的數值。通用寄存器可以為功能單元提供操作數,並能接收、保存操作的結果。控制單元負責從主存儲器提取指令、分析其類型,並產生信號通知計算機其他部分執行指令所指定的操作。控制單元包含一個程序計數器(programcounter,PC)和一個指令寄存器(instructionregister,IR)。程序計數器指示下一步應該執行的指令,而指令寄存器包含當前指令的拷貝。
操作系統的發展歷程
操作系統是構成計算機系統的另一個重要的系統軟件,它負責管理計算機系統的硬件、軟件資源並控制整個計算機的工作流程。
- 發展歷程
從1950年至今,操作系統的發展主要經歷了如下的幾個階段:①手工操作階段——無操作系統;②批處理系統——早期批處理、執行系統;③操作系統形成——批處理操作系統、分時操作系統、實時操作系統;④現代操作系統——個人計算機操作系統、網絡操作系統、分布式操作系統。 - 中斷和通道
20世紀60年代初期,硬件獲得了兩方面的進展:一是通道的引入;二是中斷技術的出現。這兩項重大成果導致操作系統進入執行系統階段。通道是一種專用處理部件,它能控制一台或多台外設的工作,負責外部設備與主存之間的信息傳輸。它一旦被啟動,就能獨立於CPU運行,這樣就可使CPU和通道並行操作,而且CPU和各種外部設備也能並行操作。所謂中斷是指當主機接到某種信號信號(如I/O設備完成信號)時,馬上停止原來的工作,轉去處理這一事件,當事件處理完畢,主機又回到原來的工作點繼續工作。 - 多道程序
中斷和通道技術出現以后,I/O設備和中央處理機可以並行操作,初步解決了高速處理機和低速外部設備的矛盾,提高了計算機的工作效率。但不久又發現,這種並行是有限度的,並不能完全消除中央處理機對外部傳輸的等待。比如,一個作業在運行過程中依此輸入n批數據,每批輸入1000個字符,輸入機每輸入1000個字符需用1000ms,而處理機處理這些數據則需300ms。可見,盡管處理機具有和外部設備並行工作的能力,但是在這種情況下無法讓它多做工作,處理機仍有空閑等待現象。那么,為了提高設備的利用率,能否在系統內同時存放幾道程序呢?這就引入了多道程序的概念。
多道程序運行的特征是:①多道——計算機主存中同時存放幾道相互獨立的程序;②宏觀上並行——同時進入系統的幾道程序都處於運行過程中,即它們先后開始了各自的運行,但都未運行完畢;③微觀上串行——從微觀上看,主存中的多道程序輪流或分時地占有處理機,交替執行。 - 分時技術
當計算機技術和軟件技術發展到20世紀60年代中期,由於主機速度不斷提高而采用了分時技術,使一台計算機可同時為多個終端用戶服務。每個終端用戶在自己的終端設備上聯機使用計算機,好像自己獨占機器一樣。
操作系統的基本概念
- 計算機系統的組成
操作系統是一個大型的程序系統,它負責計算機系統軟、硬件資源的分配和管理;控制和協調並發活動;提供用戶接口,使用戶獲得良好的工作環境。
操作系統是重要的系統軟件,只有配置了操作系統這一系統軟件后,才使計算機系統體現出系統的完整性和可利用性。當用戶要計算機幫助完成其計算任務時,用戶僅編制源程序(用戶在源程序中,可以利用操作系統提供的系統調用請求操作系統相應的服務),而其余的大量工作,如作業控制、系統資源的合理分配和利用,各種調度策略的制訂、人機聯系方式等都是由操作系統實施的。所以,操作系統使整個計算機系統實現了高度自動化、高效率、高利用率、高可靠性。操作系統是整個計算機系統的核心。 - 操作系統的資源管理功能
操作系統的主要功能是管理系統的軟、硬件資源。這些資源按其性質來分,可以歸納為四類:處理機、存儲器、外部設備和軟件資源。這四類資源就構成了系統程序和用戶程序賴以活動的物質基礎和工作環境。針對這四類資源,操作系統就有相應的資源管理程序:處理機管理、存儲管理、設備管理和軟件資源管理程序。這些資源管理程序組成了操作系統這一程序系統。 - 操作系統的基本類型
(1)批量操作系統;(2)分時操作系統;(3)實時操作系統;(4)個人計算機操作系統;(5)網絡操作系統;(6)分布式操作系統。
操作系統的組織結構
操作系統虛擬機
在裸機上配置了操作系統程序后就構成了操作系統虛擬機。操作系統的核心在裸機上運行,而用戶程序則在擴充后的機器上運行。擴充后的虛擬機不僅可以使用原來裸機提供的各種基本硬件指令,而且還可使用操作系統中所增加的許多其他“指令”。這些指令統稱為擴充機器的指令系統,又稱為操作命令語言。
操作系統虛擬機提供了協助用戶解決問題的裝置,其功能是通過它提供的命令來體現的,用戶也是通過這一組命令和操作系統虛擬機打交道的。系統所提供的全部操作命令的集合稱為操作命令語言,它是用戶和系統進行通信的手段和界面。這一用戶界面分為兩個方面:操作命令(又稱命令接口)和系統功能調用(又稱程序接口)。
操作系統在計算機系統中所處的位置是硬件層(裸機)和其他所有軟件之間,是所有軟件中與硬件相連的第一層軟件,它在裸機上運行,又是系統
軟件和應用程序運行的基礎。它與硬件、應用程序和用戶都有接口。具有一體化結構的操作系統提供的接口如下圖所示,從該結構中可以看出操作系統提供的多種接口。
處理機的狀態
操作系統是計算機系統中最重要的系統軟件,為了能正確地進行管理和控制,其本身是不能被破壞的。為此,系統應能建立一個保護環境,采用的辦法是區分處理機的工作狀態。因為,在系統中有兩類程序在運行,一類是管理程序(如處理機調度程序、主存分配程序、I/O管理程序等);另一類是用戶程序。這兩類程序是不同的,前者是管理和控制者,它負責管理和分配系統資源,為用戶提供服務。而用戶程序運行時,所需資源必須向操作系統提出請求,自己不能隨意取用系統資源,如直接啟動外部設備進行工作,更不能改變機器狀態等。這兩類不同程序執行時應有不同的權限,為此根據對資源和機器指令的使用權限,將處理執行時的工作狀態區分為不同的狀態(或稱為模式)。所謂處理機的態,就是處理機當前處於何種狀態,正在執行哪類程序。為了保護操作系統,至少需要區分兩種狀態:管態和用戶態。管態(supervisormode):又稱為系統態,是操作系統的管理程序執行時機器所處的狀態。在此狀態下允許中央處理機使用全部系統資源和全部指令,其中包括一組特權指令(例如,涉及外部設備的輸入/輸出指令、改變機器狀態或修改存儲保護的某些指令),允許訪問整個存儲區。用戶態(usermode):又稱為目態,是用戶程序執行時機器所處的狀態。在此狀態下禁止使用特權指令,不能直接取用系統資源與改變機器狀態,並且只允許用戶程序訪問自己的存儲區域。有的系統將管理程序執行時的機器狀態進一步分為核態和管態,這時,管態的權限有所變化,管態只允許使用一些在用戶態下所不能使用的資源,但不能使用修改機器的狀態指令。而核態(kernelmode)就具有上述管態所具有的所有權限。無核態的系統,管態執行核態的全部功能。管態比核態權限要低,用戶態的權限更低。為了區分處理機的工作狀態,需要硬件的支持。在計算機狀態寄存器中需設置一個系統狀態位(或稱模式位)。若有了系統狀態位,就可以區分當前正在執行的是系統程序還是用戶程序。若用戶程序執行時,超出了它的權限,如要訪問操作系統核心數據或企圖執行一個特權指令,都將從用戶態轉為管態,由操作系統得到CPU控制權,處理這一非法操作。這樣可以有效地保護操作系統不受破壞。當用戶程序執行時,若需要請求操作系統服務,則要通過一種受控方式進入操作系統,將用戶態轉為核態,由操作系統得到控制權,在核態下執行其相應的服務例程,服務完畢后,返回到用戶態,讓用戶繼續執行。
中斷機制
所謂中斷是指某個事件(例如電源掉電、定點加法溢出或I/O傳輸結束等)發生時,系統中止現行程序的運行、引出處理該事件程序進行處理,處理完畢后返回斷點,繼續執行。
中斷響應的實質是交換指令執行地址和處理器狀態,以達到如下目的:①保留程序斷點及有關信息;②自動轉入相應的中斷處理程序執行。中斷響應所需的硬件支持包括:指令計數器、處理器狀態寄存器、中斷向量表和系統堆棧。
整個中斷處理的功能是由硬件和軟件配合完成的。硬件負責中斷進入過程,即發現和響應中斷請求,把中斷的原因和斷點記下來供軟件處理時查用,同時負責引出中斷處理程序。而中斷分析、中斷處理、恢復被中斷程序的現場等工作則由軟件的中斷處理程序來完成。
java里數組越界的一場應該算一種中斷。
UNIX系統結構
UNIX系統核心層的功能包括文件管理、設備管理、存儲管理和處理機管理,此外還有中斷和俘獲的處理。現代計算機系統的硬件機構支持核心態和用戶態,使得核心程序在核心態下運行,實用程序在用戶態下運行。每一種狀態都有自己的棧和棧指針,都有自己的地址映射部件。所以,用戶態的程序不能直接訪問核心態的程序和數據,只能通過訪問管理程序指令(訪管指令,如trap指令)自陷到核心內的操作系統服務程序。
UNIX系統的核心結構是一體化結構。
靜態連接和動態鏈接
連接這一處理步驟,以前通常采用靜態連接方式。靜態連接是將所需的外部調用函數連接到目標文件中形成一個完整的主存映像文件。采用這種靜態連接的缺點是,當有多個應用程序都需要調用同一個庫函數時,那么,這些應用程序的目標文件中都將包含這個外部函數對應的代碼。這將造成主存的極大浪費,不能支持有效的共享。動態鏈接是將這一連接工作延遲到程序運行的時候進行。它需要的支持是動態鏈接庫(DLL)。動態鏈接不需要將應用程序所需要的外部函數代碼從庫中提取出來並連接到目標文件中,而是在應用程序需要調用外部函數的地方作記錄,並說明要使用的外部函數名和引用入口號,形成調用鏈表。當所需的動態鏈接庫DLL在主存時,就可以確定所需函數的主存絕對地址,並將它填入調用鏈表相應位置中。當應用程序運行時,就可以正確地引用這個外部函數了。現代操作系統有的已采用了動態鏈接技術,如Windows系統,現在的動態鏈接庫一般是系統庫。
操作系統提供的用戶界面
操作系統提供的用戶界面如下圖所示:一是操作界面,又稱為操作命令;二是程序界面,又稱為系統功能調用。
系統功能調用
為了實現在程序級的服務支持,操作系統提供統一的系統功能調用,采用統一的調用方式——訪問管理程序來實現對這些功能的調用。
對於用戶所需要的功能,由系統設計者事先編制好能實現這些功能的例行子程序,作為操作系統程序模塊的一部分。這些例行子程序不能像一般的用戶子程序那樣可隨便調用,因為這些能實現各種功能的例行子程序是操作系統的程序部分,它運行時,機器處於管態(管理程序狀態),而用戶程序運行時,機器處於用戶態。所以,用戶程序對這些例行子程序的調用應以一種特殊的調用方式——訪管方式來實現。
這樣一個帶有一定功能號的訪管指令定義了一個系統調用。因此,系統調用是用戶在程序一級請求操作系統服務的一種手段,它不是一條簡單的硬指令,而是帶有一定功能號的訪管指令。它的功能並非由硬件直接提供,而是由操作系統中的一段程序完成的,即由軟件方法實現的。用戶可以用帶有不同功能號的訪管指令來請求各種不同的功能。可以這樣說,系統調用是利用訪管指令定義的指令。操作系統服務例程與一般子程序的區別在於,前者所實現的功能都是與計算機系統本身有關的,對前者的調用是通過一條訪管指令來實現的。不同的程序設計語言調用操作系統服務的方式是不同的,它們有顯式調用和隱式調用之分。在匯編語言中是直接使用系統調用對操作系統提出各種要求的,因為在這種情況下,系統調用具有匯編指令的形式。而在高級語言中一般是隱式的調用(經編譯后轉成某種直接調用)。
並發
進程概念
進程定義
根據1978年在廬山召開的全國操作系統會議上關於進程的討論,結合國外的各種觀點,國內對進程這一概念作了如下描述:進程是指一個具有一定獨立功能的程序關於某個數據集合的一次運行活動。
進程和程序是既有聯系又有區別的兩個概念,它們的區別如下。(1)程序是指令的有序集合,其本身沒有任何運行的含義,它是一個靜態概念。而進程是程序在處理機上的一次執行過程,它是一動態概念。程序可以作為一種軟件資料長期保存,而進程則是有一定生命期的,它能夠動態地產生和消亡。即進程可由“創建”而產生,由調度而執行,因得不到資源而暫停,以致最后由“撤銷”而消亡。(2)進程是一個能獨立運行的單位,能與其他進程並行地活動。(3)進程是競爭計算機系統有限資源的基本單位,也是進行處理機調度的基本單位。
進程和程序又是有聯系的。在支持多任務運行的操作系統中,活動的最小單位是進程。進程一定包含一個程序,因為程序是進程應完成功能的邏輯描述;而一個程序可以對應多個進程。如果同一程序同時運行於若干不同的數據集合上,它將屬於若干個不同的進程。或者說,若干不同的進程可以包含相同的程序。這句話的意思是:用同一程序對不同的數據先后或同時加以處理,就對應於好幾個進程。例如,系統具有一個C語言編譯程序,當它對多個終端用戶的C語言源程序進行編譯時,就產生了多個編譯進程。
進程類型
有些進程起着資源管理和控制的作用,稱為系統進程;而另一些是為用戶算題任務而建立的進程稱為用戶進程。它們是有區別的。①系統進程被分配一個初始的資源集合,這些資源可為它所獨占,也可以最高優先級的資格優先使用。用戶進程通過系統服務請求的手段競爭系統資源。②用戶進程不能做直接I/O操作,而系統進程可以做顯示的、直接的I/O操作。③系統進程在管態下活動,而用戶進程在用戶態下活動。
進程狀態
進程有着“執行—暫停—執行”的活動規律。一般說來,一個進程並不是自始至終連續不停地運行的,它與並發執行中的其他進程的執行是相互制約的。它有時處於運行狀態,有時又由於某種原因而暫停運行處於等待狀態,當使它暫停的原因消失后,它又進入准備運行狀態。所以,在一個進程的活動期間至少具備三種基本狀態,即運行狀態、就緒狀態、等待狀態(又稱阻塞狀態)。①就緒狀態(ready)。當進程獲得了除CPU之外所有的資源,它已經准備就緒,一旦得到CPU控制權,就可以立即運行,該進程所處的狀態為就緒狀態。②運行狀態(running)。當進程由調度/分派模塊分派后,得到中央處理機控制權,它的程序正在運行,該進程所處的狀態為運行狀態。③等待狀態(wait)。若一進程正在等待某一事件發生(如等待輸入/輸出操作的完成)而暫時停止執行,這時,即使給它CPU控制權,它也無法執行,則稱該進程處於等待狀態,又可稱為阻塞狀態。
為了描述一個進程和其他進程以及系統資源的關系,為了刻畫一個進程在各個不同時期所處的狀態,人們采用了一個與進程相聯系的數據塊,稱為進程控制塊(processcontrolblock,PCB)或稱為進程描述器(processdescriptor)。系統根據pcb而感知進程的存在,故pcb是標識進程存在的實體。當系統創建一個進程時,必須為它設置一個pcb,然后根據pcb的信息對進程實施控制管理。進程任務完成時,系統撤銷它的pcb,進程也隨之消亡。
線程概念
在操作系統中,為了支持並發活動,引入了進程的概念,在傳統的操作系統中,每個進程只存在一條控制線索和一個程序計數器。但在有些現代操作系統中,提供了對單個進程中多條控制線索的支持。這些控制線索通常稱為線程(threads),有時也稱為輕量級進程(lightweightprocesses)。線程是比進程更小的活動單位,它是進程中的一個執行路徑。一個進程可以有多條執行路徑,即線程。這樣,在一個進程內部就有多個可以獨立活動的單位,可以加快進程處理的速度,進一步提高系統的並行處理能力。
①線程是進程中的一條執行路徑;②它有自己私用的堆棧和處理機執行環境(尤其是處理器寄存器);③它共享分配給父進程的主存;④它是單個進程所創建的許多個同時存在的線程中的一個。
進程和線程既有聯系又有區別,對於進程的組成,可以高度概括為以下幾個方面:①一個可執行程序,它定義了初始代碼和數據;②一個私用地址空間(addressspace),它使進程可以使用的一組虛擬主存地址;③進程執行時所需的系統資源(如文件、信號燈、通信端口等),是由操作系統分配給進程的;④若系統支持線程運行,那么每個進程至少有一個執行線程。進程是任務調度的單位,也是系統資源的分配單位;而線程是進程中的一條執行路徑,當系統支持多線程處理時,線程是任務調度的單位,但不是系統資源的分配單位。線程完全繼承父進程占有的資源,當它活動時,具有自己的運行現場。
相對進程而言,線程的創建與管理的開銷要小得多。因為線程可以共享父進程的所有程序和全局數據,這意味着創建一個新線程只涉及最小量的主存分配(線程表),也意味着一個進程創建的多個線程可以共享地址區域和數據。在進程內創建多線程,可以提高系統的並行處理能力。例如,一個文件服務器,某時刻它正好封鎖在等待磁盤操作上,如果這個服務器進程具有多個控制線程,那么當另一個線程在等待磁盤操作時,第二個線程就可以運行,比如它又可接收一個新的文件服務請求。這樣可以提高系統的性能。
處理機調度
多級調度
1.批處理系統中的處理機調度
在多用戶批處理操作系統中,對處理機的分配分為兩級:作業調度和進程調度。在這樣的系統中,每個用戶提交的算題任務,往往作為系統的一個處理單位,稱為作業。這樣一道作業在處理過程中又可以分為多個並發的活動單位,稱為進程。作業調度又稱為宏觀調度,其任務是對提交給系統的、存放在輔存設備上的大量作業,以一定的策略進行挑選,分配主存等必要的資源,建立作業對應的進程,使其投入運行。進入主存中的進程還可以根據需要創建子進程。作業調度使該作業對應的進程具備使用處理機的權利。而進入主存的諸進程,分別在什么時候真正獲得處理機,這是由處理機的進程調度(一般又稱為微觀調度)來決定的。進程調度的對象是進程,其任務是在進入主存的所有進程中,確定哪個進程在什么時候獲得處理機,使用多長時間等。
2.多任務操作系統中的處理機調度
3.多線程操作系統中的處理機調度
在現代操作系統中,有些系統支持多線程運行。在這樣的系統中,一個進程可以創建一個線程,也可以創建多個線程。系統為進程分配它所需要的資源(如主存),而處理機的分配單位則為線程,系統提供線程調度程序,其功能是當處理機空閑時,以某種策略選擇一個就緒線程去運行,並為它分配處理機時間。
作業調度算法
1.先來先服務調度算法
2.短作業優先調度算法
3.響應比高者優先調度算法
4.優先調度算法
進程調度
調度/分派結構
任何進程都必須通過調度/分派模塊來使用處理機。進程調度的功能可細分為調度和分派兩部分。其中,調度意味着依照完全確定的策略將一批進程進行排序,而分派則是從就緒隊列中移出一個進程並給它提供處理機的使用權。相應的調度程序和分派程序的功能是:調度程序負責將一個進程插入到就緒隊列並按一定原則保持隊列結構;分派程序是將進程從就緒隊列中移出並建立該進程執行的機器狀態。
但是,在一些系統中常常只提進程調度的概念,而不細分調度和分派這兩個部分。因為這里所說的調度功能實際上分散到某些進程控制原語或通信原語中實現了,所以在這些系統中,調度與分派之間不加區別,並統稱為調度程序模塊。在這里提出調度/分派結構,是希望讀者明確處理機的分配包含有兩方面內容:一是按確定的調度原則選一個進程;二是給選中進程賦予處理機的控制權。若要強調后者,就使用“分派程序”這一名詞;否則就采用“進程調度程序”這一名詞。
- CPU現場信息的切換
CPU現場信息的切換(即保留原來運行進程的狀態信息,並用保留在選中進程PCB中的狀態信息設置CPU現場)所需時間是額外開銷,因為切換時系統並不能做其他的工作。進程切換所需時間因機器不同而不同,它取決於主存速度、必須復制的寄存器的數量、是否有特殊指令(如裝入或保存所有單個指令)等因素。切換時間與硬件支持密切相關。例如,有的處理器(如SUNUltraSPARC)提供了多個寄存器組,切換只需要簡單地改變當前寄存器組的指針。當處理器只有一個寄存器組,或活動進程超過了寄存器組的數量時,系統必須在寄存器組與主存之間進行數據復制。而且,操作系統越復雜,這一切換所要做的工作就越多。典型的進程切換時間為1μs到1000μs。進程調度時機可能有以下幾種:①進程完成其任務時;②在一次管理程序調用之后,該調用使現行程序暫時不能繼續運行時;③在一次出錯陷入之后,該陷入使現行進程在出錯處理時被掛起時;④在分時系統中,當進程使用完規定的時間片,時鍾中斷使該進程讓出處理機時;⑤在采用可剝奪調度方式的系統中,當具有更高優先級的進程要求處理機時。 - 進程調度的准則
不同的進程調度算法具有不同的特點,且可能對某些進程更有利。為了對算法進行選擇以適用於特定的應用,必須分析各種算法的特點。為了比較各種進程調度算法,分析員提出了許多准則,這些准則對確定算法的優劣有很大的影響,這些准則涉及如下幾個因素。(1)CPU使用率。需要使CPU盡可能忙。CPU使用率從0到100%。對於真實系統,它應從40%(輕負荷系統)到90%(重負荷系統)。(2)吞吐量。如果CPU忙於執行進程,那么就要評估其工作量。其中一種測量工作量的方法稱為吞吐量。吞吐量是指一個時間單元內所完成的進程數量。若系統中短進程多,則吞吐量較高,可能為每秒十個進程。(3)周轉時間。在批處理系統中,從作業進入系統到完成的時間間隔稱為周轉時間。周轉時間是所有時間段之和,包括等待進入主存、在就緒隊列中等待、在CPU上執行和I/O執行時間。利用特權可以分析運行該作業需要花費的時間。(4)響應時間。對於交互式系統而言,周轉時間並不是最佳的准則,通常采用響應時間作為時間度量。響應時間是指從聯機用戶向計算機發出一個命令到計算機執行完該命令,並將相應的執行結果返回給用戶所需的時間。(5)等待時間。進程調度算法並不影響進程運行和執行I/O的時間量,它只影響進程在就緒隊列中等待所花費的時間。等待時間是進程在就緒隊列中等待所花費時間之和。人們需要使CPU使用率和吞吐量最大化,而使周轉時間、響應時間和等待時間最小化。在絕大多數情況下要優化平均度量值,不過在有的情況下,需要優化最小值或最大值,而不是平均值。例如,在分時系統中為了保證所有用戶都得到好的服務,可能需要使響應時間最小。 - 調度方式
在優先調度策略下還要確定調度方式。所謂調度方式是指,當一進程正在處理機上執行時,若有某個更為“重要而緊迫”的進程需要進行處理,亦即,若有優先級更高的進程進入就緒隊列時,如何分配處理機。通常有兩種進程調度方式:一種是仍然讓正在執行的進程繼續執行,直到該進程完成或發生某事件(如提出I/O請求)而進入“完成”或“阻塞”狀態時,才把處理機分配給“重要而緊迫”的進程,使之執行,這種進程調度方式稱為非剝奪方式;另一種方式則是“重要而緊迫”的進程一到,便暫停正在執行的進程,立即把處理機分配給它,這種方式稱為可剝奪調度方式。后者所實施的策略就是可搶占的調度策略。 - 進程優先數調度
進程優先數調度算法就是一種優先調度,該算法預先確定各進程的優先數,系統將處理機的使用權賦予就緒隊列中具備最高優先級(優先數和一定的優先級相對應)的就緒進程。這種算法又可分為不可搶占CPU與可搶占CPU兩種情況。在后一種情況下,無論何時,執行着的進程的優先級總要比就緒隊列中的任何進程的優先級高。
主存管理
空間分片
現代操作系統區分兩類主存:物理主存和邏輯主存。主存共享的基礎當然是物理主存。物理主存由0~m-1個物理地址組成。物理地址是計算機主存單元的真實地址,又稱為絕對地址或實地址。處理機依據絕對地址可以隨機存取存放在其內的信息。物理地址的集合所對應的空間組成了主存空間。而主存中的一個區域是物理地址集合的一個遞增整數序列子集{n,n+1,…,n+m}所對應的主存空間。
在多用戶多進程系統中,主存以分片方式實現共享。主存中分片的方式有兩種:一是划分為大小不等的區域,這些區域根據用戶程序實際需要而被分割;二是划分為大小相等的塊,以塊為單位進行分配,操作系統和用戶程序根據需要占用若干主存塊。前者一般稱為按區(或按段)分配,后者稱為按頁分配。這些分配方法是實現主存共享的主要方法。
主存管理的功能
如果直接以物理地址提交給用戶使用,這對用戶來說是十分困難的事。而且,多個用戶程序共享主存,由用戶自行分配主存更是不可能的事。為了支持多道程序運行,方便用戶使用,系統必須為每個用戶提供0~n-1的一組邏輯地址(虛地址),即提供一個虛擬地址空間。每個應用程序相信它的主存是由0單元開始的一組連續地址組成。用戶的程序地址(指令地址或操作數地址)均為邏輯地址。對於每個邏輯地址,在主存中並沒有一個固定的、真實的物理單元與之對應。因此,根據邏輯地址還不能直接到主存中去存取信息,它是一個虛地址或稱為相對地址。用戶所看到的虛存(邏輯地址)與被共享的主存(物理地址)之間有一定的映射關系。程序執行時,必須將邏輯地址正確地轉換為物理地址,此即為地址映射。假定虛存空間由n表示,主存空間由m表示,那么地址映射可表示成:f:n→m。為了支持多道程序運行,主存管理必須實現主存分配、主存保護、主存擴充等功能。因此,存儲管理的功能可歸納為以下幾點:①映射邏輯地址到物理主存地址;②在多用戶之間分配物理主存;③對各用戶區的信息提供保護措施;④擴充邏輯主存區。
虛擬存儲器
隨着科學技術的不斷進步和計算機應用的日益廣泛,需要計算機解決的問題越來越多、越來越復雜。有些科學計算或數據處理的問題需要相當大的主存容量,尤其在多道程序系統中主存容量顯得更為緊張。當系統提供大容量的輔存時,操作系統把主存和輔存統一管理,實現信息的自動移動和覆蓋。當一個用戶程序的地址空間比主存可用空間大時,操作系統將這個程序的地址空間的一部分放入主存內,而其余部分放在輔存上。當所訪問的信息不在主存時,則由操作系統負責調入所需要的部分。由於大多數程序執行時,在一段時間內僅使用它的程序編碼的一部分,即並不需要在全部時間內將該程序的全部指令和數據都放在主存中,所以,程序的地址空間部分裝入主存時,它還能正確地執行,此即為程序的局部性特征。
虛擬存儲器(virtualmemory)將用戶的邏輯主存與物理主存分開,這是現代計算機對虛存的實質性的描述。更為一般的描述是:計算機系統在處理應用程序時,只裝入部分程序代碼和數據就啟動其運行,由操作系統和硬件相配合完成主存和外圍聯機存儲器之間的信息的動態調度,這樣的計算機系統好像為用戶提供了一個其存儲容量比實際主存大得多的存儲器,這個存儲器稱為虛擬存儲器。之所以稱它為虛擬存儲器,是因為這樣的存儲器實際上並不存在,只是由於系統提供了自動覆蓋功能后,給用戶造成的一種虛擬的感覺,仿佛有一個很大的主存供他使用一樣。
虛擬存儲器的核心問題是將程序的訪問地址和主存的可用地址相脫離。程序的訪問地址稱為虛地址,它可以訪問的虛地址范圍叫做程序的虛地址空間V,虛地址范圍是由虛地址寄存器的位數決定的。在指定的計算機系統中,可使用的實地址范圍叫做計算機的實地址空間R。當然,虛地址空間可以比實地址空間大,也可以比實際主存小。在多道程序運行環境下,操作系統把實際主存擴充成若干個虛存,系統可以為每個應用程序建立一個虛存。這樣每個應用可以在自己的地址空間中編制程序,在各自的虛存上運行。引入虛存概念后,用戶無需了解實存的物理性能,只需在自己的虛存上編制程序,這給用戶帶來了極大的方便。主存空間的分配由系統完成;邏輯地址轉換成物理地址是通過地址變換機構自動完成的,這樣,既消除了普通用戶對主存分配細節、具體問題了解的困難,方便了用戶,又能根據主存的情況和應用程序的實際需要進行動態分配,從而充分利用了主存。而且,多道程序設計所要求的存儲保護、程序浮動都可以很方便地實現。必須指出,實現虛擬存儲技術,需要有一定的物質基礎。其一是需要有相當容量的輔存,以便足以存放多用戶的作業的地址空間;其二是要有一定容量的主存;其三是地址變換機構。
分區存儲管理
分區存儲管理是滿足多道程序設計的最簡單的一種存儲管理方法。它允許多個用戶作業共享主存空間,這些作業在主存內是以划分分區而共存的。早期的分區存儲管理技術只有固定式分區方法,后來才發展形成動態分區方法。
分區存儲管理技術能滿足多道程序設計的需要,但它也存在着一個非常嚴重的碎片問題。解決這個問題的辦法之一是采用拼接技術。所謂拼接技術是指移動存儲器中某些已分配區中的信息,使本來分散的空閑區連成一個大的空閑區,拼接要消耗大量的系統資源,且有時為拼接所花費的系統開銷要大於拼接所得到的效益,因而這種方法的使用受到了限制。
頁式存儲管理
為了尋找解決碎片問題的新途徑,人們很容易想到能否避開程序對連續連續性的要求,讓程序的地址空間去適應存儲器的現狀。例如,有一個作業要求投入運行,其程序的地址空間為3KB,而主存當前只有兩個各為1KB和2KB的空閑區。顯然,每個空閑區的大小都比該程序的地址空間小,而總和卻同它相等。這時可以把該程序存放到主存中這兩個不相鄰的區域中。這正是分頁的思想。
在分頁存儲管理方法中,主存被等分成一系列的塊,程序的地址空間被等分成一系列的頁面,然后將頁面存放到主存塊中。為了便於實現動態地址變換,一般主存的塊和頁面大小相等且為2的冪次。
另外,在按區分配方案中,當作業程序的地址空間小於主存可用空間時,該作業是不能投入運行的,即不能方便地實現主存擴充。但是,在頁式系統中則可方便地支持虛擬存儲,擴充主存,因為它不需限定作業在投入運行之前必須把它的全部地址空間裝入主存,而只要求把當前所需要的一部分頁面裝入主存即可。這樣,對虛地址空間的限制,至少從理論上來說被取消了。換句話說,這種系統為用戶提供了一個很大的地址空間。但系統必須完成主存和輔存之間的信息的自動調度。因為,一個作業的全部頁面存放在輔存上,當它投入運行時,只是將運行進程的部分頁面裝入主存(這些頁面稱為活動頁面),在進程活動期間,系統根據其需要再從輔存調入所需的頁面。
頁表
程序的虛地址空間划分為若干頁,並被裝入主存的空閑塊中。於是,一個連續的程序空間在主存中可能是不連續的。為了保證程序能正確地運行,必須在執行每條指令時將程序中的邏輯地址變換為實際的物理地址,即進行動態重定位。在頁式系統中,實現這種地址變換的機構稱為頁面映像表,簡稱頁表。在頁式系統中,當程序按頁划分裝入存儲器時,操作系統為該程序建立一個頁表。頁表是記錄程序虛頁與其在主存中塊(實頁)的對應關系的數據結構。頁表中的每一個數據項用來描述頁面在主存中的物理塊號以及頁面的使用特性(根據需要擴充頁表的功能)。在簡單的頁式系統中,頁表只是虛頁和主存物理塊的對照表。
頁表可由高速緩沖存儲器組成,這樣做的結果是,地址變換速度快,但成本較高。另一個辦法是在主存固定區域內,用存儲單元來存放頁表。這種方法要占用一部分主存空間,而且地址變換速度較慢。現代的計算機系統采用硬件與主存頁表相結合的方法實現地址變換。
根據實際使用的經驗,一般頁面尺寸為1KB、2KB或4KB。
當請求調頁程序要調進一個頁面、而此時該作業所分得的主存塊已全部用完,則必須淘汰該作業已在主存中的一個頁。這時,就產生了在諸頁面中淘汰哪個頁面的實際問題,這也就涉及淘汰算法即置換算法的問題。算法設計不好將造成巨大系統開銷,稱為顛簸。
段式系統
在前述的分區存儲管理和頁式系統中,程序的地址空間是一維線性的,因為指令或操作數地址只要給出一個信息量即可決定。分區存儲管理方法易出現碎片。頁式系統中一頁或頁號相連的幾個虛頁上存放的內容一般都不是一個邏輯意義完整的信息單位。請調一頁,可能只用到頁中的一部分內容。這種情況,對於要調用許多子程序的大型用戶程序來說,仍然會感到感到主存空間的使用效率不高。為此,提出了段式存儲管理技術。在這樣的系統中作業的地址空間由若干個邏輯分段組成,每個分段有自己的名字,對於一個分段而言,它是一個連續的地址區。在主存中,每個分段占一分區。由於分段是一個有意義的信息單位,所以分段的共享和對分段的保護更有意義,同時也容易實現。
段頁式存儲管理
在段式存儲管理中結合分頁存儲管理技術,即在程序地址空間內分段,在一個分段內划分頁面,這就形成了段頁式存儲管理。具有段頁式地址結構的用戶地址空間。
段頁式存儲管理的用戶地址空間是二維的、按段划分的。在段中再划分成若干大小相等的頁。這樣,地址結構就由段號、段內頁號和頁內位移三部分組成。用戶使用的仍是段號和段內相對地址,由地址變換機構自動將段內相對地址的高幾位解釋為段內頁號,將剩余的低位解釋為頁內位移。用戶地址空間的最小單位不是段而是頁,而主存按頁的大小划分,按頁裝入。這樣,一個段可以裝入到若干個不連續的主存塊內,段的大小不再受主存可用區的限制了。
段頁式地址變換中要得到物理地址須經過三次主存訪問(若段表、頁表都在主存),第一次訪問段表,得到頁表起始地址;第二次訪問頁表,得到主存塊號;第三次將主存塊號與頁內位移組合,得到物理地址。可用軟、硬件相結合的方法實現段頁式地址變換,這樣雖然增加了硬件成本和系統開銷,但在方便用戶和提高存儲器利用率上很好地實現了存儲管理的目標。
請求調頁策略是在主存和輔存之間傳送存儲頁,而不是整個進程。這樣,整個進程並不需要全部駐留在主存中就可運行,即當進程訪問頁面時,核心為進程裝入該頁。請求調頁的優點是,它使進程的虛地址空間到機器的物理存儲空間的映射更為靈活,允許進程的大小比可用的物理存儲空間大得多,還允許將更多的進程同時裝入主存。
輸入/輸出管理
I/O設備是計算機系統中除中央處理機、主存儲器之外的所有其他的設備。
為了便於用戶作業及相應進程在運行期間利用各類設備I/O,管理程序應能屏蔽設備的物理特性,為用戶建立虛環境。現代操作系統一般采用“設備獨立性”的概念。
所謂設備獨立性是指用戶在編制程序時所使用的設備與實際使用的設備無關,也就是在用戶程序中僅使用邏輯設備名。邏輯設備名是用戶自己指定的設備名(或設備號),它是暫時的、可更改的。而物理設備名是系統提供的設備的標准名稱,它是永久的、不可更改的。雖然程序在實際執行中必須使用實際的物理設備,就好像程序在主存中一定要使用物理地址一樣,但在用戶程序中則應避免使用實際的物理名,而采用邏輯設備名。這樣做的道理就和用戶程序中要使用邏輯地址而不使用物理地址的道理一樣。設備管理的任務之一就是把邏輯設備名轉換成物理設備名。
緩沖技術
- 什么是緩沖
緩沖是在兩種不同速度的設備之間傳輸信息時平滑傳輸過程的常用手段。緩沖器是以硬件的方法來實現緩沖的,它容量較小,是用來暫時存放數據的一種存儲裝置。從經濟上考慮,除了在關鍵的地方采用少量必要的硬件緩沖器之外,大都采用軟件緩沖。軟件緩沖區是指在I/O操作期間用來臨時存放I/O數據的一塊存儲區域。緩沖是為了解決中央處理機的速度和I/O設備的速度不匹配的問題而提出來的,緩沖也可用於解決程序所請求的邏輯記錄大小和設備的物理記錄大小失配的問題,是有效地利用中央處理機的重要技術。下面看看緩沖是如何工作的。當用戶要求在某個設備上進行讀操作時,從系統中獲得一個空的緩沖區,並將一個物理記錄讀到緩沖區中。當用戶要求使用這些數據時,系統將依據邏輯記錄特性從緩沖區中提取並發送到用戶進程存儲區中。當緩沖區空而進程又要從中取數據時該進程被迫等待。此時,操作系統需要重新送數據填滿緩沖區,進程則從中取數據繼續運行。當用戶要求寫操作時,先從系統獲得一個空緩沖區,並且將一個邏輯記錄從用戶的進程存儲區傳送到緩沖區中。若為順序寫請求,則把數據寫到緩沖區中,直到它完全裝滿為止。然后系統將緩沖區的內容作為物理記錄文件寫到設備上,使緩沖區再次為空。只有在系統還來不及騰空緩沖區之前,進程又企圖輸出信息時,它才需要等待。 - 使用緩沖的理由
1)處理數據流的生產者與消費者之間的速度差異
2)協調傳輸數據大小的不一致
3)應用程序的拷貝語義
輸入/輸出控制方式
外部設備在中央處理機的控制之下完成信息的傳輸。在信息傳輸中,中央處理機做多少工作、外部設備做多少工作呢?這個問題將決定CPU和I/O設備的並行能力,同時它也取決於軟、硬技術的基礎。CPU一般通過I/O控制器與物理設備打交道。按照I/O控制器智能化程度的高低,可把I/O設備的控制方式分為四類:循環測試I/O方式、I/O中斷方式、DMA方式和通道方式。
- I/O中斷方式
與循環測試方式相比,I/O中斷方式使CPU的利用率大大提高了。但缺點是由於每台設備每次輸入/輸出一個數據,都要求中斷CPU,當系統配置的設備較多時,系統進行中斷處理的次數就很多,這會使CPU的有效計算時間大大減少。為減少I/O中斷處理對CPU造成的負擔,又出現了通道方式和DMA方式。 - 通道方式
在大、中型和超級小型機中,一般采用I/O通道控制I/O設備的各種操作。I/O通道是用來控制外部設備與主存之間進行成批數據傳輸的部件。每個通道可以連接多台外部設備並控制它們的I/O操作。通道有自己的一套簡單的指令系統和執行通道程序,通道接收CPU的委托,而又獨立於CPU工作。因此,可以把通道看做是一台小型的處理I/O的處理機,或稱I/O處理機。
與前面兩種I/O方式相比,通道方式有更強的I/O處理能力。有關I/O的工作,CPU委托通道去做,當通道完成了I/O任務后,向CPU發中斷信號,請求CPU處理。這樣就使CPU基本上擺脫了I/O控制工作,並大大提高了CPU與外部設備的並行工作的程度。 - DMA方式
在DMA方式中,I/O控制器有更強的功能。它除了具有上述的中斷功能外,還有一個DMA控制機構。在DMA控制器的控制下,設備和主存之間可成批地進行數據交換,而不用CPU干預。這樣既大大減輕了CPU的負擔,也使I/O的數據傳送速度大大提高。在DMA方式下,允許DMA控制器“接管”地址線的控制權,而直接控制DMA控制器與主存的數據交換。因此,I/O設備與主存之間的數據傳送不需要CPU介入,從而減輕了CPU的負擔。
UNIX系統設備管理的主要特點
1.將外部設備看做文件,由文件系統統一處理
2.系統的設備配置靈活、方便
3.使用塊設備緩沖技術,提高了文件系統的存取速度塊設備的文件存儲部分是文件系統存在的介質,而文件系統與用戶界面的聯系最為密切,故文件系統存取文件的效率是十分重要的。文件系統通過高速緩沖機制存取文件數據,緩沖機制調節核心與文件存儲設備之間的數據流。UNIX提供由數據緩沖區組成的高速緩沖,每個緩沖區的大小為512字節。當用戶程序要把信息寫入文件時,先寫入緩沖區里立即返回,由系統作延遲寫處理。當用戶程序要從磁盤讀文件信息時,先要查看在緩沖區緩沖區中有無含有此信息的塊,如果有就不必啟動磁盤I/O,可立即從緩沖區內取出。這種做法大大加快了文件的訪問速度。
- UNIX緩沖區的管理
對文件系統的一切存取操作,核心都能通過每次直接從磁盤上讀或往磁盤上寫來實現。但磁盤的傳輸速率與CPU的速度相比還是慢的。為了加快系統的響應時間和增加系統的吞吐量,UNIX構造了一個由高速緩沖組成的內部數據緩沖池,以降低磁盤的存取頻率。UNIX緩沖管理策略試圖將盡可能多的有用數據保存在高速緩沖中。核心體系結構中的高速緩沖模塊的位置處於文件子系統與塊設備驅動程序之間。當從磁盤中讀數據時,核心試圖先從高速緩沖區中讀。如果數據已在高速緩沖中,核心可以不必啟動磁盤I/O。如果數據不在該高速緩沖區中,則核心從磁盤上讀數據,並將其暫時保存在緩沖區中。類似地,要往磁盤上寫數據時,也先往高速緩沖區中寫入,以便核心隨后又試圖讀它時,它能在高速緩沖中。但是,被寫在高速緩沖中的數據要延遲寫到非往磁盤上寫不可的時候才進行。所以,高速緩沖模塊的算法實現了數據的預先緩存和延遲發送的功能。
文件系統
文件的物理結構:連續文件、串聯文件、隨機文件、索引文件
文件目錄
文件系統是用戶和外部設備之間的接口和界面。用戶可通過文件系統去管理和使用各種設備介質上的信息。文件系統的大部分工作是為了解決“用戶所需的信息結構及其操作”與“設備介質的實際結構和I/O指令”之間的差異。用戶所希望的信息結構是按照簡單的邏輯關系組織在一起的,他們所希望的操作是一些只用名字就能存取所需信息的讀寫操作。然而,計算機只能使用各種I/O指令去存取相應介質上的信息,其信息結構又是按照設備介質的各自特點組織的。因此,文件系統所要解決的核心問題,就是按照充分發揮主機和外部設備效率的原則,把信息的邏輯結構映像成設備介質上的物理結構,把用戶的文件操作轉換成相應的I/O指令。轉換過程所使用的主要數據結構是文件目錄和輔存空間使用情況表。這樣,文件目錄就將每個文件的符號名和它們在輔存空間的物理地址與有關文件情況的說明信息聯系起來了。因此,用戶只需向系統提供一個文件符號名,系統就能准確地找出所要的文件來,這就是文件系統的基本功能。實現符號名與具體物理地址之間的轉換,其主要環節是查目錄。所以,目錄的編排應以如何能准確地找到所需的文件為原則,而選擇查目錄的方法應以查找速度快為准則。