4.常見面試題--操作系統

特點:并發性、共享性、虛擬性、異步性。
????????

Windows 和 Linux 內核差異

對于內核的架構?般有這三種類型:
宏內核,包含多個模塊,整個內核像?個完整的程序;
微內核,有?個最?版本的內核,?些模塊和服務則由?戶態管理;
混合內核,是宏內核和微內核的結合體,內核中抽象出了微內核的概念,也就是內核中會有?個?型的內核,其他模塊就在這個基礎上搭建,整個內核是個完整的程序;
Linux 的內核設計是采?了宏內核,Window 的內核設計則是采?了混合內核。
Linux 可執??件格式叫作 ELF,Windows 可執??件格式叫作 PE。

鍵盤敲?字?時,期間發?了什么?

當?戶輸?了鍵盤字符,鍵盤控制器就會產?掃描碼數據,并將其緩沖在鍵盤控制器的寄存器中,
緊接著鍵盤控制器通過總線給 CPU 發送中斷請求。
CPU 收到中斷請求后,操作系統會保存被中斷進程的 CPU 上下?,然后調?鍵盤的中斷處理程
序。
鍵盤的中斷處理程序是在鍵盤驅動程序初始化時注冊的,其功能就是從鍵盤控制器的寄存器的緩沖
區讀取掃描碼,再根據掃描碼找到?戶在鍵盤輸?的字符,如果輸?的字符是顯示字符,那就會把
掃描碼翻譯成對應顯示字符的 ASCII 碼,?如?戶在鍵盤輸?的是字? A,是顯示字符,于是就會
把掃描碼翻譯成 A 字符的 ASCII 碼。
得到了顯示字符的 ASCII 碼后,就會把 ASCII 碼放到「讀緩沖區隊列」,接下來就是要把該字符顯
示屏幕了,顯示設備的驅動程序會定時從「讀緩沖區隊列」讀取數據放到「寫緩沖區隊列」,最后
把[寫緩沖區隊列]的數據?個?個寫?到顯示設備控制器的寄存器中的數據緩沖區,最后將這些
數據顯示在屏幕?。
顯示出結果后,恢復被中斷進程的上下?。

3.1 ?戶態 和 內核態

陷?內核態?式:
1. 系統調?
系統調?是?戶進程主動發起的操作。發起系統調?,陷? 內核,由操作系統執?系統調?,然后再返回到進程。系統調?實質上就是函數調?,只不過調?的是系統函數,處于內核態?已。 ?戶在調?系統調?時會向內核傳遞?個系統調?號,然后系統調?處理程序通過此號從系統調?表中找到相應的內核函數執?,最后返回。
2. 異常
異常包括程序運算引起的各種錯誤如除 0、緩沖區溢出、缺?等。異常是?種錯誤情況,是執?當前指令的結果,可能被錯誤處理程序修正,也可能直接終?應?程序。異常是同步的。
3. 中斷
中斷包括 I/O 設備發出的 I/O 中斷、各種定時器引起的時鐘中斷、調試程序中設置的斷點等引起的調試中斷等。中斷由處理器外部的 硬件 產?,不是執?某條指令的結果,也?法預測發?時機。由于中斷獨?于當前執?的程序,因此中斷是異步事件。

執?系統調?時 OS 狀態?

????????

1. ?戶運?庫函數(系統調?的封裝),函數??其實是執?的 int 0x80 指令。系統調?先把系統調?號保存在 eax 寄存器中,然后執? int0x80 指令。
2. int 0x80 指令先進?切換堆棧,找到進程的堆棧,將寄存器值壓?到內核棧中
3. 然后查找相應 中斷向量表 的中斷處(system_call)并調?
4. 隨后 system_call 從 系統調?表 中找到相應的系統調?進?執?,調?結束后從 system_call 中返回。

CPU 中斷

CPU中斷是什么
1. 計算機處于執?期間,系統內發?了?預期的急需處理事件
2. CPU暫時中斷當前正在執?的程序?轉去執?相應的事件處理程序
3. 處理完畢后返回原來被中斷處繼續執?
CPU中斷的作?
1. 可以使CPU和外設同時?作,使系統可以 及時地響應 外部事件
2. 可以允許多個外設同時?作,??提?CPU的 利?率
3. 可以使CPU及時處理各種軟硬件故障

零拷?

零拷?指的是,從?個存儲區域到另?個存儲區域的 拷?任務沒有CPU參與。零拷?通常?于?絡?件 傳輸,以減少CPU消耗和內存帶寬占?,減少 ?戶空間(?戶可以操作的內存緩存區域)與CPU內核 空間(CPU可以操作的內存緩存區域及寄存器)的 拷?過程,減少 ?戶上下?(?戶狀態環境)與 CPU內核上下?(CPU內核狀態環境)間的 切換,提?系統效率。 [1]
傳統拷??式:發?4次空間切換(1、4、5、7),發?4次copy(3、4、5、6),其中有2次CPU (4、5)參與。
零拷??式:零拷?是通過 sendfile 系統調? 實現的。發?2次空間切換(1、6),發?3次copy(3、4、5),其中有0次CPU參與。(mmap零拷?在此基礎上增加?戶空間與內核空間中內核緩沖區的共享,會多2次空間切換)DMA全稱Direct Memory Access(直接內存存取),它允許不同速度的硬件裝置來溝通,?不需要依賴于 CPU 的?量中斷負載。DMA主要是解決外圍設備可以直接訪問內存,從中減少CPU參與。DMA?式(優先級?于中斷)主要適?于?些?速的 I/O設備 。

?

傳輸?件的時候,我們要根據?件的??來使?不同的?式:
傳輸??件的時候,使?「異步 I/O + 直接 I/O」。因為可能由于 PageCache 被??件占據,?
導致「熱點」??件?法利?到 PageCache,并且??件的緩存命中率不?,這時就需要使?
「異步 IO + 直接 IO 」的?式。
傳輸??件的時候,則使?「零拷?技術」;

?

3.2 進程、線程、協程

????????

驚群效應:是指多進程(多線程)在同時阻塞等待同?個事件的時候(休眠狀態),如果等待的這個事件發?,那么他就會喚醒等待的所有進程(或者線程),但是最終卻只能有?個進程(線程)獲得這個事件的“控制權”,對該事件進?處理,?其他進程(線程)只能重新進?休眠狀態,這種現象和性能浪費就叫做驚群效應。
PCB 存儲信息:
進程id。系統中每個進程有唯?的id,?負整數。
進程的狀態。有就緒,運?,掛起,停?等狀態
進程切換時需要保存和恢復的?些CPU寄存器
描述虛擬地址空間的信息。
描述控制終端的信息。
當前?作?錄
umask掩碼
?件描述符表,包含很多指向結構體的指針
和信號相關的信息
?戶id和組id。
會話(Session)和進程組
進程可以使?的資源上限(Resource Limit)

進程與線程區別

?個進程最多可以創建多少個線程?
進程的虛擬內存空間上限,因為創建?個線程,操作系統需要為其分配?個棧空間,如果線程數量
越多,所需的棧空間就要越?,那么虛擬內存就會占?的越多。
系統參數限制,雖然 Linux 并沒有內核參數來控制單個進程創建的最?線程個數,但是有系統級別
的參數來控制整個系統的最?線程個數。

線程的實現?式

????????

在引?線程的操作系統中,進程是資源分配的基本單位,線程是獨?調度的基本單位。線程也像進程?樣有多個狀態:運?、就緒、阻塞… 從 Linux 內核的?度來看,線程和進程并沒有被區別對待。?論線程還是進程,都是? task_struct 結構表示的。線程分為以下兩種實現?式:

?

1. ?戶級線程實現

?戶線程多?于?些歷史悠久的操作系統,例如Unix操作系統。有關線程管理的所有?作都由應?程序完成,內核意識不到多線程的存在。?戶級線程僅存在于?戶空間中,此類線程的創建、撤銷、線程之間的同步與通信功能,都?法利?系統調?來實現。 應?程序需要通過使?線程庫來控制線程。 通常,應?程序從單線程起始,在該線程中開始運?,在其運?的任何時刻,可以通過調?線程庫中的派?創建?個在相同進程中運?的新線程。由于線程在進程 內切換的規則遠?進程調度和切換的規則簡單,不需要進??戶態/核?態切換,所以切換速度快。因為?戶級線程駐留在?戶空間,且管理和控制它們的線程也在?戶空間,每個線程并不具有?身的線程上下?,所以它們對于操作系統是不可?的,這也就是它?法被調度到處理器內核的原因。

?戶線程的優點

可以在不?持線程的操作系統中實現。
創建和銷毀線程、線程切換代價等線程管理的代價?內核線程少, 因為保存線程狀態的過程和調? 程序都只是本進程空間的操作允許每個進程定制??的調度算法,線程管理?較靈活。線程能夠利?的表空間和堆棧空間?內核級線程多不需要trap,不需要上下?切換(context switch),也不需要對內存?速緩存進?刷新,使得線程調??常快捷線程的調度不需要內核直接參與,控制簡單。

?戶線程的缺點

如果線程發?I/O等阻塞從?引起系統調?時,由于內核不知道有多線程的存在,會阻塞整個進程進?阻塞所有線程, 因此同?進程中只能同時有?個線程在運?。?個單獨的進程內部,沒有時鐘中斷,所以不可能?輪轉調度的?式調度線程。資源調度按照進程進?,多個處理機下,同?個進程中的線程只能在同?個處理機下分時復?,因此對于多線程并不能被多核系統加速。

?

2. 內核級線程實現

內核線程建?和銷毀都是在內核的?持下運?,由操作系統負責管理,通過系統調?完成的。線程管理 的所有?作由內核完成,應?程序沒有進?線程管理的代碼,只有?個到內核級線程的編程接?。內核為進程及其內部的每個線程維護上下?信息,調度也是在內核基于線程架構的基礎上完成。內核線程駐留在內核空間,它們是內核對象。操作系統調度器管理、調度并分派這些線程。運?時庫為每個?戶級線程請求?個內核級線程,將?戶進程映射或綁定到上?。?戶線程在其?命期內都會綁定到該內核線程。?旦?戶線程終?,兩個線程都將離開系統。這被稱作”?對?”線程映射。內核空間內為每?個內核?持線程設置了?個線程控制塊(TCB),內核根據該控制塊,感知線程的存在,并進?控制。

?

內核線程的特點

當某個線程希望創建?個新線程或撤銷?個已有線程時,它進??個系統調?。
多處理器系統中,內核能夠并?執?同?進程內的多個線程。
如果進程中的?個線程被阻塞,能夠切換同?進程內的其他線程繼續執?(?戶級線程不具備)。
所有能夠阻塞線程的調?都以系統調?的形式實現,代價較?。
?戶級線程和內核級線程的區別
內核級線程是OS內核可感知的,??戶級線程是OS內核不可感知的。
?戶級線程的創建、撤消和調度不需要OS內核的?持;?內核級線程創建、撤消和調度都需OS內核提供?持,?且與進程的創建、撤消和調度?體是相同的。
?戶級線程執?系統調?指令時將導致其所屬進程被中斷,?內核級線程執?系統調?指令時,只導致該線程被中斷。
在只有?戶級線程的系統內,CPU調度還是以進程為單位,處于運?狀態的進程中的多個線程,由?戶程序控制線程的輪換運?;在有內核級線程的系統內,CPU調度則以線程為單位,由OS的線程調度程序負責線程的調度。
?戶級線程的程序實體是運?在?戶態下的程序,?內核級線程的程序實體則是可以運?在任何狀態下的程序。

線程安全

線程安全:如果代碼所在的進程中有多個線程在同時運?,?這些線程可能會同時運?這段代碼。如果每次運?結果和單線程運?的結果是?樣的,?且其他的變量值也和預期的是?樣的,就是線程安全的。線程安全問題都是由 全局變量 和 靜態變量 引起的
實現線程安全的?式
1. 加鎖。如標準庫中的 mutex
2. 原?操作 atomic。在多線程并發執?時,原?操作是不會被線程打斷的執??段。

線程的同步?式

線程同步 是指多線程通過特定的設置來控制線程之間的執?順序。主要有以下四種?式:
1. 臨界區:通過多線程的串?化來控制對公共資源的訪問,速度快。在任意?個時刻只允許?個線程對共享資源進?訪問。
2. 互斥對象:只有擁有互斥對象的線程才有訪問公共資源的權限。因為互斥對象只有?個,所以能保證公共資源不會被多個線程同時訪問。
3. 信號量:它允許多個線程在同?時刻訪問同?資源,但是需要限制在同?時刻訪問此資源的最?線程數?。
4. 事件對象:利?通知的?式來保持線程的同步,還可以?便實現對多個線程的優先級?較操作。

進程狀態

“掛起”是指將暫不執?的進程換出到外存,節省內存空間。“掛起”和“阻塞”都是進程暫停執?的狀態,但是這是兩個維度的概念:
阻塞表示進程正在等待?個事件的發?,阻塞狀態下收到信號會切換為就緒狀態
掛起表示進程被換出到外存,掛起狀態下被激活時會被載?到內存,切換為?掛起狀態
綜上所屬,掛起狀態的進程按照是否阻塞可以分為:
掛起就緒狀態:進程在外存中,但是只要被載?內存就可以執?
掛起阻塞狀態:進程在外存中并等待?個事件,即使被載?內存也?法運?
Linux 將進程的 阻塞狀態 進?步細分為:暫停、淺睡眠、深睡眠。
其中,若不需要等待資源,則切換為“暫停”;若需要等待資源,切換為“睡眠”;如果睡眠狀態能被信號喚醒,則是“淺睡眠”,否則是“深睡眠”。

?

進程/CPU調度算法

進程的上下?切換不僅包含了虛擬內存、棧、全局變量等?戶空間的資源,還包括了內核堆棧、寄存器等內核空間的資源。
1. 先來先服務(First Come First Serverd,FCFS):優點是易于理解,便于實現,只需?個就緒隊列。缺點是對短作業不公平;對 I/O 密集型進程不利,?時間等待設備;響應時間不確定
2. 最短作業優先(Shortest Job First,SJF):優點是提?平均周轉時間。缺點是對?作業不公平;可能導致饑餓問題
3. 最?響應?優先算法(Highest Response Ratio Next,HRRN):作業運?所需時間越?、作業
等待時間越?,響應?越?。優點:同時考慮了等待時間和執?時間,既優先考慮短作業,也防?
?作業?限等待的饑餓.
4. 時間?輪轉(Round Robin,RR):優點:沒有饑餓問題。問題:若時間??,進程切換頻繁,吞吐量低;若時間??,則響應時間過?,實時性得不到保證
5. 最?優先級調度
6. 多級反饋隊列(Multilevel Feedback Queue,MFQ):優先級?的隊列先執?;優先級越?,時間?越短;如果?個進程在當前隊列規定的時間?內?法執?完畢,則移動到下?個隊列的隊尾。缺點:也有可能出現饑餓問題,?如不斷有新的更?優先級的進程加?。可在?定時間后全部提升到優先級?的隊列解決。
7. 最早截?時間優先算法:先把截?時間早的任務給完成,否則這個任務如果在截?時間后才完成,就沒有意義了。
8. 最短剩余時間優先(Shortest Remaining Time Next,SRTN):最短作業優先的搶占式版本,如果新作業?正在執?的作業剩余時間短,則它優先執?。缺點是對?作業不公平;可能導致饑餓問 題。
9. 彩票法:向進程提供各種系統資源的彩票。調度時隨機抽取彩票,擁有該彩票的進程得到資源。可 給重要的進程更多的彩票;協作進程可以交換彩票
10. 公平分享法:為每?戶分配?定?例的 CPU 時間,?不是按照進程。各?戶之間按照?例挑選進程.

進程的分類

僵?進程

概念:僵?進程是指終?但還未被回收的進程。如果?進程退出,??進程并沒有調? wait() 或
waitpid() 來回收,那么就會產?僵?進程。僵?進程是?個已經死亡的進程,但是其進程描述符仍然保存在系統的進程表中。
危害:占?進程號,系統所能使?的進程號是有限的,可能導致不能產?新的進程;占??定的內存。 如何避免產?僵?進程:
1. ?進程調? wait 或者 waitpid 等待?進程結束
2. ?進程結束時,內核會發送 SIGCHLD 信號給?進程。?進程可以注冊?個信號處理函數,在該函數中調? waitpid,等待所有結束的?進程;也可以? signal(SIGCLD, SIG_IGN) 忽略 SIGCHLD信號,那么?進程結束后,內核會進?回收
3. 殺死?進程,僵?進程就會變成孤?進程,由 Init 進程接管并處理

孤?進程

如果某個進程的?進程先結束了,那么它的?進程會成為孤?進程。每個進程結束的時候,系統都會掃描是否存在?進程,如果有則? Init 進程(pid = 1)接管,并由 Init 進程調? wait 等待其結束,完成狀態收集?作。孤?進程不會對系統造成危害。

守護進程

守護進程是?種在后臺執?的電腦程序。此類程序會被以進程的形式初始化。
創建守護進程:
1. 在?進程中執? fork 并退出?進程,?進程繼續
2. 在?進程中調? setsid 函數創建新的會話。由于會話過程對控制終端的獨占性,進程同時與控制終端脫離。
3. 在?進程中調? chdir 函數,讓根?錄 "/" 成為?進程的?作?錄。進程活動時,其?作?錄所在的?件系統不能卸下,?般需要將?作?錄改變到根?錄
4. 在?進程中關閉任何不需要的?件描述符。進程從創建它的?進程那?繼承了打開的?件描述符。如不關閉,將會浪費系統資源,造成進程所在的?件系統?法卸下以及引起?法預料的錯誤。
5. 在?進程中調? umask 函數,設置進程的 umask 為0。進程從創建它的?進程那?繼承了?件創 建掩模。它可能修改守護進程所創建的?件的存取位。為防?這?點,將?件創建掩模清除.

進程間的通信?式

1. 信號 Signal
信號是系統為響應某些條件?產?的?個事件,接收到該信號的進程可以采取事先?定義的?為。這是?種“訂閱-發布”的模式。
信號來源:
1. 硬件來源。如按下 CTRL+C、除 0、?法內存訪問等等
2. 軟件來源。如 Kill 命令等等
進程如何發送信號:
1. 使?系統調?將信號放到?標進程的 信號隊列 中
2. 如果?標進程處于未執?狀態,則該信號就由內核保存起來,直到該進程恢復執?并傳遞給它為
?;如果?個信號被進程設置為阻塞,則該信號的傳遞被延遲,直到其阻塞被取消時才被傳遞給進
程 進程如何接收信號:
1. 把接收到的信息放?信號隊列中;
2. 執?中的進程會在特定時刻(如從系統空間返回到?戶空間之前)檢查并處理??的信號隊列。
2. 信號量 Semaphore
信號量是?種特殊的變量,對它的操作都是原?的(屏蔽中斷),有兩種操作:V(signal())和 P
(wait())。V 操作會增加信號量 S 的數值,P 操作會減少它。(信號量 S 的值相當于記錄資源的個數)底層實現:通過硬件提供的原?指令,如 Test And Set(上鎖并檢查)、Compare And Swap(?較并交換,僅當預期值與內存值相等時才修改,否則不操作) 等。
種類:整型信號量(通過PV操作訪問)、記錄型信號量(讓權等待策略)、AND型信號量(資源?次性分配)、信號量集(?次申請多個資源,每次分配前都要測試資源數?,根據可分配下限值決定是否分配)

?

3. 管道 Pipe

管道是?種半雙?的通信?式,數據只能單向流動。如果想實現雙向通信,那么需要建?兩個管道。管道適合于傳輸?量信息,傳輸的內容是沒有格式的字節流。
創建管道:通過 pipe() 系統調?來創建并打開?個管道,當最后?個使?它的進程關閉對他的引?時,pipe 將?動撤銷。通過 pipe() 創建的是匿名管道,只能?于具有親緣關系的進程之間(??進程或兄弟進程)。
管道的實現:管道是?個由內核管理的緩沖區,緩沖區被設計為環形的數據結構,以便管道可被循環利?。管道的同步:管道是?個具有特定??的緩沖區,操作系統會通過加鎖保證讀寫進程的同步,下游進程或者上游進程需要等另??釋放鎖后才能操作管道。當管道為空時,下游進程讀阻塞;當管道滿時,上游進程寫阻塞。

4. 命名管道 FIFO

命名管道可?于任何有訪問權的進程通過?件名將其打開和進?讀寫。Pipe 和 FIFO 除了建?、打開、
刪除的?式不同外,?者?乎?模?樣。
FIFO的實現:通過 mkfifo() 函數建?命名管道。命名管道實質上也是通過內核緩沖區來實現數據傳
輸。建?命名管道時,會在磁盤中創建?個索引節點,命名管道的名字就相當于索引節點的?件名。索
引節點設置了進程的訪問權限,有訪問權限的進程,可以通過磁盤的索引節點來讀寫這塊緩沖區。當不
再被任何進程使?時,命名管道在內存中釋放,但磁盤節點仍然存在。

5. 消息隊列 Message Queue

消息隊列是消息組成的鏈表,保存在內核中。消息隊列中的消息是?個具有特定格式的數據塊。操作系統中可以存在多個消息隊列,每個消息隊列有唯?的 key 進?標識。
優缺點:和信號相?,消息隊列能夠傳遞更多的信息。與管道相?,消息隊列提供了有格式的數據。消息隊列允許?個或多個進程向它寫?與讀取消息,消息隊列是異步的。
實現:操作系統提供創建消息隊列、取消息、發消息等系統調?。操作系統負責讀寫同步:若消息隊列已滿,則寫消息進程排隊等待;若取消息進程沒有找到需要的消息,則在消息隊列中輪詢。

6. 共享內存 Shared Memory

共享內存允許多個進程映射同?段物理空間,然后像訪問普通內存?樣訪問它,并交換數據。
優點:
訪問共享內存區域和訪問進程獨有的內存區域?樣快,原因是不需要系統調?,不涉及?戶態到內
核態的轉換,也不需要對數據過多復制。
?如管道和消息隊列,需要在內核和?戶空間進?四次的數據拷?(讀輸??件、寫到管道;讀管 道、寫到輸出?件),?共享內存則只拷?兩次:?次從輸??件到共享內存區,另?次從共享內
存到輸出?件。
消息隊列的實現需要系統調?,也就經常需要?戶態和內核態互相轉換;?共享內存只在建?時需要系統調?,之后所有訪問都可作為常規內存訪問,?需借助內核。
缺點:存在并發問題,有可能出現多個進程修改同?塊內存,因此共享內存?般與信號量結合使?。實現:mmap() 不是專??來共享內存的,mmap() 系統調?的主要作?是將普通?件映射到進程的地址空間,然后可以像訪問普通內存?樣對?件進?訪問,不必再調? read(),write() 等操作。因此多個進程可以通過 mmap() 映射同?個普通?件,來實現共享內存。

7. 套接字 Socket

不同的計算機的進程之間通過 socket 通信,也可?于同?臺計算機的不同進程。需要通信的進程之間?先要各?創建?個 socket,內容包括主機地址與端?號。進程通過 socket 把消息發送到?絡層中,?絡層通過主機地址將其發到?的主機,?的主機通過端?號發給對應進程。實現:操作系統提供創建 socket、發送、接收的系統調?,為每個 socket 設置發送緩沖區、接收緩沖區。

?

協程

協程是?個?戶態的線程,?戶在堆上模擬出協程的棧空間。當需要進?協程上下?切換的時候,主線程只需要交換棧空間和恢復協程的?些相關的寄存器的狀態,就可以實現上下?切換。沒有了從?戶態轉換到內核態的切換成本,協程的執?也就更加?效。和傳統的線程不同的是:線程是搶占式執?,當發?系統調?或者中斷的時候,交由OS調度執?;?協程是通過 yield 主動讓出cpu所有權,切換到其他協程執?。
3.3 鎖
類型
互斥鎖 加鎖失敗時,會?「線程切換」來應對,當加鎖失敗的線程再次加鎖成功后的這?過程,會
有兩次線程上下?切換的成本,性能損耗?較?。
?旋鎖 加鎖失敗時,并不會主動產?線程切換,?是?直忙等待,直到獲取到鎖。如果被鎖住的代
碼執?時間很短,那這個忙等待的時間相對應也很短。
讀寫鎖 允許多個讀線程同時持有讀鎖,提?了讀的并發性。根據偏袒讀?還是寫?,可以分為讀優
先鎖和寫優先鎖,讀優先鎖并發性很強,但是寫線程會被餓死,?寫優先鎖會優先服務寫線程,讀
線程也可能會被餓死,那為了避免饑餓的問題,于是就有了公平讀寫鎖,它是?隊列把請求鎖的線
程排隊,并保證先?先出的原則來對線程加鎖,這樣便保證了某種線程不會被餓死,通?性也更
好。互斥鎖和?旋鎖都是最基本的鎖,讀寫鎖可以根據場景來選擇這兩種鎖中的?個進?實現。
互斥鎖、?旋鎖、讀寫鎖都屬于 悲觀鎖,悲觀鎖認為并發訪問共享資源時,沖突概率可能?常?,
所以在訪問共享資源前,都需要先加鎖。
如果并發訪問共享資源時,沖突概率?常低的話,就可以使? 樂觀鎖,它的?作?式是,在訪問共
享資源時,不?先加鎖,修改完共享資源后,再驗證這段時間內有沒有發?沖突,如果沒有其他線
85 程修改資源,那么操作完成,如果發現有其他線程已經修改過這個資源,就放棄本次操作。但是,
?旦沖突概率上升,就不適合使?樂觀鎖,因為它解決沖突的重試成本?常?。
CAS 不是樂觀鎖嗎,為什么基于 CAS 實現的?旋鎖是悲觀鎖?
CAS 是樂觀鎖,但是基于 CAS 的?旋鎖加了while 或者睡眠 CPU 的操作?產??旋的效果,加鎖失
敗會忙等待直到拿到鎖,即需要先拿到鎖才能修改數據,所以算悲觀鎖。

死鎖

死鎖是指多個進程循環等待其他進程占有的資源??限期地僵持下去的局?。當兩個或兩個以上的進程同時對多個互斥資源請求使?時,有可能導致死鎖。
造成死鎖必要條件
1. 互斥條件。即某個資源在?段時間內只能由?個進程占有,不能同時被兩個或兩個以上的進程占
有。
2. 不可搶占條件。進程所獲得的資源在未使?完畢之前,資源申請者不能強?地從資源占有者?中奪取資源,?只能由該資源占有者進程??釋放。
3. 占有且申請條件。進程?少已占有?個資源,但?申請新資源;由于該資源已被另外進程占有,此時該進程阻塞;但是它在等待新資源的同時,仍繼續占?已有的資源。
4. 循環等待條件。存在?個進程等待序列{P1, P2, P3..., Pn},其中P1等待P2所占有的某?資源,
等待P3占有的某?資源...,?Pn等待P1所占有的某?資源,形成?個進程循環等待環。
死鎖預防
死鎖預防是保證系統不進?死鎖狀態的?種策略,基本思想是要求進程申請資源時遵循某種協議,從?
打破產?死鎖的必要條件中的?個或?個,保證系統不進?死鎖狀態。
1. 打破互斥條件。即允許進程同時訪問某些資源
2. 打破不可搶占條件。即允許進程強?從占有者那?奪取某些資源,就是說當?個進程已經占有了某些資源,??申請新的資源,但?不能被?即滿?時,它必須釋放所占有的全部資源,以后再重新申請。它所釋放的資源可以分配給其他進程,這就相當于該進程占有的資源被隱蔽地搶占了。該?法實現起來困難,會降低系統性能
3. 打破占有且申請條件。可以實?資源預先分配策略,即進程在運?前?次性地向系統申請它所需要的全部資源,如果某個進程所需的全部資源得不到滿?,則不分配資源,此進程暫不運?。只有當系統能夠滿?當前進程的全部資源需求時,才?次性地將所申請的資源全部分配給該進程。
4. 打破循環等待條件。實?資源有序分配策略,即把資源事先編號,按號分配。所有進程對資源的請 求必須嚴格按資源序號遞增的順序提出,進程占?了?號資源,才能申請?號資源,就不會產?環路。在數據庫層?,有兩種設置參數策略通過「打破循環等待條件」來解除死鎖狀態:
設置事務等待鎖的超時時間。當?個事務的等待時間超過該值后,就對這個事務進?回滾,于是鎖就釋放了。
開啟主動死鎖檢測。主動死鎖檢測在發現死鎖后,主動回滾死鎖鏈條中的某?個事務,讓其他事務得以繼續執?。
死鎖避免:銀?家算法
基本思想是分配資源之前,判斷系統是否是安全的,若是則分配。即已知當前所有進程對各個資源的需求,以及現在已占?的資源,還有系統可?資源Available。
1. 求出每個進程當前還需要多少資源Need
2. 選取 Need <= Availadble 的某進程分配,若?則等待更多資源釋放到系統
3. 執?安全性檢測算法,若安全則進?分配,否則到第2步找其他進程
4. 回收原進程已有資源和已分配的資源,找其他進程分配

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165061.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165061.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165061.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

名字大卻不中用的AI大模型,名不副實

這兩天 OpenAI 團隊&#xff08; ChatGPT 公司&#xff09;的戲比較多&#xff0c;兩三天的功夫&#xff0c;劇情發展都超出了 OpenAI 首席科學家的預期&#xff0c;目前來看&#xff0c;微軟還是最大的贏家。這是個引子&#xff0c;這個話題&#xff0c;網絡上早已傳爛了&…

云安全之盾:ZStack 云主機安全防護解決方案全方位保護云環境

隨著云計算的蓬勃發展&#xff0c;網絡威脅愈發復雜&#xff0c;涵蓋了從勒索病毒到APT攻擊的各種威脅類型。在這一風云變幻的網絡安全環境下&#xff0c;云主機安全不再僅僅是一個選項&#xff0c;它是信息系統安全的核心要素。云軸科技ZStack 云主機安全防護解決方案是為了滿…

6.3.WebRTC中的SDP類的結構

在上節課中呢&#xff0c;我向你介紹了sdp協議&#xff0c; 那這節課呢&#xff0c;我們再來看看web rtc中。是如何存儲sdp的&#xff1f;也就是sdp的類結構&#xff0c;那在此之前呢&#xff1f;我們先對sdp的內容啊&#xff0c;做一下分類。因為在上節課中呢&#xff0c;雖然…

Python+jieba+wordcloud實現文本分詞、詞頻統計、條形圖繪制及不同主題的詞云圖繪制

目錄 序言&#xff1a;第三方庫及所需材料函數模塊介紹分詞詞頻統計條形圖繪制詞云繪制主函數 效果預覽全部代碼 序言&#xff1a;第三方庫及所需材料 編程語言&#xff1a;Python3.9。 編程環境&#xff1a;Anaconda3&#xff0c;Spyder5。 使用到的主要第三方庫&#xff1a;…

python之pyqt專欄1-環境搭建

#python pyqt# python&#xff1a;3.11.6 pycharm&#xff1a;PyCharm Community Edition 2023.2.5 pyqt6 python安裝 官網下載&#xff1a;Python Releases for Windows | Python.org pycharm社區版安裝 官網地址&#xff1a;Download PyCharm: Python IDE for Professional…

golang學習筆記——創建項目

創建項目 從Go 1.8開始&#xff0c;將GOPATH設置為環境變量不是必需的。如果我們沒有設置一個&#xff0c;Go使用默認的GOPATH為$HOME/go。可以使用go env查看環境變量信息。 創建項目 # 創建項目目錄 mkdir helloLog cd helloLog # 使用go mod初始化項目,生成go.mod文件 go…

TikTok shop印尼重啟電商征程:與當地平臺合作開啟新篇章!——站斧瀏覽器

經歷了一個半月的間隔&#xff0c;TikTok Shop成功重返印度尼西亞市場。據國際媒體報道&#xff0c;TikTok計劃通過與印尼本地電子商務平臺的合作&#xff0c;重啟其在該國的電商業務。 Temmy Satya Permana&#xff0c;印尼合作社和中小企業部的官員&#xff0c;證實了這一重…

【廣州華銳互動】VR線上課件制作軟件滿足數字化教學需求

隨著科技的不斷發展&#xff0c;虛擬現實&#xff08;VR&#xff09;技術在教學領域的應用逐漸成為趨勢。其中&#xff0c;廣州華銳互動開發的VR線上課件制作軟件更是備受關注。這種工具為教師提供了便捷的制作VR課件的手段&#xff0c;使得VR教學成為可能&#xff0c;極大地豐…

thinkphp6 不支持:redis錯誤

起因&#xff1a; 使用 redis 時候&#xff0c;thinkphp 報錯。 解決方法&#xff1a; 打開 php.ini 文件&#xff0c;增加 extensionphp_redis.dll 即可

Java架構師發展方向和歷程

目錄 1 導論2 架構師的三觀培養3 架構師的遇到的困難4 架構師職責5 架構師之路6 架構師的發展方向7 應用領域架構師8 業務架構師9 系統架構師和企業架構師10 技術路線和演進規劃11 一線大廠的技術生態拓張案例12 如何推進項目落地想學習架構師構建流程請跳轉:Java架構師系統架…

CUDA與GPU編程

文章目錄 CUDA與GPU編程1. 并行處理與GPU體系架構1.1 并行處理簡介1.1.1 串行處理與并行處理的區別1.1.2 并行處理的概念1.1.3 常見的并行處理 1.2 GPU并行處理1.2.1 GPU與CPU并行處理的異同1.2.2 CPU的優化方式1.2.3 GPU的特點 1.3 環境搭建 CUDA與GPU編程 1. 并行處理與GPU體…

城市管理實景三維:打造智慧城市的新引擎

城市管理實景三維&#xff1a;打造智慧城市的新引擎 在城市管理領域&#xff0c;實景三維技術正逐漸成為推動城市發展的新引擎。通過以精準的數字模型呈現城市真實場景&#xff0c;實景三維技術為城市決策提供了全新的思路和工具。從規劃設計到交通管理&#xff0c;從環境保護到…

嵌入式系統在工業自動化中的應用

嵌入式系統在工業自動化中的應用非常廣泛&#xff0c;它們通過集成控制和實時響應能力&#xff0c;實現了生產線的自動化、智能化和高效化。以下將詳細介紹嵌入式系統在工業自動化中的幾個重要應用領域&#xff0c;并提供一些示例代碼。 1. PLC&#xff08;可編程邏輯控制器&a…

【開源】基于Vue和SpringBoot的學校熱點新聞推送系統

項目編號&#xff1a; S 047 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S047&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S047&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 新聞類型模塊2.2 新聞檔案模塊2.3 新…

Python模塊之yaml:簡化配置與數據解析

更多Python學習內容&#xff1a;ipengtao.com YAML&#xff08;YAML Aint Markup Language&#xff09;是一種人類可讀的數據序列化格式&#xff0c;常用于配置文件和數據傳輸。在Python中&#xff0c;可以使用PyYAML模塊來處理YAML格式的數據。本文將深入介紹PyYAML的基礎用法…

力扣H指數——簡約做法

Problem: 274. H 指數 文章目錄 思路解題方法復雜度Code 思路 最后的結果一定不會超過下標個數。應為文章也要大于這個h&#xff0c;h超過了文章總數&#xff0c;就永遠不會存在這么多的文章滿足條件&#xff0c;所以只需要循環下標&#xff0c;那么最后的結果呢&#xff1f; 解…

AI質差小區優化效果評估

1. 下行流量/PRB利用率和貶損用戶的關系 通過分析長期貶損質差小區&#xff1a;下行PRB利用率/流量和小區平均每小時質差用戶數成正比例關系&#xff0c;即小區的貶損用戶會隨PRB利用率/流量的增長而增長。 2. 貶損用戶和流量走勢 年前平均每天流量平穩的情況下&#xff0c;通…

關于JS stack trace解決辦法

問題描述 npm run serve啟動前端項目時&#xff0c;控制臺輸出下圖一堆的文字&#xff0c;JS stack trace , 問題現象&#xff1a; JS stack trace Security context: 0000017B93ACFB61 <JS Object>1: init_scope_vars [0000017B93A04381 <undefined>:~3382] [p…

LightPicture - 企業/團隊圖床系統安裝搭建教程說明文檔

LightPicture - 企業/團隊圖床系統安裝搭建教程說明文檔 使用thinkphpvue開發&#xff0c;前后端分離&#xff1b;根據安裝教程安裝即可使用&#xff1b; 程序功能 ?支持第三方云儲存&#xff0c;本地、阿里云OSS、騰訊云COS、七牛云KODO、又拍云USS、華為云OBS等等 ?支持多…

60V/80V/90V降12V降5V 3A4A電流DCDC同步降壓芯片

60V/80V/90V降12V降5V 3A4A電流DCDC同步降壓芯片WD5105 一、概述 WD5105是一種高性能的DCDC同步降壓芯片&#xff0c;適用于將60V/80V/90V的電壓降至12V和5V&#xff0c;并可提供高達3A4A的電流。這款芯片具有高效率、低噪聲、高穩定性等優點&#xff0c;適用于各種需要高電壓…