我們所認識的計算機,都是由乙個個的硬體元件組成
所需強調的幾點 概念任何計算機系統都包含乙個基本的程式集合,稱為作業系統(os),籠統理解,作業系統包括 設計os的目的 定位在整個計算機軟硬體架構中,作業系統的定位是:一款純正的「搞管理」的軟體總結計算機管理硬體
描述起來,用struct結構體組織起來,用鍊錶或其他高效的資料結構
在開發角度,作業系統對外會表現為乙個整體,但是會暴露自己的部分介面,供上層開發使用,這部分由作業系統提供的介面,叫做系統呼叫基本概念 描述程序-pcb task_struct內容分類 組織程序系統呼叫在使用上,功能比較基礎,對使用者的要求相對也比較高,所以,有心的開發者可以對部分系統呼叫進行適度封裝,從而形成庫,有了庫,就很有利於更上層使用者或者開發者進行二次開發
可以在核心源**裡找到它。所有執行在系統裡的程序都以task_struct鍊錶的形式存在核心裡檢視程序程序的資訊可以通過 /proc 系統資料夾檢視
如:要獲取pid為1的程序資訊,你需要檢視 /proc/1 這個資料夾大多數程序資訊同樣可以使用top和ps這些使用者級工具來獲取
#include #include #include int main()
#include #include #include int main()
#include #include #include int main()else if(ret == 0)else
sleep(1);
return 0;
}
為了弄明白正在執行的程序是什麼意思,我們需要知道程序的不同狀態。乙個程序可以有幾個狀態(在linux核心裡,程序有時候也叫做任務)下面的狀態在kernel源**裡定義
static const char * const task_state_array = ;
ps aux / ps axj 命令
基本概念檢視系統程序ps -l會類似輸出以下幾個內容
pri and ni
檢視程序優先順序的命令
用top命令更改已存在程序的nice
其他概念基本概念 常見環境變數 檢視環境變數的方法echo $name
//name:環境變數的名稱
和環境變數相關的指令
echo:顯示某個環境變數環境變數的組織方式export:設定乙個新的環境變數
env:顯示所有的環境變數
unset:清除環境變數
set:顯示本地的shell變數和環境變數
每個程式都會收到一張環境表,環境表是乙個字元指標陣列,每個指標指向乙個以 '\0' 結尾的環境字串
通過**如何獲取環境變數
#include int main(int argc, char *ar**, char *env)return 0;
}
#include int main(int argc, char *ar**)libc中定義的全域性環境變數environ指向環境變數表,environ沒有包含在任何標頭檔案中,所以在使用時要用extern宣告return 0;
}
通過系統呼叫獲取或設定環境變數
getenv
#include #include int main()常用getenv和putenv函式來訪問特定的環境變數
環境變數通常是具有全域性屬性的,可以被子程序繼承下去,是因為記憶體配置的關係
}輸出
//與環境相關,觀察現象即可輸出出來的變數值和位址是一模一樣的,因為子程序按照父程序為模板,父子並沒有對變數進行修改,但如果對**稍作修改parent[2995]: 0 : 0x80497d8
child[2996]: 0 : 0x80497d8
#include #include #include int g_val = 0;輸出int main()
else if(id == 0)else
sleep(1);
return 0;
}
//與環境相關,觀察現象即可這時,父子程序輸出位址是一致的,但是變數的內容卻發生了改變 os必須負責將child[3046]: 100 : 0x80497e8
parent[3045]: 0 : 0x80497e8
虛擬位址
轉化為實體地址
之前說「程式的位址空間」是不準確的,準確的應該說成程序位址空間
分頁&虛擬位址空間
說明
同乙個變數,位址相同,其實是虛擬位址相同,內容不同其實是被對映到了不同的實體地址
Linux 程序概念
任何計算機系統都包含乙個基本的程式集合,成為作業系統 os 它包括 作業系統是管管理的軟體 使用者操作 使用者操作介面 shell,lib,指令等 作業系統 驅動程式 硬體 作業系統管理硬體 系統呼叫 在開發者角度,作業系統會對外表現為乙個整體,但是會暴露自己的一部分介面供上層開發者使用,這部分由作...
Linux 程序概念
程序排程演算法 在早期作業系統的排程方式大多數是非剝奪的,這是由於早期的應用一般是科學計算或事務處理,不太把人機互動的響應時間指標放在首要位置。在這種情況下,正在執行的程序可一直占用cpu直到程序阻塞或終止。這種方式的排程演算法可以很簡單,且比較適用對於響應時間不關心或者關心甚少的批處理科學計算或事...
Linux 程序概念
調研程序的排程演算法.短程序優先演算法,對預計執行時間短的程序優先分派處理機。通常後來的短程序不搶先正在執行的程序。演算法優點 相比fcfs 演算法,該演算法可改善平均周轉時間和平均帶權周轉時間,縮短程序的等待時間,提高系統的吞吐量。演算法缺點 對長程序非常不利,可能長時間得不到執行,且未能依據程序...