第一章 操做系統概述程序員
1.課程特色:概念多,原理性強,較抽象.
學習目的:基礎核心課,有利於對計算機系統的理解和軟件開發.
難點:概念,原理,算法,數據結構.
學習方法:用問題驅動學習,理論聯繫實際.
內容安排:硬件部分(操做系統概述,進程管理,存儲管理,外部設備管理),軟件管理(文件管理).
2.什麼是操做系統:(四種基本觀點)1.虛擬機器:操做系統是創建在計算機硬件平臺上的虛擬機器,它爲應用軟件提供了許多比計算機硬件功能更強或計算機硬件所沒有的功能.(操做系統在虛擬機中充當管理員和協調員的角色,管理計算機的軟硬件資源,並協調多任務,多進程的運行.擴充功能和計算機的數量,看起來好像每一個用戶獨享一臺計算機) 2.資源管理觀點:認爲操做系統是計算機系統中各種資源的管理者,它負責分配,回收以及控制系統中的各類軟硬件資源.(跟蹤資源的使用情況,知足資源請求,提升資源利用率,以及協調各程序和用戶對資源的使用衝突:監視資源,分配回收資源,保護資源) 3.做業組織觀點 :認爲,操做系統是計算機系統工做流程的組織者,它負責協調在系統中運行的各個應用軟件的運行次序.(用於巨型機和大型服務器上,以批文件方式提交做業,請求主機逐個運行.主機操做系統負責組織,協調各個做業的運行,報告執行結果或錯誤信息.減小了人工干預,提升了系統的效率,有利於有效利用造價高且性能強大的主機.)4.用戶環境觀點:認爲OS是計算機用戶使用計算機的接口,它爲計算機用戶提供了方便的工做環境計算機用戶:終端用戶、程序員、系統設計者. OS提供的接口:用戶接口(User Interface,也叫命令接口) 程序接口(Application Programming Interface,系統調用,也叫應用編程接口,即API)
在VB、VC等IDE中開發應用程序是間接調用到了API,程序員應該有能力直接調用API編程,即SDK編程
Windows平臺下全部的應用程序都是創建在API基礎之上的. 用戶接口:
一、(用戶)命令:指計算機用戶要求計算機系統爲其工做的指示
二、命令的表示形式 字符形式:如CMD,LINUX命令,靈活,繁瑣難記
菜單形式:
圖形形式:直觀但不靈活.
命令使用方式 :脫機方式(off-line)如批處理程序,編寫好運行時,系統直接按照命令一條一條地執行,直到結束,期間用戶沒法干擾. 聯機方式(on-line)如用戶登錄使用鍵盤輸入用戶名密
3.現代操做系統的特徵,功能,類型.
4.基本概念:批處理,多道程序設計,做業,任務,進程與線程,接口,虛擬存儲,文件.
操做系統給用戶提供了一個操做環境.
5.用戶接口:(用戶)命令:指計算機用戶要求計算機系統爲其工做的指示.命令的表示形式:1.字符形式:較靈活,但繁瑣難記.2.菜單形式3.圖形形式:因直觀而易記 但不靈活.3.命令的使用方式:脫機使用方式(off-line),聯機使用方式(on-line).算法
- 操做系統的發展: 1.50年代中期,第一個簡單批處理操做系統.2.60年代中期,多道程序批處理系統 3.不久,分時系統,實時系統 4.80年代,微機及網絡操做系統.
7.推進操做系統發展的因素:1.計算機硬件升級和新硬件的出現. 2.提供新的服務,方便使用. 3.提升計算機資源利用效率. 4.更正軟件錯誤 5.計算機體系結構的發展:單處理機系統,多處理機系統,分佈式系統,計算機網絡.
8.手工操做時期,沒有操做系統:早期電子數字計算機由成千上萬電子管組成,操做和編程徹底由手工進行,且編程只能用機器語言(二進制代碼),程序員同時也是操做員,在上機期間獨佔整臺計算機及其相關設備,效率很是低.
9.單道批處理系統:程序員首先將命令,程序和數據用匯編語言或FORTRAN語言寫在紙上,而後用穿孔機制成卡片,最後將這些卡片交給操做員.
10.批處理程序:(又叫監督程序或管理程序),管理應用程序的運行.操做步驟: 1.收集一批做業(卡),用專用I\O計算機將做業逐個讀到磁帶上保存起來. 2.批處理程序將磁帶上的第一個做業讀入計算機,運算結束後將結果輸出到輸出磁帶上.3.自動讀入下一個做業,並運行.4.當一批做業所有執行結束後,取下輸入磁帶和輸出磁帶,用輸入磁帶錄入下一批做業,將輸出磁帶送到專用輸出計算機,進行脫機打印.
11.單道批處理系統的評價:解決了做業間的自動轉接問題,減小了機器時間的浪費.2.無論做業大小,只要它一旦佔用處理機開始執行,則它必須一直佔用處理機,直到運行完畢. 3.資源利用率低. 4.對短做業不公平,由於他們等待執行的時間可能遠遠超過他們的執行時間. 5.交互性差,做業由批處理程序控制運行,用戶沒法實時控制,若是運行中途出現故障,也只能停下來,從新運行。
12.多道批處理系統(現代意義的操做系統):單道批處理系統中,任意時刻只容許一道做業在內存中運行,資源利用率低。爲了提升系統資源利用率和系統吞吐量,造成了多道批處理系統。 多道,是指容許多個程序同時存在於主存中,按照某種原則分派處理機,逐個執行這些程序。 批處理:用戶提交的做業首先存放在外存,並排成一個隊列。而後,由做業調度程序按照必定的算法從該隊列中一次選取一個或若干個做業裝入內存執行。 處理機自動切換:當某個程序佔用處理機執行過程當中遇到了輸入輸出語句,能夠啓動專門負責輸入輸出的系統服務程序完成操做,而處理機切換到另外一個程序執行。 多道程序設計技術:爲了提升系統吞吐量和資源利用率,容許多個程序同時駐留內存,使處理機在這些程序之間切換,在一段時間內,執行完多個程序的處理技術稱爲多道程序設計技術(multiprogramming)。如今操做系統大多都採用了多道程序設計技術。 多道程序設計技術印發的問題:1.處理機的分配與回收 2.內存的分配與保護 3.I/O設備的共享和效率 4.文件的有效管理 5.做業的組織。
13.分時系統和實時系統: 多道批處理系統提升了資源利用率和吞吐量。可是,批處理系統交互性不好。爲了改進響應時間和性能,提供交互式操做環境,致使了分時系統的出現。分時系統的實質是在多道程序技術的基礎之上,位多個用戶配置一個聯機終端。
14.分時系統實例:第一個分時系統:MIT的兼容分時系統CTSS,它是一個單道分時系統,在該系統中,每次只能將一道程序(做業)裝入並駐留內存。
15.「前臺」和「後臺」:1.分時系統:分時+批處理功能 2.內存:分爲前臺區和後臺區,前臺區存放按時間片調入和調出的做業流,後臺區存放批處理做業。3.僅當前臺做業調入/調出,或前臺無做業可運行時,方纔運行後臺區中的做業。 4.提供交互式快速的服務,同時在處理機空閒時運行後臺較大的批做業。
16.多道分時系統:容許在內存中同時存放多道做業,並把具有運行條件的全部做業排成一個隊列,讓他們一次輪流地得到一個時間片來運行。 與單道分時系統相比較,因爲做業數據都在內存,不須要調入,調出開銷,因此多道分時系統具備較好的系統性能。 現代分時系統都屬於多道分時系統。
17.實時系統: 分時系統位交互式做業提供了快速的響應服務,但還不能知足某些對響應時間要求很是嚴格的任務須要。(例如,鍊鋼,煉油控制系統, 航空網絡售票系統等,對任務的響應時間有更嚴格的要求)
18.操做系統進一步發展:1.我的計算機操做系統:UNIX,OS,Windows系列,LINUX等。2.網絡操做系統:網絡接口控制器及一些用於驅動的底層軟件,遠程登錄軟件和遠程文件訪問軟件。3.分佈式操做系統:將用戶的應用程序分佈在多臺處理機上同時運行。合理地調度各處理機,使整個系統得到最大的並行度。4.嵌入式操做系統。
19.操做系統的功能:管理處理機,管理存儲器,管理輸入輸出設備,管理數據文件,提供接口服務。
20.接口功能: 接口,指操做系統爲用戶提供的人機交互界面。命令接口:以命令方式供用戶經過鍵盤終端與計算機交互,如UNIX,DOS等。 圖形化用戶接口:Window系列操做系統則提供了形象,生動的圖形化界面,用戶只需拖動並點擊鼠標,即可輕鬆操做計算機。 程序接口:以系統調用的形式供用戶編程時使用。幾乎各類操做系統都提供了系統調用,供程序設計使用。
21.處理機管理:1.進程控制:建立和撤銷進程以及控制進程的狀態轉換。2.進程同步:協調,互斥訪問臨界資源,協調執行進度。 3.進程通訊:進程間的信息交換。 4.進程調度: 按必定的算法從進程就緒隊列中選出一個進程,把處理機分配給它,使之運行。
22.存儲器管理任務:1.爲多道程序的併發執行提供良好的環境 2.便於用戶使用存儲器 3.提升存儲器的利用率 4.爲儘可能多的用戶提供足夠大的存儲空間。 存儲器管理功能:1.內存分配:靜態分配/動態分配,連續分配/非連續分配 2.內存保護:系統內存空間,用戶內存空間 3.地址映射:邏輯地址-->物理地址 4.內存擴充:虛擬存儲技術。
23.設備管理任務:1.位用戶程序分配I/O設備。 2.完成用戶程序請求的I/O操做。 3.提升處理機和I/O設備的利用率。 4.改善人機界面。 設備管理功能:1.緩衝管理 2.設備分配 3.設備處理:啓動設備,中斷處理 4.虛擬設備功能 5.RAID技術,磁盤調度。
24.文件管理的任務:1.管理用戶文件和系統文件 2.管理文件的存儲空間 3.保證文件數據的安全 4.方便用戶使用文件。文件管理的功能:1.文件目錄的管理 2.文件的邏輯組織方式與訪問方式 3.存儲空間的管理:文件的物理組織,空閒磁盤空間管理 4.文件共享與安全。
25.現代操做系統的特徵:1.任務共行性:宏觀上,指系統中有多個任務同時運行;微觀上,指單處理機系統中的任務併發,即多個任務在單個處理機尚交替運行;或多處理機系統中的任務並行,即多個任務在多個處理機上同時運行。 2.資源共享性:宏觀上,指多個任務能夠同時使用系統資源;微觀上,指多個任務能夠交替互斥地使用系統中的某個資源。3.虛擬性:指將一個物理上的實體變爲若干個邏輯上的對應物。如,採用分時技術,將一臺處理機虛擬爲若干處理機。還能夠虛擬存儲,虛擬設備,虛擬通道,虛擬文件,虛擬用戶組以及虛擬網絡等。 4.不肯定性。1.程序執行結果不肯定,程序不可再現。2.多道程序環境下,進程以異步方式執行。
26.多道程序設計:指系統中容許多道程序同時準備運行,當正在運行的那道程序由於某種緣由(好比等待輸入或輸出數據),暫時不能繼續運行時,系統將自動的啓動另外一道程序運行;一旦緣由消除,暫時中止的那道程序在未來某個時候還能夠被系統從新啓動繼續運行。 多道程序設計的問題:1.協調因爭奪處理機或輸入輸出設備而產生的衝突,解決同步,互斥和死鎖問題。 2.防止各道程序之間的交叉和衝突,防止做業被有意無心的破壞。 3.必須簡歷高效,可靠和方便的文件系統,有效地管理和存取系統中的軟件資源和輔存空間。
27.進程與線程:1.進程是指,程序的一次執行,包括可執行的程序,程序所需的數據和相關狀態信息。進程是擁有資源的最小實體,在傳統OS中,進程也是系統調度的最小單位。 2.線程是指,程序的一次相對獨立的運行過程;在現代OS中,線程是系統調度的最小單位。
28.做業:是指計算機用戶在一次上機過程當中要求計算機系統爲其所作的工做的集合;做業中的每項相對獨立的工做稱爲做業步。一般,人們用一組命令來描述做業;其中,每一個命令定義一個做業步。 做業的基本類型:-脫機做業 -聯機做業。
29.任務:1.在經典的多任務操做系統環境下,任務與進程是等同的,都被認爲是系統的最小工做單位。2.任務是從系統資源分配的角度描述程序在系統中的運行。 3.進程則是從處理機的利用和工做流程控制的角度描述程序的執行。4.程序員習慣稱呼進程,而工程師則習慣稱呼任務。
30.系統調用:1.是操做系統提供的最基本的一級服務,供用戶程序調用。 2.系統調用只能在程序中做爲程序語句使用,不能單獨使用。(它屬於程序接口)
31.接口:英文Interface在操做系統中有接口和界面兩種含義;1.接口多用於描述系統硬件之間的鏈接關係,以及軟件和程序模塊之間的調用關係,如總線接口,打印機接口等。2.界面多用於描述用戶與系統之間的操做環境,以及人機之間的交互方式和過程,如字符界面,圖形用戶界面。
32.虛擬存儲:爲了能在有限的內存空間中運行更大,更多的進程(程序),能夠將一部分磁盤空間虛擬爲邏輯內存,使用戶感受到一個比物理內存空間大的多的邏輯內存空間,即實際物理內存空間和虛擬的那部分邏輯內存空間的總和統稱爲虛擬內存空間。1.有了虛擬存儲技術,進程執行時,只須要預先在物理內存中裝入進程的一部分程序代碼和數據,進程便可開始執行。2.當須要的程序代碼和數據不在物理內存時,根據須要臨時裝入,而整個操做對用戶透明。
33.文件:文件是若干相關數據的集合,有的操做系統將程序,數據以及各類外部設備通通稱爲文件。1.惟一的文件名 2.對文件的操做包括文件的創建,修改,刪除,重命名,設置訪問權限等。 3.歸納地說,文件就是命名了的字節流,它是現代操做系統對計算機系統中種類繁多的外部設備進行高度抽象的結果。
34.操做系統分類:1.按硬件平臺系統結構不一樣分類:單機操做系統,嵌入式操做系統和多級操做系統(並行操做系統,分佈式操做系統,網絡操做系統,機羣操做系統等) 2.根據操做系統在用戶界面的使用環境和功能特徵不一樣分類:批處理系統,分時系統和實時系統 3.現代操做系統一般建有分時和批處理功能。
35.批處理操做系統:工做方式:1.一批做業首先在外存上排成一個隊列。2.而後由做業調度程序負責從該隊列中選取一個或多個做業進入內存,並分別爲他們創建進程,使若干進程共享包括處理機,內存空間在內的系統資源,以提升資源利用率和系統吞吐量。 優缺點:主要優勢: 多道程序由操做系統自動調度執行,大大下降了人工干預對系統性能的影響,資源利用率高,系統的吞吐量大。 缺點:1.交互性不好,修改和調試程序極其困難。 2.增長了做業的平均週轉時間。做業在外存排隊,等待調度進入內存。進程在內存排隊,等待獲取所需的系統資源。
36.分時操做系統:1.提供了一個多用戶工做環境,一臺主機鏈接若干臺終端,每臺終端工一個用戶使用。2.用戶交互式地向系統提出聯機命令請求,系統接受全部用戶的命令,採用分時原則處理服務器請求,再經過交互式終端顯示執行的結果。 特性:1.多路性:一臺主機同時鏈接多臺終端。 2.獨立性:每一個用戶各自經過本身的終端進行輸入輸出,互不干擾。用戶感受本身獨佔終端和主機資源。 3.交互性。
37.實時操做系統:指能及時響應外部事件的請求,在規定的時間內完成對該事件的處理,並控制全部實時任務協調一致地運行的操做系統。2.設計目標:對外部的請求必須及時響應,在嚴格規定的時間內完成某事件,要求系統具備極高的可靠性和完整性。
- 網絡操做系統:指在計算機網絡環境中提供網絡管理,通訊,安全,資源共享和各類網絡應用等功能的操做系統。2.目標:爲了實現網絡中個計算機之間的通訊和網絡資源共享,提升網絡資源的利用率和網絡的吞吐量。
39.分佈式操做系統:是指多個處理機經過通訊線路互連而構成的系統,系統的處理和控制功能分佈在各個處理機上。(配置在分佈式系統上的操做系統稱爲分佈式操做系統,它負責分佈式系統中的任務分配,資源管理等功能服務。)
40.分佈式系統和計算機網絡:1.分佈式系統中的全部資源都是共享的,由分佈式操做系統進行集中,統一管理。整個系統對用戶透明。 2.計算機網絡中容許每臺計算機配置本身的操做系統,經過網絡協議實現網絡資源的統一管理,網絡操做系統能夠構架於不一樣的操做系統之上,範圍很廣。網絡操做系統也不要求對網絡資源進行透明訪問,用戶能夠清楚地知道提交的任務是在哪臺計算機上完成的。
41.嵌入式操做系統:指運行在嵌入式系統環境之間哦你給,對整個嵌入式系統以及它所操做,控制的各類部件裝置等資源進行協調,調度,指揮和控制的系統軟件。2.嵌入式操做系統在工業控制,軍事及民用設施中有着普遍的應用前景。
42.現代主流操做系統:1.Windows是一個多任務操做系統,它容許用戶同時運行多個應用程序,或在一個程序中同時作幾件事情。系統爲每一個應用程序打開一個窗口。用戶能夠移動窗口,或在不一樣的應用程序之間切換。 2.Window NT及Windows 2000都屬於多用戶操做系統。Windows NT支持對稱多處理機,多線程,多個可裝卸文件系統,兼容
POSIX標準。 2.UNIX是一個由C語言編寫的,多用戶多任務操做系統。已應用於從嵌入式處理器到工做站,桌面系統,乃至服務於大羣用戶的高性能多處理機系統。 3.Linux是UNIX的變種,是一個源代碼開放的,多用戶操做系統。 Linux支持多用戶多任務,分頁式虛擬存儲,動態連接庫,動態調整文件系統緩衝區大小等功能。其網絡功能很是強大,幾乎能與當前絕大多數網絡互聯。
第二章 進程管理與處理機
要點:進程描述及控制 策略:進程調度 實現:同步與互斥 避免:死鎖與飢餓
解決:幾個經典問題 關於:進程通訊
43.進程的引入: 程序順序執行:1.程序:源代碼程序,目標程序和可執行程序 2.程序執行:編輯,編譯,連接,執行 3.程序的結構:順序結構,分支結構,循環結構。 程序順序執行的特徵:順序性,封閉性(與外部環境無關),可再現性(不一樣時間、換到別的機器上結果同樣)。 程序併發執行:1.多道程序設計技術:多個程序在單處理機上併發執行。2.程序併發執行的特徵:間斷性、非封閉性、不可再現性。
44.進程併發執行引起的問題:1.協調各程序的執行順序(例如,當輸入的數據還未所有輸入內存時,計算必須等待) 2.多個執行程序共享系統資源,程序之間可能會相互影響,甚至影響輸出結果。 3.選擇哪些、多少個程序進入內存執行? 4.內存中的執行程序誰先執行,誰後執行? 5.內存如何有效分配?
45.進程的概念:可併發執行的程序,在一個數據集合上的運行過程。(進程要執行必須申請資源。(無論是父進程仍是子進程都各自申請資源,不排除有共享資源)) (多進程系統以進程位調度單位) 程序:靜態概念,指數據和指令的集合,可長期存儲。 進程與程序的對應關係:1.一個程序能夠對應一個進程或多個進程。 2.一個進程能夠對應一個程序或一段程序。
46.進程的特徵:1.動態性 2.併發性(根本特徵) 3.獨立性 4.異步性。
47.引入進程帶來的問題:1.增長了空間開銷:爲程序創建數據結構 2.額外的時間開銷:管理和協調、跟蹤、填寫和更新有關數據結構、切換進程、保護現場。 3.更難控制:---協調多個進程競爭和共享資源如何預防 ---解決多個進程由於競爭資源而出現故障。 4.處理機的競爭(進程調度)尤其突出 。數據庫
- 進程的結構:組成(進程映像):程序、數據集合、進程控制塊PCB(Process Control Block) ,PCB是進程存在的惟一標誌。建立進程時,建立PCB;進程結束時,系統將撤銷其PCB。
49.PCB:1.進程標識信息:進程的內部和外部標識符 2.處理機狀態信息:通用寄存器值,指令計數器值,程序狀態字PSW值,用戶棧指針值。 3.進程調度信息:進程狀態,進程優先權,進程調度的其餘信息 4.其餘信息:程序及數據地址,進程同步和通信機制,資源清單,連接指針。
50.PCB的組織方式:1.單一隊列方式:全部進程的PCB經過鏈表組織成一個單一隊列。適用於進程數目很少的操做系統,如Windows操做系統。 2.表格結構:1.PCB按進程狀態不一樣,組織成不一樣的表格:就緒進程表 、執行進程表(多機系統中才有)及阻塞進程表。 2.系統分別記載各PCB表的起始地址。
3.多級隊列 :PCB按進程狀態不一樣用連接指針組成不一樣隊列:就緒進程隊列、阻塞進程隊列(可按阻塞緣由不一樣,分別組織) 2.系統分別記載各PCB鏈表的起始地址.編程
51.進程執行的軌跡:1.進程的軌跡:進程執行的指令序列,用以觀察處理機的執行過程。 分派程序始終在內存中,哪一個程序開始運行,程序計數器指向它。 兩個狀態進程模型:兩狀態:執行,未執行。---進程得到處理機,進入執行狀態;當時間片結束或其餘某種緣由,進程釋放處理機,暫停執行,處於未執行狀態。 (兩狀態進程模型:隊列形式)注意:並不是全部進程只要未執行就處於就緒,有的須要阻塞,等待I/O完成。 未執行又可分爲就緒和阻塞。
52.進程的五狀態:1.新狀態(New):進程已經建立,但未被OS接納爲可執行進程。 2.就緒狀態(Ready):準備執行。3.執行狀態(Running):佔用處理機(單處理機環境中,某一時刻僅一個進程佔用處理機) 4.阻塞狀態(Blocked):等待某事件發生才能執行,如等待I/O完成等。 5.終止狀態(Terminated):因中止或取消,被OS從執行狀態釋放。
53.進程的七種狀態變化:1.空--->新狀態:新建立的進程首先處於新狀態。 2.新狀態---> 就緒狀態:當系統容許增長就緒進程時,操做系統接納新建狀態進程,將它變爲就緒狀態,插入就緒隊列中。 3.就緒狀態 --->執行狀態:當處理機空閒時,將從就緒隊列中選擇一個進程執行,該選擇過程稱爲進程調度,或將處理及分派給一個進程,該進程狀態從就緒變爲執行。 4.執行狀態---->終止狀態:執行狀態的進程執行完畢,或出現諸如訪問地址越界、非法指令等錯誤,而被異常結束,則進程從執行狀態轉換位終止狀態。 5.執行狀態---->就緒狀態:分時系統中,時間片用完,或優先級高的進程到來,將中斷較低優先級進程的執行,進程從執行狀態變爲就緒狀態,等待下一次調度。 6.執行狀態---->阻塞狀態:執行進程須要等待某事件發生。一般,會由於進程須要的系統調用不能當即完成,如讀文件、共享虛擬內存、等待i/O操做、等待另外一進程與之通訊等事件二阻塞。 7. 阻塞狀態--->就緒狀態:當阻塞進程等待的事件發生,就轉換位就緒狀態,進入就緒隊列排隊,等待被調度執行。 注意:某些系統容許父進程在任何狀況下終止其子進程。 若是一個父進程被終止,其子孫進程都必須終止。
54.問題:多個進程競爭內存資源:1.內存資源緊張2.無就緒進程,處理機空閒:I/O的速度比處理機的速度慢的多,可能出現所有進程阻塞等待I/O。 解決方法:1.採用交換技術:換出一部分進程到外存,以騰出內存空間。 2.採用虛擬存儲技術:每一個進程只能裝入一部分程序和數據(存儲管理部分)。
55.對換技術,交換技術(swapping):將內存中暫時不能運行的進程,或暫時不用的數據和程序,換出到外存,以騰出足夠的內存空間,把已具有運行條件的進程,或進程所須要的數據和程序,換入到內存。
56.進程掛起狀態:進程被交換到外存,狀態變爲掛起狀態。
57.進程被掛起的緣由:1.進程所有阻塞,處理機空閒。 2.系統負荷太重,內存空間緊張。 3.操做系統的須要。操做系統可能須要掛起後臺進程或一些服務進程,或者某些可能致使系統故障的進程。 4.終端用戶的請求。 5.父進程的需求。
58.被掛起進程的特徵:1.不能當即執行 2.多是等待某事件發生,如果,則阻塞條件獨立於掛起條件,即便阻塞事件發橫,該進程也不能執行。 3.使之掛起的進程爲:自身,父進程,OS。 4.只有掛起它的進程才能使之由掛起狀態轉換位其餘狀態。
59.問題 掛起與阻塞:1.是否只能掛起阻塞進程? 2.如何激活一個掛起進程? 區分概念:1.進程是否等待事件(阻塞與否) 2.進程是否被換出內存(掛起與否) 四種狀態組合:1.就緒:進程在內存,準備執行。 2.阻塞:進程在內存,等待事件。 3.就緒/掛起:進程在外存,只要調入內存便可執行 4.阻塞/掛起:進程在外存,等待事件。 注意:處理機可調度執行的進程有兩種:1.新建立的進程 2.換入一個之前掛起的進程。一般爲避免增長系統負載,系統會換入一個之前掛起的進程執行。
60.具備掛起狀態的進程狀態轉換:1.阻塞 --->阻塞/掛起:OS一般將阻塞進程換出,以騰出內存空間。 2.阻塞/掛起---->就緒/掛起:當阻塞/掛起進程等待的事件發生時,能夠將其轉換爲就緒/掛起。 3.就緒/掛起---->就緒:OS須要調入一個進程執行。 4.就緒---->就緒/掛起:通常,OS掛起阻塞進程。但有時也會掛起就緒進程,釋放足夠的內存空間。 5.新--->就緒/掛起(新---->就緒):新進程建立後,能夠插入到就緒隊列或就緒,掛起隊列。若無足夠的內存分配給新進程,則須要 新進程--->就緒/掛起。 6.阻塞/掛起 ---->阻塞:當阻塞/掛起隊列中有一個進程的阻塞事件可能會很快發生,則可將一個阻塞/掛起進程換入內存,變爲阻塞。 7. 執行---->就緒/掛起:當執行進程的時間片用完時,會轉換爲就緒。或,一個高優先級的阻塞/掛起進程正好變爲非阻塞狀態,OS能夠將執行進程轉換爲就緒/掛起狀態。 8.全部狀態---->終止:一般,執行--->終止。但某些OS中,父進程能夠終止子進程,使任何狀態的進程均可以轉換爲退出狀態。
61.進程控制: 兩種執行模式:1.系統模式(又稱位系統態)、控制模式或內核模式:----具備較高的特權 ---運行系統特定的指令,包括讀/寫控制寄存器的指令,基本I/O指令以及與存儲管理有關的指令,以及一些特定的內存區。 ----內核模式下的處理機及其指令、寄存器和內存都受到徹底控制和保護 。2.用戶模式(或用戶態):----具備較低的特權 ---用戶程序通常運行在用戶模式。
62.進程執行模式的模式切換:1.用戶模式--->系統模式:用戶程序執行到一條系統調用,進入操做系統內核執行 2.系統模式---- > 用戶模式:執行完系統調用的功能,返回到用戶程序。 特殊狀況:程序執行到結束語句時,切換到系統模式,再也不返回到用戶程序。
63.操做系統內核(Kernel):1.操做系統的核心,是基於硬件的第一層軟件擴充,提供操做系統最基本的功能,是操做系統工做的基礎。2.現代操做系統設計中,爲減小系統自己的開銷,每每將一些與硬件緊密相關的(如中斷處理程序,設備驅動程序等)、基本的、公共的、運行頻率較高的模塊(如時鐘管理,進程調度等)以及關鍵性數據結構獨立開來,使之常駐內存,並對他們進行特殊保護,一般把這一部分稱爲操做系統的內核。 2.用戶經過系統調用訪問操做系統的功能,這些功能最終都經過操做系統內核實現。 3.不一樣的操做系統對內核的定義和功能範圍的設定是不一樣的。 4.通常地,操做系統內核的功能能夠歸納地劃分爲資源管理功能和支撐功能。---資源管理:進程管理(進程建立和終止、調度、狀態切換、同步和通訊、管理PCB),存儲管理(爲進程分配地址空間、對換、段/頁管理)和I/O設備管理(緩存管理、爲進程分配I/O通道和設備)。 ----支撐功能:中斷處理,統計,監測,時鐘管理,原語操做(原子操做)等。
64.進程控制原語:1.進程切換 2.建立與終止 3.阻塞與喚醒 4.掛起與激活
65.進程建立的緣由:1.提交新的批處理做業 2.交互式用戶註冊 3.操做系統提供服務 4.父進程建立子進程。
66.進程建立的步驟:1.爲進程分配一個惟一的標識號ID:主進程表中增長一個新的表項。 2.爲進程分配空間:用戶地址空間,用戶棧空間,PCB空間。若共享已有空間,則應創建相應的連接。 3.初始化PCB:進程標識、處理機狀態信息、進程狀態。 4.創建連接:若調度隊列是鏈表,則將新進程插入到就緒或就緒/掛起鏈表 5.創建或擴展其餘數據結構。
67.進程終止緣由:1.批處理做業執行到結束語句. 2.交互式用戶註銷。3.中止進程(應用程序)的執行。 4.遇到錯誤或故障。 具體緣由:1.正常結束 2.超時終止,執行時間超過預計時間。 3.內存不足,沒法爲進程分配所需的內存空間 4.越界訪問 5.企圖使用未容許的數據,或操做方式錯誤 6.計算錯誤,如除0,或企圖存儲硬件容許的最大數。 7.超時等待某事件發生。 8.I/O失敗,如找不到文件或屢次重試仍沒法讀寫文件,或無效操做。 9.無效指令,企圖執行不存在的指令. 10.特權指令,企圖執行特權指令。 11.數據類型不符,或未初始化。 12.操做員或OS干預,如發生死鎖的時候。 13父進程終止。 14.父進程請求。
68.進程終止:步驟:1.根據被終止進程的標識符ID,找到其PCB,讀出該進程的狀態。 2.若該進程位執行狀態,則終止其執行,調度新進程執行。 3.若該進程有子孫進程,則當即終止其全部子孫進程。 4.將該進程的所有資源歸還其父進程或系統。 5.將被終止進程(的PCB)從所在隊列中移出,等待其餘程序來蒐集信息。
69.進程的阻塞與喚醒:1.阻塞緣由:請求系統服務;啓動某種操做,如I/O;新數據還沒有到達;暫時無新工做可作等。 2.當出現阻塞事件,進程調用阻塞原語將本身阻塞。並將其狀態變爲「阻塞狀態」,並進入相應事件的阻塞隊列。 3.當阻塞進程期待的事件發生,有關進程調用喚醒原語,將等待該事件的進程喚醒。並將其狀態變爲」就緒狀態」,插入就緒隊列; 4.通常,進程能夠本身阻塞本身;而喚醒操做則由操做系統,或其餘相關進程來完成,進程沒法喚醒本身。
70.原語:操做系統或計算機網絡用語範疇。是由若干條指令組成的,用於完成必定功能的一個過程。primitive or atomic action 是由若干個機器指令構成的完成某種特定功能的一段程序,具備不可分割性•即原語的執行必須是連續的,在執行過程當中不容許被中斷。
71.進程的掛起與激活:1.當出現掛起事件,系統利用掛起原語將指定進程或一個阻塞進程掛起。進程從內存換出到外存,其狀態轉換:就緒--->就緒/掛起;或阻塞--->阻塞/掛起。 2.當激活事件發生,系統利用激活原語將指定進程激活。將相應進程從外存換入到內存,可能的狀態轉換: 就緒/掛起--->就緒;或阻塞/掛起--->阻塞。
72.進程切換:1.時鐘中斷。---進程執行完一個時間片。 2.I/O中斷。 3.內存訪問出錯。---虛擬存儲中,須要的指令或數據都不在內存。 4.陷阱。 ---執行遇到錯誤。---可能使進程轉換到終止狀態。
73.進程A切換到進程B的步驟:1.首先,保護進程A的現場,將進程A的當前運行信息,如程序執行到的當前位置,程序狀態字,全部的寄存器值等保存到進程A的PCB中。 2.而後恢復進程B的現場,從進程B的PCB中獲取其執行信息,將這些信息寫入相應的寄存器中,程序計數器指向進程B將執行的下一條指令。進程B可能第一次開始執行,也多是被中斷的過程,恢復執行。不管是哪一種狀況,進程B的執行信息都能在其PCB中找到。
74.進程切換和模式切換: 1.進程切換:做用於進程之間的一種操做。當分派程序收回當前進程的CPU並準備把它分派給某個就緒進程時,該操做將被引用。 2.模式切換:是進程內部所引用的一種操做。當用戶程序轉入系統調用,或相反時,該操做將被引用。 3.進程切換必定引起模式切換,反之則否則。windows
75.進程調度:調度是指,在一個隊列中,按照某種方法(算法),選擇一個合適的個體的過程。 調度的關鍵是須要某種方法或算法,好的調度算法有利於選擇到合適的個體。 #調度目標:1.公平性,防止進程長期不能得到調度而飢餓。2.處理機利用率,儘可能提升處理機的利用率。3.提升系統吞吐量。 4.儘可能減小進程的響應時間。 #調度原則:1.知足用戶的要求:響應時間、週轉時間、截止時間 。 2.知足系統的需求:系統吞吐量、處理機利用率、各種資源的平衡使用、公平性及優先級。
76.面向用戶的原則---響應時間:是指,從用戶經過鍵盤提交一個請求開始,直到系統首次產生響應爲止的時間。(輸入的請求傳送處處理機的時間+處理機對請求信息進行處理的時間+將響應結果發送到輸出終端的時間=響應時間) 1.調度算法,則應考慮儘量使絕大多數用戶的請求能在響應時間內完成。 2.響應時間經常使用於評價分時系統的性能。
77.面向用戶的原則---週轉時間:是指,從做業提交給系統開始到做業完成爲止的這段時間間隔。(做業在外存排隊等待調度的時間+進程在就緒隊列中等待調度的時間+進程被處理機執行的時間+等待I/O操做完成的時間=週轉時間) 1.週轉時間經常使用於評價批處理系統的性能。 2.影響週轉時間的調度:----做業從外存調度到內存(做業調度) -----進入內存還需在就緒隊列中排隊,等待進程調度。 ---甚至,可能會掛起進程,在外存等待被激活(中程調度)。
78.面向用戶的原則---截止時間:指實時系統中,某任務必須開始執行的最遲時間,或必須完成的最遲時間。 1.經常使用於評價實時系統的性能。
79.面向系統的原則---系統吞吐量:指單位時間內系統完成的做業數。 經常使用於評價批處理系統的性能。
80.面向系統的原則---處理機的利用率:大、中型多用戶系統,因爲處理機價格昂貴,處理機利用率是衡量系統性能的一個重要指標;單用戶微機或某些實時系統,則並不是很重要。
81.面向系統的原則---各種資源的平衡使用:1.多道程序系統的目標之一就是爲了提升系統資源的利用率,所以,調度算法有責任使系統中的各類資源都儘可能處於忙碌狀態。 2.該原則同時適用於長程調度和中程調度,由於他們能夠決定哪些做業(進程)能夠進入內存,能夠考慮系統資源的均衡使用。
82.面向系統的原則---公平性:調度算法應該對全部進程公平,補偏袒任何進程。
83.面向系統的原則---優先權:1.優先權高的進程應優先調度。 2.能夠根據進程的優先權不一樣,組織不一樣的就緒隊列。進程調度時首先選擇高優先權隊列中的進程,直到該隊列爲空,再調度較低優先權隊列中的進程。 3.幾乎全部操做系統的調度算法均可考慮優先權原則。 4.固然,僅考慮優先權,可能會出現飢餓,對低優先權的進程不公平。 5.能夠將進程排隊的等待時間等因素歸入優先權的計算,隨着進程等待時間的增加,其優先權也不斷提升,進程也可在不久的未來獲得調度。
84.進程調度方式:根據執行進程的處理機是由進程本身釋放,仍是被強行剝奪,能夠將進程調度分爲剝奪方式和非剝奪方式。 1.非剝奪方式:執行進程只有在執行完畢,或因申請I/O阻塞本身時,才中斷其執行,釋放處理機,調度新的進程執行。這種方式不利於「即時性」要求較高的分時和實時系統,主要用於批處理系統。 2.剝奪方式:操做系統能夠在新進程到來時,或某個具備較高優先權的被阻塞進程插入到就緒隊列時,或在基於時間片調度的系統中,時間片用完而中斷當前進程的執行,調度新的進程執行。 這種方式會產生較多的中斷,主要用於實時性要求較高的實時系統及性能要求較高的批處理系統和分時系統。
85.調度的類型: 1.基於系統劃分:批處理系統 、分時調度、實時調度和多處理機調度 2.按調度發生的環境:長程調度(從外存到內存做業的調度)、中程調度(進程從外存到內存之間的調度,掛起到激活)、短程調度(內存裏發生的進程調度) 3.I/O調度(阻塞狀態的請求I/O進程排成的隊列)。
86.長程調度(高級調度或做業調度):它爲被調度做業或用戶程序建立進程,分配必要的系統資源,並將新建立的進程插入就緒隊列,等待短程調度。 某些採用交換技術的系統將新建立的進程插入到就緒/掛起隊列,等待中程調度。 在批處理系統中,做業進入系統後,先駐留在磁盤上,組織成批處理隊列,稱爲後備隊列。長程調度從該隊列中選擇一個或多個做業,爲之建立進程. 長程調度須要考慮兩個問題:1.選擇多少個做業進入內存,爲之建立進程?---取決於多道程序的度,即容許同時在內存中運行的進程數。 2. 選擇哪些做業?---取決於長程調度算法。
87.短程調度(進程調度或低級調度):決定就緒隊列中的哪一個進程得到處理機。 短程調度的運行頻率最高。 現代操做系統幾乎都具備短程調度。
88.中程調度(中級調度):它是對換功能的一部分。當內存空間很是緊張時,或處理機找不到一個可執行的就緒進程時,須要選擇一個進程(阻塞或就緒狀態)換出到外存,釋放出內存空間給別的進程使用。當內存空間較充裕時,從外存選擇一個掛起狀態的進程調度到內存。 #中程調度的目標:爲了提升內存的利用率和系統吞吐量。 只有支持進程掛起的操做系統才具備中程調度的功能。
89.進程調度算法:1.先來先服務(FCFS):--該方法按照進程到達的前後順序排隊,每次調度隊首的進程。--FCFS算法屬於非剝奪調度方式,實現簡單,看似公平。但對於那些後進入隊列而運行時間較短的進程,或I/O型的進程而言,可能須要長時間等待。 #缺點:1.對短進程不公平。2.因爲長進程可能排在隊列前面,必將增長隊列後部進程的等待時間,從而增長平均週轉時間。3.不利於I/O型進程,未有效利用系統資源。4.通常,FCFS與其餘調度算法混合使用。例如,系統能夠按照不一樣的優先級維護多個就緒隊列,每一個隊列內部按照FCFS算法調度。5.FCFS算法同時適用於長程、中程和短程調度三種調度類型。 2.短進程優先算法:當須要調度進程(或做業)時,經過計算判斷就緒進程隊列中哪個進程的預期執行時間最短,或後備做業隊列中哪個或幾個做業的預期執行時間最短,就調度誰。---屬於非剝奪調度算法。當某進程得到處理機,直到其執行完成,或須要等待某事件二阻塞時,才自動釋放處理機。系統又調度新的進程(或做業)。---與FCFS算法比較,短進程優先調度算法改善了系統的性能,下降了系統的平均等待時間,提升了系統的吞吐量,但該算法也有問題:1.很難準確預測進程的執行時間。2.可能致使長進程飢餓,對長進程不公平。3.採用非剝奪調度方式,未考慮進程的緊迫程度,不適合分時系統和事務處理系統。 3.時間片輪轉調度法:例如--在一個分時聯機系統中,同時有n我的經過各自的終端共享一臺主機(服務器)。終端完成輸入輸出操做,主機負責處理從終端發來的請求,爲之創建進程、協調各進程的運行、調度各個進程等,並儘可能知足每一個終端用戶對響應時間的要求。 #在分時聯機系統中,n個進程循環地得到時間片而執行。從系統中來看他們是交替執行的,但就每一個終端用戶而言,都感受到本身獨佔了一臺主機,不受其餘用戶的影響,這是經過進程併發實現的。---若是用戶數太多,主機處理的進程將會急劇增長,進程排隊等待的時間也會很長,進程的響應時間也可能增加,用戶將明顯感受到主機的速度變慢而補滿意。另外,時間片的大小也會影響進程的響應時間。 //時間片的設置:1.進程切換將會增長系統的額外開銷。2.時間片設定的過短,進程切換會很是頻繁,從而下降處理機的效率;時間片設定的太長,將沒法知足交互式用戶對響應時間的要求。所以,時間片的設置要綜合考慮系統的最大用戶數,響應時間,系統效率等多種因素。 ----這個算法的實際操做中,進程切換時的系統開銷是客觀存在的。可見,採用基於時間片輪轉調度法,進程的週轉時間和平均週轉時間並不比採用FCFS和短進程優先調度算法小。加上進程切換所需的系統開銷時間,該算法的平均週轉時間還會增加。----1.經常使用於分時系統及事務處理系統,合理的時間片大小將帶來滿意的響應時間。2.一般,合理的時間片指,能讓80%左右的進程在一個時間片內完成。3.對於短的、計算型的進程有利。4.不適合於批處理系統的進程調度。5.不利於I/O型的進程。6.改進的方法之一,能夠將I/O阻塞事件完成的進程單獨組織一個就緒隊列,該隊列進程的時間片能夠設置的小一些,且優先調度。 4.基於優先級的調度算法:1.基於時間片輪轉調度法循環式地爲每一個被調度的進程分配一個時間片,對每一個進程都是公平的。然而實際應用中,進程的性質多是不一樣的。所以能夠爲每一個進程定義一個優先級,優先級越高的進程將優先得到處理機的調度。2.如何設定進程的優先級?--進程完成功能的重要性。--進程完成功能的急迫性。--爲均衡系統資源的使用,指定進程(做業)優先級。--進程對資源的佔用程度,例如能夠爲短進程(或做業)賦予較高的優先級。3.靜態與動態優先級:--靜態優先級:一旦肯定,則進程運行期間的優先級一直補改變。 動態優先級哦:系統首先賦予進程一個初始優先級,該優先級將隨着進程的運行而改變。#典型的動態優先級變化方式:--優先級隨着進程運行的剩餘時間的減小而上升,使將要執行結束的進程儘快完成。--或隨着進程排隊等待的時間增加而上升,使等待時間越長的進程優先獲得調度,不至於長時間飢餓。#具體實現方法:能夠在每一個時鐘中斷時,或須要進程切換時,從新計算就緒隊列中各進程的優先級,並優先調度高優先級的進程。#採用動態優先級的兩種調度算法:剩餘時間最短者優先和響應比高者優先。1.剩餘時間最短者優先:--爲了使將要結束的進程儘早結束,釋放系統資源,讓別的進程執行。能夠在每一個時鐘中斷時,根據就緒隊列中各進程的剩餘執行時間動態調整其優先級,剩餘時間最短的進程優先級最高。--顯然,該算法是剝奪型的短進程優先調度算法,調度程序老是選擇剩餘執行時間最短的進程調度執行。--與短進程優先調度算法同樣,該調度算法很難準確估計進程的剩餘執行時間。--因爲長進程在未執行時,或剛開始執行的一段時間內,其剩餘執行時間都不會最短,因此該算法對長進程不公平。--可是,它不像FCFS算法那樣偏袒長進程,也不像輪轉調度法會產生不少中斷而增長系統負擔。--因爲短進程提早完成,故採用剩餘時間最短者優先的調度算法得到的平均週轉時間比採用短進程優先算法短。 2.響應比高者優先:將進程的等待時間和進程的預期執行時間歸入優先級的計算,進程(預期執行時間)越長優先級越低,而隨着進程的等待時間增加優先級上升,即進程的優先級與等待時間成正比,與進程執行時間成反比。令W表示等待時間,s表示預期執行時間,則響應比:R=(W+s)/s=w/s+1;。--調度方法:若當前執行進程處理完畢,或須要阻塞等待某事件而釋放處理機,調度程序選擇就緒隊列中響應比最大的進程執行;若等待時間相同,短進程由於s小,R較大而優先調度。若進程的預期執行時間相同,則等待時間長的進程優先調度,至關於FCFS。隨着等待時間的增長,長進程的響應比不斷增大,在某個時刻也必然被調度。 #同短進程優先和剩餘時間最短優先調度算法同樣,很難準確估計進程的預期執行時間。每次調度以前都須要計算響應比,增長了系統開銷。 5.反饋調度法:根據進程執行歷史調整調度方式的調度方法,它結合了優先級和時間片輪轉調度思想。#該方法有利於交互型短進程或短批處理做業,由於他們通常只須要一個或不多的幾個時間片便可完成。但可能使長進程的週轉時間急劇增長。若是不斷地有新進程到來,還可能出現長進程長期飢餓現象。爲此,能夠爲各隊列設置不一樣的時間片,優先級越低時間片越長。 6.進程調度算法小結:1.如何選擇進程調度算法與系統設計的目標有關。2.交互式多任務系統,主要考慮聯機用戶對響應時間的要求,通常採用基於時間片輪轉調度算法,同時根據進程的性質設置不一樣的優先級。3.批處理系統每每以做業的平均週轉時間來衡量調度性能,常選用基於優先級的短進程(或做業)優先調度算法 。
90.實時系統:是指能及時響應外部事件的請求,在規定的時間內完成對該事件的處理,並控制全部實時任務協調一致地運行的計算機系統。--分爲實時控制系統和實時信息處理系統。1.實時控制系統:要求進行實時控制的系統。主要用於生產過程的控制,實時採集現場數據,並對所採集的數據進行及時處理,進而自動地控制響應的執行機構,使某些(個)參數(如溫度,壓力,方位等)能按預約的規律變化,以保證產品的質量和提升產量。也能夠用於武器的控制,如火炮的自動控制系統,飛機的自動駕駛系統,以及導彈的制導系統等。2.實時信息處理系統:能對信息進行實時處理的系統。該系統由一臺或多臺主機經過通訊線路鏈接成百上千個遠程終端,計算機接收從遠程終端發來的服務請求,根據用戶提出的問題,對信息進行檢索和處理,並在很短的時間內爲用戶作出正確的回答。典型的實時信息處理系統有:飛機訂票系統,情報檢索系統等。緩存
- 實時任務:指具備及時性要求的,常被重複執行的特定進程,在實時系統中習慣稱爲任務. ---按任務的執行時是否呈現週期性來分類:1.週期性實時任務,要求按指定的週期循環執行,以便週期性地控制某個外部事件. 2.非週期性實時任務,任務的執行無明顯的週期性,但都必須聯繫着一個截止時間. (截止時間包括:開始截止時間(任務在某時間之前,必須開始執行)和完成截止時間(任務在某時間之前必須完成)). ----根據截止時間要求將實時任務劃分爲:1.硬實時任務,系統必須知足任務對截止時間的要求,不然可能出現難以預測的結果. 2.軟實時任務,它也聯繫一個截止時間,但並不嚴格,若錯過了任務的截止時間,對系統產生的影響不會太大. //實時調度的目標:1.主要考慮如何使硬實時任務在其規定的截止時間內完成,同時,儘量使軟實時任務也能在規定的截止時間內完成. 2.而公平性和最短平均響應時間等要求已再也不重要.3.可是,大多數現代實時操做系統沒法直接處理任務的截止時間,他們只能儘可能提升向響應速度,以儘快地調度任務. ##實時調度算法:實時性要求不過高的實時系統可用的調度算法:1.基於時間片輪轉調度法 2.基於優先級的調度算法 3.最先截止時間優先調度算法,即優先調度截止時間最近的實時任務. ###經典實時任務調度算法:速度單調調度算法:1.根據任務的週期大小賦予優先級,最短週期的任務具備最高優先級,其中:---任務週期是指一個任務到達至下一任務到達之間的時間範圍. ---任務速度,即週期(以秒計)的倒數,以赫茲位單位. 2.任務週期的結束,表示任務的硬截止時間.任務的執行時間不該超過任務週期. 3.在RMS調度算法中,若是以任務速度爲參數,則優先級函數是一個單調遞增的函數,故稱爲速度單調算法. 4.該調度算法普遍用於工業實時系統的週期性任務調度. 92.線程: 操做系統中引入進程的目的是爲了描述和實現多個程序的併發執行,以改善資源利用率及提升系統的吞吐量.那爲何引入線程? 爲了減小程序併發執行時系統所付出的額外開銷,使操做系統具備更好的併發行. ---進程的兩個基本屬性:1.進程是一個擁有資源的獨立單位. 2.進程同時又是一個能夠獨立調度的基本單位. ----系統爲進程進行的操做:1.建立進程,撤銷進程,進程切換 2.進程做爲資源的擁有者和系統的調度對象,須要花費系統較大的額外開銷.故,系統中同時存在的進程數目不宜過多,進程切換的頻率也不宜太高,而這也就限制了併發度的進一步提升. ///由進程到線程:1.目標:既能提升進程併發度,又能下降系統的額外開銷. 2.實現:將進程的資源申請和調度屬性分開.即進程做爲資源的申請和擁有者,但不做爲調度的基本單位.這樣,就產生了線程的概念. 3.線程是進程中的一個實體,是獨立調度和分派的基本單位. 4.線程自身基本上不擁有系統資源,只擁有少量運行中必不可少的私有資源.線程可與同屬一個進程的其餘線程共享進程的所有資源. ##線程的狀態:1.進程中的全部線程共享該進程的狀態. 2.線程具備三種狀態:就緒,執行和阻塞. 3.通常不具備掛起狀態,由於線程共享進程的資源,包括存儲空間,若是掛起一個進程,其所屬的所有線程必將被掛起.而單獨掛起某進程中的一個線程,必然會影響同一進程中的其餘線程的執行,這是沒有任何意義的. ###對線程的操做:1.一個進程能夠建立和撤銷一個或多個線程,同一進程中的多個線程能夠併發執行. 2.對線程的操做包括: ---派生:當系統建立一個進程時,同時也爲該進程派生一個線程,同一進程中的線程能夠再派生其餘線程. ---阻塞:當線程須要等待某事件時,它將被阻塞,釋放處理機執行其餘線程.---解除阻塞:當線程的阻塞事件發生,其狀態就轉換爲就緒,並插入到就緒隊列,等待調度的執行. 4.結束:當線程執行完畢,釋放其私有資源. *注意:線程阻塞不必定會引發整個進程的阻塞,不然引入線程帶來的併發性就不會提升. 93.進程與線程:1.傳統操做系統中,一個進程能夠建立一個線程,如MS DOS就是一個單用戶,單進程,單線程的操做系統,UNIX是一個多用戶,多進程,單線程的操做系統. 2.現代操做系統和軟件設計大多支持多線程運行.例如,Java虛擬機是一個單進程,多線程的運行環境,windows系列操做系統和Linux操做系統都採用了多進程,多線程技術. ----調度:1.傳統操做系統中,進程既是擁有資源的基本單位,又是獨立調度的基本單位. 2.引入線程的操做系統中,線程是獨立調度的基本單位,進程是資源擁有的基本單位,從而能夠顯著地提升系統的併發程度. 3.同一進程中的線程間的切換不會引發進程切換,但當一個進程中的線程切換到另外一個進程中的線程時,將會引發進程間切換. ---併發:1.進程之間能夠併發執行 2.同屬於一個進程的多個線程之間,亦可併發執行. 3.於是使操做系統具備更好的併發性,從而能更有效地使用系統資源和提升系統的吞吐量. ---擁有資源:1.進程是擁有資源的獨立單位,它有權申請系統的各種資源. 2.線程除了擁有不多的私有資源外,不能申請系統資源,能夠共享其所屬進程的資源.即,進程的代碼段,數據段以及系統資源,如已打開的文件,I/O設備等,均可被其內的全部線程共享. ---系統開銷:1.操做系統管理進程的開銷顯著地大於管理線程所需的開銷. 2.進程切換的開銷也遠大於線程切換的開銷. 3.因爲同一進程中的多個線程具備相同的地址空間,使他們之間的同步和通訊也比較容易. 4.有些類型的線程切換,同步和通訊都無需操做系統內核的干預. 94.線程的類型:1.用戶級線程 :用戶級線程的建立,撤銷和切換等操做所有由支持線程的應用程序完成,內核並不知道線程的存在. 一些數據庫管理系統,如Informix即支持用戶級線程.應用程序能夠利用線程庫來設計多線程程序,該線程庫包含各類用於管理用戶級線程的例程,如用於建立和撤銷線程的例程,用於線程間傳遞消息和數據的例程,線程調度例程,以及保護和恢復線程上下文的例程. --用戶級線程阻塞是否會引發整個進程的阻塞? 視狀況而定,當某進程中的一個線程須要等待另外一線程的輸出數據而阻塞時,整個進程並不會阻塞,即進程保持執行狀態,其內的某個線程也是執行狀態, 當某線程由於I/O阻塞時,內核須要啓動系統I/O,控制從用戶級轉到系統內核級,這時常會引發整個進程阻塞.隨即將發生進程切換,進程調度程序從新調度另外一個就緒進程執行. ///用戶級線程能節省大量的系統額外開銷,並提升程序併發性,這是由於:1.線程的管理和控制僅在用戶級進行,線程切換無需內核干預,沒有模式切換,減小了模式切換的開銷. 2.調度更靈活.應用程序能夠根據須要選用線程庫中不一樣的線程調度算法,而不受系統內核進程調度程序的約束. 3.因爲線程庫獨立於系統內核,能夠運行在不一樣的操做系統之上,使用戶級線程能夠獲得不一樣操做系統的支持,而無須修改操做系統內核. ///用戶級線程問題:1.因爲不少操做系統的系統調用都會引發阻塞,用戶級線程中的系統調用經常會引發線程及整個進程阻塞,削弱了線程的併發性. 2.因爲系統內核不知用戶級線程的存在,可能出現進程切換時,強行中斷其內某個執行線程的狀況. 3.很難實現不一樣進程的線程併發. 2.內核級線程:內核級線程的管理全由系統內核完成,應用程序無權進行線程切換等操做,系統爲應用程序提供了相應的應用程序編程接口API. Window2000 Linux和OS/2等操做系統即採用內核級線程技術. ///1.系統內核負責內核級線程的建立,撤銷,切換等操做.應用程序能夠設計成多線程程序,多個線程同屬於一個進程.系統以線程位調度單位. 2.進行線程切換時,須要同時保存整個進程的上下文以及線程的上下文信息.這樣,當進程中的某個線程阻塞時,內核能夠調度另外一個就緒線程執行(同一進程或不一樣進程). 3.線程切換時須要進行模式切換. 3.混合模式:因爲用戶級線程和內核級線程各自有本身的優缺點,實際工程設計能夠進行折中,將兩者結合起來,造成一種混合模式. Solaris操做系統即採用這種技術.1.在混合模式中,線程的建立,撤銷,調度,同步等都在用戶級應用程序中完成. 2.應用程序中的多個用戶級線程被映射到一個或較少的某些內核級線程. 3.這樣,可使同一應用程序中的多個線程能分散到不一樣的處理機上並行運行,並且,能夠避免由於某些用戶級線程的阻塞而引發整個進程阻塞的現象. 95.進程互斥與同步:1.併發控制-競爭資源: 1.當併發進程競爭使用同一資源時,他們之間就會發生衝突. 2.若是操做系統將資源分配給其中的某一個進程使用,另外一個進程就必須等待,直到申請的資源可用時,由操做系統分配給它. 3.若是競爭某資源的進程太多,這些進程還必須等待在一個隊列中,如就緒隊列,阻塞隊列等. 4.一種極端的狀況是,被阻塞進程永久得不到申請的資源而死鎖.5.進程競爭資源首先必須解決互斥問題.某些資源必須互斥使用,如打印機,共享變量,表格,文件等. 6.這類資源又稱臨界資源,訪問臨界資源的那段代碼稱爲臨界區. 7.任什麼時候刻,只容許一個進程進入臨界區,以此實現進程對臨界資源的互斥訪問. ///互斥使用臨界資源:1.當進程須要使用臨界資源時,經過得到臨界區的使用權實現 . 2.首先在」進入區」判斷是否能夠進入臨界區,若是能夠進入,則必須設置臨界區使用標誌,阻止其餘後來的進程進入臨界區.後來的進程經過查看臨界區使用標誌,知道本身不能進入臨界區,就進入阻塞隊列,將本身阻塞. 3.當臨界區內的進程使用完畢,退出臨界區時,即在」退出區」修改臨界區使用標誌,並負責喚醒阻塞隊列中的一個進程,讓其進入臨界區. 4.因爲同一個臨界資源在多個共享它的進程中將對應多個臨界區,那怎樣才能保證諸進程之間互斥地執行臨界區呢? 5.這就必須保證」臨界區使用標誌」是可被系統中全部進程共享的全局變量,並且諸進程對該標誌的修改操做必須互斥進行. ///臨界區使用原則(也稱爲互斥條件):1.每次只容許一個進程處於臨界區(忙則等待); 2.進程只能在臨界區內逗留有限時間,不得使其餘進程在臨界外無限期等待(有限等待); 3.若是臨界區空閒,則只要有進程申請就當即讓其進入(空閒讓進); 4.進入臨界區的進程,不能在臨界區內長時間阻塞等待某事件,必須在必定期限內退出臨界區(讓權等待); 5.不能限制進程的執行進度及處理機的數量. (進程因競爭資源可能引發死鎖,也可能引發飢餓). ///併發控制:共同協做: 1.多個進程經常須要共同修改某些共享變量,表格,文件數據庫等,協做完成一些功能. 2.必須確保他們對共享變量的修改是正確的,保證數據的完整性. 3.共享協做一樣涉及到互斥,死鎖和飢餓問題,但更強調對數據的寫操做必須互斥地進行. 4.必須保證數據的一致性. 5.前面列舉了銀行聯網儲蓄的例子,除了必須保證儲戶餘額的正確性之外,還必須使銀行儲蓄總餘額,當日發生額,流水賬等數據獲得一致的修改. 6.通常經過事務處理來保證數據一致性,能夠將對用戶各項數據的修改放到一個臨界區中,進入臨界區的進程必須一次完成全部修改操做. 7.只有該進程退出臨界區之後,才容許別的進程進入臨界區進行數據修改,以保證數據的一致性. ///併發控制--通訊協做: 1.當進程進行通訊合做時,各個進程之間須要創建鏈接,進程通訊須要同步和協調.進程通訊的方式不少,包括消息傳遞,管道,共享存儲區等. 2.經過消息傳遞實現進程通訊時,因爲沒有共享資源,故無須互斥,但仍可能出現死鎖和飢餓.例如,兩個進程互相等待對方發來的數據而永久阻塞,即死鎖. ###互斥與同步的解決方法:1.軟件方法:指進程本身,經過執行相應的程序指令,實現與別的進程同步與互斥,無需專門的程序設計語言或操做系統的支持. 實踐證實,該方法很難正確控制進程間的同步與互斥,並且可能會大大地增長系統的額外開銷. 採用軟件方法實現進程的互斥使用臨界資源是很困難的,他們一般能實現兩個進程的互斥,很難控制多個進程的互斥. 算法設計須要很是當心,不然可能出現死鎖,或互斥失敗等嚴重問題. 軟件方法始終不能解決忙等現象,下降系統效率. 2.硬件方法:爲了解決軟件方法存在的不足,有人提出了硬件解決方法,經過屏蔽中斷或採用專門的機器指令控制同步與互斥. 硬件方法包括屏蔽中斷和專用機器指令. ///屏蔽中斷:1.因爲進程的切換須要依賴中斷來實現,若是屏蔽中斷,則不會出現進程切換. 2.所以,爲了實現對臨界資源的互斥使用,能夠在進程進入臨界區以前,屏蔽中斷,當進程退出臨界區的時候,打開系統中斷.3.中斷被屏蔽之後,系統時鐘中斷也被屏蔽.處理機將不會被切換到其餘進程.4.因而,一旦屏蔽中斷,進程就能夠檢查和修改共享內存區中的數據,而沒必要擔憂其餘程序介入. #這種方法約束性太強,付出的代價太大,由於中斷被屏蔽之後,系統將沒法響應任何外部請求,也不會響應當前執行進程的任何異常及系統故障,嚴重下降了處理機性能.#這種你方法僅對單處理機系統有效,若是系統有兩個或多個共享內存的處理機,屏蔽中斷僅僅對執行本指令的處理機有效,其餘處理機仍將繼續運行,並能夠訪問共享內存空間. ///專用機器指令:利用一些專用機器指令也能實現互斥,機器指令在一個指令週期內執行,不會受到其餘指令的干擾,也不會被中斷. (test and set指令就是較經常使用的機器指令) ##機器指令的優勢:1.很是簡單,易於證實 2.同時適合於單處理機系統和共享內存的多處理機系統中多個進程的互斥. 3.能夠分別位臨界區設置屬於它本身的變量,以實現對多個臨界區的互斥訪問。缺點:1.「忙等」現象仍然存在。進程都須要循環檢測,等待時機進入臨界區。可是,因爲採用了機器指令,這種忙等消耗的機器時間比軟件方法小,屬於可接受的忙等。2.可能出現飢餓現象。當臨界區空閒時,執行循環檢測的若干等待進程能進入臨界區的概率是相等的,有的進程可能很難有機會進入臨界區,而飢餓。3.還有可能致使死鎖。 與軟件方法比較,硬件方法減小了系統額外開銷,但因爲須要太強的硬件約束條件,以及可能致使進程飢餓與死鎖現象,一直沒有成爲通用的解決方法. ///另外一類由操做系統或專門的程序設計語言提供的特別支持,包括3.信號量方法:(已經成爲控制進程同步與互斥的通用方法):軟件方法和硬件方法都存在忙等問題,浪費了處理機時間,信號量方法能實現進程互斥與同步,而沒必要忙等。///信號量實現同步互斥的基本原理:1.兩個或多個進程能夠經過傳遞信號進行合做,能夠迫使進程在某個位置暫時中止執行(阻塞等待),直到它收到一個能夠「向前推動」的信號(被喚醒)。2.相應的,將實現信號燈做用的變量稱爲信號量,常定義爲記錄型變量s,其中一個域爲整形,另外一個域爲隊列,其元素爲等待該信號量的阻塞進程。#定義對信號量的兩個原子操做:wait(s)和signal(s),早期這兩個原語被稱做P(s)和V(s)。 Wait和signal的應用:1.進程進入臨界區以前,首先執行wait(s)原語,若s.count<0,則進程調用阻塞原語,將本身阻塞,並插入到s.queue隊列排隊.2.注意,阻塞進程不會佔用處理機時間,不是忙等,直到某個從臨界區退出的進程執行signal(s)原語,喚醒它.3.一旦其餘某個進程執行了signal(s)原語中的s.count+1操做後,發現s.count<=0,即阻塞隊列中還有被阻塞進程,則調用喚醒原語,把s.queue中第一個進程修改成就緒狀態,送就緒隊列,準備執行臨界區代碼. #信號量的類型:1.信號量分爲:互斥信號量和資源信號量. 2.互斥信號量用於申請或釋放資源的使用權,常初始化爲1. 3.資源信號量用於申請或歸還資源,能夠初始化爲大於1的正整數,表示系統中某類資源的可用個數. 4.wait操做用於申請資源(或使用權),進程執行wait原語時,可能會阻塞本身. 5.signal操做用於釋放資源(或歸還資源使用權),進程執行signal原語時,有責任喚醒一個阻塞進程. ###操做系統內核以系統調用形式提供wait和signal原語,應用程序經過該系統調用實現進程間的互斥. 工程實踐證實,利用信號量方法實現進程互斥是高效的,一直被普遍採用. 4.管程方法 5.消息傳遞方法. 96.經典進程同步與互斥問題:1.生產者/消費者問題. 2.讀/寫問題 3.哲學家進餐問題.