7. 處理器調度
-
處理器調度層次:
a. 高級調度: 又稱做業調度、長程調度。從輸入系統的一批做業(job, 用戶提交給操做系統計算的一個獨立任務)中按照預約的調度策略挑選若干做業進入內存,爲其分配所需資源並建立對應做業的用戶進程。
b. 中級調度: 又稱平衡調度,中程調度。根據內存資源狀況決定內存所能容納的進程數目,並完成外存和內存中進程對換工做。
c. 低級調度:又稱進程調度/線程調度,短程調度。根據某種原則決定就緒隊列中那個進程/線程先得到處理器,並將處理器出讓給它使用。 -
低級調度算法:
a. 先來先服務(First Come First Server, FCFS)算法。
b. 最短做業優先(Shortest Job First, SJF)算法。
c. 最短剩餘時間優先(Shortest Remaining Time First, SRTF)算法: 假設當前某進程/線程正在運行,若是有新進程/線程移入就緒隊列,若它所需的CPU運行時間比當前運行的進程/線程所需的剩餘CPU時間還短,搶佔式最短做業優先算法強行剝奪當前執行者的控制權,調度新進程/線程執行。
d. 最高響應比優先(Highest Response Ratio First, HRRF)算法:非剝奪式算法。其中,響應比 = (做業已等待時間 + 做業處理時間) / 做業處理時間。
e. 優先級調度算法:優先級高的選擇進程/線程優先選擇。
f. 輪轉調度(Round-Robin, RR)算法: 也稱時間片調度。就緒隊列的進程輪流運行一個時間片。
g. 多級反饋隊列(Multi-Level Feedback Queue, MLFQ)算法。衡量調度算法的性能指標:
a. 資源利用率: CPU利用率 = CPU有效工做時間/(CPU有效工做時間 + CPU空閒等待時間)
b. 吞吐率: 單位時間內CPU處理做業的個數。
c. 公平性: 確保每一個進程都能得到合理的CPU份額和其餘資源份額,不會出現飢餓現象。
d. 響應時間: 從交互式進程提交一個請求(命令)直到得到響應之間的時間間隔。
e. 週轉時間: 批處理用戶從向系統提交做業開始到做業完成爲止的時間間隔。
平均週轉時間:T = (∑ni=1ti∑i=1nti ) / n , 其中 titi 表示做業i的週轉時間。
平均帶權做業週轉時間: T = (∑ni=1wi∑i=1nwi) / n, 其中 wi=ti/tkwi=ti/tk , titi 表示做業i的週轉時間。 tktk 表示做業i的運行時間。
8. 進程的交互
- 進程互斥(Mutual Exclusion): 若干進程因相互搶奪獨佔型資源而產生的競爭制約關係。
-
進程同步(Synchronization): 爲完成共同任務的併發進程基於某個條件來協調其活動,由於須要在某些位置上排定執行的前後次序而等待、傳遞信息或消息所產生的協做制約關係。
資源競爭會引起兩個控制問題:
a. 死鎖: 一組進程因爭奪資源陷入永遠等待的狀態。
b. 飢餓: 一個可運行進程因爲因爲其餘進程老是優先於它,而被調度程序無限期地拖延而不能被執行。
9. 臨界區管理
-
併發進程中與共享變量有關的程序段稱爲臨界區(Critical Section)。共享變量所表明的資源稱爲臨界資源(Critical Resource),即一次僅能供一個進程使用的資源。
-
臨界區調度原則:
a. 擇一而入。 一次之多隻有一個進程進入臨界區內執行。
b. 忙則要等。 若是已有進程在臨界區中, 試圖進入此臨界區的其餘進程應等待。
c. 有限等待。 進入臨界區內的進程應在有限時間內退出。 -
臨界區管理的軟件算法:Peterson算法。
爲每一個進程設置標誌,當標誌值爲true
時表示該進程要求進入臨界區,另外再設置一個指示器turn
以指示能夠由哪一個進程進入臨界區,當turn = i
時則可由Pi
進入臨界區。1 /* Peterson 算法 */ 2 3 bool inside[2]; 4 inside[0] = false; 5 inside[1] = false; 6 enum { 0, 1 } turn; 7 8 /* 進程0 */ 9 process P0(){ 10 inside[0] = true; //請求... 11 turn = 1; 12 while(inside[1] && turn == 1) ; //等待... 13 14 /*臨界區 */ 15 16 inside[0] = false; //歸還... 17 } 18 19 /* 進程1 */ 20 process P1(){ 21 inside[1] = true; //請求... 22 turn = 0; 23 while(inside[0] && turn == 0) ; //等待... 24 25 /*臨界區 */ 26 27 inside[1] = false; //歸還... 28 }
-
Peterson算法知足臨界區管理的三個原則。
-
臨界區管理的硬件設施:
a. 關中斷。 在進程進入臨界區時關中斷,進程退出臨界區時開中斷。
b. 測試並設置指令。 利用機器指令TS(Test and Set)實現臨界區的上鎖和開鎖原語操做。
c. 對換指令。 利用對換指令實現臨界區的上鎖和開鎖原語操做。
10. 信號量(samaphore)和PV操做
PV操做都是原語操做, 不可中斷。
-
信號量和PV操做
1 // 信號量 2 typedef struct semaphore { 3 int value; // 信號量值 4 struct pcb* list; // 指向「等待該信號量的進程隊列」的指針 5 }; 6 7 // P操做 8 void P(semaphore s){ 9 s.value--; // 信號量值減一 10 11 // 若是信號量值小於0, 執行P操做的進程調用sleep(s.list)阻塞本身, 12 // 被置成「等待信號量s」狀態,並移入s信號量隊列,轉向進程調度程序。 13 if(s.value < 0) sleep(s.list); 14 } 15 16 // V操做 17 void V(semaphore s){ 18 s.value++; // 信號量值加一 19 20 // 若是信號量小於等於0, 則調用wakeup(s.list)釋放一個等待信號量s的進程, 21 // 並轉換成就緒態, 進程則繼續執行。 22 if(s.value <= 0) wakeup(s.list); 23 }
-
a. 若信號量值
s.value
爲正值, 此值等於在封鎖進程以前對信號量s
可施行P操做的次數,即,s所表明的實際可用的資源數。
b. 若信號量值s.value
爲負值, 其絕對值等於登記在s
信號量隊列中的等待進程的數目。
c. 一般P操做意味着請求一個資源,V操做意味着釋放一個資源。在必定條件下,P操做也可表示掛起進程的操做,V操做表明喚醒被掛起進程的操做。 -
信號量實現互斥
1 semaphore mutex; 2 mutex = 1; 3 4 //進程Pi, i = 1, 2 ..., n 5 process Pi(){ 6 P(mutex); 7 8 /* 臨界區 */ 9 10 V(mutex); 11 }
11. 管程
-
管程(monitor):表明共享資源的數據結構及併發進程在其上執行的一組構成就構成管程,管程被請求和釋放資源的進程鎖調用。
a. 條件變量。 管程內的一種數據結構。只有在管程中才能被訪問,進程能夠在條件變量上等待或被喚醒。只能經過
wait()
和signal()
原語操做來控制。
b.wait()
原語。 掛起調用進程並釋放管程,直至另外一個進程在條件變量上執行signal()
。
c.signal()
原語。若是有其餘的進程因對條件變量執行wait()
而被掛起,便釋放之。 若是沒有進程在等待,那麼至關於空操做,信號不被保存。
12. 死鎖
-
死鎖的主要解決方法: 死鎖防止、死鎖避免、死鎖檢測和恢復。
-
死鎖產生的必要條件:
a. 互斥條件。 臨界資源是獨佔資源,進程應互斥且排他地使用這些資源。
b. 佔有和等待條件。 進程在請求資源得不到知足而等待時,不釋放已佔有的資源。
c. 不剝奪條件。已獲資源只能由進程資源釋放,不容許被其餘程序剝奪。
d. 循環等待條件。 存在循環等待鏈,其中每一個進程都在等待下一個進程所持有的資源。死鎖的防止就是去破壞死鎖產生的必要條件。 如,使資源可同時使用(破壞互斥條件)、靜態分配資源(破壞佔有和等待條件)、剝奪調度(破壞不剝奪條件)、層次分配策略(循環等待條件)等。
-
死鎖避免: 銀行家算法 (額…本身百度去吧。 = =!)
-
死鎖檢測和恢復: 進程-資源分配圖(額…仍是去百度吧。)
a. 若是進程-資源分配圖中無環路,此時系統沒有死鎖。
b. 若是進程-資源分配圖中有環路,且每一個資源類中只有一個資源,則系統發生死鎖。
c. 若是進程-資源分配圖中有環路,且所涉及的資源類有多個資源,則不必定會發生死鎖。
13. 可變分區存儲管理
- 可變分區存儲分配算法:
a. 最早適應分配算法。從未分配區的開始位置開始掃描,在找到的第一個能知足長度要求的空閒區上分配存儲空間。
b. 下次適應分配算法。從未分配區上次掃描結束處開始順序查找,在找到的第一個能知足長度要求的空閒區上分配存儲空間。
c. 最優適應分配算法。掃描整個未分配區,選擇能知足用戶進程要求的最小分區分配存儲空間。
d. 最壞適應分配算法。掃描整個未分配區,選擇能知足用戶進程要求的最大分區分配存儲空間。
e. 快速適應分配算法。爲常常用到的長度的空閒區設立單獨的空閒區鏈表。
14. 分頁存儲管理
-
基本概念:
a. 頁面。 進程邏輯地址空間分紅大小相等的區,每一個區稱爲頁面或頁。(注: 頁面的本質是邏輯地址空間)
b. 頁框(kuàng, 0.0)。 又稱頁幀。內存物理地址空間分紅大小相等的區,其大小和頁面大小相等,每一個區就是一個頁框。(注: 頁框的本質是物理地址空間)
c. 邏輯地址。分頁存儲器的邏輯地址由頁號和頁內偏移兩部分組成。d. 內存頁框表。頁框表的表項給出物理塊使用狀況:0爲空閒,1爲佔用。
e. 頁表。頁表是操做系統爲進程創建的,是程序頁面和內存頁框的對照表,頁表的每一欄指明程序中的某一頁面和分得的頁框之間的關係。 -
分頁存儲管理的地址轉換
-
翻譯快表:也稱轉換後援緩衝(Translation Look_aside Buffer, TLB)。用來存放進程最近訪問的部分頁表項。(注: 翻譯快表之於頁表相似於Cache之於存儲器)
-
二級頁表:把整個頁表分割成許多小頁表,每一個稱爲頁表頁,每一個頁表頁含有若干個頁表表項。頁表頁容許分散對應不連續的頁框。爲了找到頁表頁,應創建地址索引,稱爲頁目錄表,其表項指出頁表頁起始地址。
-
二級頁表實現邏輯地址到物理地址轉換的過程: 由硬件「頁目錄表基址寄存器」指出當前運行進程的頁目錄表的內存起始地址,加上「頁目錄位移」做爲索引,可找到頁表頁在內存的起始地址,再以「頁目錄位移」做爲索引,找到頁表頁在內存的起始位置,再以「頁表頁位移」做爲索引,找到頁表頁的表項,此表項中包含一個頁面對應的頁框號,由頁框號和頁內偏移即可生成物理地址。
注: 類比於書的目錄,找某一段內容的時候,先在目錄上找到對應的章節,再在對應的章節下面找具體的知識點。好比,我要在《操做系統原理》中查「多級頁表」。首先我知道它是在存儲管理一章的,因而就找到了「第四章 存儲管理」(相似於找到了頁目錄表)。 而後在第四章下面找「多級頁表」(相似於在頁目錄表下面找具體的頁表頁)。最後找到「多級頁表」對應的頁碼(相似於在頁表頁中找到其對應的頁框)。最後查閱對應的章節頁碼(相似於讀取對應頁框的數據)。
15. 分段存儲管理
分段和分頁的比較:
a. 分段是信息的邏輯單位,由源程序的邏輯結構及含義所決定,是用戶可見的,段長由用戶根據須要來肯定,段起始地址能夠從任何內存地址開始。引入的目的是知足用戶模塊化程序設計的須要。
b. 分頁是信息的物理單位,與源程序的邏輯無關,是用戶不可見的,頁長由系統(硬件)決定,頁面只能從頁大小的整數倍地址開始。引入目的是實現離散分配並提升內存利用率。
16. 虛擬存儲管理
-
虛擬存儲管理的基本思路:
把磁盤空間當作內存的一部分,進程的程序和數據部分放在內存中,部分放在磁盤上。程序運行時,它執行的指令或訪問的數據在哪裏由存儲管理負責判斷,並針對狀況採起響應的措施。
-
請求分頁虛存管理: 將進程信息副本存放在外存中,當它被調度投入運行時,程序和數據沒有所有裝進內存,僅裝入當前使用頁面,進程執行過程當中訪問到不在內存的頁面時,產生缺頁異常,再由系統自動調入。
-
全局頁面替換策略(頁面替換算法的做用範圍是整個系統,不考慮進程的屬主):
a. 最佳頁面替換算法(Optimal Replacement, OPT)。 淘汰再也不訪問的頁或者距如今最長時間後才訪問的頁。
b. 先進先出頁面替換算法(First in First Out Replacement, FIFO)。淘汰在內存中駐留時間最長的頁。
c. 最近最少使用頁面替換算法(Least Recently Used Replacement, LRU)。 淘汰最近一段時間內最久未被使用的頁面。
d. 第二次機會頁面替換算法(Second Chance Replacement, SCR)。 首先檢查FIFO頁面隊列中的隊首,這是最先進入內存的頁面,若是其「引用位」爲0,那麼它最先進入且未被引用,此頁被淘汰。若是其「引用位」爲1,說明雖然它最先進內存,但最近仍在使用,因而將「引用位」清零,並把這個頁面移到隊尾,把它看作新調入的頁面,再給它一次機會。
e. 時鐘頁面替換算法(Clock Policy Replacement, Clock)。與SCR算法思路一致。只是用循環隊列來構造頁面隊列,隊列指針指向可能被淘汰的頁面。若是隊列指針指向的頁的「引用位」爲1,則將其置爲0,同時隊列指針指向下一個頁。 -
局部頁面替換算法(頁面替換算法的做用侷限於進程自身,要爲進程維護稱爲工做集的一組頁面):
a. 局部最佳頁面替換算法(Local Minimum Replacement, MIN)。 在t時刻時,若頁面P在將來(t, t+delta)時間段內未被引用,則它被淘汰。
b. 工做集置換算法。 在t時刻時,若頁面P在將來(t-delta, t)時間段內未被引用,則它被淘汰。
c. 模擬工做集替換算法。
d. 缺頁頻率替換算法。
17. 請求段頁式虛擬內存管理
- 虛地址以程序的邏輯結構劃分爲段。
- 實地址劃分爲位置固定、大小相等的頁框(塊)。
- 邏輯地址分爲三個部分:段號s、段內頁號p、頁內位移d。對於用戶而言,段式虛擬地址應該由段號s和段內位移d’組成,操做系統內部自動把d’解釋成段內頁號p和頁內位移號d。
18. I/O硬件原理:I/O控制方式
- 輪詢方式: 又稱程序直接控制方式。使用查詢指令測試設備控制器的忙閒狀態位,肯定內存和設備是否能能交換數據。(注:所謂輪詢,就比如,老溼依次問每個童鞋:「有問題沒?」, 若是沒問題,就繼續問下一個童鞋。若是這個童鞋有問題,這個老溼就停下了解決這個問題。而後又繼續詢問下一個童鞋。)
-
中斷方式: 要求CPU和設備控制器及設備之間存在中斷請求線,設備控制器的狀態寄存器有相應的中斷容許位。
a. 進程發出啓動I/O指令。
b. 設備控制器檢查狀態寄存器的內容,執行相應的I/O操做,一旦傳輸完成,設備控制器經過中斷請求線發出I/O中斷信號。
c. CPU收到並響應I/O中斷後,轉向設備的I/O中斷處理程序執行。
d. 中斷處理程序執行數據讀取操做,將I/O緩衝寄存器的內容寫入內存。操做結束後退出中斷程序恢復以前的狀態。
e. 執行中斷前以前運行的進程。
(注: 相似於老溼在上面講課,有童鞋問問題時,老溼就記錄下本身講到的位置,而後取回答童鞋的問題,回答完以後,又回到剛剛講課的地方繼續講課) -
DMA(Direct Memory Access, 直接存儲器存取)方式: 內存和設備之間有一條數據通路成塊的傳輸數據,無須CPU幹9預,實際數據傳輸操做由DMA直接完成。
- 通道方式: CPU在執行主程序時遇到I/O請求,啓動在指定通道上選址的設備,一旦啓動成功,通道開始控制設備進行操做,這時CPU就能夠執行其餘任務並與通道並行工做,直到I/O操做完成;當通道發出I/O操做結束中斷時,處理器才響應並中止當前工做,轉而處理I/O操做結束時間。
19. I/O軟件原理
- I/O中斷處理程序: 一般是設備驅動程序的組成部分之一。檢查設備狀態寄存器內容,判斷產生中斷緣由,根據I/O操做的完成狀況進行相應處理。若數據傳輸有錯,應向上層軟件報告設備出錯信息,實施從新執行;若正常結束,應喚醒等待傳輸的進程,使其轉換爲就緒態;如有等待傳輸的I/O命令,應通知相關軟件啓動下一個I/O請求。
- I/O設備驅動程序:設備驅動程序是設備專有的。把用戶提交的邏輯I/O請求轉化爲物理I/O的啓動和執行。同時監督設備是否正確執行,管理數據緩衝區,進行必要的糾錯處理。
- 獨立於設備的I/O軟件
- 用戶空間的I/O軟件
20. 緩衝技術
- 緩衝技術的基本思想: 當進程執行寫操做輸出數據時,先向系統申請一個輸出緩衝區,而後將數據送至緩衝區,如果順序寫請求,則不斷地把數據填入緩衝區,直至裝滿爲止,此後進程能夠繼續計算,同時,系統將緩衝區的內容寫在設備上。當進程執行讀操做輸入數據時,先向系統申請一個輸入緩衝區,系統將設備上的一條物理記錄讀至緩衝區,根據要求把當前所須要的邏輯記錄從緩衝區中選出並傳送給進程。
-
單緩衝: 是最簡單的緩衝技術,每當有I/O請求時,操做系統就在內存的系統區中開設一個緩衝區。不容許多個進程同時對一個緩衝器操做。
-
雙緩衝: CPU可把輸出到設備的數據放入其中一個緩衝器(區)、讓設備慢慢處理;而後,它又能夠從另外一個爲終端設置的緩衝器(區)中讀取所須要的輸入數據。
-
多緩衝: 是把多個緩衝區鏈接起來組成兩部分,一部分專門用於輸入,另外一部分專門用於輸出的緩衝結構。
21. 驅動調度技術
- 磁盤的物理結構:
磁盤包括多個盤面,每一個盤面有一個讀寫磁頭,全部的磁頭都固定在惟一的移動臂上同時移動。一個盤面上的讀寫磁頭的軌跡稱爲磁道,讀寫磁頭下的全部磁道造成柱面,一個磁道又能夠劃分爲多個扇區。在磁盤上定位某個物理記錄須要知道其柱面號、磁頭號以及扇區號。定位物理記錄時,磁頭到達指定扇區的時間稱爲查找時間, 選擇磁頭號並旋轉至指定扇區的時間稱爲搜索延遲。 - 磁道(柱面)的搜索定位算法:
a. 先來先服務算法(First Come First Server algorithm, FCFS)。
b. 最短查找時間優先算法: 老是執行查找時間最短的請求。
c. 掃描算法: 移動臂來回的掃過全部柱面,掃描處遇到I/O請求便進行處理。
d. 分步掃描算法: 將I/O請求分爲長度爲N的子隊列,按FIFO算法依次處理每一個隊列,而每一個子隊列採用掃描算法,處理完一個後再服務下一個隊列。
e. 電梯調度算法: 又稱LOOK算法。
磁頭號由外向內遞增。
f. 循環掃描算法: 移動臂老是從0號柱面至最大號柱面順序掃描,而後直接返回0號柱面重復進行,歸途中不提供服務(而掃描算法歸途是要提供服務的)。
22. 設備獨立性
- 設備獨立性: 用戶一般不指定物理設備,而是指定邏輯設備,使得用戶做業和物理設備分離開來,再經過其餘途徑創建邏輯設備和物理設備之間的映射,設備的這種特性稱爲設備獨立性。
23. 虛擬設備
-
外部設備同時聯機操做(Simultaneous Peripheral Operations On Line, SPPPLing):
a. 預輸入程序。 控制信息從輸入設備至輸入井,填寫預輸入表以便在做業執行過程當中要求輸入信息時能夠隨時找到其存放位置。
b. 井管理程序。 做業執行過程當中要求啓動某臺設備進程I/O操做時,做業控制程序截獲這個要求並調用井管理程序控制從相應輸入井讀取信息,或將信息送至輸出井。
c. 緩輸出程序。 當處理器空閒時,操做系統調用緩輸出程序執行緩輸出,它查看緩輸出表是否有輸出打印的文件,文件打印前還可能組織做業或文件標題,也可能對從輸出井中讀出的信息進行格式加工。
24. 文件邏輯結構
- 文件的邏輯結構的兩種形式:
a. 流式文件。 一種無結構的文件,文件內的數據再也不組成記錄,只是一串順序的信息集合,稱爲字節流文件。
b. 記錄式文件。 一種有結構的文件,包含若干邏輯記錄,邏輯記錄是文件中按信息在邏輯上獨立含義所劃分的信息單位。
25. 文件物理結構
- 文件物理結構: 文件的物理結構和組織是指邏輯文件在物理存儲空間中的存放方法和組織關係。
- 常見組織方式:順序文件、鏈接文件、直接文件和索引文件。
2、Q&A
1. 什麼是操做系統?操做系統在計算機系統中的主要做用是什麼?
-
定義: 操做系統尚無嚴格的定義。 通常可把操做系統定義爲: 管理系統資源、控制程序執行、改善人機界面、提供各類服務,併合理組織計算機工做流程和爲用戶方便有效地使用計算機提供良好的運行環境的一種軟件系統。
-
做用:
a. 服務用戶。 操做系統做爲用戶接口和公共服務程序。
b. 進程交互。 操做系統做爲進程執行的控制者和協調者。
c. 系統實現。 操做系統做爲擴展機或虛擬機。
d. 資源管理。 操做系統做爲資源的管理者和控制者。
2. 什麼是多道程序設計?多道程序設計有什麼特色?
-
多道程序設計(multiprogramming): 容許多個做業(程序)同時進入計算機系統的內存並啓動交替計算的方法。
-
多道程序設計的特色: 從宏觀上看是並行的,從微觀上看是串行的。
3. 計算機操做系統爲何引入進程?
- 刻畫程序的併發性。
- 解決資源的共享性。
4. 在分時系統中,什麼是響應時間?它與哪些因素有關?
- 從交互式進程提交一個請求(命令)直到得到響應之間的時間間隔稱爲響應時間。
- 影響分時操做系統的響應時間的因素不少,如,CPU的處理速度、聯機終端的數目、所用時間片的大小、系統調度開銷和對換信息量的多少等。
5. 解釋併發性與並行性
- 計算機操做系統中把並行性和併發性明顯區分開,主要是從微觀的角度來講的,具體是指進程的並行性(多處理機的狀況下,多個進程同時運行)和併發性(單處理機的狀況下,多個進程在同一時間間隔運行的)。
- 並行性是指硬件的並行性,兩個或多個事件在同一時刻發生。
- 併發性是指進程的併發性,兩個或多個事件在同一時間段內發生。
6. 試述存儲管理的基本功能。
- 存儲分配。
- 地址映射。
- 存儲保護。
- 存儲共享。
- 存儲擴充。
7. 何謂地址轉換(重定向)?哪些方法能夠實現地址轉換?
- 地址重定位: 又稱地址轉換,地址映射。 可執行程序邏輯地址轉換(綁定)爲物理地址的過程。
-
實現方法:
a. 靜態地址重定位。 由裝載程序實現裝載代碼模塊的加載和地址轉換,把它裝入分配給進程的內存指定區域,其中的全部邏輯地址修改爲內存物理地址。
b. 動態地址重定位。由裝載程序實現裝載代碼模塊的加載和地址轉換,把它裝入分配給進程的內存指定區域,但對連接程序處理過的應用程序的邏輯地址則不作任何修改,程序內存起始地址被置於硬件專用寄存器 —— 重定位寄存器。程序執行過程當中,每當CPU引用內存地址(訪問程序和數據)時,由硬件截取此邏輯地址,並在它被髮送到內存以前加上重定位寄存器的值,以便實現地址轉換。
c. 運行時連接地址重定位程序連接的三種方式:
a. 靜態連接。在程序裝載到內存和運行前,就已將它的全部目標模塊及所須要的庫函數進行連接和裝配成一個完整的可執行程序且此後不可拆分。
b. 動態連接。在程序裝入內存前並未事先進行程序各目標模塊的連接,而是在程序裝載時一邊裝載一邊連接,生成一個可執行文件。
c. 運行時連接。 將某些目標模塊或庫函數的連接 推遲到執行時才進行。
8. 什麼是文件的共享?介紹文件共享的分類和實現思想。
- 文件共享: 不一樣進程共同使用同一個文件。
- 文件共享的分類:
a. 靜態共享。 兩個或多個進程經過文件連接(一個文件同時屬於多個目錄,但實際上僅有一處物理存儲)達到共享同一個文件的目的,不管進程是否運行,其文件的連接關係都是存在的,所以稱爲靜態共享。
b. 動態共享。 系統不一樣的應用程序或同一用戶的不一樣進程併發地訪問同一文件,這種共享關係只有當進程存在時纔可能出現,一旦進程消亡,其共享關係也就隨之消失。
c. 符號連接共享
本篇部分博客摘自:https://blog.csdn.net/yanglingwell/article/details/53745758