操作系統(tǒng)原理(慕課版)-教學(xué)課件全套_第1頁
操作系統(tǒng)原理(慕課版)-教學(xué)課件全套_第2頁
操作系統(tǒng)原理(慕課版)-教學(xué)課件全套_第3頁
操作系統(tǒng)原理(慕課版)-教學(xué)課件全套_第4頁
操作系統(tǒng)原理(慕課版)-教學(xué)課件全套_第5頁
已閱讀5頁,還剩1012頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第1章操作系統(tǒng)概述蘇曙光華中科技大學(xué)/軟件學(xué)院2022年春季第1章操作系統(tǒng)概述教學(xué)內(nèi)容操作系統(tǒng)認(rèn)識和定義操作系統(tǒng)的發(fā)展歷史操作系統(tǒng)的功能操作系統(tǒng)的特征操作系統(tǒng)評價指標(biāo)操作系統(tǒng)虛擬機操作系統(tǒng)的邏輯結(jié)構(gòu)教學(xué)重點操作系統(tǒng)定義操作系統(tǒng)的發(fā)展歷史操作系統(tǒng)的功能操作系統(tǒng)的邏輯結(jié)構(gòu)教學(xué)難點操作系統(tǒng)的定義分時技術(shù)進(jìn)程管理功能微內(nèi)核結(jié)構(gòu)1.1操作系統(tǒng)直觀認(rèn)識和定義1.1操作系統(tǒng)直觀認(rèn)識和定義教學(xué)內(nèi)容操作系統(tǒng)的直觀認(rèn)識操作系統(tǒng)的定義教學(xué)重點操作系統(tǒng)的定義1.1.1操作系統(tǒng)的直觀認(rèn)識1.1.1操作系統(tǒng)的直觀認(rèn)識1.提供操作界面用戶利用窗口、按鈕、圖標(biāo)、圖片、菜單、工具欄等一些可視化的元素來操作計算機,展示計算機的執(zhí)行結(jié)果。1.1.1操作系統(tǒng)的直觀認(rèn)識2.控制程序運行利用圖形化的方式或命令行的方式可以啟動一個程序、或結(jié)束一個程序、或最小化或最大化程序的主窗口、或強制結(jié)束一個沒有響應(yīng)的程序。1.1.1操作系統(tǒng)的直觀認(rèn)識3.管理系統(tǒng)資源操作系統(tǒng)為用戶更新設(shè)備或安裝新的設(shè)備提供了多種手段,用戶可以更新驅(qū)動程序或安裝新的驅(qū)動程序,卸載不再需要的設(shè)備。1.1.1操作系統(tǒng)的直觀認(rèn)識4.配置系統(tǒng)參數(shù)通過注冊表(僅Windows操作系統(tǒng))、圖形化的控制面板或系統(tǒng)配置文件等方式可以設(shè)置或改變系統(tǒng)參數(shù)。1.1.1操作系統(tǒng)的直觀認(rèn)識5.監(jiān)控系統(tǒng)狀態(tài)通過桌面的狀態(tài)欄、控制面板、任務(wù)管理器、注冊表(僅Windows中)或系統(tǒng)文件(例如Linux中的/proc文件系統(tǒng)),可以觀察系統(tǒng)的實時工作狀態(tài)或參數(shù)設(shè)置情況。6.工具軟件集合操作系統(tǒng)提供一些用于系統(tǒng)管理的輔助工具或內(nèi)置命令,方便用戶對系統(tǒng)進(jìn)行個性化的配置、調(diào)優(yōu)或測試,譬如網(wǎng)絡(luò)配置工具、磁盤優(yōu)化工具等。1.1.1操作系統(tǒng)的直觀認(rèn)識操作系統(tǒng)對應(yīng)用程序運行的支持1.1.2操作系統(tǒng)的定義1.1.2操作系統(tǒng)的定義操作系統(tǒng)在計算機系統(tǒng)中承上啟下的地位1.1.2操作系統(tǒng)的定義1.站在用戶的角度從外部以自頂向下的思維方式認(rèn)識操作系統(tǒng)操作系統(tǒng)可以看作是虛擬計算機。操作系統(tǒng)為用戶提供操作界面、屏蔽硬件細(xì)節(jié)、擴展硬件功能,同時使得計算機系統(tǒng)更安全、更可靠、效率更高。2.站在設(shè)計人員的角度從內(nèi)部以自底向上的思維方式認(rèn)識操作系統(tǒng)主要研究操作系統(tǒng)的實體結(jié)構(gòu),即研究操作系統(tǒng)如何組成、如何工作、如何對外提供服務(wù)。1.1.2操作系統(tǒng)的定義操作系統(tǒng)的定義操作系統(tǒng)是一個大型的系統(tǒng)程序,它管理和分配計算機系統(tǒng)軟、硬件資源,控制和協(xié)調(diào)并發(fā)活動,為用戶提供接口和良好的工作環(huán)境。1.2操作系統(tǒng)的發(fā)展歷史1.2操作系統(tǒng)的發(fā)展歷史教學(xué)內(nèi)容手動操作階段單道批處理系統(tǒng)多道批處理系統(tǒng)分時操作系統(tǒng)分時操作系統(tǒng)衍化經(jīng)典操作系統(tǒng)實例 1.2.1手動操作階段1.2.1手動操作階段手動操作方式特點(1)程序的啟動與結(jié)束都是手動處理;(2)用戶預(yù)約上機并獨占整個計算機。手動操作方式的缺點(1)CPU運行效率低。在用戶占用整個計算機的期間,CPU實際運行時間極少。(2)用戶獨占整個計算機的全部資源,造成資源浪費。(3)程序的運行過程缺少交互性。1.2.2單道批處理系統(tǒng)1.2.2單道批處理系統(tǒng)單道批處理系統(tǒng)能夠控制計算機自動處理一批作業(yè),逐個加載、運行、撤出其中的每個作業(yè),直到全部作業(yè)處理完畢的系統(tǒng)監(jiān)控程序。單道批處理系統(tǒng)的目的提高系統(tǒng)吞吐量和資源的利用率批處理系統(tǒng)的特點成批、自動、單道1.2.2單道批處理系統(tǒng)單道批處理系統(tǒng)的缺點(1)平均周轉(zhuǎn)時間長;(2)無交互能力。用戶在批處理系統(tǒng)中把作業(yè)交給操作系統(tǒng)之后直到系統(tǒng)將作業(yè)完成,用戶都不能與自己的作業(yè)進(jìn)行交互,這對修改和調(diào)試程序是極為不利的。單道批處理系統(tǒng)兩種實現(xiàn)形式聯(lián)機批處理系統(tǒng)脫機批處理系統(tǒng)。1.2.2單道批處理系統(tǒng)聯(lián)機批處理系統(tǒng)作業(yè)的輸入輸出過程都由主機來控制1.2.2單道批處理系統(tǒng)脫機批處理系統(tǒng)的結(jié)構(gòu)增加了一臺專門用于輸入/輸出衛(wèi)星機1.2.3多道批處理系統(tǒng)1.2.3多道批處理系統(tǒng)多道批處理系統(tǒng)指利用多道程序設(shè)計技術(shù),在內(nèi)存中存放多道程序,當(dāng)某道程序因為某種原因(例如執(zhí)行I/O操作時)不能繼續(xù)運行時,監(jiān)控程序便調(diào)度另一程序投入運行,這樣可以使CPU盡量處于忙碌狀態(tài),提高系統(tǒng)效率。多道批處理系統(tǒng)的設(shè)計目是提高系統(tǒng)的資源利用率(或吞吐量),實現(xiàn)CPU與外設(shè)并行,外設(shè)之間也可以并行,從而實現(xiàn)作業(yè)處理流程的自動化。1.2.3多道批處理系統(tǒng)A、B兩個程序在系統(tǒng)中運行的過程相互穿插、交替地在CPU上運行1.2.3多道批處理系統(tǒng)多道批處理系統(tǒng)的缺點(1)單個作業(yè)處理時間變長;(2)作業(yè)的交互能力差,用戶一旦提交作業(yè)就失去了對其運行的控制能力;(3)作業(yè)的運行過程不確定。每個作業(yè)的實際運行過程受其他作業(yè)的運行過程影響。1.2.4分時操作系統(tǒng)1.2.4分時操作系統(tǒng)分時技術(shù)把處理機的運行時間分成很短的時間片,以時間片為單位輪流把處理機分配給各聯(lián)機終端使用。1.2.4分時操作系統(tǒng)分時系統(tǒng)特點(1)多路性。系統(tǒng)同時支持多路終端的連接(2)獨立性。多用戶各自獨立地使用計算機,相互之間并無影響。3)交互性。用戶可以通過終端直接與計算機進(jìn)行對話。1.2.5分時操作系統(tǒng)衍化1.2.5分時操作系統(tǒng)衍化1.微型計算機操作系統(tǒng)2.實時操作系統(tǒng)3.嵌入式操作系統(tǒng)4.網(wǎng)絡(luò)操作系統(tǒng)5.分布式操作系統(tǒng)1.2.6經(jīng)典操作系統(tǒng)實例 1.2.6經(jīng)典操作系統(tǒng)實例 DOS系列Windows系列UNIX系列Linux系列macOS系列1.2.6經(jīng)典操作系統(tǒng)實例 國產(chǎn)操作系統(tǒng)通用操作系統(tǒng)或服務(wù)器操作系統(tǒng)嵌入式操作系統(tǒng)方向1.3操作系統(tǒng)的功能1.3操作系統(tǒng)的功能教學(xué)內(nèi)容1.3.1處理機管理1.3.2存儲管理1.3.3設(shè)備管理1.3.4文件管理教學(xué)重點1.3.1處理機管理1.3.1處理機管理處理機管理處理機是計算機系統(tǒng)中的核心資源,處理機管理效率的高低直接關(guān)系到系統(tǒng)的整體性能。處理機管理完成對處理機的分配調(diào)度與運行管理等功能。具體功能1.進(jìn)程控制2.進(jìn)程同步3.進(jìn)程通信4.進(jìn)程調(diào)度1.3.2存儲管理1.3.2存儲管理1.內(nèi)存分配2.內(nèi)存共享3.內(nèi)存保護4.地址映射5.虛擬存儲1.3.3設(shè)備管理1.3.3設(shè)備管理1.分配設(shè)備2.設(shè)備控制3.設(shè)備映射4.緩沖區(qū)管理1.3.4文件管理1.3.4文件管理文件管理的主要任務(wù)對用戶來說,實現(xiàn)用戶按名存取文件和目錄,并向用戶提供一套存取文件和目錄的標(biāo)準(zhǔn)操作接口。針對管理員來說,文件管理的主要任務(wù)是實現(xiàn)文件存儲空間的有效管理。1.4操作系統(tǒng)的特征操作系統(tǒng)的特征1.并發(fā)性宏觀上并發(fā)。2.共享性在程序之間共享資源3.不確定性處理外部隨機事件,即具有中斷處理的能力。程序的執(zhí)行過程和結(jié)果可能具有不確定性。4.虛擬性從用戶角度來看,操作系統(tǒng)是一臺虛擬計算機。1.5操作系統(tǒng)評價指標(biāo)操作系統(tǒng)評價指標(biāo)1.吞吐量指系統(tǒng)在單位時間內(nèi)處理信息的能力或可以處理任務(wù)的數(shù)量。2.響應(yīng)能力系統(tǒng)從接收數(shù)據(jù)到輸出結(jié)果的時間間隔長短。3.資源利用率設(shè)備在單位時間內(nèi)被利用的時間百分比。4.可移植性改變硬件環(huán)境,操作系統(tǒng)仍能正常工作的能力。5.可靠性操作系統(tǒng)發(fā)現(xiàn)、診斷和恢復(fù)系統(tǒng)故障能力的大小。1.6操作系統(tǒng)虛擬機1.6操作系統(tǒng)虛擬機操作系統(tǒng)虛擬機站在用戶角度,在裸機上配置操作系統(tǒng)就相當(dāng)于構(gòu)建操作系統(tǒng)虛擬機。操作系統(tǒng)虛擬機可以使用操作系統(tǒng)新增的許多功能。操作系統(tǒng)虛擬機為用戶屏蔽了硬件細(xì)節(jié),擴展了硬件功能,為用戶提供了交互良好的用戶界面,且系統(tǒng)更安全、更可靠、更高效。1.7操作系統(tǒng)的邏輯結(jié)構(gòu)1.7操作系統(tǒng)的邏輯結(jié)構(gòu)教學(xué)內(nèi)容整體式結(jié)構(gòu)層次式結(jié)構(gòu)微內(nèi)核結(jié)構(gòu)教學(xué)重點1.7.1整體式結(jié)構(gòu)1.7.1整體式結(jié)構(gòu)整體式結(jié)構(gòu)模塊化結(jié)構(gòu)或宏內(nèi)核結(jié)構(gòu)。整體式操作系統(tǒng)是大量過程的集合。系統(tǒng)中每一個過程都有明確的入口參數(shù)列表和返回值類型。大多數(shù)過程可以相互調(diào)用而不受約束。1.7.1整體式結(jié)構(gòu)整體式結(jié)構(gòu)1.7.2層次式結(jié)構(gòu)1.7.2層次式結(jié)構(gòu)層次式結(jié)構(gòu)所有的功能模塊按照調(diào)用次序分別排成若干層,確保各層之間只能是單向依賴或單向調(diào)用。層次式設(shè)計方法把整體問題局部化,使得系統(tǒng)的設(shè)計、調(diào)試及維護變得很容易,且有利于操作系統(tǒng)的維護、擴充、移植。層次式操作系統(tǒng)的底層僅依賴于硬件系統(tǒng),僅需要對上層提供基本的硬件I/O操作,而無須對用戶數(shù)據(jù)進(jìn)行復(fù)雜的組合或解析。1.7.2層次式結(jié)構(gòu)層次式結(jié)構(gòu)1.7.2層次式結(jié)構(gòu)層次式結(jié)構(gòu)分層原則1.硬件相關(guān)的功能放在最底層2.與用戶策略或用戶交互相關(guān)的功能放在最頂層3.中間層各層按調(diào)用次序或消息傳遞順序安排4.共性的和活躍的服務(wù)放在較低的層次1.7.3微內(nèi)核結(jié)構(gòu)1.7.3微內(nèi)核結(jié)構(gòu)微內(nèi)核(Micro-Kernel)結(jié)構(gòu)客戶-服務(wù)器結(jié)構(gòu)Client/Server結(jié)構(gòu)微內(nèi)核和核外服務(wù)器微內(nèi)核部分體積較小提供操作系統(tǒng)基本的核心功能和服務(wù)。例如,進(jìn)程調(diào)度、進(jìn)程間通信、內(nèi)存管理、基本I/O操作。核外服務(wù)器部分體積較大且可伸縮主要實現(xiàn)操作系統(tǒng)的絕大部分功能,等待應(yīng)用程序提出服務(wù)請求。1.7.3微內(nèi)核結(jié)構(gòu)第2章操作系統(tǒng)的硬件基礎(chǔ)蘇曙光華中科技大學(xué)/軟件學(xué)院2022年春季第2章操作系統(tǒng)的硬件基礎(chǔ)教學(xué)內(nèi)容計算機三總線硬件結(jié)構(gòu)CPU結(jié)構(gòu)CPU的態(tài)內(nèi)存時鐘中斷系統(tǒng)基本輸入輸出系統(tǒng)操作系統(tǒng)啟動過程計算機虛擬化和虛擬機操作系統(tǒng)的生成教學(xué)重點CPU的態(tài)中斷系統(tǒng)基本輸入輸出系統(tǒng)操作系統(tǒng)啟動過程操作系統(tǒng)的生成教學(xué)難點CPU的態(tài)中斷系統(tǒng)操作系統(tǒng)啟動過程2.1計算機三總線硬件結(jié)構(gòu)2.1計算機三總線硬件結(jié)構(gòu)計算機的硬件結(jié)構(gòu)CPU、內(nèi)存和外設(shè)。地址總線,數(shù)據(jù)總線,控制總線2.2CPU結(jié)構(gòu)2.2CPU結(jié)構(gòu)CPU在邏輯上可以劃分成3個單元,分別是控制單元、運算單元和寄存器單元,這3部分由CPU內(nèi)部總線連接起來。2.3CPU的態(tài)2.3CPU的態(tài)基本的態(tài)有3種:核態(tài)、用戶態(tài)、管態(tài)。核態(tài),即操作系統(tǒng)核心程序運行時所處的狀態(tài)。核態(tài)具有最高的特權(quán)級別。用戶態(tài),即用戶程序運行時的狀態(tài),它具有較低的特權(quán)級別,又稱為目態(tài)。管態(tài),是一個模棱兩可的中間狀態(tài),其權(quán)限介于核態(tài)和用戶態(tài)之間。2.3CPU的態(tài)Intelx86架構(gòu)的CPU支持4個特權(quán)級分別稱為Ring0,Ring1,Ring2,Ring3,其中,Ring0級權(quán)限最高,Ring3級權(quán)限最低。特權(quán)指令包括(1)改變CPU狀態(tài)的指令;(2)修改特殊寄存器的指令;(3)涉及外部設(shè)備的輸入輸出指令。2.3CPU的態(tài)用戶態(tài)切換到內(nèi)核態(tài)主要有三種情形系統(tǒng)調(diào)用異常外部設(shè)備的中斷2.4內(nèi)存2.4內(nèi)存內(nèi)存也叫主存儲器(MainMemory),簡稱主存。內(nèi)存是計算機系統(tǒng)存放運行時指令與數(shù)據(jù)的半導(dǎo)體存儲器單元,通常分為只讀存儲器(ReadOnlyMemory,ROM)、隨機存儲器(RandomAccessMemory,RAM)和高速緩存存儲器(Cache)等三種類型。2.5時鐘2.5時鐘計算機設(shè)置有一個硬件定時器,它能夠定時向處理器發(fā)出時間信號。Intel8253A芯片2.5時鐘計數(shù)器的結(jié)構(gòu)每個計數(shù)器通過3個引腳和外部聯(lián)系:時鐘輸入端CLK,門控信號輸入端GATE,輸出端OUT。每個計數(shù)器支持多達(dá)6種工作方式,不同工作方式下OUT輸出的波形、計數(shù)的啟動方式、計數(shù)初值裝入方式都有差異,以滿足不同應(yīng)用場合。2.6中斷系統(tǒng)2.6中斷系統(tǒng)中斷是CPU對突發(fā)外部事件的一種反應(yīng)機制CPU收到外部信號(中斷信號)后,停止當(dāng)前工作,自動轉(zhuǎn)去調(diào)用事先準(zhǔn)備好的中斷服務(wù)程序處理外部事件,待處理完畢后再回到原來工作的中斷處(斷點)繼續(xù)工作的過程或機制。2.6中斷系統(tǒng)中斷源和分類引起中斷的原因,或者能夠發(fā)出中斷請求信號的來源統(tǒng)稱為中斷源。自愿中斷和強迫中斷強迫中斷是指主程序沒有預(yù)期的意外中斷。例:外設(shè)產(chǎn)生的中斷、程序運行的錯誤、硬件意外錯誤等。自愿中斷是指主程序事先安排的中斷。例:程序員在程序中調(diào)用訪管指令訪問系統(tǒng)服務(wù)或資源引發(fā)的中斷。內(nèi)部中斷和外部中斷內(nèi)部中斷是由CPU內(nèi)部事件或執(zhí)行訪管指令產(chǎn)生的。外部中斷也簡稱中斷。外部中斷由CPU外部的設(shè)備產(chǎn)生對CPU的請求而引發(fā)。2.6中斷系統(tǒng)斷點發(fā)生中斷時程序被打斷的暫停點稱為斷點。斷點的本質(zhì)就是中斷發(fā)生時,主程序?qū)⒁獔?zhí)行的下一條指令的地址,這個地址就是中斷發(fā)生時CS和IP兩個寄存器的值。廣義上的斷點包含CS、IP、FLAGS、SS和SP等5個寄存器,有時僅包含CS、IP和FLAGS等3個寄存器狹義上的斷點僅包括CS和IP等2個寄存器。2.6中斷系統(tǒng)現(xiàn)場現(xiàn)場是指中斷發(fā)生時CPU中相關(guān)寄存器值的集合。廣義上,現(xiàn)場可以包含斷點信息、FLAGS、SS和SP等寄存器。狹義上,現(xiàn)場數(shù)據(jù)不包含斷點信息,而僅包含其余寄存器中那些可能受中斷服務(wù)程序影響的寄存器,例如AX,BX等寄存器。2.6中斷系統(tǒng)中斷服務(wù)程序處理中斷源中斷事件的程序稱為中斷服務(wù)程序。中斷服務(wù)程序是事先已準(zhǔn)備好的一個特殊函數(shù),該函數(shù)的調(diào)用由系統(tǒng)自動完成。中斷服務(wù)程序的一般結(jié)構(gòu)(1)保護現(xiàn)場(2)開中斷(3)中斷服務(wù)主體(4)恢復(fù)現(xiàn)場(5)中斷返回2.6中斷系統(tǒng)中斷響應(yīng)過程中斷響應(yīng)過程是指從CPU的INT引腳收到外設(shè)中斷請求(或內(nèi)部中斷產(chǎn)生)開始,到系統(tǒng)完成相應(yīng)的中斷服務(wù)并返回到原來主程序的全過程。(1)識別中斷源(2)保護斷點(3)保護現(xiàn)場(4)進(jìn)入中斷服務(wù)程序(5)恢復(fù)現(xiàn)場(6)中斷返回2.6中斷系統(tǒng)中斷響應(yīng)過程2.6中斷系統(tǒng)中斷嵌套高優(yōu)先級中斷打斷低優(yōu)先級中斷服務(wù)的嵌套處理過程2.7基本輸入輸出系統(tǒng)2.7基本輸入輸出系統(tǒng)基本輸入輸出系統(tǒng)BasicInputOutputSystem,BIOS是被固化到計算機中的一組程序,也是計算機加電啟動后運行的第一個軟件,為計算機提供最初級的、最直接的硬件操控。2.7基本輸入輸出系統(tǒng)1.加電自檢及初始化加電自檢(PowerOnSelfTest,簡稱POST)用于計算機剛接通電源時對基礎(chǔ)硬件的檢測和基本軟件環(huán)境的初始化。2.設(shè)置CMOS參數(shù)CMOS設(shè)置程序幫助用戶設(shè)置基本的系統(tǒng)參數(shù)。3.系統(tǒng)啟動系統(tǒng)啟動的功能是加載并引導(dǎo)某種操作系統(tǒng)啟動。4.基本輸入輸出處理程序為應(yīng)用程序和操作系統(tǒng)提供硬件接口服務(wù),通過中斷服務(wù)指令的形式來實現(xiàn)的。2.7基本輸入輸出系統(tǒng)常見的BIOS中斷服務(wù)中斷類型號功能中斷類型號功能10H顯示器I/O調(diào)用18HROMBASIC入口11H獲取設(shè)備配置調(diào)用19H自舉程序入口12H獲取存儲器大小調(diào)用1AH時間日期調(diào)用13H軟盤I/O調(diào)用1BHCtrl-Break控制14H異步通信口調(diào)用1CH定時處理15H磁帶I/O調(diào)用1DH顯示器參數(shù)表16H鍵盤I/O調(diào)用1EH軟盤參數(shù)表17H打印機I/O調(diào)用1FH字符點陣結(jié)構(gòu)參數(shù)表2.8操作系統(tǒng)啟動過程2.8操作系統(tǒng)啟動過程教學(xué)內(nèi)容操作系統(tǒng)啟動概述Linux啟動過程主引導(dǎo)記錄 GRUB引導(dǎo) Linux0.11啟動過程 教學(xué)重點2.8.1操作系統(tǒng)啟動概述2.8.1操作系統(tǒng)啟動概述啟動過程分為3個階段初始引導(dǎo)、核心初始化和系統(tǒng)初始化。1.初始引導(dǎo)初始引導(dǎo)階段由BIOS中的啟動代碼運行開始,直到把操作系統(tǒng)的內(nèi)核加載到內(nèi)存的適當(dāng)位置,并將CPU控制權(quán)交給內(nèi)核為止。2.核心初始化核心初始化主要由內(nèi)核完成,目的是初始化系統(tǒng)的核心數(shù)據(jù),并繼續(xù)加載操作系統(tǒng)除內(nèi)核之外的其余部分到內(nèi)存。3.系統(tǒng)初始化系統(tǒng)初始化階段依然由操作系統(tǒng)內(nèi)核完成,繼續(xù)初始化計算機系統(tǒng),并最終把操作系統(tǒng)的桌面或控制臺準(zhǔn)備好。2.8.2Linux啟動過程2.8.2Linux啟動過程在Linux啟動過程的系統(tǒng)初始化階段中,內(nèi)核主要創(chuàng)建init進(jìn)程,利用它初始化系統(tǒng)環(huán)境。init進(jìn)程是系統(tǒng)所有進(jìn)程的起點,它的進(jìn)程號為1。初始化腳本文件/etc/inittab通常包含以下工作。(1)設(shè)置鍵盤(2)設(shè)置字體(3)裝載模塊(4)設(shè)置網(wǎng)絡(luò)(5)配置用戶環(huán)境(6)啟動登錄用戶Shell的getty進(jìn)程2.8.2Linux啟動過程init進(jìn)程啟動登錄流程2.8.3主引導(dǎo)記錄2.8.3主引導(dǎo)記錄主引導(dǎo)記錄(MasterBootRecord,MBR)主啟動扇區(qū),是計算機開機后訪問硬盤時必須要讀取的首扇區(qū).它在硬盤上的CHS(柱面,磁頭,扇區(qū))地址為(0,0,1)。主啟動扇區(qū)的大小為512字節(jié),最后兩個字節(jié)如果是0x55和0xAA,則表明這個設(shè)備可以用于啟動。2.8.3主引導(dǎo)記錄主引導(dǎo)記錄的作用主引導(dǎo)記錄中通常為硬盤引導(dǎo)程序BootLoader或更強功能的啟動管理程序,它的作用如下。(1)提供菜單:用戶可選擇不同的啟動項目。(2)加載核心文件:直接指向可啟動的程序段加載操作系統(tǒng)內(nèi)核。(3)跳轉(zhuǎn)到其他Loader:跳轉(zhuǎn)到其他PBR中的BootLoader以加載特定的操作系統(tǒng)。MBR程序例子在屏幕上顯示“HelloMBR!”字符串然后停住不動。稍微復(fù)雜的MBR程序功能是將0號驅(qū)動器、0號柱面、0號磁頭、2號扇區(qū)開始的連續(xù)4個扇區(qū)讀入內(nèi)存絕對地址0x90200處。2.8.4GRUB引導(dǎo)2.8.4GRUB引導(dǎo)GRUB(GrandUnifiedBootLoader)一款強大的多重開機引導(dǎo)器,不僅可以對各種發(fā)行版本的Linux進(jìn)行引導(dǎo),也可以用來加載BSD、UNIX與Windows等通用操作系統(tǒng)。2.8.5Linux0.11啟動過程2.8.5Linux0.11啟動過程Linux0.11的引導(dǎo)程序包括/boot目錄下的三個程序bootsect.S、setup.S和head.SLinux0.11內(nèi)核在磁盤上的分布初始化階段主要由函數(shù)main()完成函數(shù)main()首先對物理內(nèi)存各部分進(jìn)行功能劃分與分配,然后調(diào)用內(nèi)核各模塊的初始化函數(shù),包括內(nèi)存管理、中斷處理、塊設(shè)備與字符設(shè)備、進(jìn)程管理、緩沖區(qū)管理以及硬盤和軟盤等硬件的初始化處理函數(shù)。完成各模塊的初始化操作后,系統(tǒng)已經(jīng)處于可運行狀態(tài)。初始化階段主要由函數(shù)main()完成2.9計算機虛擬化和虛擬機2.9計算機虛擬化和虛擬機教學(xué)內(nèi)容計算機虛擬化虛擬機 教學(xué)重點2.9.1計算機虛擬化 2.9.1計算機虛擬化 虛擬化虛擬化實質(zhì)上是一種資源管理技術(shù),它能將計算機的各種實體資源,如服務(wù)器、網(wǎng)絡(luò)、處理器、內(nèi)存、外儲等,予以抽象和轉(zhuǎn)換后重新呈現(xiàn)出來,以打破實體結(jié)構(gòu)間不可切割的障礙,使用戶能以比原本的組態(tài)更好的方式來使用和共享這些資源。虛擬化形式上是一個同構(gòu)2.9.1計算機虛擬化 虛擬化虛擬化形式上是一個同構(gòu)2.9.1計算機虛擬化 虛擬化技術(shù)分類指令級虛擬化硬件級虛擬化操作系統(tǒng)級虛擬化編程語言級虛擬化程序庫級虛擬化2.9.2虛擬機2.9.2虛擬機虛擬機虛擬機是指在一個硬件平臺上模擬多個相互獨立的、ISA結(jié)構(gòu)與實際硬件相同的虛擬硬件系統(tǒng)。虛擬機的實現(xiàn)通常要用到虛擬機監(jiān)視器(VMM)。VMM的主要功能是基于物理資源創(chuàng)建相應(yīng)的虛擬資源,組成虛擬機,并為客戶機操作系統(tǒng)提供虛擬的平臺。VMM的主要實現(xiàn)形式有3種獨立監(jiān)控模式、宿主模式和混合模式。2.9.2虛擬機獨立監(jiān)控模式VMM直接運行在裸機上,可以管理和使用底層的硬件資源,具有最高的特權(quán)級。2.9.2虛擬機宿主模式VMM作為一個應(yīng)用程序運行在主機操作系統(tǒng)中。VMM可以充分利用宿主操作系統(tǒng)所提供的設(shè)備驅(qū)動和底層服務(wù)來進(jìn)行內(nèi)存管理、任務(wù)調(diào)度以及資源管理等工作。2.9.2虛擬機混合模式混合模式集成了前兩種模式的優(yōu)點。它在結(jié)構(gòu)上與獨立監(jiān)控模式類似,直接運行在裸機上,具有最高特權(quán)級,在其上運行虛擬機。但它把大部分I/O設(shè)備的控制交由運行在特權(quán)虛擬機中的特權(quán)操作系統(tǒng)來控制,而且VMM的虛擬化職責(zé)也被特權(quán)操作系統(tǒng)所分擔(dān),只有處理器和內(nèi)存的虛擬化由VMM完成。2.10操作系統(tǒng)的生成2.10操作系統(tǒng)的生成 操作系統(tǒng)生成是指根據(jù)硬件環(huán)境的配置和用戶的需求,重新配置、裁剪和構(gòu)建操作系統(tǒng)的過程。操作系統(tǒng)生成的前提(1)操作系統(tǒng)具有良好的模塊特性?,F(xiàn)有的模塊可以被替換或刪除,也可以新增模塊。(2)有交互式的配置工具可供用戶直觀地選擇和配置各個模塊或某種機制。交互式配置工具可以保存用戶的配置結(jié)果,并生成編譯指導(dǎo)文件,用于指導(dǎo)后續(xù)的編譯過程。(3)有映像構(gòu)建(build)工具,能生成新內(nèi)核的二進(jìn)制文件。映像構(gòu)建過程需要參考前述編譯指導(dǎo)文件。第3章用戶界面蘇曙光華中科技大學(xué)/軟件學(xué)院2022年春季第3章用戶界面教學(xué)內(nèi)容用戶環(huán)境 用戶界面概念 操作界面 系統(tǒng)調(diào)用教學(xué)重點操作界面 系統(tǒng)調(diào)用教學(xué)難點系統(tǒng)調(diào)用Linux系統(tǒng)調(diào)用機制3.1用戶環(huán)境 3.1用戶環(huán)境 用戶環(huán)境用戶環(huán)境是指計算機用戶工作的軟件環(huán)境,包括命令行環(huán)境,桌面環(huán)境,以及相關(guān)的用戶使用手冊。用戶環(huán)境的構(gòu)造是指按照用戶的要求和硬件特性,安裝和配置好操作系統(tǒng),為用戶提供必要的操作命令或圖形界面,并使其工作方式和交互方式合理高效,方便用戶使用計算機完成相應(yīng)的工作。3.2用戶界面概念 3.2用戶界面概念 用戶界面用戶界面(UserInterface,UI)是用戶與操作系統(tǒng)內(nèi)核進(jìn)行交互和信息交換的媒介。用戶界面分為兩大類操作界面和系統(tǒng)調(diào)用用戶、用戶界面、操作系統(tǒng)內(nèi)核與計算機硬件四者的關(guān)系3.2用戶界面概念 1.操作界面用戶通過操作界面可以直接或間接地控制自己的作業(yè)或獲得操作系統(tǒng)提供的服務(wù)。操作界面包括操作命令、批處理命令和圖形用戶界面三種典型形式。2.系統(tǒng)調(diào)用系統(tǒng)調(diào)用是提供給程序員在編程時使用的接口,是用戶程序取得操作系統(tǒng)服務(wù)的唯一途徑。3.3操作界面3.3操作界面教學(xué)內(nèi)容操作命令重定向和管道命令 批處理程序命令 圖形用戶界面 Shell Shell腳本程序教學(xué)重點3.3.1操作命令3.3.1操作命令操作命令操作命令又稱交互式命令,其中,操作命令除了可以直接在命令行上輸入使用,還有管道和重定向這兩種特殊執(zhí)行方式。在Linux、UNIX系列操作系統(tǒng)中,操作命令在一個稱為Shell的控制臺環(huán)境下運行。3.3.2重定向和管道命令3.3.2重定向和管道命令重定向和管道命令都屬于特殊的操作命令。操作系統(tǒng)定義了兩個標(biāo)準(zhǔn)輸入和輸出設(shè)備。各種程序以鍵盤作為標(biāo)準(zhǔn)輸入設(shè)備,以顯示器作為標(biāo)準(zhǔn)輸出設(shè)備,即任何命令的輸入默認(rèn)來自“鍵盤”,任何命令的輸出(含錯誤)默認(rèn)送往“顯示器”。重定向重定向即把命令默認(rèn)的輸入來源或輸出方向修改為其他設(shè)備(或其他文件,設(shè)備視同文件)。重定向分為輸入重定向和輸出重定向兩種,分別用“<”及“>”表示。3.3.2重定向和管道命令輸出重定向的基本格式Command-Line>file或設(shè)備命令Command-Line的執(zhí)行結(jié)果(標(biāo)準(zhǔn)輸出,或者錯誤輸出,本來都要打印到屏幕上面)被重定向到指定的普通文件file或其他輸出設(shè)備上(含打印機設(shè)備)。輸入重定向的基本格式Command-Line<file或文件操作符或設(shè)備命令Command-Line需要輸入?yún)?shù),其參數(shù)將從file或文件操作符或設(shè)備中獲取,而不是從鍵盤獲取。3.3.2重定向和管道命令重定向操作符號及其含義類別操作符說明輸入重定向<

將命令輸入由默認(rèn)的鍵盤更改或重定向為指定的文件輸出重定向>

將命令輸出由默認(rèn)的顯示器更改或重定向為指定的文件>>

將命令輸出重定向并追加到指定文件的末尾錯誤重定向2>將命令的錯誤輸出重定向為指定文件(先清空)2>>將命令的錯誤輸出重定向為指定文件(追加到末尾)輸出與錯誤組合重定向&>將命令的正常輸出和錯誤輸出重定向為指定文件。3.3.2重定向和管道命令管道管道命令本質(zhì)上是兩條或更多條輸入輸出重定向命令的綜合應(yīng)用。管道命令可以將多條相關(guān)命令有序連接起來,把第一條命令的輸出信息作為第二條命令的輸入信息,同時,又把第二條命令的輸出信息作為第三條命令的輸入信息。相關(guān)的多條命令就在邏輯上形成一條信息傳遞和處理的管道。3.3.3批處理程序命令3.3.3批處理程序命令批處理命令批處理命令通過類似程序的方式執(zhí)行具有一定邏輯順序的命令序列。在MS-DOS和Windows以bat為擴展名在Linux、UNIX中,批處理又稱為腳本(Script)。狹義上,批處理僅指Windows和DOS批處理命令。批處理按規(guī)定邏輯順序自動執(zhí)行若干個指定的DOS命令或程序。批處理把原來在控制臺上需要逐個輸入和執(zhí)行的命令匯總起來,按一定的邏輯順序(可以是順序或選擇或跳轉(zhuǎn)或循環(huán))成批地執(zhí)行,可以避免反復(fù)輸入命令的麻煩。3.3.3批處理程序命令使用批處理程序求1~100所有整數(shù)和并將其輸出3.3.3批處理程序命令幫助程序員編譯驅(qū)動程序的批處理程序例子3.3.3批處理程序命令PowerShelPowerShell是微軟公司為Windows設(shè)計的新的命令行程序,支持交互式提示和腳本環(huán)境,它們可以獨立使用也可以交互使用。3.3.4圖形用戶界面 3.3.4圖形用戶界面 圖形用戶界面圖形用戶界面(GraphicalUserInterface,GUI)采用了圖形化的操作界面,用戶已完全不必像使用命令接口那樣去記住命令名及格式,從而把用戶從煩瑣且單調(diào)的操作中解脫出來。設(shè)計良好的圖形用戶界面好的UI設(shè)計遵循的準(zhǔn)則:風(fēng)格一致性設(shè)計原則、布局具有邏輯性原則、具有啟示性設(shè)計原則、應(yīng)遵循習(xí)慣性原則等。3.3.5Shell 3.3.5Shell Shell,俗稱殼(用來區(qū)別于內(nèi)核)Shell是操作系統(tǒng)與用戶交互的重要操作界面之一。Shell負(fù)責(zé)接收用戶的命令和參數(shù),然后通過操作系統(tǒng)調(diào)用相應(yīng)的應(yīng)用程序完成命令所要求的功能,并把結(jié)果以合適的方式展示給用戶。Shell本身不執(zhí)行命令,僅僅具有管理命令和展示命令結(jié)果的功能。3.3.5Shell Shell的主要類型UNIX或Linux環(huán)境下的sh、csh、ksh和bashWindows環(huán)境下的PowerShell大多數(shù)Linux都以bash作為默認(rèn)的Shell3.3.5Shell Shell的主要功能命令行編輯功能歷史命令功能命令別名功能命令和文件名補全功能重定向和管道操作功能腳本程序命令功能3.3.6Shell腳本程序3.3.6Shell腳本程序腳本程序腳本程序通過類似程序的方式執(zhí)行具有一定邏輯順序的命令序列來完成較復(fù)雜的功能和人機交互。腳本程序保存在文本文件中,是一系列Shell命令語句的集合。腳本程序有變量、關(guān)鍵字,有各種控制語句,如if、case、while、for等語句,支持函數(shù),有特定的語法結(jié)構(gòu)。3.3.6Shell腳本程序腳本程序的例子用于向系統(tǒng)安裝一個軟件包,安裝過程主要包括解壓、配置、刪除臨時文件等工作。3.3.6Shell腳本程序腳本程序的基本格式腳本程序保存在文本文件中,擴展名可取為.sh(sh代表Shell腳本程序的首行#!/bin/bash告訴系統(tǒng)這個腳本程序需要什么類型的Shell解釋器來執(zhí)行。腳本程序執(zhí)行時,從第一行開始,按邏輯逐行分析和執(zhí)行命令。凡是能夠在Shell下直接執(zhí)行的命令,都可以在腳本中使用。腳本中還可以使用一些不能在Shell下直接執(zhí)行的語句。3.3.6Shell腳本程序腳本程序的運行方式(1)將腳本程序作為程序運行,在命令行直接輸入腳本文件名字在腳本中為當(dāng)前腳本指定特定的Shell,需要在腳本文件的開頭增加如下一行代碼:#!/bin/bash(2)將腳本文件名作為參數(shù)傳遞給特定的Shell解釋器,用特定Shell解釋執(zhí)行。#/bin/bashtest.sh3.3.6Shell腳本程序鍵盤輸入和屏幕輸出鍵盤輸入可以使用read命令,向屏幕輸出則可使用echo命令。查詢指定軟件包是否安裝的腳本例子3.4系統(tǒng)調(diào)用 3.4系統(tǒng)調(diào)用 教學(xué)內(nèi)容系統(tǒng)調(diào)用概念 系統(tǒng)調(diào)用工作原理 Linux系統(tǒng)調(diào)用機制 Linux系統(tǒng)調(diào)用實現(xiàn)教學(xué)重點3.4.1系統(tǒng)調(diào)用概念 3.4.1系統(tǒng)調(diào)用概念 系統(tǒng)調(diào)用系統(tǒng)調(diào)用(SystemServiceCall,SystemCall)是操作系統(tǒng)內(nèi)核為應(yīng)用程序提供的服務(wù),是應(yīng)用程序與操作系統(tǒng)之間的接口。系統(tǒng)調(diào)用一般涉及核心資源或硬件的操作,運行于核態(tài)。每個系統(tǒng)調(diào)用具有唯一的編號。調(diào)用系統(tǒng)調(diào)用的過程會產(chǎn)生中斷,這種中斷是自愿中斷,即是軟件中斷,也是內(nèi)部中斷。系統(tǒng)調(diào)用用戶程序調(diào)用sys_foo()函數(shù),但是該函數(shù)卻是在內(nèi)核中真正實現(xiàn)的。當(dāng)然,sys_foo()函數(shù)能從用戶空間穿越到內(nèi)核空間,顯然該過程利用了中斷機制,產(chǎn)生了中斷。3.4.2系統(tǒng)調(diào)用工作原理3.4.2系統(tǒng)調(diào)用工作原理系統(tǒng)調(diào)用工作原理內(nèi)核中預(yù)先設(shè)計了一系列系統(tǒng)調(diào)用,每個系統(tǒng)調(diào)用都有唯一的編號,以區(qū)別彼此。應(yīng)用程序通過形如SVCN的訪管指令調(diào)用第N號調(diào)用,調(diào)用過程中發(fā)生了中斷。3.4.2系統(tǒng)調(diào)用工作原理系統(tǒng)調(diào)用工作原理(1)應(yīng)用程序使用SVCX準(zhǔn)備調(diào)用第X號系統(tǒng)調(diào)用。(2)內(nèi)核識別并響應(yīng)SVCX指令引起的中斷。(3)系統(tǒng)執(zhí)行保護現(xiàn)場。(4)根據(jù)系統(tǒng)調(diào)用編號X在系統(tǒng)調(diào)用入口地址表中查找相應(yīng)的入口地址。(5)轉(zhuǎn)入相應(yīng)的系統(tǒng)調(diào)用函數(shù)。(6)恢復(fù)現(xiàn)場數(shù)據(jù)。(7)返回應(yīng)用程序。3.4.2系統(tǒng)調(diào)用工作原理系統(tǒng)調(diào)用工作原理在DOS操作系統(tǒng)中,使用INT21H觸發(fā)軟件中斷,使用相應(yīng)的系統(tǒng)調(diào)用;在Linux操作系統(tǒng)中,使用INT80H觸發(fā)軟件中斷,使用相應(yīng)的系統(tǒng)調(diào)用。3.4.2系統(tǒng)調(diào)用工作原理常用DOS系統(tǒng)調(diào)用(INT21H)AH功能調(diào)用參數(shù)返回參數(shù)01鍵盤輸入且回顯

AL=輸入字符02顯示輸出DL=輸出字符

03異步通信輸入

AL=輸入數(shù)據(jù)04異步通信輸出DL=輸出數(shù)據(jù)

05打印機輸出DL=輸出字符

07鍵盤輸入無回顯

AL=輸入字符09顯示字符串DS:DX=串地址'$'結(jié)束字符串

0F打開文件DS:DX=FCB首地址AL=00文件找到AL=FF文件未找到10關(guān)閉文件DS:DX=FCB首地址AL=00目錄修改成功AL=FF目錄中未找到文件13刪除文件DS:DX=FCB首地址AL=00刪除成功AL=FF未找到3D打開文件DS:DX=ASCII串地址AL=0讀AL=1寫AL=3讀/寫成功:AX=文件號錯誤:AX=錯誤碼3E關(guān)閉文件BX=文件號失敗:AX=錯誤碼3.4.2系統(tǒng)調(diào)用工作原理DOS操作系統(tǒng)下調(diào)用系統(tǒng)調(diào)用的過程(1)給出系統(tǒng)調(diào)用的編號。系統(tǒng)調(diào)用編號寫入AH寄存器中。(2)給出相關(guān)的入口參數(shù)。參數(shù)寫入相關(guān)的寄存器中。(3)INT21H。該指令真正觸發(fā)系統(tǒng)調(diào)用。3.4.2系統(tǒng)調(diào)用工作原理DOS操作系統(tǒng)下調(diào)用系統(tǒng)調(diào)用的例子利用DOS的INT21H的9號系統(tǒng)調(diào)用向屏幕輸出一個字符串,并在最后的第14行利用4CH號系統(tǒng)調(diào)用退出程序,返回DOS命令行狀態(tài)。3.4.2系統(tǒng)調(diào)用工作原理Linux操作系統(tǒng)下調(diào)用系統(tǒng)調(diào)用的例子Linux中使用80H號中斷實現(xiàn)系統(tǒng)調(diào)用表3-4列出了Linux的部分系統(tǒng)調(diào)用在EAX寄存器中提供系統(tǒng)調(diào)用的編號,其余的參數(shù)在BX、CX、DX等寄存器中存放。3.4.2系統(tǒng)調(diào)用工作原理常用Linux系統(tǒng)調(diào)用(INT80H)編號名稱功能調(diào)用參數(shù)00setup安裝根文件系統(tǒng)EBX=硬盤參數(shù)表地址01exit退出進(jìn)程EBX=退出碼02fork創(chuàng)建進(jìn)程

03read讀文件EBX=文件描述符,ECX=緩沖區(qū)首址,EDX=字節(jié)數(shù)04write寫文件EBX=文件描述符,ECX=緩沖區(qū)首址,EDX=字節(jié)數(shù)05open打開文件EBX=文件名,ECX=打開標(biāo)志,EDX=屬性06close關(guān)閉文件EBX=文件描述符07waitpid等待進(jìn)程終止EBX=進(jìn)程ID,ECX=返回狀態(tài)地址,EDX=選項0bexecve執(zhí)行程序EBX=文件名,ECX=argv指針,EDX=envp指針0cchdir更改當(dāng)前目錄EBX=目錄名0dtime獲取當(dāng)前時間EBX=時區(qū)0fchmod修改文件屬性EBX=文件名,ECX=文件屬性14getpid取進(jìn)程ID

17setuid設(shè)置進(jìn)程用戶IDEBX=用戶ID18getuid獲取進(jìn)程用戶ID

3.4.2系統(tǒng)調(diào)用工作原理Linux操作系統(tǒng)下調(diào)用系統(tǒng)調(diào)用的例子write系統(tǒng)調(diào)用(內(nèi)部的名稱是sys_write)的編號是4,編號被存在EAX寄存器中。3.4.3Linux系統(tǒng)調(diào)用機制3.4.3Linux系統(tǒng)調(diào)用機制Linux系統(tǒng)調(diào)用機制系統(tǒng)調(diào)用都具有唯一的功能號。這些功能號被定義在文件include/unistd.h中。read系統(tǒng)調(diào)用的功能號是3,定義為符號__NR_read。系統(tǒng)調(diào)用處理函數(shù)指針數(shù)組表sys_call_table[]read系統(tǒng)調(diào)用的處理函數(shù)指針位于sys_call_table[3]處。3.4.3Linux系統(tǒng)調(diào)用機制Linux系統(tǒng)調(diào)用機制read系統(tǒng)調(diào)用,帶3個參數(shù),其定義是:#define

__LIBRARY__#include

<unistd.h>_syscall3(int,

read,

int,

fd,char

*,

buf,

int,

n)3.4.3Linux系統(tǒng)調(diào)用機制Linux系統(tǒng)調(diào)用機制(1)應(yīng)用程序調(diào)用封裝有特定系統(tǒng)調(diào)用的庫函數(shù);(2)庫函數(shù)展開為內(nèi)含INT0x80指令和系統(tǒng)調(diào)用編號的匯編指令,調(diào)用相應(yīng)的系統(tǒng)調(diào)用;(3)進(jìn)入INT0x80的中斷處理函數(shù),并調(diào)用相應(yīng)的系統(tǒng)調(diào)用函數(shù);(4)系統(tǒng)調(diào)用函數(shù)完成用戶請求的服務(wù);(5)返回應(yīng)用程序。3.4.3Linux系統(tǒng)調(diào)用機制Linux系統(tǒng)調(diào)用機制3.4.4Linux系統(tǒng)調(diào)用實現(xiàn) 3.4.4Linux系統(tǒng)調(diào)用實現(xiàn) Linux系統(tǒng)調(diào)用的代碼實現(xiàn)包括0x80中斷初始化系統(tǒng)調(diào)用的公共入口、系統(tǒng)調(diào)用處理函數(shù)指針表和典型的系統(tǒng)調(diào)用處理函數(shù)。3.4.4Linux系統(tǒng)調(diào)用實現(xiàn) Linux系統(tǒng)調(diào)用的代碼實現(xiàn)應(yīng)用程序使用系統(tǒng)調(diào)用會觸發(fā)0x80中斷,0x80中斷對應(yīng)中斷服務(wù)程序

system_call().3.4.4Linux系統(tǒng)調(diào)用實現(xiàn) Linux系統(tǒng)調(diào)用的代碼實現(xiàn)sys_call_table[]是系統(tǒng)調(diào)用處理函數(shù)指針表,里面按序包含有所有系統(tǒng)調(diào)用處理函數(shù)的指針,該表按4字節(jié)對齊。第4章進(jìn)程管理蘇曙光華中科技大學(xué)2022年春季軟件工程20級第四章進(jìn)程管理教學(xué)內(nèi)容進(jìn)程的概念進(jìn)程的狀態(tài)和轉(zhuǎn)換進(jìn)程控制塊Linux進(jìn)程控制塊和進(jìn)程狀態(tài)進(jìn)程基本控制Windows進(jìn)程控制 Linux進(jìn)程控制線程進(jìn)程相互制約關(guān)系鎖信號量與P-V操作Windows同步機制Linux同步機制進(jìn)程間通信Linux信號機制實現(xiàn)教學(xué)重點進(jìn)程的概念進(jìn)程的狀態(tài)和轉(zhuǎn)換進(jìn)程基本控制Linux進(jìn)程控制線程進(jìn)程相互制約關(guān)系鎖信號量與P-V操作進(jìn)程間通信4.1進(jìn)程的概念4.1進(jìn)程的概念 教學(xué)內(nèi)容程序的順序執(zhí)行程序的并發(fā)執(zhí)行進(jìn)程的定義和特點教學(xué)重點4.1.1程序的順序執(zhí)行4.1.1程序的順序執(zhí)行程序的順序程序的順序執(zhí)行有兩層含義:一是,程序的各個模塊按邏輯順序依次執(zhí)行;二是,內(nèi)存中只有這唯一的一個程序在運行。這兩層含義同時滿足時才稱該程序是順序程序。4.1.1程序的順序執(zhí)行程序順序執(zhí)行特點(1)順序性當(dāng)程序在CPU上執(zhí)行時,CPU的操作是嚴(yán)格按照程序所規(guī)定的順序執(zhí)行的。(2)封閉性程序一旦開始執(zhí)行,其執(zhí)行結(jié)果不受外界因素的影響。(3)可再現(xiàn)性只要程序執(zhí)行時的初始條件相同,交互輸入的數(shù)據(jù)相同,無論執(zhí)行多少次,其執(zhí)行結(jié)果都是相同的,與程序的執(zhí)行速度無關(guān)。程序順序執(zhí)行的可再現(xiàn)性又稱為時間無關(guān)性。4.1.2程序的并發(fā)執(zhí)行4.1.2程序的并發(fā)執(zhí)行并發(fā)執(zhí)行并發(fā)執(zhí)行的含義是把多個應(yīng)用程序同時裝入內(nèi)存,使它們共享系統(tǒng)資源,讓所有程序都在“同時”向前推進(jìn)。4.1.2程序的并發(fā)執(zhí)行程序并發(fā)執(zhí)行的偽碼描述為了便于表述多個程序(或程序段)同時并發(fā)的關(guān)系,可以用偽代碼來描述n個程序(段):P1,P2,…,Pn的并發(fā)執(zhí)行。COBEGINP1;

//程序P1P2;

//程序P2……Pn;

//程序PnCOEND4.1.2程序的并發(fā)執(zhí)行程序并發(fā)執(zhí)行的特點(1)程序與運行過程不再一一對應(yīng)。(2)失去封閉性。(3)不可再現(xiàn)性。4.1.2程序的并發(fā)執(zhí)行例子:共享變量SharedValue,初值0,程序段P1和程序段P2并發(fā)執(zhí)行。它們并發(fā)執(zhí)行的結(jié)果多種多樣。4.1.2程序的并發(fā)執(zhí)行程序并發(fā)執(zhí)行的條件1966年,學(xué)者Bernstein提出了著名的Bernstein條件,用于描述兩條指令或程序段可以并發(fā)執(zhí)行的充分條件。Bernstein條件是指兩條指令或兩個程序段如果沒有數(shù)據(jù)沖突(DataHazard),那么就能并發(fā)執(zhí)行。4.1.2程序的并發(fā)執(zhí)行Bernstein條件假如有兩條相鄰語句:S1和S2,它們各自生成兩個集合:R(Si)和W(Si),分別稱為讀集合和寫集合。R(Si)={U1,U2,U3,…,Um},語句Si需要讀的m個變量的集合。W(Si)={V1,V2,V3,…,Vn+},語句Si需要寫的n個變量的集合。如果對S1和S2,下面三個條件同時成立,則S1和S2兩個語句可以并發(fā)執(zhí)行。1)R(S1)∩W(S2)=?,即S1所讀變量與S2所寫變量沒有相同的。2)W(S1)∩R(S2)=?,即S1所寫變量與S2所讀變量沒有相同的。3)W(S1)∩W(S2)=?,即S1所寫變量與S2所寫變量沒有相同的。4.1.3進(jìn)程的定義和特點4.1.3進(jìn)程的定義和特點進(jìn)程的定義宏觀上每個應(yīng)用程序或任務(wù)都在向前推進(jìn)。微觀上每個程序都在時走時停地在運行。圖4-5展示了兩個并發(fā)程序在CPU上的運行過程,兩次運行時兩個程序“走走停停”的情況是不一樣的。4.1.3進(jìn)程的定義和特點進(jìn)程的定義進(jìn)程是程序在并發(fā)環(huán)境下在一個數(shù)據(jù)集上的一次運行過程。進(jìn)程與程序的區(qū)別(1)進(jìn)程是動態(tài)的,程序是靜態(tài)的。(2)進(jìn)程的存在是暫時的,程序的存在是長久的。(3)一個程序可以對應(yīng)多個進(jìn)程。4.1.3進(jìn)程的定義和特點進(jìn)程的特點(1)動態(tài)性進(jìn)程是程序的一次執(zhí)行過程,動態(tài)地產(chǎn)生,動態(tài)地消亡。(2)并發(fā)性并發(fā)性是指進(jìn)程可以同其他進(jìn)程一起向前推進(jìn)。(3)獨立性獨立性是指進(jìn)程是系統(tǒng)分配資源和調(diào)度CPU的單位。4)異步性異步性是指進(jìn)程按各自的邏輯向前推進(jìn)。4.2進(jìn)程的狀態(tài)和轉(zhuǎn)換4.1.3進(jìn)程的定義和特點進(jìn)程的3個基本狀態(tài)(1)運行狀態(tài)(RunningState)運行狀態(tài)是指進(jìn)程獲得了CPU,正在CPU上運行的狀態(tài)。(2)就緒狀態(tài)(ReadyState)就緒狀態(tài)是指進(jìn)程已經(jīng)具備運行條件但由于無CPU,故暫時還不能立即運行的狀態(tài)。(3)阻塞狀態(tài)(BlockedState)阻塞狀態(tài)是指進(jìn)程因缺少運行條件或等待某種事件發(fā)生而暫時不能運行的狀態(tài)。4.2進(jìn)程的狀態(tài)和轉(zhuǎn)換狀態(tài)轉(zhuǎn)換進(jìn)程在運行過程中由于自身運行邏輯和運行環(huán)境(包括與之并發(fā)的合作進(jìn)程、操作系統(tǒng)、軟硬件資源)的變換,會在“運行、就緒、阻塞”等3個狀態(tài)之間發(fā)生轉(zhuǎn)換。(1)運行→就緒當(dāng)正在運行的進(jìn)程使用完自己的時間片時,系統(tǒng)將中斷該進(jìn)程的運行,使它由“運行”狀態(tài)轉(zhuǎn)為“就緒”狀態(tài)。(2)就緒→運行進(jìn)程調(diào)度程序選中一個就緒狀態(tài)的進(jìn)程時為其分配CPU,該進(jìn)程由“就緒態(tài)”轉(zhuǎn)為“運行態(tài)”。4.2進(jìn)程的狀態(tài)和轉(zhuǎn)換狀態(tài)轉(zhuǎn)換(3)運行→阻塞正在運行的進(jìn)程申請使用某種系統(tǒng)資源、或向操作系統(tǒng)請求服務(wù)、或在它的合作進(jìn)程給它某個信號之前,不會繼續(xù)運行,進(jìn)入阻塞狀態(tài)。

(4)阻塞→就緒當(dāng)一個阻塞的進(jìn)程等到所申請的資源時,或申請的服務(wù)已被完成,或所需的合作進(jìn)程的信號已獲得,那么該進(jìn)程由“阻塞”狀態(tài)轉(zhuǎn)為“就緒”狀態(tài)。4.2進(jìn)程的狀態(tài)和轉(zhuǎn)換5個狀態(tài)進(jìn)程模型有些操作系統(tǒng)在運行狀態(tài)、就緒狀態(tài)和阻塞狀態(tài)等3個基本狀態(tài)之外又引入兩種狀態(tài):新建狀態(tài)(new)和終止?fàn)顟B(tài)(exit)。這兩個狀態(tài)主要是方便系統(tǒng)對進(jìn)程進(jìn)行更精細(xì)的管理。4.3進(jìn)程控制塊4.3進(jìn)程控制塊進(jìn)程控制塊ProcessControlBlock,PCB進(jìn)程控制塊是內(nèi)核描述進(jìn)程自身屬性、進(jìn)程和其他并發(fā)進(jìn)程之間的互動關(guān)系、進(jìn)程和系統(tǒng)資源之間的關(guān)系、不同時刻所處狀態(tài)等信息的一種數(shù)據(jù)結(jié)構(gòu)。系統(tǒng)創(chuàng)建進(jìn)程的同時自動為進(jìn)程創(chuàng)建PCB,進(jìn)程撤銷后該PCB同時被撤銷。每個進(jìn)程都有唯一的PCB與之對應(yīng),系統(tǒng)根據(jù)PCB感知進(jìn)程,PCB是進(jìn)程存在的標(biāo)志。4.3進(jìn)程控制塊進(jìn)程控制塊進(jìn)程=PCB+程序4.3進(jìn)程控制塊PCB需要包含下面9類信息(1)進(jìn)程ID(2)進(jìn)程起始地址(3)進(jìn)程狀態(tài)(4)優(yōu)先級(5)CPU現(xiàn)場保護區(qū)(6)進(jìn)程間通信區(qū)(7)資源列表(8)文件列表(9)內(nèi)存列表4.4Linux進(jìn)程控制塊和進(jìn)程狀態(tài)4.4Linux進(jìn)程控制塊和進(jìn)程狀態(tài)教學(xué)內(nèi)容Linux進(jìn)程控制塊task_structLinux進(jìn)程狀態(tài)及轉(zhuǎn)換教學(xué)重點4.4.1Linux進(jìn)程控制塊task_struct4.4.1Linux進(jìn)程控制塊task_structLinux進(jìn)程控制塊task_struct(1)進(jìn)程狀態(tài)信息(2)進(jìn)程調(diào)度相關(guān)信息(3)進(jìn)程標(biāo)識相關(guān)信息(4)進(jìn)程間通信相關(guān)信息(5)進(jìn)程鏈接相關(guān)信息(6)時間和計時器相關(guān)信息(7)文件和文件系統(tǒng)相關(guān)信息(8)虛擬內(nèi)存相關(guān)信息(9)處理器現(xiàn)場相關(guān)信息4.4.1Linux進(jìn)程控制塊task_structLinux0.11版本的task_struct結(jié)構(gòu)體4.4.1Linux進(jìn)程控制塊task_structLinux0.11版本的task_struct結(jié)構(gòu)體4.4.2Linux進(jìn)程狀態(tài)及轉(zhuǎn)換4.4.2Linux進(jìn)程狀態(tài)及轉(zhuǎn)換Linux的進(jìn)程狀態(tài)(1)可運行狀態(tài)(TASK-RUNNING)運行態(tài)和就緒態(tài)統(tǒng)一為TASK_RUNNING。(2)可中斷阻塞狀態(tài)(TASK-INTERRUPTIBLE)因為等待某事件的發(fā)生而被阻塞。此狀態(tài)的進(jìn)程可以被相關(guān)的異步信號提前喚醒,從而中斷阻塞狀態(tài)。(3)不可中斷阻塞狀態(tài)(TASK-UNINTERRUPTIBLE)處于這種狀態(tài)的進(jìn)程只有資源請求得到滿足才能被喚醒到就緒狀態(tài),但不能由其他進(jìn)程通過信號或定時中斷來喚醒。(4)僵死狀態(tài)(TASK-ZOMBIE)進(jìn)程已經(jīng)結(jié)束運行,并已釋放了除進(jìn)程控制塊之外的大部分資源。(5)暫停狀態(tài)(TASK-STOPPED)用戶的掛起操作,譬如為跟蹤調(diào)試程序掛起進(jìn)程或暫停執(zhí)行,可以造成進(jìn)程進(jìn)入暫停狀態(tài)TASK_STOPPED,也可以稱之為掛起狀態(tài)。4.4.2Linux進(jìn)程狀態(tài)及轉(zhuǎn)換Linux的進(jìn)程狀態(tài)轉(zhuǎn)換4.5進(jìn)程基本控制4.5進(jìn)程基本控制教學(xué)內(nèi)容進(jìn)程創(chuàng)建進(jìn)程阻塞進(jìn)程喚醒進(jìn)程撤銷原語教學(xué)重點4.5.1進(jìn)程創(chuàng)建4.5.1進(jìn)程創(chuàng)建進(jìn)程創(chuàng)建進(jìn)程創(chuàng)建是指創(chuàng)建一個具有指定標(biāo)識(進(jìn)程ID)的進(jìn)程。創(chuàng)建進(jìn)程的時機(1)用戶登錄。(2)作業(yè)被調(diào)度。(3)用戶請求操作系統(tǒng)提供服務(wù)。(4)用戶程序請求創(chuàng)建新進(jìn)程。4.5.1進(jìn)程創(chuàng)建進(jìn)程創(chuàng)建過程參數(shù)內(nèi)核根據(jù)一系列參數(shù)建立進(jìn)程:進(jìn)程標(biāo)識、優(yōu)先級、CPU初始狀態(tài)、資源清單、進(jìn)程起始地址、進(jìn)程家族關(guān)系等。創(chuàng)建進(jìn)程的工作流程(1)產(chǎn)生唯一的PID;(2)為新進(jìn)程分配一個空白PCB;(3)為進(jìn)程映像分配內(nèi)存空間;(4)為進(jìn)程分配除內(nèi)存之外其他各種資源;(5)初始化PCB各個成員變量,如PID,CPU初始狀態(tài)、優(yōu)先級、資源、家族關(guān)系等。(6)將進(jìn)程插入就緒隊列;(7)等待調(diào)度。4.5.2進(jìn)程阻塞4.5.2進(jìn)程阻塞進(jìn)程阻塞進(jìn)程阻塞的功能就是停止進(jìn)程運行將其變成阻塞狀態(tài)。進(jìn)程阻塞的時機(1)進(jìn)程等待外設(shè)完成I/O操作。(2)進(jìn)程等待系統(tǒng)服務(wù)完成。(3)請求的資源得不到滿足。(4)合作進(jìn)程的同步約束。(5)服務(wù)進(jìn)程無新工作可做。4.5.2進(jìn)程阻塞2.進(jìn)程阻塞過程一般依據(jù)進(jìn)程不同的等待原因或所等待的資源分別構(gòu)建阻塞隊列,便于系統(tǒng)統(tǒng)一管理。進(jìn)程阻塞是根據(jù)阻塞原因?qū)⒃撨M(jìn)程加入到相應(yīng)的阻塞隊列中。阻塞進(jìn)程的工作流程(1)停止進(jìn)程運行,并把CPU現(xiàn)場保存到PCB中;(2)將PCB的狀態(tài)由“運行狀態(tài)”改“阻塞狀態(tài)”;(3)進(jìn)程被插入對應(yīng)的阻塞隊列;(4)轉(zhuǎn)調(diào)度程序。4.5.3進(jìn)程喚醒4.5.3進(jìn)程喚醒進(jìn)程喚醒進(jìn)程喚醒是指喚醒處于阻塞狀態(tài)中的某個進(jìn)程,讓其處于就緒狀態(tài)以便被系統(tǒng)調(diào)度。進(jìn)程被喚醒的時機與其被阻塞的原因有關(guān)系。進(jìn)程喚醒的時機

(1)系統(tǒng)服務(wù)由不滿足變成滿足。(2)外設(shè)的I/O操作已經(jīng)完成。(3)請求的資源已經(jīng)獲得。(4)服務(wù)進(jìn)程收到新的工作請求。(5)合作進(jìn)程已經(jīng)提供數(shù)據(jù)或信號。4.5.3進(jìn)程喚醒進(jìn)程喚醒過程(1)將進(jìn)程的狀態(tài)修改為“就緒”;(2)將進(jìn)程插入就緒隊列。4.5.4進(jìn)程撤銷4.5.4進(jìn)程撤銷進(jìn)程撤銷進(jìn)程撤銷的功能就是結(jié)束一個進(jìn)程,并撤銷其PCB和收回其占用的資源。進(jìn)程撤銷時需要知道進(jìn)程的唯一標(biāo)識。進(jìn)程撤銷的時機

(1)正常結(jié)束。(2)異常結(jié)束。(3)外界干預(yù)。4.5.3進(jìn)程喚醒進(jìn)程撤銷操作(1)在PCB隊列中檢索出目標(biāo)進(jìn)程的PCB;(2)獲取進(jìn)程的狀態(tài),若進(jìn)程處在運行狀態(tài),立即終止該進(jìn)程;(3)檢查是否有子進(jìn)程。若有則采用遞歸方式撤銷子進(jìn)程或者將子進(jìn)程掛接到init進(jìn)程下;(3)釋放進(jìn)程占有的資源,包括內(nèi)存、設(shè)備、文件、文件系統(tǒng)等;(4)通知父進(jìn)程結(jié)束信息,等待父進(jìn)程將進(jìn)程的PCB徹底移除。4.5.5原語 4.5.5原語 原語(Primitive)原語是由若干條指令組成的一段小程序,用來實現(xiàn)某個特定的操作。原語具有不可分割性。原語要么全部運行成功,要么徹底失敗,執(zhí)行過程不可中斷。一個操作如果是原語,就稱該操作具有原子性,也稱該操作是原子操作。進(jìn)程控制都采用原語實現(xiàn)創(chuàng)建原語、撤銷原語、阻塞原語、喚醒原語4.6Windows進(jìn)程控制 4.6Windows進(jìn)程控制 Windows進(jìn)程創(chuàng)建在Windows中創(chuàng)建進(jìn)程的方法,除了普通用戶通過各種操作界面啟動可執(zhí)行程序創(chuàng)建相應(yīng)的進(jìn)程之外,還可以通過系統(tǒng)API函數(shù)創(chuàng)建進(jìn)程,system();WinExec();ShellExecute();CreateProccess();4.6Windows進(jìn)程控制 Windows進(jìn)程創(chuàng)建BOOLCreateProcess(

LPCTSTRlpApplicationName,//指定可執(zhí)行文件的文件名

LPTSTRlpCommandLine,//指定欲傳給新進(jìn)程的命令行參數(shù)

LPSECURITY_ATTRIBUTESlpProcessAttributes,//進(jìn)程安全屬性

LPSECURITY_ATTRIBUTESlpThreadAttributes,//線程安全屬性

BOOLbInheritHandles,//指定當(dāng)前進(jìn)程中的可繼承句柄是否被新進(jìn)程繼承

DWORDdwCreationFlags,//指定新進(jìn)程的優(yōu)先級以及其他創(chuàng)建標(biāo)志

LPVOIDlpEnvironment,//指定新進(jìn)程環(huán)境變量,通常指定為NULL值

LPCTSTRlpCurrentDirectory,//指定新進(jìn)程使用的當(dāng)前目錄

LPSTARTUPINFOlpStartupInfo,//指向指定新進(jìn)程啟動信息的結(jié)構(gòu)體

LPPROCESS_INFORMATIONlpProcessInformation//指向新進(jìn)程的結(jié)構(gòu)體);4.6Windows進(jìn)程控制 Windows進(jìn)程結(jié)束Windows進(jìn)程為了結(jié)束自己,會在主函數(shù)的末尾調(diào)用return、exit、ExitProcess、TerminateProcess等宏或函數(shù)。TerminateProcess函數(shù)還可以結(jié)束指定的進(jìn)程。4.7Linux進(jìn)程控制4.7Linux進(jìn)程控制教學(xué)內(nèi)容Linux進(jìn)程分類Linux進(jìn)程創(chuàng)建fork()函數(shù)實現(xiàn)過程clone()函數(shù)創(chuàng)建進(jìn)程execve()函數(shù)創(chuàng)建進(jìn)程Linux進(jìn)程撤銷Linux的wait()函數(shù) Linux進(jìn)程間的層次關(guān)系Linux0.11任務(wù)0與進(jìn)程樹建立教學(xué)重點4.7.1Linux進(jìn)程分類4.7.1Linux進(jìn)程分類Linux進(jìn)程分3類交互式進(jìn)程一般是在Shell終端中啟動的進(jìn)程,這些進(jìn)程經(jīng)常和用戶發(fā)生交互,所以進(jìn)程必須有較快的響應(yīng)速度。典型的交互式進(jìn)程有交互命令、圖形窗口程序等。批處理進(jìn)程(BatchProcess)不需要與用戶交互,且一般在后臺運行的進(jìn)程,它們不需要非常快的反應(yīng)。典型的批處理進(jìn)程有編譯器、數(shù)據(jù)庫搜索引擎和科學(xué)計算等。實時進(jìn)程指對響應(yīng)時間有非常嚴(yán)格要求的進(jìn)程,這類進(jìn)程要求在很短的時間內(nèi)做出反應(yīng)。4.7.2Linux進(jìn)程創(chuàng)建4.7.2Linux進(jìn)程創(chuàng)建創(chuàng)建進(jìn)程fork()函數(shù),這是一個系統(tǒng)調(diào)用。fork()函數(shù)的原型:pid_tfork(void);特點當(dāng)fork()函數(shù)調(diào)用成功時,它會返回兩個值:一個是0,另一個是創(chuàng)建的子進(jìn)程的進(jìn)程ID(>0)??梢酝ㄟ^fork的返回值來判斷當(dāng)前進(jìn)程是父進(jìn)程還是子進(jìn)程,從而做出不同的行為。4.7.2Linux進(jìn)程創(chuàng)建創(chuàng)建進(jìn)程調(diào)用fork函數(shù)創(chuàng)建子進(jìn)程例子4.7.2Linux進(jìn)程創(chuàng)建fork()函數(shù)采用寫時復(fù)制(CopyOnWrite)機制創(chuàng)建新進(jìn)程創(chuàng)建進(jìn)程的基本流程(1)為新進(jìn)程分配一個新的task_struct結(jié)構(gòu)體。(2)復(fù)制父進(jìn)程task_struct結(jié)構(gòu)體的內(nèi)容。(3)初始化子進(jìn)程task_struct中有別于父進(jìn)程的內(nèi)容,譬如進(jìn)程ID以及與時間有關(guān)的信息、家族關(guān)系等。(4)分配和初始化子進(jìn)程的頁表和頁目錄,使子進(jìn)程共享父進(jìn)程的內(nèi)存。(5)把子進(jìn)程的task_struct結(jié)構(gòu)體掛接在PCB鏈表中。(6)子進(jìn)程被創(chuàng)建之后處于就緒狀態(tài),等待被調(diào)度。4.7.3fork()函數(shù)實現(xiàn)過程4.7.3fork()函數(shù)實現(xiàn)過程fork函數(shù)的實現(xiàn)當(dāng)父進(jìn)程調(diào)用fork()函數(shù)后,控制最終會轉(zhuǎn)移到內(nèi)核中的sys_fork()函數(shù)去真正實現(xiàn)進(jìn)程創(chuàng)建工作。fork()函數(shù)是系統(tǒng)調(diào)用,內(nèi)部會展開成一段宏4.7.3fork()函數(shù)實現(xiàn)過程內(nèi)核函數(shù)sys_fork()4.7.4clone()函數(shù)創(chuàng)建進(jìn)程4.7.4clone()函數(shù)創(chuàng)建進(jìn)程clone()函數(shù)創(chuàng)建進(jìn)程clone()函數(shù)帶有更多的參數(shù),是fork()的升級版本。clone()函數(shù)不僅可以創(chuàng)建進(jìn)程或者線程,還可以指定創(chuàng)建新的命名空間(namespace),或有選擇地繼承父進(jìn)程的內(nèi)存,甚至可以將創(chuàng)建的進(jìn)程變成父進(jìn)程的兄弟進(jìn)程等。4.7.4clone()函數(shù)創(chuàng)建進(jìn)程clone()函數(shù)的原型intclone(int(*fn)(void*),void*child_stack,intflags,void*arg);fn:函數(shù)指針,指針指向一個函數(shù)體。child_stack:為給子進(jìn)程分配系統(tǒng)堆棧的指針。arg:傳給子進(jìn)程的參數(shù),一般為0。flags:復(fù)制資源的標(biāo)志4.7.4clone()函數(shù)創(chuàng)建進(jìn)程flags復(fù)制資源的標(biāo)志可以取的值CLONE_PARENT:創(chuàng)建的新進(jìn)程將與調(diào)用者進(jìn)程共父進(jìn)程,即新進(jìn)程與創(chuàng)建它的進(jìn)程成“兄弟”關(guān)系,而不是“父子”關(guān)系。CLONE_FS:子進(jìn)程與父進(jìn)程共享相同的文件系統(tǒng)。CLONE_FILES:子進(jìn)程與父進(jìn)程共享相同的文件描述符表。CLONE_SIGHAND:子進(jìn)程與父進(jìn)程共享相同的信號處理表。CLONE_VFORK:父進(jìn)程被掛起直至子進(jìn)程釋放虛擬內(nèi)存。CLONE_VM:子進(jìn)程與父進(jìn)程運行于相同的內(nèi)存空間。CLONE_PID:子進(jìn)程在創(chuàng)建時PID與父進(jìn)程一致。CLONE_THREAD:子進(jìn)程與父進(jìn)程共享相同的線程群。4.7.5execve()函數(shù)創(chuàng)建進(jìn)程4.7.5execve()函數(shù)創(chuàng)建進(jìn)程execve()函數(shù)創(chuàng)建進(jìn)程execve()用來創(chuàng)建一個與父進(jìn)程完全不同的新進(jìn)程空間,執(zhí)行新的程序。execve()執(zhí)行之后,新進(jìn)程就和原父進(jìn)程完全不相干了,就連父進(jìn)程原先為子進(jìn)程安排在execve()函數(shù)調(diào)用之后的那些代碼也不再會被子進(jìn)程執(zhí)行.execve()原型intexecve(constchar*filename,char*constargv[],char*constenvp[])filename是二進(jìn)制的可執(zhí)行文件或者是腳本argv是要調(diào)用的程序執(zhí)行的參數(shù)序列4.7.5execve()函數(shù)創(chuàng)建進(jìn)程execve()函數(shù)創(chuàng)建進(jìn)程execve()函數(shù)同樣會引發(fā)INT0x80中斷指令,通過相應(yīng)的中斷服務(wù)程序調(diào)用sys_execve()函數(shù)創(chuàng)建新的子進(jìn)程。4.7.6Linux進(jìn)程撤銷4.7.6Linux進(jìn)程撤銷進(jìn)程撤銷過程撤銷進(jìn)程使用exit()函數(shù)。exit()函數(shù)的原型:voidexit(intstatus);exit()函數(shù)會讓調(diào)用者進(jìn)程正常終止,然后將參數(shù)status的值返回給父進(jìn)程,父進(jìn)程可以通過wait()函數(shù)來獲取這個返回值。exit()函數(shù)主要工作(1)釋放資源并報告給父進(jìn)程;(2)利用參數(shù)status向父進(jìn)程報告結(jié)束時的退出碼;(3)進(jìn)程狀態(tài)改變?yōu)榻┦瑺顟B(tài),并保留PCB信息供父進(jìn)程調(diào)用wait()函數(shù)來收集;(4)調(diào)用schedule()函數(shù),選擇新進(jìn)程運行。4.7.6Linux進(jìn)程撤銷exit()函數(shù)主要工作exit()通過調(diào)用do_exit()函數(shù)實現(xiàn)進(jìn)程撤銷,釋放進(jìn)程占用的絕大多數(shù)資源,包括物理內(nèi)存和頁表,以及文件和文件系統(tǒng)。4.7.6Linux進(jìn)程撤銷do_exit()函數(shù)的實現(xiàn)4.7.7Linux的wait()函數(shù)4.7.7Linux的wait()函數(shù)wait()函數(shù)父進(jìn)程等待自己的子進(jìn)程結(jié)束調(diào)用wait()函數(shù),函數(shù)原型:intwait(int*status);父進(jìn)程一旦調(diào)用了wait()函數(shù)就立即阻塞自己。wait()函數(shù)分析當(dāng)前進(jìn)程的某個子進(jìn)程是否已經(jīng)退出。如果找到了這樣的子進(jìn)程,wait()函數(shù)就會收集這個子進(jìn)程的信息,并把它徹底銷毀后返回。如果沒有找到這樣一個子進(jìn)程,wait()函數(shù)就會一直阻塞在這里,直到有一個出現(xiàn)為止。4.7.8Linux進(jìn)程間的層次關(guān)系4.7.8Linux進(jìn)程間的層次關(guān)系父子關(guān)系和家族關(guān)系一個進(jìn)程能夠借助創(chuàng)建原語創(chuàng)建另一個新進(jìn)程,前者稱為父進(jìn)程,后者稱為子進(jìn)程。子進(jìn)程又可以根據(jù)需要再創(chuàng)建子進(jìn)程。如此遞推,所有的進(jìn)程就形成了進(jìn)程的家族體系,類似一棵倒置的樹。進(jìn)程組進(jìn)程組是一組相關(guān)進(jìn)程的集合。每個進(jìn)程都屬于某個進(jìn)程組進(jìn)程組具有唯一的ID,簡稱PGID。4.7.8Linux進(jìn)程間的層次關(guān)系作業(yè)作業(yè)與進(jìn)程有區(qū)別,也與進(jìn)程組有區(qū)別。作業(yè)(Job)是用戶提交給系統(tǒng)的一個任務(wù),這個任務(wù)可以是一個進(jìn)程,也可以包括幾個進(jìn)程,共同完成一個任務(wù)。Shell是以作業(yè)或者進(jìn)程組為單位分前后臺控制,而不是以進(jìn)程為單位。一個前臺作業(yè)可以由多個進(jìn)程組成,一個后臺作業(yè)也可以由多個進(jìn)程組成。一個Shell可以同時運行一個前臺作業(yè)和多個后臺作業(yè),這稱為作業(yè)控制。4.7.8Linux進(jìn)程間的層次關(guān)系會話(Session)會話是一組相關(guān)進(jìn)程組的集合。每個進(jìn)程都屬于某個會話,會話具有唯一的ID,簡稱SID,以區(qū)別于其他的會話。默認(rèn)情況下,新創(chuàng)建的進(jìn)程會繼承父進(jìn)程的會話ID。當(dāng)有新的用戶登錄Linux時,登錄進(jìn)程會為這個用戶創(chuàng)建一個會話。會話的首進(jìn)程ID會作為整個會話的ID。通常,用戶的登錄Shell就是會話的首進(jìn)程。4.7.8Linux進(jìn)程間的層次關(guān)系會話(Session)系統(tǒng)提供setsid()函數(shù)創(chuàng)建會話pid_tsetsid(void);如果函數(shù)調(diào)用進(jìn)程不是進(jìn)程組組長,會發(fā)生:(1)創(chuàng)建一個新會話,會話ID等于進(jìn)程ID,調(diào)用進(jìn)程成為會話的首進(jìn)程。(2)創(chuàng)建一個進(jìn)程組,進(jìn)程組ID等于進(jìn)程ID,調(diào)用進(jìn)程成為進(jìn)程組的組長。(3)該進(jìn)程將沒有控制終端。如果調(diào)用setsid前,該進(jìn)程有控制終端,這種聯(lián)系就會斷掉。4.7.9Linux0.11任務(wù)0與進(jìn)程樹建立4.7.9Linux0.11任務(wù)0與進(jìn)程樹建立任務(wù)0Linux中第一個進(jìn)程是任務(wù)0。當(dāng)設(shè)備初始化完畢后,程序?qū)膬?nèi)核態(tài)切換到用戶態(tài),開始執(zhí)行第一個任務(wù),也就是任務(wù)0。任務(wù)0需要通過手動設(shè)置其任務(wù)結(jié)構(gòu)INIT_TASK,并手動填充其在GDT中的表項。4.7.9Linux0.11任務(wù)0與進(jìn)程樹建立普通進(jìn)程從任務(wù)1開始以及后面的用戶任務(wù)都是通過系統(tǒng)調(diào)用sys_fork()產(chǎn)生的。新進(jìn)程會復(fù)制父進(jìn)程的任務(wù)數(shù)據(jù)結(jié)構(gòu)(即PCB)。任務(wù)1加載執(zhí)行Shell程序。之后的所有進(jìn)程都是通過fork()系統(tǒng)調(diào)用或exec()系統(tǒng)調(diào)用創(chuàng)建的。所有的進(jìn)程構(gòu)成一棵倒置的進(jìn)程家族樹。4.8線程4.8線程教學(xué)內(nèi)容線程概念Windows線程Linux線程概念Linux線程實現(xiàn)教學(xué)重點4.8.1線程概念4.8.1線程概念線程(Thread)線程(Thread)是進(jìn)程內(nèi)部的一個相對獨立的執(zhí)行路徑,進(jìn)程內(nèi)可以有多個線程。進(jìn)程的多個線程可以并發(fā),每條線程并行執(zhí)行不同的任務(wù)。各個線程之間共享所屬進(jìn)程的資源和內(nèi)存空間。4.8.1線程概念線程技術(shù)主要應(yīng)用場合(1)進(jìn)程中有多個功能需要并發(fā)的地方,每個功能需要單獨設(shè)計為一個線程。(2)需要增強窗口人機交互性的地方,尤其是窗口中包含有耗時的后臺服務(wù)時,在這種情形下,后臺服務(wù)需要創(chuàng)建為單獨的線程。(3)程序在多核CP

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論