原创 死鎖,進程間通信

死鎖:由於競爭資源或者通信關係,兩個或更多線程在執行中出現,永遠相互等待只能由其他進程引發的事件 進程訪問資源的流程是:請求/獲取資源->使用資源->釋放資源 資源分類: 1.可重用資源(Reusable Resource) 資源不能

原创 處理機調度

處理機調度概念: 處理機調度:從就緒隊列中挑選下一個佔用CPU運行的進程;從多個可用CPU中挑選就緒進程可使用的CPU資源 調度程序:挑選就緒進程的內核函數。 什麼時候進行調度呢?依據什麼原則挑選進程/線程呢? 在運行態進程退出或者進

原创 文件系統

一.文件系統: 1.文件系統是操作系統中管理持久性數據的子系統,提供數據存儲和訪問功能 ——組織,檢索,讀寫訪問數據 ——大多數計算機系統都有文件系統 2.文件是具有符號名,由字節序列構成的數據項集合 ——文件系統的基本數據單位 ——

原创 同步互斥

原子操作:(Atomic Operation)原子操作是指一次不存在任何中斷或失敗的操作 要麼操作成功完成,或者操作沒有執行,不會出現部分執行的狀態 操作系統需要利用同步機制在併發執行的同時,保證一些操作是原子操作 進程的交互關係:相

原创 進程控制

本篇博客簡要說明以下幾個問題: 進程切換,內核如何實現進程間切換? 進程創建,用戶要創建新進程,如何創建呢? 進程加載,如何運行一個新進程? 進程等待與退出,父子進程的交互 進程切換: 進程切換實際上是上下文的切換。暫停當前運行的進程

原创 進程與線程概念

進程的定義: 進程是指一個具有一定獨立功能的程序,在一個數據集合上的一次動態執行過程。 如下圖所示,源代碼文件經過編譯鏈接形成可執行文件,將可執行文件加載進內存進行執行。爲什麼要加載進內存呢?這是因爲負責解析和運行程序的CPU需要通過

原创 Linux目錄

/:處於Linux文件系統樹形結構的最頂端,我們稱它爲Linux文件系統的root,它是Linux文件系統的入口。所有的目錄、 文件、設備都在/之下,它是Linux文件系統最頂層的唯一的目錄; 一般建議在根目錄下面只有目錄,不要直接存放文

原创 大端 / 小端,三種判斷方法

1.什麼是大端 / 小端? 2.爲什麼會有大小端之分呢? 3.怎麼判斷當前機器的字節序? 什麼是大端 / 小端? 大端(存儲)模式,是指數據的低位保存在內存的高地址中,而數據的高位保存在內存的低地址中 小端(存儲)模式,是指數據的

原创 volatile

先來看一段程序: const int num = 10; int *p = (int *)# *p = 20; printf("%d\n", num); //這

原创 進度條

#include<unistd.h> #include<string.h> #include<stdio.h> int main() { int i=0; char c[101]; me

原创 Linux權限

Linux裏一般將文件可存取訪問的身份分爲所有者(owner),用戶組(group),其他人(others)。 有了這個概念,那我們再來了解什麼是權限。在一個目錄下執行 ls -al 我們來看最後一行fib.c這個文件,

原创 編譯器產生默認構造函數的四種情境

編譯器什麼時候會合成默認的構造函數呢? class A { //沒有構造函數 public: int _val; int* p_val; }; int main() { A a; //在本句語句下斷點,不會停在這

原创 程序環境和預處理

程序編譯過程: 1.組成一個程序的每個源文件通過編譯器進行編譯分別轉換成目標文件 2.每個目標文件由鏈接器鏈接在一起,形成一個單一的可執行程序 3.鏈接器會引入標準C庫中的被該程序用到的函數,也可以搜索程序員個人的程序庫,將程序需要

原创 task_struct

task_struct結構體: 標識號 標識號 現場保護 資源信息 虛擬內存 文件 I/O設備 終端 擁有者 計時 進程間通信 進程狀態 信號信息 其他 具體的結構體定義如下: struct task_struct { v

原创 volatile

先來看一段程序: const int num = 10; int *p = (int *)&num; *p = 20; printf("%d\n", num); //這