原创 【讀寫鎖】特性、接口及常見問題分析

讀寫鎖 適用的場景 少量寫的線程 + 大量讀的線程 讀寫鎖和互斥鎖很相似,但是讀寫鎖允許讀的並行 讀寫鎖的三種狀態 讀模式的加鎖狀態 寫模式的加鎖狀態 不加鎖的狀態 加鎖規則 一次只有一個線程可以佔有寫模式的讀寫鎖,不能同時寫,

原创 死鎖 原因、必要條件及解決方法的分析

定義 簡單的理解:程序當中有一個執行流沒有釋放資源,導致其他執行流(線程)無法獲取鎖的情況即死鎖 舉例來說:死鎖是由於兩個或以上的線程互相持有對方需要的資源,導致這些線程處於等待狀態,無法執行,我們將線程任務定爲寫字,寫字需要的紙

原创 線程 概念、特性及問題分析

線程概念 在一個程序裏的一個執行路線就叫做線程,更準確的定義是:線程是“一個進程內部的控制序列”,一切進程至少都有一個執行線程,線程在進程內部運行,本質是在進程地址空間內運行 線程在 Linux 操作系統中就是一個執行流,不同的執

原创 共享內存 system V共享 分析與實現

system V共享 共享內存區是最快的IPC形式。一旦這樣的內存映射到共享它的進程的地址空間,這些進程間數據傳遞不再涉及到內核,換句話說是進程不再通過執行進入內核的系統調用來傳遞彼此的數據 共享內存示意圖 共享內存數據結構 s

原创 消息隊列 分析及運用

消息隊列 概念 消息隊列特性爲先進先出,底層實現是鏈表,在內核中創建,有一個消息隊列的標識符來表示,這個隊列當中的每一個元素都有自己的類型,每一個類型都有一個優先級概念 屬性 消息隊列在操作系統屬性 msgmax:每一個節點最大消

原创 處理器調度算法原理及代碼實現

處理器調度算法原理 設計一個按優先數調度算法實現處理器調度的程序。 (1) 假定系統有五個進程,每一個進程用一個進程控制塊PCB來代表,進程控制塊的格式爲: 其中: 進程名——作爲進程的標識,假設五個進程的進程名分別爲P1,P2,

原创 棧的實現與運用(括號匹配 最小棧)

定義 棧是一種特殊的線性表,只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱爲棧頂,另一端稱爲棧底。棧中的數據元素遵守後進先出LIFO(Last In First Out)的原則 壓棧:棧的插入操作叫做進棧

原创 銀行家算法的原理及代碼實現

銀行家算法的實現銀行家算法原理銀行家算法中的數據結構銀行家算法安全性算法算法流程圖源程序及註釋打印的程序運行時初值和運行結果 銀行家算法原理 銀行家算法中的數據結構 1)可利用資源向量 Available 是個含有 m 個元素的數

原创 臨界資源的同步與互斥,區分臨界資源與臨界區,二義性分析

描述 互斥:同一時間,當只保證互斥,則可以保證臨界資源訪問不會造成臨界資源數據的二義性,但是有可能佔有臨界資源的進程一直在佔有,導致後面進程訪問等待時間比較長 同步:保證對臨界資源訪問的合理性 1. 互斥 如果有若干進程要求進入空

原创 匿名管道 & 命名管道 分析及應用

定義 管道是Unix中最古老的進程間通信的形式 我們把從一個進程連接到另一個進程的一個數據流稱爲一個“管道” 內存在內核上,內存是一個緩存區 匿名管道 創建無名管道 原型 int pipe(int fd[2]); 參數 fd:文

原创 靜態庫 & 動態庫 實現與區別

靜態庫(.a) 程序在編譯鏈接的時候把庫的代碼鏈接到可執行文件中。程序運行的時候將不再需要靜態庫, Windows下(.lib) 動態庫(.so) 程序在運行的時候纔去鏈接動態庫的代碼,多個程序共享使用庫的代碼。一個與動態庫鏈接的

原创 信號量實現 同步&互斥 分析

信號量 作用 實現進程控制,實現進程的同步與互斥 本質 本質是一個計數器 + PCB等待隊列計數器對資源的計數進行加1或減1操作 實現互斥同步 互斥:不同的進程,在同一時刻,只能有一個進程對臨界資源進行訪問 同步:保證進程對臨界資

原创 磁盤調度原理及代碼實現

內容 模擬電梯調度算法,實現對磁盤的調度。 原理 模擬電梯調度算法,對磁盤調度。 磁盤是要供多個進程共享的存儲設備,但一個磁盤每個時刻只能爲一個進程服務。 當有進程在訪問某個磁盤時,其他想訪問該磁盤的進程必須等待,直到磁盤一次工作

原创 產生式系統的設計及代碼實現(植物識別系統)

一、研究背景和目的 1.研究背景 (1)產生式概念 產生式系統簡稱產生式。它是指形如->或IF THEN或其等價形式的一條規則,其中箭頭左邊稱爲產生式的左部或前件;箭頭右邊稱爲產生式的右部或後件。如果前件和後見分別代表需要注視的一

原创 進程信號的概念、產生及實現(註冊、註銷、處理、捕捉、阻塞)分析

先思考兩個問題: 進程創建出的子進程,有可能在子進程退出時產生一個殭屍進程,是由於子進程退出時,父進程來不及回收子進程的退出信息,導致子進程成爲殭屍進程,爲什麼父進程來不及回收子進程的退出信息? 原因: 子進程在退出的時候,會給父