併發:同一段時間內多個程序執行(注意區別並行和併發,前者是同一時刻的多個事件,後者是同一時間段內的多個事件)程序員
共享:系統中的資源能夠被內存中多個併發執行的進線程共同使用web
虛擬:經過時分複用(如多道程序技術,分時系統)以及空分複用(如虛擬內存)技術實現把一個物理實體虛擬爲多個算法
異步:系統中的進程是以走走停停的方式執行的,且以一種不可預知的速度推動安全
處理機管理:處理機分配都是以進程爲單位,因此處理機管理也被看作是進程管理。包括進程控制,進程同步,進程通訊和調度(做業調度和進程調度)
存儲器管理(或者內存管理):內存分配,內存保護,地址映射,內存擴充
設備管理:管理全部外圍設備,包括完成用戶的IO請求;爲用戶進程分配IO設備;提升IO設備利用率;提升IO速度;方便IO的使用
文件管理:管理用戶文件和系統文件,方便使用同時保證安全性。包括:文件存儲空間管理,目錄管理,文件讀寫管理以及文件共享和保護
提供用戶接口:程序接口(如API)和用戶接口(如GUI)多線程
二.進程和線程併發
進程的三種基本狀態:就緒(Ready)狀態,執行(Running)狀態,阻塞(Block)狀態 (引入的兩種常見的狀態:建立狀態,終止狀態)異步
運行狀態:進程正在處理機上運行。在單處理機環境下,每一時刻最多隻有一個進程處於運行狀態。socket
就緒狀態:進程已處於準備運行的狀態,即進程得到了除處理機以外的一切所需資源,一旦獲得處理機便可運行。函數
阻塞狀態,又稱等待狀態:進程正在等待某一事件而暫停運行,如等待某資源爲可用(不包括處理機)或等待輸入/輸出完成。即便處理機空閒,該進程也不能運行。測試
同步機制須要遵循的原則:
1.空閒讓進,2.忙則等待,3.有限等待,4.讓權等待
經典的進程同步問題:生產者-消費者問題;哲學家進餐問題;讀者-寫者問題
進程同步的機制:硬件同步機制、信號量機制、管程機制
硬件同步機制:關中斷
利用Test-and-Set指令實現互斥(Test-and-Set TS指令:」測試並創建「)
利用Swap指令實現進程互斥(該指令稱爲對換指令,用於交換兩個字的內容)
信號量(Semaphores)機制
管程機制
主要分爲:管道、系統IPC(包括消息隊列、信號量、共享存儲器)、SOCKET、遠程過程(函數)調用RPC
管道主要分爲:普通管道PIPE 、流管道(s_pipe)、命名管道(name_pipe)
6.請分別簡單說一說進程和線程以及它們的區別
7.線程同步的方式有哪些?
線程同步的方式:
當程序運行在3級特權級上時,就能夠稱之爲運行在用戶態,由於這是最低特權級,是普通的用戶進程運行的特權級,大部分用戶直接面對的程序都是運行在用戶態;
反之,當程序運行在級特權級上時,就能夠稱之爲運行在內核態。
用戶態切換到內核態的3種方式:系統調用,異常,外圍設備的中斷
9.處理機調度的層次
高級調度(長程調度或做業調度):調度對象是做業,主要用於多道批處理系統中,而在分時和實時系統中不設置高級調度
低級調度(進程調度或短程調度):調度對象是進程,在多道批處理,分時和實時三種類型的OS中,都必須配置這級調度
中級調度:內存調度,引入中級調度的主要目的是,提升內存利用率和系統吞吐量,中級調度實際上就是存儲器管理中的對換功能
10.死鎖
死鎖的定義:所謂死鎖就是一個進程集合中的多個進程由於競爭資源,而形成的互相等待現象。
死鎖的緣由:系統資源不足;多個進程的推動順序不合理
死鎖的必要條件:
死鎖處理:
預防死鎖:破壞產生死鎖的4個必要條件中的一個或者多個;實現起來比較簡單,可是若是限制過於嚴格會下降系統資源利用率以及吞吐量
避免死鎖:在資源的動態分配中,防止系統進入不安全狀態(可能產生死鎖的狀態)-如銀行家算法
檢測死鎖:容許系統運行過程當中產生死鎖,在死鎖發生以後,採用必定的算法進行檢測,並肯定與死鎖相關的資源和進程,採起相關方法清除檢測到的死鎖。實現難度大
解除死鎖:與死鎖檢測配合,將系統從死鎖中解脫出來(撤銷進程或者剝奪資源)。對檢測到的和死鎖相關的進程以及資源,經過撤銷或者掛起的方式,釋放一些資源並將其分配給處於阻塞狀態的進程,使其轉變爲就緒態。實現難度大
FCFS(先來先服務),優先級,時間片輪轉,多級反饋
先來先服務調度算法FCFS:既能夠做爲做業調度算法也能夠做爲進程調度算法;按做業或者進程到達的前後順序依次調度;所以對於長做業比較有利;
短做業優先調度算法SJF:做業調度算法,算法從就緒隊列中選擇估計時間最短的做業進行處理,直到得出結果或者沒法繼續執行;缺點:不利於長做業;未考慮做業的重要性;運行時間是預估的,並不靠譜 ;
優先級調度算法PSA:基於做業的緊迫程度,由外部賦予做業相應的優先級,調度算法是根據該優先級進行調度的
高相應比優先調度算法HRNN:響應比=(等待時間+要求服務時間)/要求服務時間=響應時間/要求服務時間
時間片輪轉調度RR:按到達的前後對進程放入隊列中,而後給隊首進程分配CPU時間片,時間片用完以後計時器發出中斷,暫停當前進程並將其放到隊列尾部,循環 ;
多級反饋隊列調度算法:目前公認較好的調度算法;設置多個就緒隊列併爲每一個隊列設置不一樣的優先級,第一個隊列優先級最高,其他依次遞減。優先級越高的隊列分配的時間片越短,進程到達以後按FCFS放入第一個隊列,若是調度執行後沒有完成,那麼放到第二個隊列尾部等待調度,若是第二次調度仍然沒有完成,放入第三隊列尾部…。只有當前一個隊列爲空的時候纔會去調度下一個隊列的進程。
四.存儲器管理
連續分配方式:單一連續分配:單道程序環境下
固定分區分配:多道程序系統,每一個分區的大小是固定的
動態分區分配
動態可重定位分區分配 算法四種方式
主要是指動態分區分配時所採用的幾種算法。
動態分區分配又稱爲可變分區分配,它是動態劃份內存的分區方法。這種分區方法不預先將內存劃分,而是在進程裝入內存時,根據進程的大小動態地創建分區,並使分區的大小正好適合進程的須要。所以系統中分區的大小和數目是可變的。
首次適應(First Fit)算法:空閒分區以地址遞增的次序連接。分配內存時順序查找,找到大小能知足要求的第一個空閒分區。
最佳適應(Best Fit)算法:空閒分區按容量遞增造成分區鏈,找到第一個能知足要求的空閒分區。
最壞適應(Worst Fit)算法:又稱最大適應(Largest Fit)算法,空閒分區以容量遞減的次序連接。找到第一個能知足要求的空閒分區,也就是挑選出最大的分區。
基於索引搜索的動態分區分配算法
快速適應(quick fit)算法:又稱爲分類搜索法,是將空閒分區根據其容量大小進行分類,對於每一類具備相同容量的全部空閒分區,單獨設立一個空閒分區鏈表
這樣系統中存在多個空閒分區鏈表
夥伴系統(buddy system)
哈希算法:構造一張以空閒分區大小爲關鍵字的哈希表,該表的每個表項記錄了一個對應的空閒分區鏈表表頭指針
離散分配方式:將一個進程直接分散地裝入到許多不相鄰接的分區中,即可充分利用內存空間
離散分配分爲三種:分頁存儲管理方式、分段存儲管理方式、段頁式存儲管理方式
分頁存儲管理方式:將用戶程序的地址空間分爲若干個固定大小的區域,稱爲」頁「或」頁面「。相應的,也將內存空間分爲若干個物理塊或頁框(frame),頁和塊的大小相同。這樣就能夠將用戶程序的任一頁放入任一物 理塊中,實現了離散分配。
把主存空間劃分爲大小相等且固定的塊,塊相對較小,做爲主存的基本單位。每一個進程也以塊爲單位進行劃分,進程在執行時,以塊爲單位逐個申請主存中的塊空間。
由於程序數據存儲在不一樣的頁面中,而頁面又離散的分佈在內存中,所以須要一個頁表來記錄邏輯地址和實際存儲地址之間的映射關係,以實現從頁號到物理塊號的映射。
因爲頁表也是存儲在內存中的,所以和不適用分頁管理的存儲方式相比,訪問分頁系統中內存數據須要兩次的內存訪問(一次是從內存中訪問頁表,從中找到指定的物理塊號,加上頁內偏移獲得實際物理地址;第二次就是根據第一次獲得的物理地址訪問內存取出數據)。
爲了減小兩次訪問內存致使的效率影響,分頁管理中引入了快表機制,包含快表機制的內存管理中,當要訪問內存數據的時候,首先將頁號在快表中查詢,若是查找到說明要訪問的頁表項在快表中,那麼直接從快表中讀取相應的物理塊號;若是沒有找到,那麼訪問內存中的頁表,從頁表中獲得物理地址,同時將頁表中的該映射表項添加到快表中(可能存在快表換出算法)。
在某些計算機中若是內存的邏輯地址很大,將會致使程序的頁表項會不少,而頁表在內存中是連續存放的,因此相應的就須要較大的連續內存空間。爲了解決這個問題,能夠採用兩級頁表或者多級頁表的方法,其中外層頁表一次性調入內存且連續存放,內層頁表離散存放。相應的訪問內存頁表的時候須要一次地址變換,訪問邏輯地址對應的物理地址的時候也須要一次地址變換,並且一共須要訪問內存3次才能夠讀取一次數據。
分頁是爲了提升內存利用率,而分段是爲了知足程序員在編寫代碼的時候的一些邏輯需求(好比數據共享,數據保護,動態連接等)。
分段內存管理當中,地址是二維的,一維是段號,一維是段內地址;其中每一個段的長度是不同的,並且每一個段內部都是從0開始編址的。因爲分段管理中,每一個段內部是連續內存分配,可是段和段之間是離散分配的,所以也存在一個邏輯地址到物理地址的映射關係,相應的就是段表機制。段表中的每個表項記錄了該段在內存中的起始地址和該段的長度。段表能夠放在內存中也能夠放在寄存器中。
訪問內存的時候根據段號和段表項的長度計算當前訪問段在段表中的位置,而後訪問段表,獲得該段的物理地址,根據該物理地址以及段內偏移量就能夠獲得須要訪問的內存。因爲也是兩次內存訪問,因此分段管理中一樣引入了聯想寄存器。
頁是信息的物理單位,是出於系統內存利用率的角度提出的離散分配機制;段是信息的邏輯單位,每一個段含有一組意義完整的信息,是出於用戶角度提出的內存管理機制
頁的大小是固定的,由系統決定;段的大小是不肯定的,由用戶決定
五.虛擬存儲器
若是存在一個程序,所需內存空間超過了計算機能夠提供的實際內存,那麼因爲該程序沒法裝入內存因此也就沒法運行。單純的增長物理內存只能解決一部分問題,可是仍然會出現沒法裝入單個或者沒法同時裝入多個程序的問題。可是能夠從邏輯的角度擴充內存容量,便可解決上述兩種問題。
基於局部性原理,在程序裝入時,能夠將程序的一部分裝入內存,而將其他部分留在外存,就能夠啓動程序執行。在程序執行過程當中,當所訪問的信息不在內存時,由操做系統將所須要的部分調入內存,而後繼續執行程序。另外一方面,操做系統將內存中暫時不使用的內容換出到外存上,從而騰出空間存放將要調入內存的信息。這樣,系統好像爲用戶提供了一個比實際內存大得多的存儲器,稱爲虛擬存儲器。
虛擬存儲器的特徵:
虛擬存儲器的實現方法:分頁請求系統,請求分段系統
最佳(Optimal)置換算法:只具備理論意義的算法,用來評價其餘頁面置換算法。置換策略是將當前頁面中在將來最長時間內不會被訪問的頁置換出去。
先進先出(FIFO)置換算法:簡單粗暴的一種置換算法,沒有考慮頁面訪問頻率信息。每次淘汰最先調入的頁面。
最近最久未使用LRU(Least Recently Used)置換算法:算法賦予每一個頁面一個訪問字段,用來記錄上次頁面被訪問到如今所經歷的時間t,每次置換的時候把t值最大的頁面置換出去(實現方面能夠採用寄存器或者棧的方式實現)。
最少使用LFU(Least Frequently Used)置換算法:設置寄存器記錄頁面被訪問次數,每次置換的時候置換當前訪問次數最少的。
改進型Clock算法:在Clock算法的基礎上添加一個修改位,替換時根究訪問位和修改位綜合判斷。優先替換訪問位和修改位都是0的頁面,其次是訪問位爲0修改位爲1的頁面。
頁面緩衝算法(Page Buffering Algorithm,PBA)