




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第3章作業(yè)管理及用戶接口3.1操作系統(tǒng)的用戶接口3.2作業(yè)管理3.3批處理作業(yè)的管理3.4處理機(jī)調(diào)度級別3.5Linux系統(tǒng)調(diào)用的實(shí)現(xiàn)習(xí)題三 3.1操作系統(tǒng)的用戶接口
計(jì)算機(jī)配置操作系統(tǒng)的目的之一是為了方便用戶。也就是說,在操作系統(tǒng)協(xié)作下,用戶能夠簡便、靈活、安全可靠、經(jīng)濟(jì)有效地使用計(jì)算機(jī)系統(tǒng)的資源來解決問題。那么,用戶通過什么途徑與操作系統(tǒng)打交道,請求并得到操作系統(tǒng)的協(xié)作呢?為了便于用戶使用計(jì)算機(jī),操作系統(tǒng)為用戶提供了兩種使用界面,即兩種類型的接口。一種是程序級接口,即系統(tǒng)調(diào)用,又稱廣義指令。用戶可以在程序中直接使用系統(tǒng)調(diào)用指令來調(diào)用操作系統(tǒng)的有關(guān)功能。另一種是作業(yè)控制級接口,其中又分別為脫機(jī)用戶與聯(lián)機(jī)用戶設(shè)置了不同的接口,即系統(tǒng)提供的作業(yè)控制語言或鍵盤操作命令,用戶可以使用它們向系統(tǒng)提出作業(yè)運(yùn)行的步驟,控制作業(yè)的運(yùn)行。3.1.1程序級接口
1.系統(tǒng)調(diào)用指令的概念
所謂系統(tǒng)調(diào)用,是指操作系統(tǒng)向用戶提供的程序一級的服務(wù),用戶程序借助于系統(tǒng)調(diào)用命令來向操作系統(tǒng)提出各種資源要求和服務(wù)請求。用戶在程序中調(diào)用操作系統(tǒng)提供的一些子功能。這些子功能分別由一個(gè)或多個(gè)子程序來完成。因此,系統(tǒng)調(diào)用就是通過系統(tǒng)調(diào)用命令,中斷現(xiàn)行程序而轉(zhuǎn)去執(zhí)行操作系統(tǒng)提供的相應(yīng)的子程序,以完成特定的系統(tǒng)功能。完成后,控制又返回到發(fā)出系統(tǒng)調(diào)用命令之后的一條指令,被中斷的程序?qū)⒗^續(xù)執(zhí)行。系統(tǒng)調(diào)用是作為擴(kuò)充機(jī)器指令、增加系統(tǒng)功能、方便用戶使用而提供的。因此,在一些計(jì)算機(jī)系統(tǒng)中,把系統(tǒng)調(diào)用命令稱為“廣義指令”。但是,這些“廣義指令”與指令系統(tǒng)提供的機(jī)器指令在性質(zhì)上是不同的。機(jī)器指令是由硬件(線路)來執(zhí)行的;而“廣義指令”是由操作系統(tǒng)屏蔽了系統(tǒng)硬件細(xì)節(jié),提供的一個(gè)或多個(gè)子程序模塊(軟件)來實(shí)現(xiàn)的,使得用戶可以在自己的程序中使用系統(tǒng)調(diào)用命令來調(diào)用操作系統(tǒng)的各種管理功能??墒牵瑥挠脩舻慕嵌葋砜?,操作系統(tǒng)提供了系統(tǒng)調(diào)用命令后,就好像擴(kuò)大了指令系統(tǒng),增強(qiáng)了處理機(jī)的功能?,F(xiàn)在,用戶不僅可以使用硬件提供的機(jī)器指令,而且可以直接使用軟件(操作系統(tǒng))提供的系統(tǒng)調(diào)用命令。因此,從虛擬機(jī)角度看待操作系統(tǒng),系統(tǒng)中增添了系統(tǒng)調(diào)用命令后,呈現(xiàn)在用戶面前的是一臺更強(qiáng)、使用更方便的處理機(jī),它實(shí)現(xiàn)了處理機(jī)性能上的擴(kuò)充。為了區(qū)別真實(shí)的物理處理機(jī),我們稱它為虛處理機(jī)。至于系統(tǒng)中提供的進(jìn)程調(diào)度功能,它是實(shí)現(xiàn)處理機(jī)數(shù)量上的擴(kuò)充。也就是說,系統(tǒng)可為每個(gè)創(chuàng)建的進(jìn)程各自分配一臺虛處理機(jī)。通常,把這樣的虛處理機(jī)稱為邏輯處理機(jī)。從系統(tǒng)角度來看,特別是在多道系統(tǒng)中,由于多個(gè)用戶競爭使用系統(tǒng)資源(如處理機(jī)、主存儲器、外部設(shè)備等),如果讓用戶程序直接控制和使用這些資源必將造成混亂。因此,在多道系統(tǒng)中,只能由操作系統(tǒng)管理和分配系統(tǒng)資源。當(dāng)用戶程序需要使用系統(tǒng)資源時(shí),它們通過系統(tǒng)調(diào)用命令向系統(tǒng)發(fā)出請求,然后操作系統(tǒng)執(zhí)行有關(guān)管理程序?yàn)橛脩舫绦蚴褂觅Y源提供相應(yīng)的服務(wù)。所以說,系統(tǒng)調(diào)用命令或廣義指令是操作系統(tǒng)為方便用戶使用計(jì)算機(jī)而提供的各種服務(wù)功能的集合。
2.系統(tǒng)調(diào)用指令的形式
系統(tǒng)調(diào)用命令的功能與操作系統(tǒng)的功能是相應(yīng)的。由于不同操作系統(tǒng)的功能不同,它們提供的系統(tǒng)調(diào)用命令的功能和數(shù)量也不同,調(diào)用格式也不盡相同。
例如,在匯編一級IBM360、370機(jī)器中,系統(tǒng)調(diào)用命令(訪管指令)的格式是“SVCN”,IBM-PC機(jī)提供的系統(tǒng)調(diào)用命令(軟中斷指令)的格式是“INTN”,等等。
一般的系統(tǒng)向用戶提供幾十到幾百條系統(tǒng)調(diào)用命令,而操作系統(tǒng)內(nèi)已事先編制好實(shí)現(xiàn)這些系統(tǒng)調(diào)用功能的子程序或過程。
3.系統(tǒng)調(diào)用執(zhí)行過程
從用戶程序進(jìn)入系統(tǒng)調(diào)用的步驟及執(zhí)行過程如下:
(1)把系統(tǒng)調(diào)用命令所需要的參數(shù)區(qū)首址裝入指定的通用寄存器。
(2)設(shè)置一條調(diào)用指令(如“訪管”指令或“軟中斷”指令),當(dāng)用戶程序執(zhí)行到該條指令時(shí),就轉(zhuǎn)到系統(tǒng)調(diào)用處理程序。系統(tǒng)調(diào)用處理程序完成以下工作:
(1)保留用戶程序現(xiàn)場,將系統(tǒng)調(diào)用命令號等參數(shù)放入約定的存儲單元。
(2)根據(jù)系統(tǒng)調(diào)用命令,訪問系統(tǒng)調(diào)用入口表,找到相應(yīng)子程序的入口地址,然后轉(zhuǎn)去執(zhí)行。
(3)恢復(fù)現(xiàn)場并把系統(tǒng)調(diào)用命令的返回參數(shù)或參數(shù)區(qū)首址放入指定的通用寄存器中,供用戶程序使用。
系統(tǒng)調(diào)用處理過程如圖3.1所示。圖3.1系統(tǒng)調(diào)用處理
4.處理機(jī)的狀態(tài)及特權(quán)指令
操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)中最重要的系統(tǒng)軟件,為了能正確地進(jìn)行控制與管理,其本身是不能被破壞的。因此,系統(tǒng)必須建立一個(gè)保護(hù)環(huán)境,而采取的辦法是區(qū)別處理機(jī)的工作狀態(tài)。因?yàn)樵谙到y(tǒng)中有兩類程序在運(yùn)行,一類是操作系統(tǒng)的程序,一類是用戶程序。這兩類程序的任務(wù)是不同的,前者是管理與控制者,它負(fù)責(zé)管理和分配系統(tǒng)資源,為用戶提供服務(wù)。而用戶程序運(yùn)行時(shí),所需資源必須向操作系統(tǒng)提出申請,自己不能隨意使用系統(tǒng)資源。為此將處理機(jī)執(zhí)行時(shí)的工作狀態(tài)分為管態(tài)和目態(tài)。處理機(jī)在這兩種不同的工作狀態(tài)下使用硬件的權(quán)限是不同的。*管態(tài):處理機(jī)在執(zhí)行操作系統(tǒng)的程序代碼時(shí)所處的狀態(tài)。在管態(tài)下,處理機(jī)可以執(zhí)行特權(quán)指令。特權(quán)指令是只能由操作系統(tǒng)使用的機(jī)器指令,它們通常是與控制和管理系統(tǒng)資源有關(guān)的指令,如啟動(dòng)通道或外設(shè)工作的指令等。此外,在管態(tài)下程序可以訪問內(nèi)存的任何區(qū)域。
*目態(tài):處理機(jī)在執(zhí)行用戶程序和其他系統(tǒng)應(yīng)用程序時(shí)所處的狀態(tài)。處理機(jī)運(yùn)行在目態(tài)時(shí)不能執(zhí)行特權(quán)指令,也不能訪問用戶作業(yè)存儲區(qū)域以外的內(nèi)存單元,否則將會引起中斷。處理機(jī)工作狀態(tài)的轉(zhuǎn)換是由一條特殊的指令引起的,它稱為訪管指令。訪管指令是一條機(jī)器硬指令,執(zhí)行訪管指令時(shí),系統(tǒng)將產(chǎn)生訪管中斷,程序控制轉(zhuǎn)入執(zhí)行操作系統(tǒng)的程序代碼,處理機(jī)就相應(yīng)地由目態(tài)變成管態(tài)。操作系統(tǒng)的有關(guān)程序代碼執(zhí)行完畢后,通過中斷返回,程序控制轉(zhuǎn)回到用戶程序,處理機(jī)也由管態(tài)轉(zhuǎn)換成目態(tài)。
所謂特權(quán)指令,是指具有特殊權(quán)限的指令,由于這類指令的權(quán)限最大,所以如果使用不當(dāng),就會破壞系統(tǒng)或其他用戶信息。因此為了安全起見,這類指令只能用于操作系統(tǒng)或其他系統(tǒng)軟件,一般不直接提供給用戶使用。一般說來,在單用戶、單任務(wù)的計(jì)算機(jī)中不具有也必不需要特權(quán)指令,而在多用戶,多任務(wù)的計(jì)算機(jī)系統(tǒng)中,特權(quán)指令卻是必不可少的。它主要用于系統(tǒng)資源的分配和管理,包括改變系統(tǒng)的工作方式,檢測用戶的訪問權(quán)限,修改虛擬存儲器管理的段表、頁表和完成任務(wù)的創(chuàng)建和切換等。
在某些多用戶的計(jì)算機(jī)系統(tǒng)中,為了統(tǒng)一管理所有的外部設(shè)備,輸入/輸出指令也作為特權(quán)指令,不允許用戶直接使用。需要輸入/輸出時(shí),必須通過系統(tǒng)調(diào)用,經(jīng)由操作系統(tǒng)來完成。3.1.2作業(yè)控制級接口
作業(yè)控制級接口也稱為操作級接口。這類接口是系統(tǒng)為用戶在作業(yè)一級請求系統(tǒng)服務(wù)而設(shè)置的,用戶可利用這組接口組織作業(yè)的工作流程和控制作業(yè)的運(yùn)行。這類接口分為脫機(jī)接口和聯(lián)機(jī)接口。
1.脫機(jī)接口——作業(yè)控制語言
脫機(jī)接口主要用于批處理方式操作系統(tǒng)。在批處理系統(tǒng)中,由于用戶不能直接干預(yù)作業(yè)的運(yùn)行,因此,通常把批處理系統(tǒng)的用戶稱為脫機(jī)用戶。為了能夠使脫機(jī)用戶能夠向系統(tǒng)說明作業(yè)運(yùn)行的步驟,使系統(tǒng)按照用戶的要求控制作業(yè)的運(yùn)行,系統(tǒng)提供了脫機(jī)用戶接口,又稱批處理用戶接口。它們的形式是作業(yè)控制語言(JCL)。作業(yè)控制語言實(shí)際上是一組具有固定格式和功能的作業(yè)控制命令。用戶使用這些作業(yè)控制命令編寫作業(yè)說明書或制作作業(yè)控制卡。在作業(yè)說明書或控制卡中說明作業(yè)的執(zhí)行步驟和需要的系統(tǒng)資源等。用戶將作業(yè)說明書連同作業(yè)一起交給系統(tǒng)管理員。系統(tǒng)管理員將它們與作業(yè)一同輸入到計(jì)算機(jī)系統(tǒng)中。操作系統(tǒng)根據(jù)作業(yè)說明書中的控制命令控制作業(yè)自動(dòng)執(zhí)行。
這種接口的優(yōu)點(diǎn)是作業(yè)的操作過程由系統(tǒng)自動(dòng)調(diào)度或系統(tǒng)操作員干預(yù),因而系統(tǒng)利用率高。
2.聯(lián)機(jī)接口——鍵盤命令
聯(lián)機(jī)接口由一組鍵盤操作命令組成,是用戶以交互方式請求操作系統(tǒng)服務(wù)的手段。在分時(shí)系統(tǒng)中,用戶可以使用終端的鍵盤與計(jì)算機(jī)進(jìn)行交互。所以,通常把分時(shí)系統(tǒng)的用戶稱為交互式用戶或聯(lián)機(jī)用戶。為了便于交互式用戶控制它們作業(yè)的運(yùn)行,操作系統(tǒng)提供了交互式用戶接口,又稱聯(lián)機(jī)用戶接口,它們的形式是一系列的鍵盤操作命令。
用戶可以通過在鍵盤上鍵入操作命令向系統(tǒng)提出要求。用戶每輸入一條命令,操作系統(tǒng)的命令解釋程序?qū)υ撁钸M(jìn)行解釋后,系統(tǒng)立即執(zhí)行該命令規(guī)定的功能,完成指定的操作。
在微機(jī)系統(tǒng)中,通常把這組鍵盤命令分為內(nèi)部命令與外部命令兩種。
(1)內(nèi)部命令。這類命令的特點(diǎn)是程序短小,使用頻繁。因此,它們在系統(tǒng)啟動(dòng)時(shí)就被加載到內(nèi)存而且常駐內(nèi)存。
(2)外部命令。這類命令的程序較長,且各自獨(dú)立地作為一個(gè)文件駐留在磁盤上,只在需要調(diào)用它們時(shí),才從磁盤調(diào)入內(nèi)存執(zhí)行。
鍵盤操作命令的作業(yè)控制方式靈活方便,用戶可以根據(jù)運(yùn)行情況隨時(shí)干預(yù)自己的作業(yè),但是系統(tǒng)利用率不高。
3.圖形用戶界面
圖形用戶界面簡稱GUI,是操作系統(tǒng)提供的另一種聯(lián)機(jī)用戶接口。使用圖形的方式,借助菜單、按鈕等標(biāo)準(zhǔn)界面元素和鼠標(biāo)操作,幫助用戶方便地向計(jì)算機(jī)系統(tǒng)發(fā)出指令,啟動(dòng)操作,并將系統(tǒng)運(yùn)行的結(jié)果同樣以圖形方式顯示給用戶。圖形用戶界面畫面生動(dòng)、操作簡單,省去了字符界面用戶必須記憶各種命令的麻煩,用戶通過使用鍵盤或鼠標(biāo)對菜單中的各種操作進(jìn)行選擇,選中的操作由系統(tǒng)自動(dòng)執(zhí)行。圖形用戶界面的“選擇并點(diǎn)取”方式大大減少了用戶的記憶工作量,極大地方便了用戶,受到普遍歡迎。Microsoft的Windows系統(tǒng)和UNIX的X-Windows窗口系統(tǒng)都是當(dāng)前著名的圖形用戶界面。
3.2作業(yè)管理
3.2.1作業(yè)與作業(yè)步
作業(yè)(JOB)是計(jì)算機(jī)中的一個(gè)常用的概念。概括來說,作業(yè)是用戶在一次算題過程中或一次事物處理中,要求計(jì)算機(jī)系統(tǒng)所做的工作的集合。把一個(gè)作業(yè)所經(jīng)歷的每一個(gè)加工步驟(如編譯、連接裝配、運(yùn)行等)稱為一個(gè)“作業(yè)步”。作業(yè)的形態(tài)是用戶編制的程序和要處理的數(shù)據(jù)。用戶為了讓計(jì)算機(jī)完成某個(gè)特定任務(wù),首先需要進(jìn)行程序設(shè)計(jì),對任務(wù)進(jìn)行數(shù)學(xué)抽象,確定相應(yīng)的數(shù)據(jù)結(jié)構(gòu)和算法,用高級程序設(shè)計(jì)語言或匯編語言編寫成源程序。然后提交給計(jì)算機(jī)通過編譯或匯編、連接、裝配、運(yùn)行等步驟,最終由計(jì)算機(jī)送出用戶所需要的運(yùn)行結(jié)果。從計(jì)算機(jī)管理的角度看,上述一系列的由計(jì)算機(jī)執(zhí)行的任務(wù)的集合就是作業(yè)。
計(jì)算機(jī)在完成用戶提交的作業(yè)過程中,往往是通過執(zhí)行一系列有序的工作步驟進(jìn)行的,每個(gè)步驟完成作業(yè)的一部分特定工作。例如,從用戶把源程序提交給計(jì)算機(jī)系統(tǒng)到得出運(yùn)算結(jié)果要經(jīng)過以下幾個(gè)工作步驟:
(1)編輯。因?yàn)樵诰幹圃闯绦驎r(shí)難免會發(fā)生錯(cuò)誤,所以首先要調(diào)用文本編輯程序把制定的源程序文件讀入內(nèi)存,并顯示在CRT上,利用編輯命令進(jìn)行修改并存于磁盤,從而得到一個(gè)新的源程序文件。
(2)編譯。由相應(yīng)語言的編譯程序?qū)τ脩舻脑闯绦蜻M(jìn)行語法檢查,經(jīng)編譯或匯編工作生成若干個(gè)目標(biāo)代碼段。
(3)連接裝配。將上一個(gè)作業(yè)步產(chǎn)生的目標(biāo)程序段、調(diào)用的系統(tǒng)的子程序以及庫函數(shù)等連接裝配成可執(zhí)行的目標(biāo)程序。
(4)運(yùn)行。將可執(zhí)行的目標(biāo)程序讀入內(nèi)存并控制其執(zhí)行,產(chǎn)生運(yùn)行結(jié)果。以上的四個(gè)工作步驟中,每步都完成一項(xiàng)相對獨(dú)立的工作(作業(yè))。通常把計(jì)算機(jī)系統(tǒng)完成一個(gè)作業(yè)所需的一系列有序的相對獨(dú)立的工作步驟稱為作業(yè)步。作業(yè)的各個(gè)作業(yè)步雖然功能相對獨(dú)立,但它們之間也相互關(guān)聯(lián),往往一個(gè)作業(yè)步的執(zhí)行需要使用上一個(gè)作業(yè)步的執(zhí)行結(jié)果。圖3.2給出了上述作業(yè)的四個(gè)作業(yè)步之間的關(guān)聯(lián)。圖3.2作業(yè)的四個(gè)作業(yè)步3.2.2作業(yè)控制方式
把用戶根據(jù)操作系統(tǒng)提供的手段來說明加工步驟的方式,稱為作業(yè)控制方式。它包括批處理控制方式和交互控制方式。
1.批處理控制方式
批處理控制方式也稱脫機(jī)控制方式或自動(dòng)控制方式。用戶使用操作系統(tǒng)提供的作業(yè)控制語言對作業(yè)執(zhí)行的控制意圖寫好一份作業(yè)控制說明書,連同該作業(yè)的源程序和初始數(shù)據(jù)一同提交給系統(tǒng),操作系統(tǒng)按照用戶說明的控制意圖來自動(dòng)控制作業(yè)的執(zhí)行。這種控制方式稱為批處理控制方式,把采用批處理控制方式的作業(yè)稱批處理作業(yè)。
2.交互控制方式
交互控制也稱聯(lián)機(jī)控制。用戶使用操作系統(tǒng)提供的操作控制命令來表達(dá)對作業(yè)執(zhí)行的控制意圖。用戶通過逐條輸入命令,操作系統(tǒng)把命令執(zhí)行情況通知用戶并讓用戶再輸入下一條命令,以控制作業(yè)執(zhí)行直到結(jié)束。這種方式也適合于終端用戶使用。采用交互控制方式的作業(yè)稱為交互式作業(yè)。對于來自終端的作業(yè)也稱為終端作業(yè)。
利用計(jì)算機(jī)提供的顯示屏幕、鍵盤、鼠標(biāo)等設(shè)備可實(shí)現(xiàn)人機(jī)對話。操作系統(tǒng)為用戶提供操作使用接口,目前,常用的操作使用接口有操作控制命令、菜單技術(shù)、窗口技術(shù)等。
(1)操作控制命令。不同系統(tǒng)提供給用戶使用的操作控制命令不相同,操作控制命令可分為注冊和注銷命令、編輯命令、文件類命令、調(diào)試類命令等。用戶根據(jù)規(guī)定的命令格式從鍵盤上輸入命令,請求系統(tǒng)完成指定的功能,用戶需要記住各個(gè)命令的功能和使用格式。
(2)菜單技術(shù)。提供菜單技術(shù)后,用戶可不必事先記住程序提供的功能及其使用方法,而根據(jù)屏幕上顯示的萊單來進(jìn)行選擇。因此,菜單技術(shù)為用戶提供了一種“友好的使用接口”。
(3)窗口技術(shù)。一個(gè)屏幕上可設(shè)置多個(gè)窗口,當(dāng)多個(gè)應(yīng)用程序同時(shí)執(zhí)行時(shí),每個(gè)應(yīng)用程序可在自己的窗口中執(zhí)行。每次只允許用戶對其中的一個(gè)窗口進(jìn)行直接操作,并允許用鼠標(biāo)或鍵盤來對窗口進(jìn)行操作。如Windows、WindowsNT等都是窗口軟件,向用戶提供了更友好的“圖形用戶接口”。
交互控制方式的系統(tǒng)都會提供命令解釋程序,負(fù)責(zé)接收并解釋執(zhí)行用戶的命令??砂衙罘譃閮纱箢悾环N通過系統(tǒng)中的模塊直接解釋執(zhí)行,另一種通過創(chuàng)建用戶進(jìn)程解釋執(zhí)行。 3.3批處理作業(yè)的管理
3.3.1批處理作業(yè)的組織
計(jì)算機(jī)系統(tǒng)可成批地接受采用批處理控制方式組織的作業(yè),但批處理作業(yè)在進(jìn)入計(jì)算機(jī)系統(tǒng)之前,用戶除了要準(zhǔn)備好源程序和初始數(shù)據(jù)外,還必須用作業(yè)控制語言來書寫作業(yè)控制說明書,規(guī)定如何控制作業(yè)的執(zhí)行。
在不同的計(jì)算機(jī)系統(tǒng)中,操作系統(tǒng)提供的作業(yè)控制語言可能不同,但它們的基本特性是類似的。作業(yè)控制語言由若干控制語句組成,每個(gè)控制語句除包含表示語句特征的關(guān)鍵字外,還包含有指示控制要求的若干參數(shù)。例如,IBM360/370系統(tǒng)提供的作業(yè)控制語言JCL中的語句JOB,它的格式為
∥作業(yè)名JOB參數(shù)
JOB語句是每個(gè)作業(yè)的第一個(gè)控制語句,它標(biāo)志一個(gè)新作業(yè)的開始。其中作業(yè)名是用戶給作業(yè)定義的名稱,JOB是語句特征的關(guān)鍵字,參數(shù)通常包括用戶名、記賬信息、作業(yè)類別、估計(jì)的計(jì)算時(shí)間、優(yōu)先數(shù)以及主存空間要求等。在JOB語句中作業(yè)名和JOB是不可缺省的,其他參數(shù)可缺省,由用戶選定。如語句EXEC,其格式為
∥步名EXECPGM?=?程序名,參數(shù)
EXEC語句是標(biāo)志一個(gè)作業(yè)步的語句,它告訴操作系統(tǒng)本作業(yè)不要執(zhí)行什么程序。語句中的EXEC是語句特征的關(guān)鍵字,PGM?=?程序名是不可缺省的,其他參數(shù)可缺省。
從上面列舉的兩個(gè)控制語句可以看出作業(yè)控制語言的作用,我們就不再羅列其他語句了。對用戶來說,只要根據(jù)操作系統(tǒng)提供的作業(yè)控制語言以及使用規(guī)定就可用其中的若干語句書寫好一份作業(yè)控制說明書。
用戶把源程序、數(shù)據(jù)、作業(yè)控制說明書都定義為文件,把這些文件組織在一起就構(gòu)成一個(gè)作業(yè)的信息。作業(yè)信息可以存儲在存儲介質(zhì)(如卡片、磁帶或軟盤等)上提交給系統(tǒng),系統(tǒng)通過相應(yīng)的輸入設(shè)備就可讀入這些信息。3.3.2批處理作業(yè)的輸入
每個(gè)用戶根據(jù)自己的解題要求組織作業(yè),把準(zhǔn)備好的作業(yè)交給操作員,操作員把一批作業(yè)組織成作業(yè)流向系統(tǒng)成批輸入。
采用批處理控制方式的計(jì)算機(jī)系統(tǒng)一般均提供SPOOL操作技術(shù),于是,操作員只要用預(yù)輸入命令啟動(dòng)SPOOL系統(tǒng)中的預(yù)輸入程序工作,就可把作業(yè)流中的作業(yè)信息存放到輸入井中。預(yù)輸入程序根據(jù)作業(yè)控制說明書中的作業(yè)標(biāo)識語句(如JOB語句)可以區(qū)分各個(gè)作業(yè),把作業(yè)登記入作業(yè)表,把作業(yè)中的各個(gè)文件存到輸入井且登記到預(yù)輸入表中。這樣,就完成了作業(yè)的輸入工作,被輸入的作業(yè)處于后備狀態(tài)在輸入井中等待處理。3.3.3作業(yè)控制塊
作業(yè)名資源要求預(yù)估的運(yùn)行時(shí)間最遲完成時(shí)間要求的內(nèi)存量要求外設(shè)類型、臺數(shù)要求的文件量和輸出量資源使用情況進(jìn)入系統(tǒng)時(shí)間開始運(yùn)行時(shí)間已運(yùn)行時(shí)間內(nèi)存地址外設(shè)臺號類型級別控制方式作業(yè)類型優(yōu)先級狀態(tài)作業(yè)提交給系統(tǒng)進(jìn)入后備狀態(tài)后,系統(tǒng)將為每個(gè)作業(yè)建立一個(gè)作業(yè)控制塊JCB。JCB在作業(yè)的整個(gè)運(yùn)行過程中始終存在,并且其內(nèi)容與作業(yè)的狀態(tài)同步地動(dòng)態(tài)變化。只有當(dāng)作業(yè)完成并退出系統(tǒng)時(shí),JCB才被撤消??梢哉f,JCB是一個(gè)作業(yè)在系統(tǒng)中存在的唯一標(biāo)志,系統(tǒng)根據(jù)JCB才感知到作業(yè)的存在。作業(yè)控制塊JCB中包含了對作業(yè)進(jìn)行管理的必要信息,如圖3.3所示。JCB中的信息一部分是從用戶提供的作業(yè)控制卡或作業(yè)說明書中得到的,另一部分是記錄作業(yè)運(yùn)行過程中的動(dòng)態(tài)信息。JCB的具體內(nèi)容因系統(tǒng)不同而異,一般包含下列內(nèi)容:
對于不同的批處理系統(tǒng),其JCB的內(nèi)容也有所不同。圖3.3給出了JCB的主要內(nèi)容。它包括作業(yè)名、資源要求、資源使用情況、類型級別、優(yōu)先級以及該作業(yè)的狀態(tài)等。其中,作業(yè)名由用戶提供并由系統(tǒng)將其轉(zhuǎn)換為系統(tǒng)可識別的作業(yè)標(biāo)識符。作業(yè)類型指該作業(yè)屬于計(jì)算型(要求CPU時(shí)間多)還是管理型(要求輸入/輸出量大),或圖形設(shè)計(jì)型(要求高速圖形顯示)等。圖3.3作業(yè)控制塊而資源要求則包括:該作業(yè)估計(jì)執(zhí)行的時(shí)間、要求最遲完成的時(shí)間、要求的內(nèi)存量和外存量、要求的外設(shè)類型及臺數(shù),以及要求的軟件支持工具庫函數(shù)等。資源要求均由用戶提供。資源使用情況包括:作業(yè)進(jìn)入系統(tǒng)時(shí)間、開始執(zhí)行時(shí)間、已執(zhí)行時(shí)間、內(nèi)存地址、外設(shè)臺數(shù)等。作業(yè)進(jìn)入系統(tǒng)時(shí)間是指,作業(yè)的全部信息進(jìn)入輸入井,作業(yè)的狀態(tài)成為后備狀態(tài)的時(shí)間。開始執(zhí)行時(shí)間是指,該作業(yè)被調(diào)度程序選中,其狀態(tài)由后備狀態(tài)變?yōu)閳?zhí)行狀態(tài)的時(shí)間。內(nèi)存地址是指,分配給該作業(yè)的內(nèi)存區(qū)起始地址。外設(shè)臺數(shù)是指,分配給該作業(yè)的外設(shè)實(shí)際臺數(shù)。優(yōu)先級則被用來決定該作業(yè)的調(diào)度次序。優(yōu)先級既可以由用戶給定,也可以由系統(tǒng)動(dòng)態(tài)計(jì)算產(chǎn)生。狀態(tài)是指該作業(yè)當(dāng)前所處的狀態(tài)。顯然,只有當(dāng)作業(yè)處于后備狀態(tài)時(shí),該作業(yè)才可以被調(diào)度。
3.3.4作業(yè)狀態(tài)
如前所述,作業(yè)從提交給系統(tǒng),直到完成任務(wù)后退出系統(tǒng)前,在整個(gè)活動(dòng)過程中處于不同的狀態(tài)。通常,作業(yè)狀態(tài)分為四種:提交、后備、執(zhí)行和完成,如圖3.4所示。圖3.4作業(yè)的基本狀態(tài)
(1)提交狀態(tài)。程序員把已存儲作業(yè)實(shí)體的某種介質(zhì)提交給機(jī)房后,管理員正在向計(jì)算機(jī)鍵入其作業(yè)時(shí)所處的狀態(tài),稱為提交狀態(tài)。
(2)后備狀態(tài)。作業(yè)信息輸入到計(jì)算機(jī)系統(tǒng)硬盤的輸入井中等待調(diào)度運(yùn)行時(shí)的狀態(tài),稱為后備狀態(tài)。
(3)執(zhí)行狀態(tài)。硬盤輸入井中處于后備狀態(tài)的作業(yè),被作業(yè)調(diào)度程序調(diào)度選中并裝入內(nèi)存中投入運(yùn)行時(shí)的狀態(tài),稱為執(zhí)行狀態(tài)。
(4)完成狀態(tài)。作業(yè)正常運(yùn)行結(jié)束或因發(fā)生錯(cuò)誤而終止時(shí),釋放其占有的全部資源,準(zhǔn)備離開系統(tǒng)時(shí)作業(yè)的狀態(tài),稱為完成狀態(tài)。 3.4處理機(jī)調(diào)度級別
處理機(jī)是計(jì)算機(jī)系統(tǒng)中一個(gè)十分重要的資源,對處理機(jī)的管理也是操作系統(tǒng)的主要功能之一。處理機(jī)管理的實(shí)現(xiàn)策略決定了操作系統(tǒng)的類型,其算法優(yōu)劣直接影響整個(gè)系統(tǒng)的性能。
調(diào)度是操作系統(tǒng)的基本功能,幾乎所有的計(jì)算機(jī)資源在使用之前都要經(jīng)過調(diào)度。當(dāng)然,CPU是計(jì)算機(jī)最主要的資源,經(jīng)過進(jìn)程調(diào)度,把CPU分配給合適的進(jìn)程使用。所以,調(diào)度問題是操作系統(tǒng)設(shè)計(jì)的一個(gè)核心問題。所謂調(diào)度,就是選出待分派的作業(yè)或進(jìn)程。在某些操作系統(tǒng)中,也可以調(diào)度其他一些諸如輸入/輸出操作這樣的工作單位。處理機(jī)調(diào)度的主要目的是為了分配處理機(jī)。
在大型通用系統(tǒng)中,往往有數(shù)百個(gè)終端與主機(jī)相連,眾多用戶共用系統(tǒng)中的一臺主機(jī)。這樣,可能有數(shù)百個(gè)作業(yè)存放在磁盤的作業(yè)隊(duì)列中。如何從這些作業(yè)中選出作業(yè)放入內(nèi)存,如何在作業(yè)或進(jìn)程之間分配CPU等問題,是操作系統(tǒng)的資源管理功能中的一個(gè)重要問題。處理機(jī)調(diào)度問題實(shí)際上也是處理機(jī)的分配問題。哪些作業(yè)的哪些進(jìn)程可以參加競爭處理機(jī)呢?顯然,只有那些參與競爭處理機(jī)所必需的資源都已得到滿足的進(jìn)程才能享有競爭處理機(jī)的資格。這時(shí),它們處于內(nèi)存就緒狀態(tài)。這些必需的資源包括內(nèi)存、外設(shè)及有關(guān)數(shù)據(jù)結(jié)構(gòu)等。從而,在進(jìn)程有資格競爭處理機(jī)之前,作業(yè)調(diào)度程序必須先調(diào)用存儲管理、外設(shè)管理程序,并按一定的選擇順序和策略從輸入井中選出幾個(gè)處于后備狀態(tài)的作業(yè),為它們分配內(nèi)存等資源和創(chuàng)建進(jìn)程,使它們獲得競爭處理機(jī)的資格。在外存中除了處于后備狀態(tài)的作業(yè)外,還存在處于就緒狀態(tài)而等待得到內(nèi)存的作業(yè)。這就需要有一定的方法和策略為這部分作業(yè)分配空間。
一般來說,處理機(jī)調(diào)度可分為四級:
(1)作業(yè)調(diào)度:又稱宏觀調(diào)度、高級調(diào)度。其主要功能是按一定的原則從外存輸入井上的大量后備作業(yè)中選出若干個(gè)作業(yè),給選定的作業(yè)分配內(nèi)存、輸入/輸出設(shè)備等必要的資源,并建立相應(yīng)的進(jìn)程,最后把它們的程序和數(shù)據(jù)調(diào)入內(nèi)存,使得該作業(yè)的進(jìn)程獲得競爭處理機(jī)的權(quán)利。等待進(jìn)程調(diào)度程序?qū)ζ鋱?zhí)行調(diào)度,并在作業(yè)完成后做善后處理工作。
(2)交換調(diào)度:又稱中級調(diào)度。為了使內(nèi)存中存放的進(jìn)程數(shù)目不至于太多,有時(shí)需要將某些進(jìn)程從內(nèi)存移到外存,為此設(shè)立了中級調(diào)度。特別是在采用虛擬存儲技術(shù)的系統(tǒng)中,往往增加中級調(diào)度這一級。所以,中級調(diào)度的功能是在內(nèi)存使用緊張的情況下,按照給定的原則和策略,將處于外存交換區(qū)中的就緒狀態(tài)的進(jìn)程調(diào)入內(nèi)存,或把處于內(nèi)存就緒或內(nèi)存等待狀態(tài)的進(jìn)程交換到外存交換區(qū)。引入中級調(diào)度的目的是為了提高內(nèi)存的利用率和系統(tǒng)吞吐量。它實(shí)際上是存儲管理中的對換技術(shù),這將在第4章中予以介紹。
(3)進(jìn)程調(diào)度:又稱微觀調(diào)度、低級調(diào)度。其主要功能是根據(jù)一定的算法將CPU分派給就緒中的一個(gè)進(jìn)程。執(zhí)行低級調(diào)度功能的程序稱為進(jìn)程調(diào)度程序,由它實(shí)現(xiàn)CPU在進(jìn)程間的切換。進(jìn)程調(diào)度的運(yùn)行頻率很高,在分時(shí)系統(tǒng)中往往幾十毫秒就要運(yùn)行一次。進(jìn)程調(diào)度是操作系統(tǒng)中最基本的一種調(diào)度。在一般類型的操作系統(tǒng)中都必須有進(jìn)程調(diào)度,而且它的優(yōu)劣直接影響整個(gè)系統(tǒng)的性能。
(4)線程調(diào)度:線程(Thread)是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位。線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。線程也稱為輕量級進(jìn)程,引入線程調(diào)度的目的是為了提高系統(tǒng)內(nèi)程序并發(fā)執(zhí)行的程度。線程在第2章有較詳細(xì)的介紹。
3.4.1作業(yè)調(diào)度
1.作業(yè)調(diào)度的功能
作業(yè)調(diào)度的主要任務(wù)是完成作業(yè)從后備狀態(tài)到執(zhí)行狀態(tài)和從執(zhí)行狀態(tài)到完成狀態(tài)的轉(zhuǎn)換。具體來說,作業(yè)調(diào)度程序要完成以下工作。
(1)記錄系統(tǒng)中各個(gè)作業(yè)的情況。作業(yè)調(diào)度程序?yàn)榱颂暨x作業(yè)投入運(yùn)行,并對其進(jìn)行管理,它必須掌握各個(gè)作業(yè)進(jìn)入系統(tǒng)時(shí)的有關(guān)情況。并把每個(gè)作業(yè)在各個(gè)階段的情況(包括分配的資源和作業(yè)狀態(tài)等)都記錄在它的JCB中。作業(yè)調(diào)度程序就是根據(jù)各個(gè)作業(yè)的JCB中的信息對作業(yè)進(jìn)行調(diào)度和管理的。
(2)按照某種調(diào)度算法從后備作業(yè)隊(duì)列中選擇若干作業(yè)投入執(zhí)行。這項(xiàng)工作非常重要,它直接關(guān)系到系統(tǒng)的性能。往往選擇對資源需求不同的作業(yè)進(jìn)行合理搭配,使得系統(tǒng)中各部分資源都得到均衡利用。一般來說,系統(tǒng)中處于后備狀態(tài)的作業(yè)較多,大的系統(tǒng)可以達(dá)到幾十個(gè)甚至幾百個(gè),這取決于輸入井的空間大小。但是,處于執(zhí)行狀態(tài)的作業(yè)一般只有有限的幾個(gè)。
(3)為選中的作業(yè)建立相應(yīng)的進(jìn)程,并為它們分配內(nèi)存和外設(shè)等資源。
(4)作業(yè)結(jié)束后進(jìn)行善后處理工作。如輸出必要的信息,收回該作業(yè)所占用的全部資源,撤消與該作業(yè)相關(guān)的全部進(jìn)程和該作業(yè)的JCB。
作業(yè)調(diào)度功能及其流程如圖3.5所示。圖3.5作業(yè)調(diào)度流程圖(a)作業(yè)由后備態(tài)轉(zhuǎn)換為執(zhí)行態(tài);(b)作業(yè)進(jìn)入完成態(tài)應(yīng)該指出,內(nèi)存和外設(shè)的分配與釋放工作,實(shí)際上分別由存儲管理程序和設(shè)備管理程序完成,作業(yè)調(diào)度程序只是調(diào)用它們來實(shí)現(xiàn)。
作業(yè)概念主要用于批處理系統(tǒng),這類系統(tǒng)的設(shè)計(jì)目標(biāo)是最大限度地發(fā)揮各種資源的利用率和保持系統(tǒng)內(nèi)各種活動(dòng)的充分并行。用戶不能直接和系統(tǒng)交互作用,用戶提交的做業(yè)進(jìn)入系統(tǒng)后,由系統(tǒng)根據(jù)操作說明書來控制作業(yè)的運(yùn)行。這種技術(shù)雖然可根據(jù)優(yōu)先級做出響應(yīng),但基本目標(biāo)是最大限度減少因大量作業(yè)并行、交叉使用硬件所帶來的開銷。這種多道程序技術(shù)的成功取決于選擇對資源需求不同的作業(yè)進(jìn)行合理搭配。
2.性能評價(jià)標(biāo)準(zhǔn)
1)調(diào)度策略的選擇
確定調(diào)度策略要受到多種因素的影響,眾多因素間往往會相互沖突。因此,很難設(shè)計(jì)出一個(gè)完美的算法來適應(yīng)各種不同的要求。在實(shí)際系統(tǒng)中,往往采取“統(tǒng)籌兼顧”的辦法,既保證主要目標(biāo)的實(shí)現(xiàn),又不使相關(guān)指標(biāo)太差,在設(shè)計(jì)調(diào)度算法時(shí),可以考慮以下幾點(diǎn)策略:
(1)為了提高系統(tǒng)內(nèi)部處理機(jī)與外設(shè)的并行工作的程度,盡量把使用處理機(jī)為主的CPU時(shí)間型作業(yè)與使用外設(shè)為主的輸入/輸出型作業(yè)搭配運(yùn)行。
(2)為了提高主存的利用效率,盡可能地把主存請求量大的作業(yè)與主存請求量小的作業(yè)合理搭配運(yùn)行。
(3)為了提高作業(yè)的吞吐量,減少作業(yè)周轉(zhuǎn)時(shí)間,應(yīng)盡量選擇運(yùn)行時(shí)間短的作業(yè)優(yōu)先進(jìn)入系統(tǒng)運(yùn)行。
(4)作業(yè)調(diào)度算法應(yīng)盡量簡單,并使系統(tǒng)的時(shí)間和空間開銷最小。
2)作業(yè)調(diào)度性能衡量
由于以上目標(biāo)的相互沖突,任一調(diào)度算法要想同時(shí)滿足上述目標(biāo)是不可能的。例如,要想執(zhí)行盡可能多的作業(yè),調(diào)度算法就應(yīng)選擇那些估計(jì)執(zhí)行時(shí)間短的作業(yè),但這樣做對那些估計(jì)執(zhí)行時(shí)間長的作業(yè)又是不公平的,它們的響應(yīng)時(shí)間會變得非常慢。
必須指出,如果考慮的因素過多,調(diào)度算法就會變得非常復(fù)雜,其結(jié)果是系統(tǒng)開銷增加,資源利用率下降。因此,大多數(shù)操作系統(tǒng)都根據(jù)用戶需要,采用兼顧某些目標(biāo)的簡單調(diào)度算法。那么,怎樣來衡量一個(gè)作業(yè)調(diào)度算法是否滿足系統(tǒng)設(shè)計(jì)的要求呢?對于批處理系統(tǒng),由于主要用于計(jì)算,對于作業(yè)的周轉(zhuǎn)時(shí)間要求較高。因此,作業(yè)的平均周轉(zhuǎn)時(shí)間或平均帶權(quán)周轉(zhuǎn)時(shí)間,作為衡量調(diào)度算法優(yōu)劣的標(biāo)準(zhǔn)。但是,對于分時(shí)系統(tǒng)和實(shí)時(shí)系統(tǒng)來說,外加平均響應(yīng)時(shí)間作為衡量調(diào)度策略優(yōu)劣的標(biāo)準(zhǔn)。
(1)周轉(zhuǎn)時(shí)間。作業(yè)i的周轉(zhuǎn)時(shí)間Ti為
Ti=Tei–Tsi
其中,Tei為作業(yè)i的完成時(shí)間;Tsi為作業(yè)的提交時(shí)間。對于被測定作業(yè)流所含有的n(n≥1)個(gè)作業(yè)來說,其平均周轉(zhuǎn)時(shí)間為
一個(gè)作業(yè)的周轉(zhuǎn)時(shí)間說明了該作業(yè)在系統(tǒng)內(nèi)停留的時(shí)間,其包含兩部分:一部分為等待時(shí)間,另一部分為執(zhí)行時(shí)間,即
Ti=Twi+Tri
這里Twi
主要指作業(yè)i由后備狀態(tài)到執(zhí)行狀態(tài)的等待時(shí)間,它不包括作業(yè)進(jìn)入執(zhí)行狀態(tài)后的等待時(shí)間。
(2)帶權(quán)周轉(zhuǎn)時(shí)間。作業(yè)的周轉(zhuǎn)時(shí)間包含了兩個(gè)部分,即等待時(shí)間和執(zhí)行時(shí)間。為了更進(jìn)一步反映調(diào)度性能,采用了帶權(quán)周轉(zhuǎn)時(shí)間的概念。帶權(quán)周轉(zhuǎn)時(shí)間是作業(yè)周轉(zhuǎn)時(shí)間與作業(yè)執(zhí)行時(shí)間的比,即對于被測定作業(yè)流所含有的幾個(gè)作業(yè)來說,其平均帶權(quán)周轉(zhuǎn)時(shí)間為
對于分時(shí)系統(tǒng),除了要保證系統(tǒng)吞吐量大,資源利用率高之外,還應(yīng)保證有用戶能夠容忍的響應(yīng)時(shí)間。因此,在分時(shí)系統(tǒng)中,僅僅用周轉(zhuǎn)時(shí)間或帶權(quán)周轉(zhuǎn)時(shí)間來衡量調(diào)度性能是不夠的。
3.常用的作業(yè)調(diào)度算法
在設(shè)計(jì)調(diào)度算法時(shí)應(yīng)和系統(tǒng)的整體設(shè)計(jì)目標(biāo)一致,如批處理系統(tǒng)主要是注重提高系統(tǒng)的效率,盡量增加系統(tǒng)吞吐量。而分時(shí)系統(tǒng)必須使使用技術(shù)的所有用戶方便和滿意,要求在用戶能容許的時(shí)間內(nèi)做出響應(yīng)。在當(dāng)前的操作系統(tǒng)中,常見的作業(yè)調(diào)度算法有以下幾種。
(1)先來先服務(wù)算法(FCFS)。先來先服務(wù)是最簡單的調(diào)度算法。它是按照作業(yè)進(jìn)入后備作業(yè)隊(duì)列的先后順序調(diào)度作業(yè)運(yùn)行。其優(yōu)點(diǎn)是算法簡單,便于實(shí)現(xiàn)。該算法對用戶似乎較“公平”,但它沒有考慮用戶作業(yè)的特性而往往造成不必要的等待和某種不公平的狀況。例如,在批處理系統(tǒng)中,某些運(yùn)行時(shí)間較短的作業(yè)在那些運(yùn)行時(shí)間很長的作業(yè)之后進(jìn)入系統(tǒng)的話,這些短作業(yè)則必須等待長作業(yè)執(zhí)行完成之后才有機(jī)會獲得執(zhí)行,從而導(dǎo)致短作業(yè)等待時(shí)間過長。
假如在一個(gè)多道程序系統(tǒng)的輸入井中有作業(yè)進(jìn)行調(diào)度,如表3-1所示。表3-1多道程序系統(tǒng)中的作業(yè)調(diào)度按照FCFS調(diào)度算法調(diào)度的次序是A、B、C、D、E,見表3-2,5個(gè)作業(yè)的平均周轉(zhuǎn)時(shí)間T和平均帶權(quán)周轉(zhuǎn)時(shí)間W為
優(yōu)點(diǎn):具有一定的公平性,并且實(shí)現(xiàn)也比較容易。
缺點(diǎn):比較有利于長作業(yè)(長進(jìn)程),而不利于短作業(yè)(短進(jìn)程)。表3-2按FCFS調(diào)度算法的作業(yè)調(diào)度
(2)短作業(yè)優(yōu)先算法(SJF)。短作業(yè)優(yōu)先算法(ShortestJobFirst,SJF)是針對FCFS算法的上述缺點(diǎn)提出的一種調(diào)度算法,它是在后備作業(yè)隊(duì)列中選擇運(yùn)行時(shí)間最短的作業(yè)優(yōu)先運(yùn)行。采用SJF算法可以實(shí)現(xiàn)作業(yè)平均等待時(shí)間最小和作業(yè)吞吐重量大的目標(biāo)。但該算法的主要缺點(diǎn)是若系統(tǒng)不斷接納新作業(yè),則對于某些較長作業(yè)可能導(dǎo)致長期等待。
這里仍然對先來先服務(wù)算法中的這批作業(yè)進(jìn)行分析,在其他假設(shè)條件不變的情況下,僅把FCFS調(diào)度算法改成計(jì)算時(shí)間短的作業(yè)優(yōu)先調(diào)度算法。
表3-3列出了5個(gè)作業(yè)的裝入內(nèi)存時(shí)刻、開始執(zhí)行時(shí)刻、結(jié)束時(shí)刻、周轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)時(shí)間。表3-3按SJF調(diào)度算法的作業(yè)調(diào)度它們的平均周轉(zhuǎn)時(shí)間T和平均帶權(quán)周轉(zhuǎn)時(shí)間W為
(3)最高響應(yīng)比優(yōu)先算法(HRN)。這里所謂的響應(yīng)比是指作業(yè)在后備隊(duì)列的等待時(shí)間與作業(yè)所需運(yùn)行時(shí)間的比值,即最高響應(yīng)比優(yōu)先算法(HighestResponse-radioNext,HRN)是從后備作業(yè)中選擇響應(yīng)比最大的作業(yè)優(yōu)先運(yùn)行。
FCFS算法只考慮每個(gè)作業(yè)的等待時(shí)間而未考慮運(yùn)行時(shí)間的長短,SJF算法只考慮運(yùn)行時(shí)間而未考慮等待時(shí)間的長短。而HRN算法是對FCFS算法和SJB算法的綜合平衡,它兼顧了等待時(shí)間長和運(yùn)行時(shí)間短的作業(yè)。采用HRN算法時(shí),即使是長作業(yè),隨著它等待時(shí)間的增加,響應(yīng)比也隨之增加,它就有機(jī)會獲得調(diào)度執(zhí)行。由于長作業(yè)也有機(jī)會投入運(yùn)行,因此在同一時(shí)間內(nèi)處理的作業(yè)數(shù)顯然要少于SJF算法。因此,采用HRN算法時(shí)的作業(yè)吞吐量將小于SJF算法。另外,由于每次調(diào)度前要計(jì)算響應(yīng)比,系統(tǒng)開銷也要相應(yīng)增加。
(4)優(yōu)先級算法。在多道批處理系統(tǒng)中,通常根據(jù)作業(yè)的某些屬性,為作業(yè)規(guī)定一個(gè)調(diào)度優(yōu)先級。作業(yè)調(diào)度程序則根據(jù)后備作業(yè)的優(yōu)先級高低決定調(diào)度的先后順序。作業(yè)的屬性可以分為外部屬性和內(nèi)部屬性。外部屬性包括用戶任務(wù)的緊迫程度,上機(jī)支付的費(fèi)用等。根據(jù)這些因素為每道作業(yè)人為地規(guī)定一個(gè)優(yōu)先級。內(nèi)部屬性包括作業(yè)在后備狀態(tài)等待的時(shí)間、作業(yè)所需的運(yùn)行時(shí)間、作業(yè)所需的主存容量或作業(yè)所需的I/O量等。優(yōu)先級算法又分為靜態(tài)優(yōu)先數(shù)法和動(dòng)態(tài)優(yōu)先數(shù)法。所謂靜態(tài)優(yōu)先數(shù)是指在作業(yè)建立時(shí),就為它規(guī)定一個(gè)優(yōu)先數(shù),而且在作業(yè)的生存期間其優(yōu)先數(shù)固定不變。所謂動(dòng)態(tài)優(yōu)先數(shù)是指作業(yè)的優(yōu)先數(shù)是動(dòng)態(tài)確定的。
作業(yè)優(yōu)先數(shù)?=?(等待時(shí)間)2-所需運(yùn)行時(shí)間-16?×?輸出量假定在一個(gè)多道批處理系統(tǒng)中,道數(shù)不受限制。當(dāng)?shù)?個(gè)作業(yè)進(jìn)入輸入井后或內(nèi)存有一道程序完成后,立即進(jìn)行作業(yè)調(diào)度?,F(xiàn)在有4個(gè)都是僅作計(jì)算而沒有請求設(shè)備輸入/輸出的作業(yè),它們進(jìn)入輸入井的時(shí)刻、需要計(jì)算的時(shí)間及優(yōu)先級(進(jìn)程優(yōu)先級等于作業(yè)優(yōu)先級)如表3-4所示。表3-44個(gè)僅作計(jì)算而沒有請求設(shè)備輸入/輸出的作業(yè)作業(yè)調(diào)度和進(jìn)程調(diào)度均采用優(yōu)先級高者優(yōu)先調(diào)度算法,計(jì)算這批作業(yè)的平均周轉(zhuǎn)時(shí)間T和平均帶權(quán)周轉(zhuǎn)時(shí)間W。
根據(jù)約定和優(yōu)先級高者優(yōu)先調(diào)度算法,作業(yè)調(diào)度的次序是A、C、D、B。它們的周轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)時(shí)間如表3-5所示。表3-54個(gè)作業(yè)的周轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)時(shí)間因此,它們的平均周轉(zhuǎn)時(shí)間T和平均帶權(quán)周轉(zhuǎn)時(shí)間W為
(5)資源搭配算法。這是一種根據(jù)系統(tǒng)中的狀況和作業(yè)對資源的需求決定作業(yè)選擇的調(diào)度算法。它把使用某類資源較多的作業(yè)與不使用或使用較少的作業(yè)搭配起來運(yùn)行。例如,運(yùn)行時(shí)間短的作業(yè)和長作業(yè)搭配,主存需求量多的作業(yè)與需求量少的搭配,使用CPU為主的作業(yè)與I/O為主的搭配等。資源搭配算法可以減少作業(yè)對資源的競爭,提高系統(tǒng)資源的使用效率。3.4.2進(jìn)程調(diào)度
1.進(jìn)程調(diào)度的功能
進(jìn)程調(diào)度才是真正讓某個(gè)就緒狀態(tài)的進(jìn)程到處理機(jī)上運(yùn)行;而作業(yè)調(diào)度選擇的是后備狀態(tài)的作業(yè)裝入內(nèi)存運(yùn)行,使作業(yè)只具有了競爭處理機(jī)的機(jī)會,作業(yè)真正在處理機(jī)上運(yùn)行的是該作業(yè)的響應(yīng)進(jìn)程。在系統(tǒng)運(yùn)行過程中,由于多個(gè)進(jìn)程需要輪流使用處理機(jī),因此完成分配處理機(jī)任務(wù)的進(jìn)程調(diào)度是系統(tǒng)中最頻繁的工作。例如,當(dāng)占用處理機(jī)的運(yùn)行態(tài)進(jìn)程因等待某個(gè)外部事件轉(zhuǎn)換為等待態(tài)而放棄處理機(jī),或當(dāng)進(jìn)程運(yùn)行的時(shí)間片到,系統(tǒng)將處理機(jī)分配給就緒隊(duì)列中另一個(gè)進(jìn)程時(shí),都將引起進(jìn)程的調(diào)度。此外,進(jìn)程正常結(jié)束也將引起進(jìn)程的調(diào)度。因此,進(jìn)程調(diào)度是操作系統(tǒng)核心的重要組成部分。進(jìn)程調(diào)度的主要功能如下:
(1)記錄當(dāng)前進(jìn)程的情況。作為進(jìn)程調(diào)度的準(zhǔn)備,進(jìn)程管理模塊必須將系統(tǒng)中各進(jìn)程的進(jìn)程名、狀態(tài)特征、資源需求、指令計(jì)數(shù)器、狀態(tài)寄存器及所有通用寄存器等現(xiàn)場信息等記錄在它的進(jìn)程控制塊PCB中。并且,根據(jù)各進(jìn)程的狀態(tài)特征和資源需求等、進(jìn)程管理模塊還將各進(jìn)程的PCB表排成相應(yīng)的隊(duì)列并進(jìn)行動(dòng)態(tài)隊(duì)列轉(zhuǎn)接。進(jìn)程調(diào)度模塊通過PCB變化來掌握系統(tǒng)中存在的所有進(jìn)程的執(zhí)行情況和狀態(tài)特征,并在適當(dāng)?shù)臅r(shí)機(jī)從就緒隊(duì)列中選擇一個(gè)進(jìn)程占據(jù)處理機(jī)。
(2)選擇占有處理機(jī)的進(jìn)程。進(jìn)程調(diào)度的主要功能是根據(jù)一定的調(diào)度算法,從就緒隊(duì)列中選擇一個(gè)進(jìn)程,使其獲得處理機(jī)執(zhí)行。根據(jù)不同的系統(tǒng)設(shè)計(jì)目的,有各種各樣的選擇策略。例如,系統(tǒng)開銷較少的靜態(tài)優(yōu)先數(shù)調(diào)度法,適合于分時(shí)系統(tǒng)的輪轉(zhuǎn)法(RoundRobin)和多級互饋輪轉(zhuǎn)法(RoundRobinwithMultiplefeedback)等。這些選擇策略決定了調(diào)度算法的性能。常用的進(jìn)程調(diào)度算法在第2章進(jìn)程管理中已經(jīng)作了介紹。
(3)進(jìn)行進(jìn)程上下文切換。一個(gè)進(jìn)程的上下文由正文段、數(shù)據(jù)段、硬件寄存器的內(nèi)容以及有關(guān)數(shù)據(jù)結(jié)構(gòu)等組成。硬件寄存器主要存放CPU將要執(zhí)行的下條指令地址的程序計(jì)數(shù)器PC,指出機(jī)器與進(jìn)程相關(guān)聯(lián)的硬件狀態(tài)的處理機(jī)狀態(tài)寄存器PS,過程調(diào)用(或系統(tǒng)調(diào)用)時(shí)所傳遞參數(shù)的通用寄存器以及堆棧指針寄存器等。數(shù)據(jù)結(jié)構(gòu)則包括PCB等在內(nèi)的所有與執(zhí)行該進(jìn)程有關(guān)的管理和控制用表格、數(shù)組、鏈等。當(dāng)正在執(zhí)行的進(jìn)程由于某種原因要讓出處理機(jī)時(shí),系統(tǒng)要對進(jìn)程做上下文切換,以使另一個(gè)進(jìn)程得以執(zhí)行。當(dāng)進(jìn)行上下文切換時(shí),系統(tǒng)要首先檢查是否允許做上下文切換(在有些情況下,上下文切換是不允許的,例如系統(tǒng)正在執(zhí)行某個(gè)不允許中斷的原語時(shí))。然后,系統(tǒng)要保留有關(guān)被切換進(jìn)程的足夠信息,以便以后切換回該進(jìn)程時(shí),順利恢復(fù)該進(jìn)程的執(zhí)行。在系統(tǒng)保留了CPU現(xiàn)場之后,調(diào)度程序選擇一個(gè)新的處于就緒狀態(tài)的進(jìn)程,并裝配該進(jìn)程的上下文,使CPU的控制權(quán)掌握在被選中進(jìn)程手中。在進(jìn)程(上下文)中切換的步驟如下:
(1)保存處理器的上下文,包括程序計(jì)數(shù)器和其他寄存器。
(2)用新狀態(tài)和其他相關(guān)信息更新正在運(yùn)行進(jìn)程的PCB。
(3)把原來的進(jìn)程移至合適的隊(duì)列。
(4)選擇另一個(gè)要執(zhí)行進(jìn)程。
(5)更新被選中進(jìn)程的PCB。
(6)從被選中進(jìn)程中重裝入CPU上下文。
2.進(jìn)程調(diào)度的時(shí)機(jī)
在什么情況下執(zhí)行進(jìn)程調(diào)度呢?這與引起進(jìn)程調(diào)度的原因與進(jìn)程調(diào)度方式有關(guān)。一般是在以下事件發(fā)生后做進(jìn)程調(diào)度:
(1)完成任務(wù)。正在運(yùn)行的進(jìn)程完成其任務(wù)后,主動(dòng)釋放CPU。
(2)等待資源。由于等待某些資源或事件,正在運(yùn)行的進(jìn)程不得不放棄CPU。
(3)運(yùn)行到時(shí)。在分時(shí)系統(tǒng)中,當(dāng)前進(jìn)程使用完規(guī)定的時(shí)間片,時(shí)鐘中斷使該進(jìn)程讓出CPU。
(4)在可剝奪式調(diào)度中,有比當(dāng)前進(jìn)程優(yōu)先權(quán)更高的進(jìn)程進(jìn)入就緒隊(duì)列
(5)在進(jìn)程通信中,執(zhí)行中的進(jìn)程執(zhí)行了某種原語操作(P操作、阻塞原語、喚醒原語等)。
3.進(jìn)程調(diào)度性能評價(jià)
進(jìn)程調(diào)度雖然是在系統(tǒng)內(nèi)部的低級調(diào)度,但進(jìn)程調(diào)度的優(yōu)劣直接影響作業(yè)調(diào)度的性能。那么,怎樣評價(jià)進(jìn)程調(diào)度的優(yōu)劣呢?反映作業(yè)調(diào)度優(yōu)劣的周轉(zhuǎn)時(shí)間和平均周轉(zhuǎn)時(shí)間只在某種程度上反映了進(jìn)程調(diào)度的性能,例如,實(shí)際上其執(zhí)行時(shí)間部分中包含有進(jìn)程等待(包括就緒狀態(tài)時(shí)的等待)時(shí)間,而進(jìn)程等待時(shí)間的多少是要依靠進(jìn)程調(diào)度策略和等待事件何時(shí)發(fā)生等來決定的。因此,進(jìn)程調(diào)度性能的優(yōu)劣是操作系統(tǒng)設(shè)計(jì)的一個(gè)重要指標(biāo)。進(jìn)程調(diào)度性能的衡量方法可分為定性和定量兩種。在定性衡量方面,首先是調(diào)度的可靠性,包括一次進(jìn)程調(diào)度是否可能引起數(shù)據(jù)結(jié)構(gòu)的破壞等。這要求我們對調(diào)度時(shí)機(jī)的選擇和保存CPU現(xiàn)場十分謹(jǐn)慎。另外,簡潔性也是衡量進(jìn)程調(diào)度的一個(gè)重要指標(biāo),由于調(diào)度程序的執(zhí)行涉及到多個(gè)進(jìn)程,且必須進(jìn)行上下文切換,因此如果調(diào)度程序過于繁瑣和復(fù)雜,將會耗去較大的系統(tǒng)開銷。這在用戶進(jìn)程調(diào)用系統(tǒng)較多的情況下,將會造成響應(yīng)時(shí)間大幅度增加。進(jìn)程調(diào)度的定量評價(jià)包括CPU的利用率評價(jià)、進(jìn)程在就緒隊(duì)列中的等待時(shí)間與執(zhí)行時(shí)間之比等。實(shí)際上由于進(jìn)程進(jìn)入就緒隊(duì)列的隨機(jī)模型很難確定,而且進(jìn)程上下文切換等也將影響進(jìn)程的執(zhí)行效率,因此對進(jìn)程調(diào)度進(jìn)行解析是很困難的。一般情況下,大多利用模擬或測試系統(tǒng)的響應(yīng)時(shí)間來評價(jià)進(jìn)程調(diào)度的性能。
3.5Linux系統(tǒng)調(diào)用的實(shí)現(xiàn)
3.5.1系統(tǒng)調(diào)用
在Linux系統(tǒng)中,所有進(jìn)程都可以使用的操作系統(tǒng)服務(wù)就是系統(tǒng)調(diào)用,進(jìn)程可以通過系統(tǒng)調(diào)用來請求操作系統(tǒng)的內(nèi)核服務(wù)。通常情況下,進(jìn)程不能直接訪問操作系統(tǒng)的內(nèi)核,也不能直接存取內(nèi)核使用的內(nèi)存區(qū)域,不能調(diào)用內(nèi)核函數(shù)。通常,這一點(diǎn)是通過CPU硬件措施來保證的,因?yàn)椴僮飨到y(tǒng)內(nèi)核通常運(yùn)行在CPU的核心態(tài),而普通應(yīng)用程序運(yùn)行在用戶態(tài),用戶態(tài)應(yīng)用程序是無法訪問核心態(tài)內(nèi)核的。如果應(yīng)用程序需要突破上述限制,則只有操作系統(tǒng)內(nèi)核提供的系統(tǒng)調(diào)用是一個(gè)例外。應(yīng)用程序可以通過一個(gè)固定的方式調(diào)用內(nèi)核提供的功能。在Intel體系結(jié)構(gòu)的計(jì)算機(jī)中,這是通過執(zhí)行中斷0x80h來實(shí)現(xiàn)的。應(yīng)用程序通常是一個(gè)進(jìn)程,進(jìn)程在調(diào)用內(nèi)核時(shí),跳轉(zhuǎn)到內(nèi)核代碼中的位置一般標(biāo)記為system_call(在Linux0.01中,system_call是匯編程序system_call.s中的一段代碼的入口點(diǎn)的標(biāo)記)。在system_call位置的代碼將檢查系統(tǒng)調(diào)用號,依據(jù)系統(tǒng)調(diào)用號告訴系統(tǒng)內(nèi)核進(jìn)程請求的系統(tǒng)服務(wù)是什么。然后,它再查找系統(tǒng)調(diào)用表sys_call_table[],找到希望調(diào)用的內(nèi)核函數(shù)的地址,并調(diào)用此函數(shù),最后將控制權(quán)返回應(yīng)用程序。
如果希望改變一個(gè)系統(tǒng)調(diào)用函數(shù),或者添加一個(gè)新的系統(tǒng)調(diào)用,那么需要編寫一個(gè)自己的函數(shù),然后改變sys_call_table[]中的指針并指向該函數(shù)。3.5.2系統(tǒng)調(diào)用的實(shí)現(xiàn)
在Linux系統(tǒng)中,系統(tǒng)調(diào)用是作為一種異常處理來實(shí)現(xiàn)的。系統(tǒng)調(diào)用將執(zhí)行相應(yīng)的機(jī)器代碼指令來產(chǎn)生異常信號,產(chǎn)生中斷或異常的重要效果是系統(tǒng)自動(dòng)將用戶態(tài)切換為核心態(tài)來對它進(jìn)行處理。也就是說,執(zhí)行系統(tǒng)調(diào)用異常指令時(shí),自動(dòng)地將系統(tǒng)切換為核心態(tài),并安排異常處理程序的執(zhí)行。
Linux用于實(shí)現(xiàn)系統(tǒng)調(diào)用異常的實(shí)際指令是int$0x80,這一指令使用中斷/異常向量號128(即十六進(jìn)制的80)將控制權(quán)轉(zhuǎn)移給內(nèi)核。為達(dá)到在使用系統(tǒng)調(diào)用時(shí)不必用機(jī)器指令編程,在標(biāo)準(zhǔn)C語言庫中,為每一個(gè)系統(tǒng)調(diào)用都提供了一段短的子程序以完成機(jī)器代碼的編程工作。事實(shí)上,機(jī)器代碼段非常簡短,它所要做的工作只是將送給系統(tǒng)調(diào)用的參數(shù)加載到CPU寄存器中,接著執(zhí)行int$0x80指令,然后運(yùn)行系統(tǒng)調(diào)用,將系統(tǒng)調(diào)用的返回值送入CPU的一個(gè)寄存器中,標(biāo)準(zhǔn)庫函數(shù)中的一段代碼將取得這一返回值,并將它送回用戶程序。為使系統(tǒng)調(diào)用的執(zhí)行成為一項(xiàng)簡單的任務(wù),Linux提供了一組預(yù)處理宏指令,它們可以用在程序中。這些宏指令取一定的參數(shù),然后擴(kuò)展為調(diào)用指定的系統(tǒng)調(diào)用的函數(shù)。通過使用這些預(yù)處理宏指令,可以非常方便地實(shí)現(xiàn)自己的系統(tǒng)調(diào)用功能。
1.宏:syscallN(type,name,x…)
在Linux中,定義系統(tǒng)調(diào)用的預(yù)定義宏為
_syscallN(parameters)其中,N是系統(tǒng)調(diào)用所需的參數(shù)數(shù)目,而parameters則用一組參數(shù)代替。這些參數(shù)使宏指令完成適合于特定的系統(tǒng)調(diào)用的擴(kuò)展。例如,為了建立調(diào)用setuid()系統(tǒng)調(diào)用的函數(shù),應(yīng)該使用:
_syscall1(int,setuid,uid_t,uid)
syscallN()宏指令的第一個(gè)參數(shù)int說明產(chǎn)生的函數(shù)的返回值的類型是整型,第二個(gè)參數(shù)setuid說明產(chǎn)生的函數(shù)的名稱,第三個(gè)參數(shù)uid_t和第四個(gè)參數(shù)uid指定setuid系統(tǒng)調(diào)用所需要參數(shù)的類型和名稱。注意:用作系統(tǒng)調(diào)用的參數(shù)的數(shù)據(jù)類型有一個(gè)限制,它們的長度不能超過4?B。這是因?yàn)閳?zhí)行int$0x80指令進(jìn)行系統(tǒng)調(diào)用時(shí),所有的參數(shù)值都存放在32位的CPU寄存器中。如果參數(shù)的長度大于32位,那么將無法存放在一個(gè)32位的寄存器中。
使用CPU寄存器傳遞參數(shù)的另一個(gè)限制是可以傳送給系統(tǒng)調(diào)用的參數(shù)的數(shù)目。這個(gè)限制是最多可以傳遞5個(gè)參數(shù)。所以,最多可以定義6個(gè)不同的syscallN()宏指令,從_syscall0()、_syscalll()直到_syscall5()。在Linux0.01中,僅僅定義了從syscall0()到_syscall4(),具體的定義如下: #define_syscall0(type,name)//無參數(shù)系統(tǒng)調(diào)用
#define_syscalll(type,name,atype,a)//一個(gè)參數(shù)的系統(tǒng)調(diào)用
#define_syscall2(type,name,atype,a,btype,b)//兩個(gè)參數(shù)的系統(tǒng)調(diào)用
#define_syscall3(type,nat-ne,typel,argl,type2,arg2,type3,arg3)//三個(gè)參數(shù)的系統(tǒng)調(diào)用
2.系統(tǒng)調(diào)用表
系統(tǒng)調(diào)用表是一張表格,按照順序定義了系統(tǒng)中所有的系統(tǒng)調(diào)用的入口函數(shù)地址。在Linux0.01中,系統(tǒng)調(diào)用表定義在include/linux/sys.h中,如下所示:fn_ptrsys_call_table[]={
sys_setup,sys_exit,sys_fork,sys_read,
sys_write,sys_open,sys_close,sys_waitpid,sys_creat,sys_link,
sys_unlink,sys_execve,sys_chdir,sys_time,sys_mknod,sys_chmod,
sys_chown,sys_break,sys_stat,sys_lseek,sys_getpid,sys_mount,
sys_umount,sys_setuid,sys_getuid,sys_stime,sys_ptrace,sys_alarm,sys_fstat,sys_pause,sys_utime,sys_stty,sys_gtty,sys_access,
sys_nice,sys_flime,sys_sync,sys_kill,sys_rename,sys_mkdir,
sys_rmdir,sys_dup,sys_pipe,sys_times,sys_prof,sys_brk,sys_setgid,
sys_getgid,sys_signal,sys_geteuid,sys_getegid,sys_acct,sys_phys,
sys_lock,sys_ioctl,sys_fcntl,sys_mpx,sys_setpgid,sys_ulimit,
sys_uname,sys_umask,sys_chroot,sys_ustat,sys_dup2,sys_getppid,
sys_getpgrp,sys_setsid
};在數(shù)組sys_call_table[]中的每一個(gè)元素都是一個(gè)函數(shù)指針(在C語言中,函數(shù)名代表指向函數(shù)入口的指針),按系統(tǒng)調(diào)用號(即前面提到的_NR_name)排列了所有系統(tǒng)調(diào)用函數(shù)的指針,以供系統(tǒng)調(diào)用入口函數(shù)查找。從這張表可以看出,Linux給它所支持的系統(tǒng)調(diào)用函數(shù)取名叫sysname。
在最新的Linux內(nèi)核中,系統(tǒng)調(diào)用表的位置有所改變,例如在Linux2.0.0以后的內(nèi)核中,系統(tǒng)調(diào)用表定義在entry.S文件的最后部分。
3.系統(tǒng)調(diào)用入口函數(shù)
系統(tǒng)調(diào)用入口函數(shù)定義在system_call.s文件中,它是一段匯編代碼。
從system.call入口的匯編程序的主要功能是:
(1)檢驗(yàn)是否為合法的系統(tǒng)調(diào)用。
(2)保存寄存器的當(dāng)前值。
(3)根據(jù)系統(tǒng)調(diào)用表_sys_call_table和EAX寄存器持有的系統(tǒng)調(diào)用號找出并轉(zhuǎn)入系統(tǒng)調(diào)用響應(yīng)函數(shù)。
(4)從該響應(yīng)函數(shù)返回后,讓EAX寄存器保存函數(shù)返回值,跳轉(zhuǎn)至ret_from_sys_call,當(dāng)ret_from_sys_call結(jié)束后,將執(zhí)行進(jìn)程調(diào)度。
(5)在執(zhí)行位于用戶程序中系統(tǒng)調(diào)用命令后面余下的指令之前,若INT0x80h的返回值非負(fù),則直接按類型type返回;否則,將INT0x80h的返回值取絕對值,保留在errno變量中,返回-1。
在ret_from_sys_call中,也是Linux系統(tǒng)進(jìn)行進(jìn)程調(diào)度切換的時(shí)機(jī),在普通的Linux系統(tǒng)中,進(jìn)程在系統(tǒng)調(diào)用中執(zhí)行的時(shí)候是不能被切換的。
當(dāng)在程序代碼中用到系統(tǒng)調(diào)用時(shí),編譯器會將上面提到的宏展開,展開后的代碼實(shí)際上是將系統(tǒng)調(diào)用號放入EAX后,調(diào)用INT0x80h使處理器轉(zhuǎn)向系統(tǒng)調(diào)用入口,然后查找系統(tǒng)調(diào)用表,進(jìn)而由內(nèi)核調(diào)用真正的系統(tǒng)功能函數(shù)。通過上面的分析可以看到,如果希望在Linux系統(tǒng)中添加新的系統(tǒng)調(diào)用,那么在應(yīng)用程序中必須
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物業(yè)客戶滿意度提升培訓(xùn)
- 精濁中醫(yī)護(hù)理查房
- 《家電維護(hù)小管家》第二課時(shí)(教案)-四年級勞動(dòng)北師大版
- 兩位數(shù)除以一位數(shù)(商是兩位數(shù))(教學(xué)設(shè)計(jì))-2023-2024學(xué)年三年級下冊數(shù)學(xué)人教版
- 九年級物理上冊 第7章 第三節(jié) 電磁鐵教學(xué)設(shè)計(jì) (新版)教科版
- 《小數(shù)的初步認(rèn)識》(教學(xué)設(shè)計(jì))-2024-2025學(xué)年三年級上冊數(shù)學(xué)人教版
- 2024年九年級語文下冊 第二單元 8 蒲柳人家教學(xué)設(shè)計(jì) 新人教版
- 2024-2025學(xué)年高中歷史 專題五 走向世界的資本主義市場 二 血與火的征服與掠奪(1)教學(xué)教學(xué)設(shè)計(jì) 人民版必修2
- 一年級體育上冊 第一課集隊(duì)、游戲教學(xué)設(shè)計(jì)
- 2023八年級歷史下冊 第四單元 民族團(tuán)結(jié)與祖國統(tǒng)一第12課 民族大團(tuán)結(jié)教學(xué)設(shè)計(jì) 新人教版
- 社會主義政治建設(shè)
- 公共管理學(xué)方法論知到智慧樹章節(jié)測試課后答案2024年秋華南農(nóng)業(yè)大學(xué)
- 2025年全球及中國居家康復(fù)服務(wù)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 苧麻生產(chǎn)碳足跡:基于區(qū)域、產(chǎn)物與經(jīng)濟(jì)效益的綜合評價(jià)
- 科室停電停水的應(yīng)急預(yù)案
- 全國郵政編碼一覽表
- 酒店客房室內(nèi)裝修設(shè)計(jì)方案
- 品管圈PDCA大賽作品-普外科提高腹腔鏡術(shù)后24小時(shí)內(nèi)腸道通氣率醫(yī)院品質(zhì)管理案例
- 陶瓷碗項(xiàng)目質(zhì)量管理方案
- 移動(dòng)服務(wù)禮儀培訓(xùn)
- 國家安全教育教案分享
評論
0/150
提交評論