執行緒池
執行緒池就是首先建立一些執行緒,他們的集合稱為執行緒池。使用執行緒池可以很好地提高效能,執行緒池在系統啟動時即建立大量空閒的執行緒,程式將乙個任務傳給執行緒池,執行緒池就會啟動一條執行緒來執行這個任務,執行結束以後,該執行緒並不會死亡,而是再次返回執行緒池中成為空閒狀態,等待執行下乙個任務。程序和執行緒概念及區別1、設定乙個生產者消費者佇列,作為臨界資源
2、初始化n個執行緒,並讓其執行起來,加鎖去佇列取任務執行
3、當任務隊列為空的時候,執行緒阻塞
4、當生產者佇列來了乙個任務後,先對佇列加鎖,把任務掛在佇列上,然後使用條件變數去通知阻塞中乙個執行緒
程序:程序是對執行時程式的封裝,是系統進行資源排程和分配的基本單位,實現了作業系統的併發;程序=程式+資料+pcb(程序控制塊)程序的通訊執行緒:是程序的子任務,是cpu排程與分配的基本單位,用於保證程式的實時性,實現了執行緒內部的併發。
區別:
可以通過管道、系統ipc實現程序的通訊程序排程策略程序的五種基本狀態管道是半雙工的,具有固定的讀端和寫端,它可以用於具有親緣關係的程序之間的通訊。
系統ipc:
訊號量:就是乙個計數器,可以用來控制多個程序對共享資源的訪問。用於實現程序間的互斥與同步
共享記憶體:他使得多個程序可以訪問同一塊記憶體空間,不同程序可以及時看到對方程序對共享記憶體資料的更新。
建立狀態:程序正在被建立上下文切換就緒狀態:程序被加入到就緒佇列中等待cpu排程執行
執行狀態:程序正在被執行
等待阻塞狀態:程序因為某種原因,比如等待i/o,等待裝置,而暫時不能執行
終止狀態:程序執行完畢
就緒狀態被排程變為執行狀態,發生時間片到了或者高優先順序則會從執行變為就緒
執行狀態因等待某事件而睡眠變為等待阻塞
等待阻塞因等待事件發生而喚醒變為就緒
上下文切換(context switch)是一種將cpu資源從乙個程序分配給另乙個程序的機制。在切換的過程中,作業系統需要先儲存當前程序的狀態(包括記憶體空間的指標,當前執行完的指令等等),再讀入下乙個程序的狀態,然後執行此程序。(程式計數器、cpu暫存器狀態等資料)程序交換過程程序切換一般分兩步:
程序交換技術:換出一部分程序到外存,騰出記憶體空間系統分配的資源將記憶體暫時不能執行的程序,或者暫時不用的資料和程式,換出到外存,來騰出足夠的記憶體空間,把已經具備執行條件的程序,或程序所需的資料和程式換入到記憶體。
掛起狀態:程序被交換到外存,程序狀態就成為了掛起狀態
活動阻塞:程序在記憶體中,但由於某種原因被阻塞了
靜止阻塞:程序在外存,同時被某種原因阻塞了
活動就緒:程序在記憶體,處於就緒狀態,只要給cpu和排程就可以執行
靜止就緒:程序在外存,處於就緒狀態,只要排程到記憶體,給cpu和排程就可以執行
活動就緒到靜止就緒(記憶體不夠,調到外存)
活動阻塞到靜止阻塞(記憶體不夠,調到外存)
執行到靜止就緒(時間片用完)
處理器、儲存器、i/o 裝置以及資訊執行緒的通訊及同步
執行緒通訊主要通過:使用全域性變數、使用訊息實現通訊、使用事件實現通訊守護、殭屍、孤兒程序的概念死鎖執行緒同步的方式:
臨界區:通過多執行緒的序列化來訪問公共資源或一段**、速度快、適合控制資料訪問
互斥量:採用互斥物件機制、只有擁有互斥物件的執行緒才有訪問公共資源的許可權。因為互斥物件只有乙個、所以保證公共資源不會被多個執行緒同時訪問
訊號量:為具有有限數量的使用者資源而設計的,它允許多個執行緒在同一時刻去訪問同乙個資源(但一般需要限制同一時刻訪問此資源的最大執行緒數目)
事件:通過通知操作的方式來保持多執行緒同步,還可以方便實現多執行緒優先順序的比較操作
死鎖指兩個或兩個以上的執行緒,因資源的爭奪而相互等待的現象4種鎖死鎖的四個條件:
互斥條件、不可剝奪條件、請求與保持條件、環路等待條件
死鎖避免:系統對程序發出的每乙個系統能夠滿足的資源申請進行動態檢查,並根據檢查結果決定是否分配資源,如果分配後系統可能發生死鎖,則不予分配,否則予以分配,這是一種保證系統不進入死鎖狀態的動態策略。
預防死鎖解決辦法:可剝奪資源、資源一次性分配、資源有序分配
互斥鎖:用於保證任意時刻只有乙個執行緒訪問物件,當獲得鎖操作失敗時,執行緒會進入睡眠,直到鎖釋放時被喚醒分頁和分段的區別讀寫鎖:分為讀鎖和寫鎖,對於讀鎖,允許多個執行緒同時獲得讀鎖,但對於寫鎖,同一時刻只允許乙個執行緒獲得寫鎖,並且寫鎖會堵塞其他寫鎖與讀鎖。寫鎖優先與讀鎖。
自旋鎖:和互斥鎖差不多,區別在於獲取鎖失敗執行緒不會睡眠,而是原地自旋等待鎖釋放
條件鎖:同步執行緒之間同步貢獻資料的值,當某個共享資料到達某個值時,喚醒等待這個共享資料的乙個/多個執行緒
段式儲存管理:將程式的位址空間劃分為若干段,如**段,資料段,堆疊段;段大小可變,所以沒有內碎片(可以改變大小消除內碎片,但是在換出的時候會產生外碎片)虛擬記憶體頁式儲存管理:將程式的邏輯位址分為固定大小的頁,而物理記憶體劃分為同樣大小的幀,程式載入時,將需要的一頁放入記憶體中的任意一幀,這些幀不必連續,從而實現了離散分離。優點:沒有外碎片,但會產生內碎片。
結合二者優點產生了段頁式儲存管理,記憶體分段,段內分頁
不同:
虛擬記憶體是計算機管理記憶體的一種技術;他可以讓所有程序共享同一物理記憶體,每乙個程序只把自己當前需要的虛擬記憶體空間儲存到物理記憶體中。每個程序建立時,只建立好虛擬記憶體和磁碟檔案之間的對映,等到執行到對應程式時,通過缺頁中斷,來拷貝資料到物理記憶體中缺頁中斷可以擴大位址空間,當物理記憶體不足時可以當做乙個臨時的「物理記憶體」,保護記憶體。讓電腦可以執行比物理記憶體大很多的程式
頁面置換需要磁碟i/o,非常耗時,虛擬位址轉實體地址,增加了指令的執行時間;記憶體中可以保留多個程序,提高了系統併發度
在請求分頁系統中,可以通過查詢頁表中的狀態位來確定所要訪問的頁面是否存在於記憶體。每當所要訪問的頁面不在記憶體中,就會產生缺頁中斷,此時作業系統會根據頁表中的外存位址在外存中找到所缺的一頁,將其調入記憶體頁面置換演算法中斷的4個步驟:
保護cpu現場、分析中斷原因、轉入缺頁中斷處理程式進行處理、恢復cpu現場,繼續執行
先進先出淘汰演算法(fifo):最先進入的資料最先被淘汰,新加入的頁面放隊尾區域性性原理頁表定址最近最不經常訪問淘汰演算法(lfu):每個資料塊引用乙個計數,對資料塊進行計數排序,計數相同的按時間排序,每次淘汰隊尾資料塊
最近最少使用替換演算法(lru):使用乙個棧,新頁面或者命中的頁面將其移到棧低,每次替換掉棧頂的元素(其實可以用雙向鍊錶去實現,相對較快點)
在lru基礎上進行拓展有lru-k 和2q演算法用於解決lru快取汙染問題
快取汙染:突然大量偶發性的資料訪問,會讓記憶體中存放大量冷資料
通過頁表,由邏輯位址的高位找到邏輯位址對應的頁基位址,再由頁基位址偏移一定長度就得到最後的實體地址,偏移長度有邏輯位址低位決定fork和vfork
fork:成功呼叫的話,會建立乙個新的程序,它幾乎與呼叫fork()的程序一模一樣。父程序呼叫成功返回子程序的pid,子程序呼叫成功返回0,出現錯誤返回乙個負值核心態和使用者態vfork:在fork基礎上加了,子程序必須要執行一次對exec的呼叫,或者呼叫exit_()退出。
核心態和使用者態是作業系統兩種工作模式,兩者區別主要是特權級不同,使用者態特權級較低,核心態較高。執行在使用者態的程式不能直接訪問系統核心資料結構和程式。但是可以通過系統呼叫的方式切換到核心態進行訪問。系統呼叫3種使用者態切換核心態的方式:系統呼叫、異常、外圍裝置的中斷
使用者態程序主動要求切換到核心態的一種方式棧記憶體和堆記憶體的區別作業系統執行流程(架構崗易問)
待補
LINUX 作業系統命令(持續更新)
zip用於壓縮檔案 unzip用於解壓檔案 語法 zip acddffghjjkllmoqrstuvvwxyz b 工作目錄 ll n 字尾字串 t 日期時間 壓縮效率 壓縮檔案 檔案 i 範本樣式 x 範本樣式 路徑 home test 引數及示例 r 遞迴處理,將指定目錄下的所有檔案和子目錄一併...
作業系統的考點
1 cpu裡面的cache和 作業系統裡面的cache有什麼不同呢 快表 cache在os中運用的典範 在作業系統中,為提高系統的訪問速度,在位址對映機制中增加了乙個小容量的聯想暫存器 相聯儲存器 即快表,用來存放當前訪問最頻繁的少數活動頁面的頁號。當某使用者需要訪問資料時,根據資料所在的邏輯頁號在...
作業系統面試總結
作業系統的作用 os作為使用者與計算機硬體系統之間的介面 os作為計算機系統資源的管理者 os實現了對計算機資源的抽象 作業系統的基本特性 併發 共享 虛擬 非同步 作業系統的主要功能 處理機管理功能 儲存器管理功能 裝置管理功能 檔案管理功能 三種基本狀態的轉換就緒 執行 阻塞 什麼是死鎖 如果一...