linux系統程式設計-程序相關的基本概念
阿新 • • 發佈:2018-12-13
1. 程式和程序
- 程式:指編譯好的二進位制檔案,在磁碟上,不佔用系統資源(CPU、記憶體)永久的,靜態的。
- 程序:是抽象的概念,佔用系統資源,在記憶體中執行(程式執行產生程序)暫時的,動態的。
例子:linux同時開兩個終端,分別打開了同一個程式,但是對應的程序是不同的。
2. 單道程式和多道程式
- 單道程式設計:以前的dos系統,所有程式排隊執行,執行完一個才輪到下一個
- 多道程式設計:現代作業系統,CPU劃分出時間片,基於時間中斷,輪流分配給每個程式(巨集觀並行,微觀序列)
3. CPU和MMU(在cpu內部)
cpu
mmu(在向對映時以4K為最小單元)
- 完成虛擬記憶體(32位計算機對應4G)和實體記憶體的對映
- 設定、修改記憶體訪問許可權(CPU對虛擬記憶體中3G使用者空間<linux中3級>和1G核心空間<linux中0級>的訪問許可權是不同的)
例子:執行a.out 和 app兩個程式,使用者區用了多少儲存空間,MMU以page(4K)為最小單位對映到實體記憶體,兩個程式對映到不同的區域,但是核心區只有一個(但是擁有各自的不同的PCB)
4. 程序控制塊(PCB)
PCB的本質是task_struct 結構體,/usr/src/linux-headers-3.16.0-30/include/linux/sched.h檔案中可以檢視struct task_struct 結構體定義,其內部成員有很多,我們重點掌握以下部分即可:
- 程序id。系統中每個程序有唯一的id,在C語言中用pid_t型別表示,其實就是一個非負整數。
- 程序的狀態,有初始化、就緒、執行、掛起、停止5種狀態。
- 程序切換時需要儲存和恢復的一些CPU暫存器。
- 描述虛擬地址與實體地址空間的對映資訊。
- 描述控制終端的資訊。
- 當前程序工作目錄(Current Working Directory)。
- umask掩碼。
- 檔案描述符表,包含很多指向file結構體的指標。
- 和訊號相關的資訊。
- 使用者id和組id。
- 會話(Session)和程序組。
- 程序可以使用的資源上限(Resource Limit)。